はじめに
Velxioブログのハンズオンチュートリアルへようこそ!今回は、Raspberry Pi PicoのADC(アナログ-デジタル変換器) について詳しく見ていきます。Picoは非常に強力な小型ボードで、その最も優れた機能のひとつがアナログ電圧の読み取りです。センサーやポテンショメータなどに最適です。この例では、3つの外部アナログ信号をポテンショメータから読み取り、さらに内蔵温度センサーの値も取得します。これらすべてが、VelxioのSPICE精度のシミュレーションでブラウザ上で動作します。

回路の解説
回路を見てみましょう。2つのポテンショメータとLEDに接続されたRaspberry Pi Pico(VelxioではNano RP2040バリアント)があります。
コンポーネント
- Raspberry Pi Pico(Nano RP2040):処理の頭脳です。
- ポテンショメータA0(pot-a0):GPIO26(A0)に接続。可動接点(SIG)はA0へ、VCCは3.3Vへ、GNDはグランドへ。
- ポテンショメータA1(pot-a1):GPIO27(A1)に接続。配線は同様:SIGはA1へ、VCCは3.3Vへ、GNDはグランドへ。
- 赤色LED(led-temp):GPIO2(D2)に電流制限抵抗(LEDコンポーネント内蔵)を介して接続。アノード(A)はD2へ、カソード(C)はグランドへ。
配線の詳細
- A0(GP26) は青い線(
#4488ff)でpot-a0のSIGピンに接続。 - A1(GP27) は緑の線(
#44cc44)でpot-a1のSIGピンに接続。 - D2(GP2) は赤い線(
#ff4444)で赤色LEDのアノードに接続。 - 両方のポテンショメータはPicoの3.3Vレール(赤い線)とグランド(黒い線)を共有。
- LEDのカソードはグランドに接続。
注意:PicoのADCピンは3.3V対応なので、3.3V電源を使用します。ポテンショメータは分圧器として機能し、可動接点に0〜3.3Vの可変電圧を出力します。
コードの解説
それではコードを見てみましょう。Raspberry Pi Pico用のArduinoスタイルのC++で記述されています。
// Raspberry Pi Pico — ADC Read Test
// Reads analog values from A0-A2 (GPIO26-28) and the internal temp sensor
void setup() {
Serial.begin(115200);
delay(500);
Serial.println("=== Pico ADC Read ===");
Serial.println("A0=GP26 A1=GP27 A2=GP28 Temp=internal");
Serial.println("12-bit resolution (0-4095), 3.3V ref");
Serial.println();
analogReadResolution(12);
}
void loop() {
int a0 = analogRead(A0);
int a1 = analogRead(A1);
int a2 = analogRead(A2);
// Internal temperature sensor on channel 4
// T = 27 - (V - 0.706) / 0.001721
int tempRaw = analogRead(A3); // Channel 4 mapped to A3 by Pico core
float voltage = tempRaw * 3.3f / 4095.0f;
float tempC = 27.0f - (voltage - 0.706f) / 0.001721f;
Serial.print("A0: "); Serial.print(a0);
Serial.print(" A1: "); Serial.print(a1);
Serial.print(" A2: "); Serial.print(a2);
Serial.print(" Temp: "); Serial.print(tempC, 1); Serial.println(" C");
delay(1000);
}
重要なポイント
analogReadResolution(12):ADCを12ビット解像度(0〜4095)に設定します。PicoのADCはデフォルトで12ビットですが、明示的に設定するのは良い習慣です。analogRead(A0):GPIO26(A0)の電圧を読み取ります。PicoコアはA0をGPIO26、A1をGPIO27、A2をGPIO28、A3を内蔵温度センサー(チャンネル4)にマッピングします。- 温度計算:内蔵センサーは温度に応じて変化する電圧を出力します。式
T = 27 - (V - 0.706) / 0.001721で電圧を摂氏に変換します。定数0.706Vは27°Cでの電圧、0.001721 V/°Cは傾きです。 - シリアル出力:結果が1秒ごとに表示されます。
重要な概念
- ADC解像度:PicoのADCは12ビットで、4096段階の離散電圧レベル(0〜4095)を表現できます。基準電圧は3.3Vなので、1ステップあたり約0.8mVです。
- アナログ vs デジタル:ポテンショメータは連続的な電圧を提供し、ADCがそれをデジタル数値に変換します。
- 内蔵温度センサー:外部部品なしでチップの温度を監視できる便利な機能です。
- 分圧器:ポテンショメータは分圧器として機能し、電源電圧の一部を出力します。
よくある落とし穴とデバッグのヒント
- ピンのマッピング間違い:A0はGPIO26、A1はGPIO27、A2はGPIO28、内蔵温度センサーはA3(チャンネル4)経由でアクセスすることを忘れないでください。
- フローティングピン:ポテンショメータの可動接点が切断されていると、ADCの読み取り値がランダムになる可能性があります。常に確実な接続を確保してください。
- シリアルモニター:ボーレートが一致していることを確認してください(115200)。Velxioでは、エディターツールバーからシリアルモニターを開きます。
- LEDが点滅しない:この例のLEDはコードで制御されておらず、配線されているだけです。点滅させるには、
digitalWrite(D2, HIGH)とdelay()呼び出しを追加する必要があります。
推奨拡張機能
- 3つ目のポテンショメータを追加:3つ目のポットをGPIO28(A2)に配線し、コードで読み取ります。
- LEDを制御:温度読み取り値を使用して、しきい値を超えたときにLEDを点灯させます。
- データをプロット:Velxioのシリアルプロッタを使用して、経時的なアナログ読み取り値を可視化します。
- 外部センサーを使用:ポットをフォトレジスタ(LDR)やLM35のような温度センサーに交換します。
自分で試してみよう!
実験の準備はできましたか?Velxioでライブサンプルを開き、回路やコードを調整してみてください。以下のリンクをクリックして、ブラウザでシミュレーションを起動してください。
楽しい工作を!