ホーム > BeagleBone, Physical Computing > BeagleBone Black のハードウェアハック(4)Hacking BeagleBone Black, part 4

BeagleBone Black のハードウェアハック(4)Hacking BeagleBone Black, part 4

2014 年 1 月 5 日

シリーズ第4弾はBeagleBone Blackにアナログセンサを付けます

BBBに取り付けたアナログセンサ

BBBに取り付けたアナログセンサ

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も秋月の店頭で購入した仕様不明品を使っています。

Schematic of Sensor

Schematic of Sensor

接続は図の通りです。ケープの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%

(続く)

カテゴリー: BeagleBone, Physical Computing タグ:
コメントは受け付けていません。