注釈

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

pin_adc

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

  • GP26 (ADC0)

  • GP27 (ADC1)

  • GP28 (ADC2)

さらに、内部で温度センサーに接続されている4番目のADCチャネル(ADC4)もあり、これについては後のレッスンで学びます。

必要な部品

このプロジェクトで必要な部品は以下の通りです。

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

名前

このキットのアイテム

リンク

Pico 2 Wスターターキット

450+

Pico 2 W Kit

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

SN

コンポーネント

数量

リンク

1

Pico 2 Wの概要

1

2

マイクロUSBケーブル

1

3

ブレッドボード

1

買う

4

ジャンパーワイヤー

数本

買う

5

抵抗器

1(220Ω)

買う

6

LED

1

買う

7

ポテンショメーター

1

買う

回路図

sch_pot

ポテンショメーターはアナログデバイスで、ノブを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の明るさが同時に変化します。

配線

wiring_pot

コードの記述

注釈

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

コードの理解

  1. アナログの読み取り:

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

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

      • 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の明るさを簡単かつ効果的に制御する方法を作り出しました。このプロジェクトは、アナログ信号を読み取り、それを使って他のコンポーネントを制御する方法を示しており、電子工学およびマイクロコントローラープログラミングの基本的なスキルです。

参照資料