趣味でも塵が積もれば山となる。これまで蓄積した知識を皆さんにもお伝えしていきます。

2回目:ハードウェアの組み立てとプログラミング、えっ、たったの2行

»

 ブレッドボードを使って、回路を組み立てます。ブレッドボードは、名前のとおり?パン生地をこねる板です。でも、パンは作らないです。正式名称は、ソルダーレス・ブレッドボードです。つまり、はんだ付けをしない試作基板という意味です。電子部品を差し込んでいくと、動く回路が作れる優れものです。

 ブレッドボードの大きさにはいろいろありますが、写真のように挿し込む穴が400点ある製品がいろいろなところで販売されています。写真のように中央付近にA-DコンバータのMCP3208、片方にツェナーダイオードを使った安定化回路、もう一方のエリアにLM35の温度センサを1個配線しました。

zenerdiode1.png

配線図は次のようになります。MCP3208はSPIインターフェースなので、SPIバス0、チップ・セレクトはCE0につなぎます。

zenerdiode2.png

温度センサ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は不要です。

zenerdiode3.png

拡張

A-Dコンバータの入力が八つあるので、LM35を追加します。ブレッドボード上では、ラズパイの動作している環境の温度を測っています。少し離れたところの温度を測りたいですね。

LM35のデータシートには、出力の容量負荷は50pFと書かれています。配線の方法にもよりますが、10~20cmの延長はできると思います。データシートには、配線長をより長くするときの対応策(Figure 13. LM35 with R-C Damper)が書かれています。作ってみましょう。

zenerdiode4.png

CR部品を用意しました。ケーブルは1.5mです。LM35のV+端子に赤色のリード線をはんだ付けし、熱収縮チューブで保護します。

zenerdiode5.png

CRをはんだ付けし、確認しやすいように透明の熱収縮チューブで保護します。はんだはRSコンポーネンツで比較的多く取り扱っています。

zenerdiode6.png

製作完了です。

zenerdiode7.png

新たに製作した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"

zenerdiode8.png

IoTを肌で感じていただけましたか?

Comment(0)