【Raspberry Pi Pico入門 – 16】ADコンバータを使ってみる

2023年9月29日Raspberry Pi Pico入門,基本編Arduino,Raspberry Pi Pico

概要

今回はADコンバータを使ってみます。ADのAはアナログ、Dはデジタルの略で、ADコンバータはアナログ信号をデジタル信号に変換する機能です。コンバータも略してADCと呼ばれることも多いです。

もっと大ざっぱに説明するなら、電圧を読み取って数値化する電圧計のような機能です。可変抵抗でマイコン内の変数を微調整したり、センサーから出てきた電圧を数値化したりと使用頻度はかなり高いです。

実行環境

IDE:Arduino IDE 2.2.1
MCU:Raspberry Pi Pico

回路

以下のように配線します。可変抵抗(ボリューム)で3.3Vを分圧し、GPIOに接続します。詳細は解説にて説明します。

コーディング

新しくスケッチを作成し、以下の内容をコピペしてください。

const int VOLUME_PIN = 26;

void setup() {
  Serial.begin(115200);
  analogReadResolution(12);
  pinMode(VOLUME_PIN, INPUT);
}

void loop() {
  int volt = analogRead(VOLUME_PIN);
  Serial.println(volt);
  delay(500);
}

動作確認

Arduino IDEのシリアルコンソールを開くと数字が1秒毎に出力されていると思います。可変抵抗のつまみを回したときに数字が変われば成功です。

解説

回路

今回の回路は以下のような回路図になっています。可変抵抗は抵抗値を自由に変えられる電子部品で、抵抗の途中に線が一本追加されたような記号になっています。

可変抵抗を等価回路で表すと下図のような感じになります。

「10kΩ」というのはR1+R2の抵抗値です。可変抵抗のつまみを回すとR1とR2の値が変わりますが、R1+R2=10kΩであることは変わりません。結果的にSIGNALからは3.3VをR1とR2で分圧した電圧が出力されます。(要するにこの回路だと0~3.3Vの電圧が出てきます)

可変抵抗でSIGNALの電圧が変わる様子をシミュレーションしてみました。3.3V側とGND側の抵抗が変わることでTPの電圧が変動しています。

ADコンバータの使い方

ADCで重要なパラメータは「基準電圧」と「レンジ」です。

基準電圧はADCが何Vまで測れるか、というパラメータです。Raspberry Pi Pico内蔵のADコンバータの基準電圧は3.3Vです。
レンジは0Vから基準電圧をどれだけ細かく表すかという数字です。レンジの最大値=基準電圧となり、レンジが4095だと3.3Vを4096分割して数値化するということになります。(0も一段階として数えるので、最大値は4095です)
レンジは通常、「bit」という単位で表し、最大値が「2の(bit)乗-1」となります。(12bitだと、2^12-1=4095)

例えば基準電圧3.3V、レンジ12bitのADコンバータに2.0Vを入力した場合、

$$ 2.0[V] \times 2^{12} \div 3.3[V] = 2482.4242… \simeq 2482$$

となります。
逆にADCの値を読み取った結果が3000だった場合、

$$ 3000 \times 3.3[V] \div 2^{12} \simeq 2.42[V]$$

がGPIO26に印加されているということになります。

コードの解説

  • analogReadResolution(12);
    ADCのレンジを設定します。この関数はRaspberry Pi Pico専用の関数で、他のArduinoでは使用できません。
    設定できるMAX値は12bitなので、最も精度が高くなる12bitに設定することが多いです。
  • analogRead(VOLUME_PIN);
    引数で指定したピンのアナログ値を戻り値として返します。
    ADCはマイコン内部の回路を使用している関係で、使えるピンが限られています。Raspberry Pi PicoではGP26、GP27、GP28がADCとして使用できます。