2回目:ハードウェアの組み立てとプログラミング、えっ、たったの2行
ブレッドボードを使って、回路を組み立てます。ブレッドボードは、名前のとおり?パン生地をこねる板です。でも、パンは作らないです。正式名称は、ソルダーレス・ブレッドボードです。つまり、はんだ付けをしない試作基板という意味です。電子部品を差し込んでいくと、動く回路が作れる優れものです。
ブレッドボードの大きさにはいろいろありますが、写真のように挿し込む穴が400点ある製品がいろいろなところで販売されています。写真のように中央付近にA-DコンバータのMCP3208、片方にツェナーダイオードを使った安定化回路、もう一方のエリアにLM35の温度センサを1個配線しました。
配線図は次のようになります。MCP3208はSPIインターフェースなので、SPIバス0、チップ・セレクトはCE0につなぎます。
温度センサLM35はMCP3208のチャネル0(Ch0)端子につなぎましたが、最大8個まで利用できます。
プログラミング
ラズパイのOSは2017年10月現在、RASPBIAN STRETCH、カーネルは4.9.53です。LinuxのDebianディストリビューションです。プログラミングに利用するPythonは2.7.13です。SPIのインターフェースを利用するには、ライブラリをインポートします。spidev(3.0)がメジャーですが、インストールされているgpiozeroを利用します。その理由は、MCP3208を含めたA-Dコンバータ・シリーズのライブラリが含まれているからです。
A-D変換の基準電圧Vrefは、6.5桁のDMM KEITHLEY 2000で測定しました。30分℃動作させたのち測った値は3.052Vでした。この値をプログラムで使います。
channelはCh0を指定します。読んだデータpotはボルト単位の数値なので、温度に換算するために100倍します(LM35の0℃は0V出力、温度は10mV/℃で比例する)。round関数で小数第2位を四捨五入します。
#!/usr/bin/env python
from gpiozero import MCP3208
Vref = 3.052
pot = MCP3208(channel=0)
print round((pot.value * Vref* 100),1) , "C"
実行結果を示します。プログラムを仮にEL01.pyとすると、sudo chmod 755 EL01.py で実行権を付け、ターミナルから、python EL01.pyで実行します。i2cやSPIのグループにpiユーザが属しているので、sudoは不要です。
拡張
A-Dコンバータの入力が八つあるので、LM35を追加します。ブレッドボード上では、ラズパイの動作している環境の温度を測っています。少し離れたところの温度を測りたいですね。
LM35のデータシートには、出力の容量負荷は50pFと書かれています。配線の方法にもよりますが、10~20cmの延長はできると思います。データシートには、配線長をより長くするときの対応策(Figure 13. LM35 with R-C Damper)が書かれています。作ってみましょう。
CR部品を用意しました。ケーブルは1.5mです。LM35のV+端子に赤色のリード線をはんだ付けし、熱収縮チューブで保護します。
CRをはんだ付けし、確認しやすいように透明の熱収縮チューブで保護します。はんだはRSコンポーネンツで比較的多く取り扱っています。
製作完了です。
新たに製作した2個目のLM35の信号出力を、A-DコンバータMCP3208のCh1につなぎます。プログラムを修正します。プログラム名はEL02.pyとしました。
#!/usr/bin/env
from gpiozero import MCP3208
Vref = 3.052
pot1 = MCP3208(channel=0)
pot2 = MCP3208(channel=1)
print round((pot1.value * Vref* 100),1) , "C" , round((pot2.value * Vref* 100),1) , "C"
IoTを肌で感じていただけましたか?