注釈

こんにちは、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ピン

pin_adc

Picoにはアナログ入力に使用できる3つのGPIOピンがあります:

  • (ADC0) GP26

  • (ADC1) GP27

  • (ADC2) GP28

また、内部で温度センサー(ADC4)に接続された4番目のADCチャネルがあります。これは後のレッスンで探ります。

必要なもの

このプロジェクトには、以下の部品が必要です。

全ての部品を揃えたキットを購入するのが便利です。こちらのリンクからご覧ください:

名前

このキットの部品

リンク

Newton Lab Kit

450以上

Newton Lab Kit

部品は以下のリンクから個別に購入することもできます。

番号

部品

数量

リンク

1

Raspberry Pi Pico 2

1

購入

2

Micro USBケーブル

1

3

ブレッドボード

1

購入

4

ジャンパーワイヤー

複数

購入

5

抵抗器

1(220Ω)

購入

6

LED

1

購入

7

ポテンショメータ

1

購入

回路図

sch_pot

配線図

wiring_pot

コードの作成

注釈

  • 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の明るさが変化します。また、コンソールにはポテンショメーターから読み取った現在のアナログ値が表示されます。

コードの理解

  1. アナログ読み取り:

    • potentiometer = machine.ADC(28) は、GP28でADCを初期化します。

    • value = potentiometer.read_u16() は、ポテンショメーターからのアナログ電圧を読み取り、0から65535の16ビット整数値を返します。

      • 00V に対応します。

      • 655353.3V (Picoの動作電圧)に対応します。

  2. PWMでLEDを制御:

    • led = machine.PWM(machine.Pin(15)) は、GP15でPWMを設定します。

    • led.freq(1000) は、PWMの周波数を1000Hzに設定します。

    • led.duty_u16(value) は、ポテンショメーターの読み取り値に基づいてPWM信号のデューティサイクルを設定します。

      • value が大きいほどデューティサイクルが増加し、LEDが明るくなります。

      • value が小さいほどデューティサイクルが減少し、LEDが暗くなります。

  3. 値を表示:

    • print("Potentiometer value:", value) は、現在のアナログ値をコンソールに表示します。

実験をさらに進める

  • PWM周波数を変更する: led.freq() で異なる周波数を試し、LEDへの影響を観察します。

  • ADC値をマッピングする: スケーリング係数を導入して、ADC値を異なる範囲にマッピングし、LEDの明るさへの影響を確認します。

  • 他のADCピンを使う: ポテンショメーターをGP26やGP27に接続し、コードを調整します。

トラブルシューティングのヒント

  • LEDの明るさが変わらない:

    • LEDと抵抗が正しく接続されているか確認します。

    • ポテンショメーターが正しく配線されていることを確認します。

  • 不正確なADC値:

    • GP28への接続を確認します。

    • ポテンショメーターの外側のピンが3.3VとGNDに接続されていることを確認します。

結論

アナログ入力とPWM出力を統合することで、ポテンショメーターを使ってLEDの明るさを制御する簡単で強力な方法を作成しました。このプロジェクトは、アナログ信号を読み取り、それを他のコンポーネントの制御に利用する方法を示しており、エレクトロニクスとマイクロコントローラープログラミングの基本的なスキルです。

参考文献