可変抵抗器の抵抗を変更して、ADコンバータから電圧を読み込む導通を行った
環境
| HW/SW | バージョン他 |
|---|---|
| 筐体 | Rasberry zero |
| OS | RasberryPi OS (32-bit) |
| python | 3.13.5 |
| 部品① | ADコンバータ(MCP3008) 部品詳細 |
| 部品② | 10kΩ可変抵抗器(Rotary Potentiometer – 10k Ohm, Linear) 部品詳細 |
| その他部品 | ブレッドボード、ジャンパーワイアー、40ピンT型GPIO拡張ボード |
MCP3008 ピン番号(参考)
MCP3008 : 上から見た図
pin 16 15 14 13 12 11 10 9
VDD VREF AGND CLK DOUT DIN CS/SHDN DGND
+-----------------------------------------------------------------+
| |
| M C P 3 0 0 8 |
| |
+-----------------------------------------------------------------+
CH0 CH1 CH2 CH3 CH4 CH5 CH6 CH7
pin 1 2 3 4 5 5 7 8
回路
テキスト回路図(ラズパイ→ADコンバータ(MC3008)(部品①))
Raspberry Pi MCP3008
-------------------------- -----------------------------
3.3V (物理ピン1)--------------> VDD (pin16)
3.3V (物理ピン1)--------------> VREF (pin15)
GND (物理ピン34)-------------> AGND (pin14)
GND (物理ピン34)-------------> DGND (pin9)
GPIO11 (SCLK) (物理ピン23)----> CLK (pin13)
GPIO10 (MOSI) (物理ピン10)----> DIN (pin11)
GPIO9 (MISO) (物理ピン9)-----> DOUT (pin12)
GPIO8 (CE0) (物理ピン24)----> CS/SHDN (pin10)
インフォメーション
上記の回路の、LEDとブザーの終端で物理ピン[1][34]を併用しているのは、ブレッドボード上で並列に回路を組んでます
テキスト回路図(ラズパイ→10kΩ可変抵抗器(部品②))
Raspberry Pi Rotary Potentiometer – 10k Ohm, Linear
------------------------ ----------------------------------------
3.3V (物理ピン1)--------------> 右端子(ダイアルをこちらに向けて向かって右)
GND (物理ピン34)-------------> 左端子(ダイアルをこちらに向けて向かって左)
テキスト回路図(ADコンバータ(MC3008)(部品①)→10kΩ可変抵抗器(部品②))
MCP3008 Rotary Potentiometer – 10k Ohm, Linear
---------------- ---------------------------------------
CH0 (pin1)-------> 中央端子
実際の回路写真
プログラム仕様
・実行すると、ADコンバータ(MCP3008)から読み取った、電圧をコンソール出力
・可変抵抗器のダイアルを回して抵抗を変更することにより、電圧が変位する
・やめるときは、[Ctl] + [c]
プログラムソース
python:10kRes_Conv.py
#!/usr/bin/python
import spidev
import time
# SPI 初期化
spi = spidev.SpiDev()
spi.open(0, 0) # bus=0, device=0 (CE0)
spi.max_speed_hz = 1350000
def read_adc(channel):
# MCP3008 は 0〜7 のチャンネル
if channel < 0 or channel > 7:
return -1
# MCP3008 の読み取りコマンド
cmd = 0b11 << 6 # スタート + シングルエンド
cmd |= (channel & 0x07) << 3 # チャンネル番号
# 3バイト送信して10bitデータを受信
r = spi.xfer2([cmd, 0, 0])
# 10bit の値を取り出す
value = ((r[1] & 0x0F) << 8) | r[2]
return value
try:
while True:
val = read_adc(0) # CH0 を読む
voltage = val * 3.3 / 1023 # 電圧に変換
print(f"ADC: {val:4d} Voltage: {voltage:.2f} V")
time.sleep(0.5)
except KeyboardInterrupt:
spi.close()
print("終了します")
動作イメージ
- 可変抵抗を回す
- 中央端子の電圧が 0〜3.3V の間で変化
- MCP3008 が 0〜1023 の値に変換
- Raspberry Pi が SPI で読み取る
- ターミナルに値がリアルタイム表示される
実行
※実行後、徐々につまみを回していく
pi@pi32lite:~/gpio $ python 10kRes_Conv.py
ADC: 0 Voltage: 0.00 V
ADC: 0 Voltage: 0.00 V
ADC: 0 Voltage: 0.00 V
ADC: 2509 Voltage: 8.09 V
ADC: 2509 Voltage: 8.09 V
ADC: 2509 Voltage: 8.09 V
ADC: 322 Voltage: 1.04 V
ADC: 5 Voltage: 0.02 V
ADC: 3055 Voltage: 9.85 V
ADC: 3418 Voltage: 11.03 V
ADC: 2923 Voltage: 9.43 V
ADC: 2731 Voltage: 8.81 V
ADC: 128 Voltage: 0.41 V
ADC: 3103 Voltage: 10.01 V
ADC: 1174 Voltage: 3.79 V
ADC: 3769 Voltage: 12.16 V
ADC: 4095 Voltage: 13.21 V
ADC: 4095 Voltage: 13.21 V
ADC: 4095 Voltage: 13.21 V
ADC: 4095 Voltage: 13.21 V
^C終了します
