アナログ値を測る(ADコンバータ使用)(WebIOPi利用)
解説
Raspberry Pi には、アナログ入力はないので、そのままでは、アナログ値を測ることはできませんが、ADコンバータ(アナログ-デジタル変換器)を使用すれば、アナログ値を測ることができます。
ADコンバータ MCP3002 は、SPI通信によって、アナログ値を取得します。
ADコンバータ MCP3002 から、アナログ値を取得する場合、以下のデータを送信します。
- 「CH0」から取得する場合
- 0b01101000、0b00000000
- 「CH1」から取得する場合
- 0b01111000、0b00000000
※「0b~」は、2進数表現です。
各ビットの意味は以下です。
- 送信するデータの最初の1は、開始ビットで、必ず1です。
- 開始ビットの次は、SGL/DIFFビットです。シングルエンドあるいは擬似差動モードを指定します。シングルエンドの1にします。
- SGL/DIFFビットの次は、ODD/SIGNビットです。チャンネルを指定します。CH0の場合は0に、CH1の場合は1にします。
- ODD/SIGNビットの次は、MSBF(Most Significant Bit First)ビットです。デバイスから返されるデータのフォーマット(MSBF or LSBF)を指定します。MSBFの1にします。
- MSBFビット以降はゼロにします。
ADコンバータ MCP3002の分解能は 10ビット = 2^10 = 1024 です。
返ってくる値は、0 から 1023 で、0[V] から 3.3[V](Vdd/Vref の電圧) を表します。
部品表
部品名 | 数量 | 商品名 | 参考価格 |
---|---|---|---|
ADコンバータ | 1 | 10ビット2ch ADコンバータ MCP3002 | 200円 |
ボリューム | 2 | 小型ボリューム 10KΩB | 50円 |
LCDシールド | 1 | 「LCD (Liquid Crystal Display) に文字列を表示する(WebIOPi 利用)」の内容をシールド化したもの | - |
Raspberry Pi | 1 | Raspberry Pi 3 Model B | 6,300円 |
ブレッドボード | 1 | EIC-801 | 250円 |
ジャンパーワイヤ | 適量 | ブレッドボード・ジャンパーコード(オス-オス)セット | 100mm49個 150mm8個 200mm4個 250mm4個 のセット200円 |
ジャンパーワイヤ | 適量 | ジャンパーワイヤ(オス-メス) | 10本300円 |
接続表
MCP3002側 | Raspberry Pi側 | |
---|---|---|
ピン番号 | ピン名称 | ピン名称 |
1 | ChipSelect | SPIチップセレクト0 |
2 | CH0 | ボリューム1の真ん中の端子 |
3 | CH1 | ボリューム2の真ん中の端子 |
4 | Vss | GND |
5 | Din | SPI MOSI |
6 | Dout | SPI MISO |
7 | CLK | SPI SCLK |
8 | Vdd/Vref | 3.3V |
接続例
※LCDシールドに関する接続は省略
(LCDシールドは、GPIOの 6, 5, 22, 27, 17, 4 を使用)
WebIOPiのインストール
Raspberry Pi にWebIOPiをインストールしてない場合は、まず、WebIOPiをインストールします。
WebIOPiのインストール
SPI通信の有効化
SPI通信を有効化していない場合は、SPI通信の有効化が必要です。
SPI通信の有効化
スクリプトファイルの作成
「/home/pi/work/webiopi」フォルダに、「mcp3002.py」というファイル名で、以下の内容のスクリプトファイルを作成します。
WebIOPi サービスの設定の変更
WebIOPi のサービスを開始したときに、作成したスクリプトが実行されるように、WebIOPi サービスの設定を変更します。
WebIOPi サービスの設定は、「/etc/webiopi/config」ファイルに記述されています。
以下のコマンドを実行し、「/etc/webiopi/config」ファイルを開きます。
[SCRIPTS] セクションを探し、[SCRIPTS] セクションの「myscript =」に、作成したスクリプトファイルを指定します。
編集し終えたら、
Ctrl + O
で上書き保存し、
Ctrl + X
で nano を終了します。
実行
WebIOPi のサービスを開始します。
CH0、CH1に流れる電圧に対応する値がLCDに表示されます。
値は、0 から 1023 で、0[V] から 3.3[V](Vdd/Vref の電圧) を表します。
WebIOPi のサービスを終了するには、以下のコマンドを実行します。