BeagleBone Black のハードウェアハック(4)Hacking BeagleBone Black, part 4
シリーズ第4弾はBeagleBone Blackにアナログセンサを付けます
1. はじめに
BBBにはアナログ入力ポートが7ポートあります。
AD変換の学習も兼ねて、アナログポートに温度計と光センサを付けてみました。
元ネタはAdafruitのチュートリアルの以下の2つです。
Measuring Light with a Beaglebone Black
Measuring Temperature with a Beaglebone Black
2. アナログポート(AD変換器)の仕様
まず、AD変換器の仕様を確認します。
- AIN0- AIN6の7ポートが利用可能
- 12bit A/D変換器
- 電圧レンジは0-1.8V (注意!)
- VDD_ADCというリファレンス電圧が出ている
特に、電圧レンジが1.8Vまでと言う点に注意が必要です。
3. 利用したセンサと回路図
3.1 温度センサ
AdafruitのチュートリアルではアナログデバイセズのTMP36というセンサICを使っています。手持ちの関係で、類似のMCP9700を使いました。
(このセンサ機器の内部温度の測定用らしく、0-70℃範囲で±4℃とバラツキが大きいです。新規に購入する場合は、TMP36にすべきです。)
3.2 照度センサ
また、CdSも秋月の店頭で購入した仕様不明品を使っています。
接続は図の通りです。ケープのP9近くの表側になるべく平坦になるように配置しました。
4. ソフトウェアの設定
次のページにADCを使うためのソフトウェアの設定方法があります。
BeagleBone Reading the analog input (ADC)
オリジナルのBeagleBoneとBBBではkernelのバージョンが異なるため、操作が異なります。BBBではCape Managerを設定すれば良い様です。
root@beaglebone:~# echo cape-bone-iio > /sys/devices/bone_capemgr.9/slots root@beaglebone:~# find /sys/ -name '*AIN*' /sys/devices/ocp.3/helper.15/AIN0 /sys/devices/ocp.3/helper.15/AIN1 /sys/devices/ocp.3/helper.15/AIN2 /sys/devices/ocp.3/helper.15/AIN3 /sys/devices/ocp.3/helper.15/AIN4 /sys/devices/ocp.3/helper.15/AIN5 /sys/devices/ocp.3/helper.15/AIN6 /sys/devices/ocp.3/helper.15/AIN7 root@beaglebone:~# cat /sys/devices/ocp.3/helper.15/AIN1 703
デバイス経由のアクセス方法であれば、シェルスクリプトなどから簡単にアナログ入力を行うことが出来ます。
また、Adafruitの提供しているpython用のライブラリを使うと更に簡単です。具体的な操作方法については、以下のページを参照下さい。
Setting up io python library on Beaglebone Black
温度センサ、照度センサの値を読み取って1回だけ表示するプログラムは次のようになります。
#! /usr/bin/python import Adafruit_BBIO.ADC as ADC import time tmp_pin = 'P9_40' cds_pin = 'P9_38' ADC.setup() reading = ADC.read(tmp_pin) millivolts = reading * 1800 # 1.8V reference = 1800 mV temp_c = (millivolts - 500) / 10 temp_f = (temp_c * 9/5) + 32 reading = ADC.read(cds_pin) volts = reading * 100 print('%dC L%d%%' % (temp_c, volts)),
コマンドラインからスクリプトを実行してみます。
root@beaglebone:~# python sensor1.py 29C L87%
(続く)