Raspberry piでアナログセンサーを使うことにチャレンジしてみます。Raspberry piのGPIOではアナログの入出力のうち、出力はPWM(パルス幅変調)による擬似アナログ出力が可能ですが、アナログ入力には対応していません。
そこで必要になってくるのがADコンバータです。このコンバータにはいくつも種類があるのですが、今回は秋月でMCP3008を購入して試してみました。
光センサーにはCdSセルの光センサーを利用しています。
参考にしたサイト
ADコンバータは使ったことがなかったのですが、下記のサイトはデータシートの引用も交えて分かりやすかったので参考にさせて頂きました。
ありがとうございます。
配線
上記のサイトを参考に配線しています。線の数は多いですが、分かってしまえば何ともないです。
ピンの対応一覧
※MCP3008側はデータシート参照
RPi(3V3, 1pin) < — > MCP([Vdd,Vref],[16pin,15pin])
RPi(GND, 6pin) < — > MCP([AGND,DGND],[14pin,9pin])
RPi(SCLK, 23pin) < — > MCP(CLK,13pin)
RPi(MISO, 21pin) < — > MCP(Dout, 12pin)
RPi(MOSI, 19pin) < — > MCP(Din, 11pin)
RPi(CE, 24pin) < — > MCP(CS, 10pin)
Pythonコード
from gpiozero import MCP3008
from time import sleep
tmp = MCP3008(channel=0, device=0)
while True:
temperature = (tmp.value * 3.3) * 100
print (round(temperature,5))
sleep(0.5)
実装に当たって
3.3V電源、MCP3008のチャンネル1につないでいる前提のコードです。
参考サイトではspidevパッケージを使ったのですが、何故か読み取れませんでした。
そこで、MCP3008モジュールが含まれているgpiozeroパッケージを導入したところ、期待通り光センサーの変化を測定することができました。
最後に
ADコンバータに初めて触れましたが、始めるまでの心理的なハードルは高かったものの、やって見るとちゃんと動いてくれたので達成感は大きかった。
チャンネルは1つしか試せてませんが、8chまで対応しているので、
他のセンサーも同時に扱ってみようと思います。
ところでspidevだとうまく動かない理由は何なんでしょうか・・・