2015年9月22日火曜日

Arduinoの消費電力

具体的な数字はかけないけど,幾つか機種の消費電力を測定してみた感想.

Pro miniのように,USB端子を持たないものはいいけど,USB端子がついてる機械は何もしてなくても,電気バカ食い.

CPUを低電力モードにしても,UnoやMEGAは20mA以上流れている.ARMコアの機種(M0 pro, Due)はCPUの低電力モードが無い上に,メインの処理の内容をなし(空っぽの無限ループ)にして,測定した場合に3桁のmAの消費電力.

これじゃあ,電池だけで動かすのはつらいよね~

ただし,Pro miniのCPU(MCU)をパワーダウンモードにしても,数百マイクロA流れているので,電池駆動でRTCで定期的に起こして使う場合でも,結構な電力消費量になりそう.

本当に消費電力を下げるためには,RTCと電源制御マイコンを使って,Arduinoに供給する電力をArduinoの外側でON/OFF制御しないと無理かも~

マイコンの消費電力測定用のお買い物



背景


ArduinoはVIN端子とGND端子に安定化電源を繋げば動作するが,Raspberry PiやArduino互換機の一部(ルネサスのがじぇるねSAKURAなど)はUSB給電でないといろいろ面倒なため,USB端子を改造できる部品が必要.

安定化電源から,ブレッドボード経由でUSB端子からマイコンとブレッドボードから測定器に接続することにした.

購入した部材

お買い物

とりあえず,Aメスの端子だけあればいけるはずだが,もののためしにマイクロBメスも買った.

秋月の店内が改装されており大変広くなった(入り口から奥の方の店員のスペースがすべて売り場に変わった).

ただし,どこに何が置かれているが置き場所とかも全部変わったため,わけかわめ.さらに,広くなったはずなのに,やはり大混雑で,もう大変.

昼食

あいも変わらず,かんだ食堂に行ったところ,しょうが焼き定食がサービスだったので,しょうが焼き定食をおいしく頂いた.ただし,高血圧の人間としては,少々塩辛いがたまにはいいか.

以前,息子の買い物の時にかんだ食堂に連れて行ったら比較的気に入ったようだった.(息子は唐揚げ定食ご飯大盛り)




Arduino UnoをBluetoothでPCと接続


背景


以前の日記に書いたように,メモリ容量の小さなArduino (Uno等)をBluetoothでPCと接続するためには,USBホストシールドは利用することができない.そのため,可能な手段は大きく分けて以下の2種類.

  • BLEのシールドを使って,PC側に頑張ってプログラムを作る.
  • bluetoothシリアル変換のボードを使って,bluetooth2.0とかのプロトコルでPCと接続する.

今回は2番目の手法を試してみた.


利用した機材



接続

接続方法は,両方の機器のグラウンドを共通にして,TxとRxをクロスで接続するだけ.
下の図は参考文献のところに掲載されている図を加工したもの.ピン位置は間違っていないと思うけど,元々のドキュメントを確認してね.








接続結果

上の接続方式では,ArduinoからBluetoothモジュールはシリアル端子に見えるため,通常のプログラミングとかに用いるUSB端子と同じプログラムのままで動作する.

注意点

  • bluetoothモジュールを繋いだままで,USBからプログラムを書き込もうとしてもできないため,プログラムを書き込む時には,Bluetoothモジュールの配線を一時的に外す必要がある.ただし,プログラムを変更する必要がまったくないので楽ちん.

  • Arduinoのプログラムからは,bluetoothモジュールの制御はできないため,ペアリング関係で設定を変更する場合等は,bluetoothモジュールのマニュアルを読んで,モジュールのUSBポートにPCを繋いで設定変更する必要がある.


参考文献







arduinoとRaspberry PiをbluetoothのSPPプロファイルで通信させたい



きっかけ

転がっていた古いUSB用のbluetoothドングル(EDR2系)を
USBホストシールドにつないで使おうとしたら,arduinoのusbホストシールドのライブラリがでかすぎて,作ったプログラムがUNOに入れられなかったので,別の手段を使おうとした.


USBホストシールドを使わない場合の手段は以下の2つ

  • BLEのシールドを使う
  • bluetoothシリアル変換のボードを使う


BLEの場合


RaspbianをインストールしたRaspberry PiのUSBポートにBLEドングルを指して,BLEシールドを載せたArduinoと通信させようとしていろいろハマった.とりあえず,低レイヤでの接続はできたが,アプリレベルでの通信には成功していない.

なお,これ以上の対応は面倒なので当面は放置することにした.

Bluezのバージョン


現在のバージョン(2015-05-05版のDebian Wheezy相当)のRaspbian付属のBluezはBLEがまともに動作しないため,なるべく新しい版を自分でコンパイルしないといけない.


LinuxのBLE対応のレベル

とりあえず,接続はできるが,低レベルの機能しか提供されていないため,プロトコルスタックをアプリが実装しないといけない.

スクリプト言語からgatttoolを叩いて,その出力をスクリプト言語で加工すればできなくもないが,非常に面倒.

結論


あまりに面倒なのでとりあえず,ここまでで中断して他の手段を試すことにした.iOSやandroidだとプロトコルスタックが提供されているのに,非常に残念.


bluetoothシリアル変換を使う

レガシーのbluetoothのプロトコルを使うと,linux側ではrfcommでシリアルポートから送受信できる.BLEじゃないので,消費電力が大きくなるが,Linux側の実装が楽になるので,とりあえず,これを試す(予定).