KY040 Drehregler als Lautstärkeregler für den Raspberry Pi

30. Januar 2017
641 Views
5 Comments

Mit Drehreglern ist es möglich die Anzahl der bewegten „Schritte“ zu erkennen. Anders als übliche Potentiometer, welche in verschiedenen analogen Modulen wie z.B. Joysticks verbaut sind, wird beim KY040 eine Drehung in beide Richtung erkannt. Solche Drehregler sind üblicherweise in Radios und anderen drehbaren Einstellungsmöglichkeiten verbaut.

In diesem Tutorial bauen wir aus einem solchen KY040 einen Lautsärkeregler für unseren Raspberry Pi. So können wir bspw. auch einfach per Hardware die Lautstärke unseres Live-Radios oder unserer Jukebox regeln.

Natürlich kann das Tutorial (in abgewandter Form) auch für andere Projekte verwendet werden. Helligkeitsregelung, Zeiten einstellen, etc. sind Optionen die mir spontan einfallen, allerdings kann so ziemlich alles, was per Drehknopf eingestellt werden soll, damit umgesetzt werden.

 

Zubehör

Neben einem Raspberry Pi wird ein Drehregler mit 5 Pins benötigt. Zum Anschluss an den Pi werden außerdem Female-Female Jumper Kabel gebraucht.

Wer einen 3D Drucker besitzt, kann sich auch noch dazu einen aufsteckbaren Drehknopf drucken.

In dem Video habe ich zusätzlich die Daten auf einem 20×04 Zeichen Display anzeigen lassen (hier geht es zur Anleitung).

 

Raspberry Pi KY040 Verbindung

Der Drehregler hat insgesamt 5 Anschlüsse – davon zwei Spannungspole (VCC, GND) und einen zum Erfassen des Tastendrucks (SW). Mit Hilfe der restlichen zwei Pins (DT, CLK), kann die Richtung der Drehung festgestellt werden. Dabei wird beim Drehen eine Flanke erzeugt. Je nachdem, ob nach rechts oder links gedreht wird, ist die Spannung des anderen Pins digital 0 oder 1. Der SW Pin liefert hingegen solange eine Spannung, die der Knopf gedrückt wird.

Meine Pinbelegung sieht folgendermaßen aus:

Raspberry PiKY040
GPIO 5 (Pin 29)CLK
GPIO 6 (Pin 31)DT
GPIO 13 (Pin 33)SW
3.3V (Pin 1)+
GND (Pin 6)GND

 

Raspberry Pi KY040 Steckplatine

 

Um den Drehregler verwenden zu können, laden wir der Einfachheit halber eine Bibliothek, welche auf Github verfügbar ist.

git clone https://github.com/conradstorz/KY040

Die enthaltene „KY040.py“ Datei können wir in anderen Skripten importieren.

 

Drehregler Anwendungsbeispiel: Lautstärke ändern

Im folgenden Video habe ich den Drehregler KY040 als Drehknopf für die Lautstärke am Raspberry Pi genommen. Das Drücken des Knopfes lässt den Sound stumm schalten (Mute).

Um auch einen solchen Lautstärkeregler nach zu bauen, habe ich ein Skript geschrieben, welches Systemaufrufe zum Ändern der Lautstärke aufruft. Die Basis bildet die eben geladene Klasse, welche im selben Verzeichnis wie das nachfolgende Skript vorhanden sein muss.

Dazu können wir z.B. einfach in den Ordner wechseln und eine neue Datei erstellen:

cd KY040
sudo nano volume_regulator.py

Folgender Inhalt wird eingefügt:

Gespeichert wird mit STRG+O und mit STRG+X wird der Nano-Editor geschlossen.

Das Skript leitet im Grunde genommen nur die jeweiligen Bewegungen weiter. Dazu lesen wir zuerst die aktuelle Lautstärke aus und erhöhen bzw. verringern diese um 5%. Den Wert kannst du natürlich nach Belieben anpassen. Wer mehr über den Alsa-Mixer erfahren möchte, kann einen Blick in die Dokumentation werfen. Hiermit können alle Sound-relevanten Daten (Lautstärke, Einstellungen, etc.) ausgelesen werden und auch in anderen Projekten verwendet werden (Car-PC als Beispiel).

 

Wie im Video zu sehen ist, ist die Erkennung leider nicht immer absolut genau. Hier kann die bouncetime geändert werden, um eine Variabilität zu gewährleisten. Ist der Wert allerdings zu groß, kann es sein, dass manche Drehungen gar nicht erkannt werden.

5 Kommentare

  1. Was wäre denn der Code für Up/Down/Enter?
    Ich überlege, so einen Regler als Steuerung für einen Squeezebox-Client zu verwenden.

    Antworten
  2. 1.2.2017
    An interesting tutorial. This has given me an idea.
    Volume control using the potentiometer as volume limit, but including
    with a digital potentiometer such as http://cdn-reichelt.de/documents/datenblatt/A200/DATASHEET_AD_8400.pdf (the data sheet is in English).
    The idea being that when the device is switched on the volume to be increased
    until equal to the analogue poti. This is to avoid the problen caused by cranking
    the volume poti up to max ,switching off, then later switching on to get a large
    scale dose of tinnitus.
    When I get enough time free I’ll try that out and let you know, I have a bit of a problem with my right arm, it is difficult to build alone – I need help.
    Perhaps someone has all ready done it,

    Antworten
    • My first thought was using a potentiometer as you said. But the problem ist, if you are near to the maximum (e.g. 9k from 10k) and you rotate again to the right: Then you will reach e.g. 1k and the volume is changing from 90% to 10%. This is why I decided to use use a rotary switch instead of a potentiometer. But if you have a better solution, I would be happy if you would share it with us.

      Antworten

Hinterlasse einen Kommentar

Deine Email Adresse wird nicht veröffentlicht.

Blog abonnieren

Abonniere Tutorials-RaspberryPi, um kein Tutorial mehr zu verpassen!