SPI通信とADコンバーターで半固定ボリュームの値を読む(2)
こんばんは。國松です。
今回は前回の続きです。前回はAD変換やらSPIの説明で終わってしまいましたが今回は回路を組んでADコンバーターを使って半固定ボリュームの値を読んでいきたいと思います。
参考書籍
カラー図解 最新 Raspberry Piで学ぶ電子工作
やさしくはじめるラズベリー・パイ 電子工作でガジェット&簡易ロボットを作ってみよう【クジラ飛行机(著)】
用意するもの
1.Raspberry Pi3 Model B+ (OsはRaspbian)
2.ブレッドボード
3.ADコンバーター(MCP3002)
4.半固定ボリューム(10kΩ)
5.ジャンパワイヤ
MCP3002とは2チャンネル10bitのADコンバーターです。10bitのADコンバーターで表せる範囲は2の10乗=1024(0~1023)です。
PIN | 名称 | 機能 | 接続 |
1 | CS/SHDN | チップセレクト | GPIO8 |
2 | CH0 | アナログ入力0 | 半固定ボリューム2の足 |
3 | CH1 | アナログ入力1 | (接続無し) |
4 | VSS | GND | GND |
5 | DIN | シリアルデータ入力 | GPIO10(MOSI) |
6 | DOUT | シリアルデータ出力 | GPIO9(MISO) |
7 | CLK | シリアルクロック | GPIO11(SLK) |
8 | VDD/VREF | 2.7~5.5Vの電源入力 | 3.3V |
半固定ボリュームは3386T-EY5-103TRを使用します。
1 | 2 | 3 |
ブレッドボードの長い列を利用して3.3vへ | MCP3002の2番ピンへ | ブレッドボードの長い列を利用してGNDへ |
AD変換の流れ
半固定ボリュームのつまみを回転させることで0V~3.3Vの電圧を出力できる(アナログ電圧)➡
これがADコンバーター(MCP3002)に入力される➡
ADコンバーターで0~1024の目盛りでアナログ入力を読む=目盛りで読むことでアナログ(連続)な値がデジタル(飛び飛び)の値になる➡
呼んだ値(例えば765)を2進数に変換してラズパイに送信
(ADコンバーターで半固定ボリューム値を読むプログラム)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | import spidev import time # SPI通信を行うための準備 spi = spidev.SpiDev() #SPI通信を行うオブジェクトを取得 spi.open(0, 0) #通信を開始 spi.max_speed_hz =5000 #注意1 # 連続して値を読む while True: try: # SPIで値を読む resp = spi.xfer2([0x68, 0x00]) # 読んだ値を10ビットの数値に変換 value = ((resp[0] * 256) + resp[1]) & 0x3ff print(value) time.sleep(1) except KeyboardInterrupt: break # 通信を終了する spi.close() |
※注意1 kernel4.9.43以降はkernelの変更によりSPI通信の最大周波数の設定が必要になりました。
1 | spi.max_speed_hz =50000 |
動画では手元が写っていませんが半固定ボリュームのつまみを左から右に回す事でアナログデータの値が上昇します。