注釈
こんにちは、FacebookのSunFounder Raspberry Pi & Arduino & ESP32愛好者コミュニティへようこそ!Raspberry Pi、Arduino、ESP32について、他の愛好者と共にさらに深く学びましょう。
なぜ参加するべきか?
専門家によるサポート: 購入後の問題や技術的な課題を、コミュニティやチームからサポートを受けて解決できます。
学び・共有: ヒントやチュートリアルを交換してスキルを向上させましょう。
限定プレビュー: 新製品の発表や先行公開情報をいち早くチェックできます。
特別割引: 最新の製品に対する限定割引をお楽しみいただけます。
祝祭プロモーションやプレゼント: プレゼントキャンペーンや季節のプロモーションに参加しましょう。
👉 私たちと一緒に探求し、創造してみませんか?[こちら]をクリックして、今すぐ参加してください!
2.11 ノブを回す
このレッスンでは、Raspberry Pi Pico 2の内蔵アナログ・デジタル変換器(ADC)を使用してアナログ入力を読み取り、その入力を使ってLEDの明るさを制御する方法を学びます。具体的には、可変抵抗器であるポテンショメーターをアナログ入力デバイスとして使用します。ポテンショメーターのノブを回すことで、Picoが読み取る電圧レベルが変化し、その値を使ってLEDの明るさをパルス幅変調(PWM)で制御します。
アナログ入力の理解
これまで、デジタル入力と出力を使用してきました。デジタル信号はON(高電圧)かOFF(低電圧)のいずれかですが、実際の多くの信号はアナログであり、連続的に値が変化します。例としては、光の強さ、温度、音のレベルなどがあります。
Raspberry Pi Pico 2には、アナログ電圧を読み取り、それをデジタル値に変換してコードで処理できる内蔵のADCがあります。
ADCはポテンショメーターからのアナログ電圧を次の式を使ってデジタル値に変換します:
Digital Value = (Analog Voltage/3.3V) * 65535
PicoのADCピン
Picoにはアナログ入力に使用できる3つのGPIOピンがあります:
(ADC0) GP26
(ADC1) GP27
(ADC2) GP28
また、内部で温度センサー(ADC4)に接続された4番目のADCチャネルがあります。これは後のレッスンで探ります。
必要なもの
このプロジェクトには、以下の部品が必要です。
全ての部品を揃えたキットを購入するのが便利です。こちらのリンクからご覧ください:
名前 |
このキットの部品 |
リンク |
|---|---|---|
Newton Lab Kit |
450以上 |
部品は以下のリンクから個別に購入することもできます。
番号 |
部品 |
数量 |
リンク |
|---|---|---|---|
1 |
1 |
||
2 |
Micro USBケーブル |
1 |
|
3 |
1 |
||
4 |
複数 |
||
5 |
1(220Ω) |
||
6 |
1 |
||
7 |
1 |
回路図

配線図

コードの作成
注釈
2.11_turn_the_knob.pyファイルをnewton-lab-kit/micropythonのパスで開くか、以下のコードを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()は、ポテンショメーターからのアナログ電圧を読み取り、0から65535の16ビット整数値を返します。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の明るさを制御する簡単で強力な方法を作成しました。このプロジェクトは、アナログ信号を読み取り、それを他のコンポーネントの制御に利用する方法を示しており、エレクトロニクスとマイクロコントローラープログラミングの基本的なスキルです。
参考文献
