注釈
こんにちは!FacebookのSunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Communityへようこそ!Raspberry Pi、Arduino、ESP32を深く学び、仲間たちと一緒に探求していきましょう。
なぜ参加するのか?
専門的なサポート: コミュニティやチームのサポートで、購入後の問題や技術的な課題を解決できます。
学びと共有: ヒントやチュートリアルを交換し、スキルを向上させましょう。
独占的な先行公開: 新製品の発表や先取り情報に早期アクセスできます。
特別割引: 最新製品の特別割引を楽しめます。
祭りのプロモーションとギブアウェイ: ギブアウェイやホリデープロモーションに参加できます。
👉 私たちと一緒に探索し、創造を始めましょう![ここ]をクリックして、今すぐ参加してください!
2.11 ノブを回す
このレッスンでは、Raspberry Pi Pico 2 Wの内蔵アナログ-デジタルコンバータ(ADC)を使用してアナログ入力を読み取り、その入力を使ってLEDの明るさを制御する方法を学びます。具体的には、可変抵抗器(ポテンショメーター)をアナログ入力デバイスとして使用します。ポテンショメーターのノブを回すことで、Picoが読み取る電圧レベルを調整し、その値を使ってPWM(パルス幅変調)を通じてLEDの明るさを制御します。
アナログ入力の理解
これまで、デジタル入力と出力を扱ってきました。デジタル入力はON(高電圧)かOFF(低電圧)のいずれかです。しかし、実際の多くの信号はアナログで、値が連続的に変化します。例えば、光の強さ、温度、音のレベルなどです。
Raspberry Pi Pico 2 Wには、アナログ電圧を読み取り、それをデジタル値に変換してコード内で処理できる内蔵のADCがあります。
ADCは、ポテンショメーターからのアナログ電圧を以下の式を使ってデジタル値に変換します:
Digital Value = (Analog Voltage/3.3V) * 65535
PicoのADCピン

Picoにはアナログ入力として使用できる3つのGPIOピンがあります:
GP26 (ADC0)
GP27 (ADC1)
GP28 (ADC2)
さらに、内部で温度センサーに接続されている4番目のADCチャネル(ADC4)もあり、これについては後のレッスンで学びます。
必要な部品
このプロジェクトで必要な部品は以下の通りです。
全ての部品がセットになったキットを購入するのが便利です。こちらのリンクをご覧ください:
名前 |
このキットのアイテム |
リンク |
|---|---|---|
Pico 2 Wスターターキット |
450+ |
また、以下のリンクから部品を個別に購入することもできます。
SN |
コンポーネント |
数量 |
リンク |
|---|---|---|---|
1 |
1 |
||
2 |
マイクロUSBケーブル |
1 |
|
3 |
1 |
||
4 |
数本 |
||
5 |
1(220Ω) |
||
6 |
1 |
||
7 |
1 |
回路図

ポテンショメーターはアナログデバイスで、ノブを2方向に回すことで電圧が変化します。
ポテンショメーターの中央ピンをアナログピンGP28に接続します。Raspberry Pi Pico 2 Wは、16ビットのマルチチャネルアナログ-デジタルコンバータ(ADC)を内蔵しています。これにより、入力電圧(0Vから動作電圧3.3Vまで)を0から65535の整数値にマッピングできます。このため、GP28の値は0から65535の範囲で変動します。
計算式は以下の通りです:
(Vp/3.3V) x 65535 = Ap
次に、GP28(ポテンショメーター)の値をGP15(LED)のPWM値として設定します。 これにより、ポテンショメーターを回すことでLEDの明るさが同時に変化します。
配線

コードの記述
注釈
pico-2w-kit-main/micropythonの2.11_turn_the_knob.pyファイルを開くか、以下のコードをThonnyにコピーします。次に「実行」をクリックするか、F5を押して実行します。Thonnyの右下に「MicroPython(Raspberry Pi Pico).COMxx」のインタープリタが選択されていることを確認してください。
詳細な手順については コードを開いて直接実行 を参照してください。
import machine
import utime
# GP28でADCを初期化
potentiometer = machine.ADC(28)
# GP15でPWMを初期化
led = machine.PWM(machine.Pin(15))
led.freq(1000) # PWM周波数を1000Hzに設定
while True:
# アナログ値(0-65535)を読み取る
value = potentiometer.read_u16()
print("Potentiometer value:", value)
# LEDの明るさを設定
led.duty_u16(value)
# 読み取りを安定させるために小さな遅延
utime.sleep_ms(200)
コードを実行すると、ポテンショメーターのノブを回すことでLEDの明るさが変化し、コンソールにはポテンショメーターから読み取った現在のアナログ値が表示されます。
コードの理解
アナログの読み取り:
potentiometer = machine.ADC(28)は、GP28でADCを初期化します。value = potentiometer.read_u16()は、ポテンショメーターからアナログ電圧を読み取り、16ビット整数(0から65535の範囲)を返します。0 は 0V に対応。
65535 は 3.3V (Picoの動作電圧)に対応します。
PWMでLEDを制御:
led = machine.PWM(machine.Pin(15))は、GP15でPWMを設定します。led.freq(1000)は、PWM周波数を1000Hzに設定します。led.duty_u16(value)は、ポテンショメーターの読み取りに基づいてPWM信号のデューティサイクルを設定します。高い
valueはデューティサイクルを増加させ、LEDが明るくなります。低い
valueはデューティサイクルを減少させ、LEDが暗くなります。
値を表示:
print("Potentiometer value:", value)は、現在のアナログ値をコンソールに表示し、モニタリングします。
さらに実験する
PWM周波数の変更:
led.freq()で異なる周波数を試し、LEDへの影響を観察します。ADC値のマッピング: ADC値を別の範囲にスケーリングまたはマッピングし、LEDの明るさへの影響を確認します。
他のADCピンの使用: ポテンショメーターをGP26やGP27に接続し、コードを調整します。
トラブルシューティングのヒント
LEDの明るさが変わらない場合:
LEDと抵抗が正しく接続されているか確認してください。
ポテンショメーターが適切に配線されているか確認してください。
ADC値が不正確な場合:
GP28への接続を確認してください。
ポテンショメーターの外側のピンが3.3VとGNDに接続されていることを確認してください。
結論
アナログ入力とPWM出力を統合することで、ポテンショメーターを使用してLEDの明るさを簡単かつ効果的に制御する方法を作り出しました。このプロジェクトは、アナログ信号を読み取り、それを使って他のコンポーネントを制御する方法を示しており、電子工学およびマイクロコントローラープログラミングの基本的なスキルです。
参照資料