Raspberry PiにはLM35DZなどを利用するためのアナログ入力が無いので、ADコンバータを利用します。
このADコンバータを利用するにはSPI(Serial Peripheral Interface)という通信方法を使う必要があります。
主な環境・利用パーツ
- 温度センサー LM35DZ URL
- ADコンバータ MCP3002 URL
- Raspberry Pi 2 MODEL B URL
- Raspbian GNU/Linux 7 (wheezy) URL
- Node.js v5.0.0
SPIを有効にする
Raspberry Piの初期設定ではSPIが無効になっているので、これを有効にします。
sudo raspi-config
- 8 Advanced Options.
- A6 SPI
- Would you like the SPI interface to be enabled? <はい>
- Would you like the SPI kernel module to be loaded by default? <はい>
- A6 SPI
注)OSのバージョンが違うと設定方法が変わる可能性があります。
SPI確認
lsmodで確認する
カーネルの読み込むモジュールのリストを表示し、spiが読み込まれているか確認します。
% lsmod | grep spi spi_bcm2835
接続のテスト
SPI_MOSIとSPI_MISOを直結します。
wget https://raw.githubusercontent.com/raspberrypi/linux/rpi-3.10.y/Documentation/spi/spidev_test.c gcc -o spidev_test spidev_test.c ./spidev_test -D /dev/spidev0.0
ちゃんと設定ができていれば次のように出ます。
trapple-no-pi% ./spidev_test -D /dev/spidev0.0 spi mode: 0 bits per word: 8 max speed: 500000 Hz (500 KHz) FF FF FF FF FF FF 40 00 00 00 00 95 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF DE AD BE EF BA AD F0 0D
配線
GPIOのみの接続に比べると一気に複雑になりました。
Raspberry Piのピン番号で言うと、19,21,23,24,26がSPI関係のピンになります。まずこれらをMCP3002と繋ぎます。
次にLM35DZとMCP3002を繋ぎます。
最後にそれぞれ電源とGNDを繋ぎます。
target | MCP3002 | MCP3220 | target |
---|---|---|---|
24. Raspberry Pi GPIP 8 (CE0) | 1. CS/SHDN | 8. VDD | Raspberry Pi 3.3V |
LM35DZ VOUT | 2. CH0 | 7. CLK | 23. Raspberry Pi GPIO 11 (SCLK) |
* | 3. CH1 | 6. DOUT | 21. Raspberry Pi GPIO 9 (MISO) |
Raspberry Pi GND | 4. VSS | 5. DIN | 19. Raspberry Pi GPIO 10 (MOSI) |
LM35DZ | target |
---|---|
+Vs | Raspberry Pi 3.3V |
Vout | MCP3002 CH0 |
GND | Raspberry Pi GND |
ブレッドボード
配線図
続きはプログラミング編(予定)で!
参考
- Raspberry Pi 公式 SPI Documentation
- Raspberry Piで正統派のアナログ入力
- 自分の部屋の温度をロギングしてみました。
- Raspberry PiにA/DコンバータMCP3002をつなぐ
- Wiring Pi2 python を使って SPI 通信
- Raspberry PiのPythonからTMP36のアナログ温度センサとMCP3008のADコンバータを使う
- Raspberry Piで取得したセンサーデータをリアルタイムに可視化する(センサー編)
- Raspberry Piで計測したデータをEmailで送信する。
- アナログ値を測る(ADコンバータ使用)(WebIOPi利用)