5.8 Den Knopf Drehen

Ein Potentiometer ist ein dreipoliges Gerät, das häufig verwendet wird, um den Widerstand in einem Schaltkreis anzupassen. Es verfügt über einen Drehknopf oder einen Schieberegler, mit dem der Widerstandswert des Potentiometers verändert werden kann. In diesem Projekt werden wir es nutzen, um die Helligkeit einer LED zu steuern, ähnlich wie bei einer Schreibtischlampe im täglichen Leben. Durch Anpassen der Position des Potentiometers können wir den Widerstand im Schaltkreis verändern, wodurch der Stromfluss durch die LED reguliert und deren Helligkeit entsprechend angepasst wird. Dies ermöglicht es uns, ein anpassbares und verstellbares Beleuchtungserlebnis zu schaffen, ähnlich dem einer Schreibtischlampe.

Benötigte Komponenten

Für dieses Projekt benötigen wir die folgenden Komponenten.

Es ist definitiv praktisch, ein ganzes Kit zu kaufen, hier ist der Link:

Name

ARTIKEL IN DIESEM KIT

LINK

ESP32 Starter Kit

320+

ESP32 Starter Kit

Sie können sie auch separat über die untenstehenden Links kaufen.

KOMPONENTENVORSTELLUNG

KAUF-LINK

ESP32 WROOM 32E

BUY

ESP32-Kameraerweiterung

-

Steckbrett

BUY

Überbrückungsdrähte

BUY

Widerstand

BUY

LED

BUY

Potentiometer

BUY

Verfügbare Pins

  • Verfügbare Pins

    Hier ist eine Liste der verfügbaren Pins auf dem ESP32-Board für dieses Projekt.

    Verfügbare Pins

    IO14, IO25, I35, I34, I39, I36

  • Strapping Pins

    Die folgenden Pins sind Strapping-Pins, die den Startprozess des ESP32 während des Einschaltens oder Resets beeinflussen. Sobald der ESP32 jedoch erfolgreich gestartet ist, können sie als normale Pins verwendet werden.

    Strapping Pins

    IO0, IO12

Schaltplan

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

Wenn Sie das Potentiometer drehen, ändert sich der Wert von I35. Durch Programmierung können Sie den Wert von I35 verwenden, um die Helligkeit der LED zu steuern. Daher ändert sich die Helligkeit der LED entsprechend, wenn Sie das Potentiometer drehen.

Verdrahtung

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

Code

Bemerkung

  • Die Datei 5.8_pot.ino kann unter dem Pfad esp32-starter-kit-main\c\codes\5.8_pot geöffnet werden.

  • Nachdem Sie das Board (ESP32 Dev Module) und den passenden Port ausgewählt haben, klicken Sie auf den Upload-Button.

  • „Unbekanntes COMxx“ wird immer angezeigt?

Nachdem der Code erfolgreich hochgeladen wurde, drehen Sie am Potentiometer und Sie werden sehen, wie sich die Helligkeit der LED entsprechend ändert. Gleichzeitig können Sie die analogen und Spannungswerte des Potentiometers im seriellen Monitor sehen.

Wie funktioniert das?

  1. Definition der Konstanten für Pin-Verbindungen und PWM-Einstellungen.

    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
    

    Hier ist die PWM-Auflösung auf 12 Bit eingestellt und der Bereich ist 0-4095.

  2. Konfiguration des Systems in der Funktion setup().

    void setup() {
        Serial.begin(115200);
    
        // Configure PWM
        ledcSetup(channel, freq, resolution);
        ledcAttachPin(ledPin, channel);
    }
    
    • In der Funktion setup() wird die serielle Kommunikation mit einer Baudrate von 115200 gestartet.

    • Die Funktion ledcSetup() wird aufgerufen, um den PWM-Kanal mit der angegebenen Frequenz und Auflösung einzurichten, und die Funktion ledcAttachPin() wird aufgerufen, um den angegebenen LED-Pin mit dem PWM-Kanal zu verknüpfen.

  3. Hauptloop (wird wiederholt ausgeführt) in der Funktion 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);: Diese Funktion wird verwendet, um den ADC-Wert für einen gegebenen Pin/ADC-Kanal in Millivolt zu erhalten.

      • pin GPIO-Pin, um den analogen Wert zu lesen.

    Der Potentiometerwert wird direkt als PWM-Tastverhältnis für die Steuerung der LED-Helligkeit über die Funktion ledcWrite() verwendet, da der Wertebereich ebenfalls von 0 bis 4095 reicht.