hardware_adcの用途と主要なメソッド

raspberry pi pico

用途

ADC(Analog to Digital Converter:アナログ→デジタル変換)を扱うためのライブラリ

ピンの入力、光センサー、温度センサーとかのアナログ信号を数値として読み取るために使用する

主要なメソッド

adc_init()
ADCを初期化

adc_gpio_init(pin)
指定したピンをADC入力として使用できるように設定
※ADCが使えるピンは決まっている

adc_select_input(input)
ADCチャンネルを選択(0〜3)

adc_read()
選択中のADCチャンネルから値を読み取る
※戻り値は0〜4095(12bit)

adc_set_temp_sensor_enabled(enable)
内蔵の温度センサーの有効化/無効化

adc_read_blocking()
ADCをブロッキングで読み取る
※通常はadc_read()で充分だから初学者はこのメソッドはあんまり使わない

ADCの基本的な仕組み

ADC は電圧(アナログ値)を数値(デジタル値)に変換する仕組み

Raspberry Pi Pico の ADC は 12bit 分解能で、
0V〜3.3V の電圧を 0〜4095 の数値として取得できる

例:
0V → 0
約1.65V → 約2048
3.3V → 4095

初学者向けの補足

ADCが使えるGPIOピンは限られている
ラズパイピコではADC0〜ADC2に対応したGPIO(26〜28)が
「外部入力用のADCピン」として使える
※ADC3はADC_VREF専用で、センサー入力には使わない(詳細は後述)
※他のピンではadc_gpio_init()を呼んでも動作しない

3.3Vを超える電圧は絶対に入力しない
ADC入力は0〜3.3Vが許容範囲
それ以上の電圧を入れるとラズパイピコが壊れるかもしれない

入力が未接続だと値が不安定になる
何も接続していないADCピンはフワフワした値を返してくる
逆にこれを利用して乱数を取得することもできる。
参考:【C/C++】raspberry pi picoで乱数のシード値をランダムに取得する方法

ADCの値はそのまま使わず「電圧」に変換すると分かりやすい
電圧 = adc_read() × 3.3 / 4095
※ 3.3VはADC_VREFの電圧(通常は3.3V)

内蔵温度センサーは精度が高くない
簡易的な温度確認には使えるけど、
正確な温度を測りたいときは外部のセンサーを使った方がいいらしい

ADCはノイズの影響を受けやすい
値がブレる場合は複数回読み取って平均を取るとマシな値を作れるよ

adc_read()は最後に選択したチャンネルを読む
複数のADCピンを使う場合は毎回adc_select_input()で読むピンを選択し直す必要がある

35ピン(ADC_VREF)について

ADCの基準電圧を入力するための特別なピン
※ラズパイピコでは基板上で3.3Vの電圧が印加されてるから、必ず入力しないといけないわけではない

  • 外部モジュールからの信号とかを入力するためのピンじゃない
  • GPIOピンではないからGPIO29としては使えない
  • でもadc_select_input(3)でADC3として電圧は読める

私と同じ初学者で「よほど高精度にしたい」とか「低電圧のセンサーを使いたい」とかじゃなければ何も接続せずソース上でも特に触れなくていいと思うよ

タイトルとURLをコピーしました