Raspberry Pi Pico: Helligkeit einer LED mit einem Rotary Encoder einstellen (KY-040)

Die Helligkeit einer LED lässt sich über das Puls-Pause-Verhältnis eines PWM-Signals einstellen. Interessant wird es dann, wenn man das Puls-Pause-Verhältnis über einen drehbaren Regler verändern und somit die Helligkeit manuell einstellen kann. Das wäre mit einem Potentiometer lösbar. Allerdings ist ein Lösung mit einem Rotary Encoder bzw. Drehschalter viel interessanter.

Wenn das Dein erster Versuch mit einem Rotary Encoder vom Typ KY-040 ist, dann solltest Du Dich zuerst mit diesem Bauteil und seinen Besonderheiten vertraut machen. Außerdem empfiehlt es sich zuerst mit der Ansteuerung bzw. der Software-seitigen Auswertung des Rotary Encoders zu experimentieren und herauszufinden, was er leisten kann.

Aufbau und Bauteile

Raspberry Pi Pico: Drehschalter / Rotary Encoder ansteuern (KY-040)

Raspberry Pi Pico KY-040
Pin 23 GND GND
Pin 36 VCC +3,3V +
Pin 22 GPIO 17 SW
Pin 25 GPIO 19 CLK
Pin 24 GPIO 18 DT

Schnell und einfach alle Bauteile zusammen bestellen

Externe Bibliothek für den Drehschalter (Rotary Encoder)

Zur Software-seitigen Ansteuerung bzw. Auswertung des Drehschalter bzw. Rotary Encoders ist eine externe Bibliothek erforderlich, weil keine direkte Unterstützung in MicroPython vorgesehen ist. Die Bibliothek macht die Auswertung des Drehschalters im Programmcode spielend einfach. Dazu muss die Bibliothek in Form einer Datei auf den Raspberry Pi Pico gespeichert werden, damit die Einbindung im folgenden Programmcode funktioniert.

Programmcode

Nach dem Start des Programmcodes leuchtet die LED in etwa mit halber Helligkeit. Durch Drehen des Rotary Encoders kann die LED heller oder dunkler eingestellt werden.

# Bibliotheken laden
from machine import Pin, PWM
from rotary import Rotary

# Einstellungen
steps = 10
step_max = 60000
step = int(step_max / steps)

# GPIO der LED
pin_led = 25

# GPIOs zum Rotary Encoder
pin_dt = 18
pin_clk = 19
pin_sw = 17

# Initialiserung Rotary Encoder
rotary = Rotary(pin_dt, pin_clk, pin_sw)
value = int(step_max / 6)

# Initialisierung PWM und LED
led = PWM(Pin(pin_led))
led.freq(1000)
led.duty_u16(value)

# Funktion
def rotary_changed(change):
    global value
    global step
    global step_max
    if change == Rotary.ROT_CW:
        value = value + step
        print('Rechts (', value, ')')
    elif change == Rotary.ROT_CCW:
        value = value - step
        print('Links (', value, ')')
    # Korrektur, wenn Ende erreicht
    if value < 0: value = 0
    # Korrektur, wenn Anfang erreicht
    if value >= step_max: value = step_max
    # PWM-Signal ändern
    led.duty_u16(value)

# Wenn der Encoder bedient wird
rotary.add_handler(rotary_changed)

Darf es ein bisschen mehr sein?

Was kannst Du noch einstellen? Die Blink-Geschwindigkeit einer LED zum Beispiel. Das wollen wir doch gleich mal ausprobieren.

Weitere verwandte Themen:

Frag Elektronik-Kompendium.de

Hardware-nahes Programmieren mit dem Raspberry Pi Pico und MicroPython

Elektronik-Set Pico Edition

Das Elektronik-Set Pico Edition ist ein Bauteile-Sortiment mit Anleitung zum Experimentieren und Programmieren mit MicroPython.

  • LED: Einschalten, ausschalten, blinken und Helligkeit steuern
  • Taster: Entprellen und Zustände anzeigen
  • LED mit Taster einschalten und ausschalten
  • Ampel- und Lauflicht-Steuerung
  • Elektronischer Würfel
  • Eigene Steuerungen programmieren

Elektronik-Set jetzt bestellen Online-Workshop buchen

Online-Workshop: Programmieren mit dem Raspberry Pi Pico

Programmieren mit dem Raspberry Pi Pico

Gemeinsam mit anderen und unter Anleitung experimentieren? Wir bieten unterschiedliche Online-Workshops zum Raspberry Pi Pico und MicroPython an. Einführung in die Programmierung, Sensoren programmieren und kalibrieren, sowie Internet of Things und Smart Home über WLAN und MQTT.

Online-Workshop buchen

Besuchen Sie unser fast monatlich stattfindendes Online-Meeting PicoTalk und lernen Sie uns kennen. Die Teilnahme ist kostenfrei.

Termine und Newsletter-Anmeldung

 

Elektronik-Sets für das Hardware-nahe Programmieren