今回は、Raspberry Pi Pico のアナログ入力機能(ADC) を使って、電圧を読み取るテストを行います。Pico には ADC(アナログ-デジタル変換器) が 5 つありますが、このうちユーザーが自由に使えるのは 3 チャンネルです。
ADC 番号 |
用途 |
GPIO ピン |
ピン番号 |
ADC(0) |
ユーザー用 |
GP26 |
31 番 |
ADC(1) |
ユーザー用 |
GP27 |
32 番 |
ADC(2) |
ユーザー用 |
GP28 |
34 番 |
ADC(3) |
電源電圧の測定(Vsys) |
― |
― |
ADC(4) |
内蔵温度センサー |
― |
― |
▼ Pico の ADC 特性
実験内容
今回は、ADC(0)(GP26) を使って電圧を測定します。
▼ 回路の構成
-
10kΩの可変抵抗(ボリューム) に 3.3V を加えます。
-
ボリュームの中央の端子(電圧が変わる部分)を GP26(ADC0)に接続します。
-
ボリュームを回すことで電圧が変化し、その値を Pico が読み取ります。
この実験を通して、Raspberry Pi Pico のアナログ入力機能を使ってセンサーや電圧の変化を読み取る基本が学べます。
まずは電圧の変化を画面に表示してみましょう!
回路
ソースコード
from machine import ADC, Pin # ADC と GPIO 制御に必要
import time # ウェイト用タイマ
# (任意)GP26 を明示的に入力設定。
# ADC を使うだけならなくても動くが、ピンの用途を示す意味で残している。
Pin(26, Pin.IN)
adc = ADC(0) # ADC チャネル 0 → 物理ピン GP26
VREF = 3.3 # 基準電圧 [V](ボードの電源電圧等)
SCALE = VREF / 65535 # 16‑bit 値を実電圧に変換する係数
while True:
raw_value = adc.read_u16() # 0‑65535(16‑bit)で取得
voltage = raw_value * SCALE # 実電圧 (V) に換算
print('V = {:.2f} V'.format(voltage)) # 小数点 2 桁で表示
time.sleep(1) # 1 秒おきにサンプリング
回路
LM61BIZ 温度センサを読むサンプル
from machine import ADC, Pin # ADC と GPIO 制御
import time # ウェイト用タイマ
# ── GPIO / ADC 初期化 ──────────────────────────────
Pin(26, Pin.IN) # GP26 を「入力」に設定(ADC 使用時は省略可だが明示)
adc = ADC(0) # ADC0 ⇔ GP26
# ── 定数(環境に合わせて調整) ───────────────────
VREF = 3.3 # 参考電圧 [V](Pico 3.3 V レールを想定)
SCALE = VREF / 65535 # ADC 生データ (0‑65535) → 電圧 [V] への係数
# ── 温度読み取り関数 ──────────────────────────────
def read_temperature_c(samples: int = 16) -> float:
"""
LM61BIZ の温度を摂氏で返す。
:param samples: 平均化に用いるサンプル数(デフォルト 16 回)
"""
total = 0
for _ in range(samples):
total += adc.read_u16() # 16‑bit スケールで読み取り
time.sleep_us(20) # サンプル間に 20 µs の小休止(任意)
raw_avg = total // samples # 平均値(整数演算)
voltage = raw_avg * SCALE # 実電圧 [V] へ換算
voltage_mV = voltage * 1000 # mV へ変換
# LM61BIZ の一次特性式で温度計算
temperature = (voltage_mV - 600) / 10
return temperature
# ── メインループ ────────────────────────────────
while True:
temp_c = read_temperature_c() # 温度取得(平均化付き)
# 小数点 2 桁で温度を表示
print("Temperature: {:.2f} °C".format(temp_c))
time.sleep(1) # 1 秒ごとに更新
>>> %Run -c $EDITOR_CONTENT
MPY: soft reboot
Temperature: 25.89 °C
Temperature: 25.88 °C
Temperature: 25.93 °C
Temperature: 25.91 °C
Temperature: 25.93 °C
Temperature: 25.89 °C
Temperature: 25.91 °C
🔄 処理の流れ
-
🛠️ GPIO 初期化
-
🎛️ ADC 準備
-
📊 温度読み取り関数 read_temperature_c()
-
🖨️ メインループ
-
💤 ウェイト
コメント
コメントを投稿