2.11 ノブを回してみよう¶
以前のプロジェクトでは、Pico Wのデジタル入力を使用していました。 たとえば、ボタンでピンのレベルを低(オフ)から高(オン)に変えることができます。これはバイナリの動作状態です。
しかし、Pico Wは別のタイプの入力信号、すなわちアナログ入力も受け取ることができます。 完全に閉じている状態から完全に開いている状態まで、様々な値をとることができます。 アナログ入力により、マイクロコントローラは物理世界の光強度、音強度、温度、湿度などを感知することができます。
通常、マイクロコントローラにはアナログ入力を実装するための追加ハードウェア、すなわちアナログ-デジタルコンバータ(ADC)が必要です。 しかし、Pico W自体にはADCが組み込まれているので、直接使用することができます。
Pico Wにはアナログ入力が使用できるGPIOピンが3つあります:GP26、GP27、GP28。つまり、アナログチャンネル0、1、2です。 さらに、内蔵温度センサに接続された第4のアナログチャンネルもありますが、ここでは紹介しません。
このプロジェクトでは、ポテンショメータのアナログ値を読み取ることに挑戦します。
必要なコンポーネント
このプロジェクトでは、以下のコンポーネントが必要です。
全体のキットを購入することは確かに便利です、以下がそのリンクです:
名前 |
このキットに含まれるアイテム |
リンク |
---|---|---|
ケプラーキット |
450以上 |
下記のリンクから別々にも購入することができます。
SN |
コンポーネント |
数量 |
リンク |
---|---|---|---|
1 |
1 |
||
2 |
Micro USBケーブル |
1 |
|
3 |
1 |
||
4 |
数本 |
||
5 |
1(220Ω) |
||
6 |
1 |
||
7 |
1 |
回路図
ポテンショメータはアナログデバイスであり、2つの異なる方向に回転させることができます。
ポテンショメータの中央のピンをアナログピンGP28に接続します。Raspberry Pi Pico Wは、マルチチャネル、16ビットのアナログ-デジタルコンバータを搭載しています。これにより、入力電圧が0から動作電圧(3.3V)の間で0から65535の整数値にマッピングされます。したがって、GP28の値の範囲は0から65535です。
計算式は以下の通りです。
(Vp/3.3V) x 65535 = Ap
次に、GP28(ポテンショメータ)の値をGP15(LED)のPWM値としてプログラムします。 これにより、ポテンショメータを回転させると、LEDの明るさも同時に変化することがわかります。
配線
コード
注釈
kepler-kit-main/micropython
のパスの下にある2.11_turn_the_knob.py
ファイルを開くか、このコードをThonnyにコピーして、"Run Current Script"をクリックするかF5キーを押して実行します。右下隅にある"MicroPython(Raspberry Pi Pico)"インタプリタをクリックするのを忘れないでください。
詳細なチュートリアルは、 コードを直接開いて実行する を参照してください。
import machine
import utime
potentiometer = machine.ADC(28)
led = machine.PWM(machine.Pin(15))
led.freq(1000)
while True:
value = potentiometer.read_u16()
print(value)
led.duty_u16(value)
utime.sleep_ms(200)
プログラムが動作しているとき、シェルでGP28ピンが現在読み取っているアナログ値を確認できます。 ノブを回すと、その値は0から65535に変化します。 同時に、アナログ値が増加するにつれて、LEDの明るさも増加します。
動作原理は?
potentiometer = machine.ADC(28)
この例では、idによって識別されたソースに関連付けられたADCにアクセスします。この場合、それはGP28です。
potentiometer.read_u16()
アナログ読み取りを行い、0〜65535の範囲の整数を返します。返り値は、ADCによって取られた生の読み取り値を表し、最小値が0で最大値が65535になるようにスケーリングされています。