5.8 ノブを回す

ポテンショメータは、回路の抵抗を調節するために一般的に使用される3端子デバイスです。これにはノブまたはスライディングレバーが備えられており、ポテンショメータの抵抗値を変化させることができます。このプロジェクトでは、日常生活のデスクランプのように、LEDの明るさを制御するためにそれを活用します。ポテンショメータの位置を調整することにより、回路の抵抗を変更し、それによってLEDを流れる電流を調節し、その明るさを適宜調整することができます。これにより、デスクランプのようなカスタマイズ可能で調節可能な照明体験を作り出すことができます。

必要な部品

このプロジェクトには以下のコンポーネントが必要です。

全てのキットを購入するのは非常に便利です。こちらがリンクです:

名前

このキットのアイテム

リンク

ESP32 Starter Kit

320+

ESP32 Starter Kit

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

コンポーネントの紹介

購入リンク

ESP32 WROOM 32E

BUY

ESP32カメラ拡張ボード

-

ブレッドボード

BUY

ジャンパーワイヤ

BUY

抵抗器

BUY

LED

BUY

ポテンショメータ

BUY

利用可能なピン

  • 利用可能なピン

    こちらは、このプロジェクトのためのESP32ボード上の利用可能なピンのリストです。

    利用可能なピン

    IO14, IO25, I35, I34, I39, I36

  • ストラッピングピン

    以下のピンはストラッピングピンであり、電源オンまたはリセット時のESP32の起動プロセスに影響を与えます。しかし、ESP32が正常に起動した後、通常のピンとして使用できます。

    ストラッピングピン

    IO0, IO12

回路図

../../_images/circuit_5.8_potentiometer.png

ポテンショメータを回すと、I35の値が変わります。プログラミングにより、I35の値を使用してLEDの明るさを制御できます。そのため、ポテンショメータを回すと、LEDの明るさもそれに応じて変化します。

配線図

../../_images/5.8_potentiometer_bb.png

コード

注釈

  • esp32-starter-kit-main\c\codes\5.8_pot のパスの下にあるファイル 5.8_pot.ino を開くことができます。

  • ボード(ESP32 Dev Module)と適切なポートを選択した後、 アップロード ボタンをクリックします。

  • "Unknown COMxx"が常に表示されますか?

コードが正常にアップロードされた後、ポテンショメータを回すと、LEDの明るさがそれに応じて変わるのが見えます。同時に、シリアルモニタでポテンショメータのアナログ値と電圧値を確認できます。

どのように動作するのか?

  1. ピン接続とPWM設定のための定数を定義します。

    const int potPin = 14; // Potentiometer connected to GPIO14
    const int ledPin = 26; // LED connected to GPIO26
    
    // PWM settings
    const int freq = 5000; // PWM frequency
    const int resolution = 12; // PWM resolution (bits)
    const int channel = 0; // PWM channel
    

    ここではPWMの解像度を12ビットに設定し、範囲は0-4095になります。

  2. setup() 関数でシステムを構成します。

    void setup() {
        Serial.begin(115200);
    
        // Configure PWM
        ledcSetup(channel, freq, resolution);
        ledcAttachPin(ledPin, channel);
    }
    
    • setup() 関数では、ボーレート115200でシリアル通信を開始します。

    • 指定された周波数と解像度でPWMチャンネルを設定するために ledcSetup() 関数が呼び出され、指定されたLEDピンをPWMチャンネルに関連付けるために ledcAttachPin() 関数が呼び出されます。

  3. loop() 関数のメインループ(繰り返し実行される)。

    void loop() {
    
        int potValue = analogRead(potPin); // read the value of the potentiometer
        uint32_t voltage_mV = analogReadMilliVolts(potPin); // Read the voltage in millivolts
    
        ledcWrite(channel, potValue);
    
        Serial.print("Potentiometer Value: ");
        Serial.print(potValue);
        Serial.print(", Voltage: ");
        Serial.print(voltage_mV / 1000.0); // Convert millivolts to volts
        Serial.println(" V");
    
        delay(100);
    }
    
    • uint32_t analogReadMilliVolts(uint8_t pin);: この関数は指定されたピン/ADCチャンネルのADC値をミリボルト単位で取得するために使用されます。

      • pin アナログ値を読むGPIOピン。

    ポテンショメータの値は ledcWrite() 関数を通じてLEDの明るさを制御するPWMデューティサイクルとして直接使用されます。値の範囲も0から4095です。