Rotary-Encoder-Menü auf Nokia 5110 LCD mit Arduino UNO
Komponenten und Zubehör
| Arduino UNO | 1 |
| Drehgeber (Rotary Encoder mit Taster) | 1 |
| Nokia 5110 LCD (PCD8544) | 1 |
Software und Online-Dienste
- Arduino IDE
Projektbeschreibung
In diesem Tutorial bauen wir ein eigenes Menü für das beliebte Nokia 5110 LCD-Display, um Projekte benutzerfreundlicher und leistungsfähiger zu machen.
Das Menü zeigt sechs Einträge an. Mit dem Drehgeber navigiert man hoch/runter, ein Druck auf den Encoder-Taster wählt einen Eintrag aus. Bei Auswahl öffnet sich ein Unterbildschirm, in dem sich ein Parameterwert ändern lässt. Ein weiterer Tastendruck kehrt zum Hauptmenü zurück. Der Bildschirm zeigt jeweils drei Einträge; beim Scrollen verschiebt sich der sichtbare Ausschnitt („Frame“).
Schritt 1: Teile beschaffen
- Arduino Uno
- Nokia 5110 LCD-Display
- Drehgeber (mit Taster)
- Kleines Steckbrett
- Jumper-Kabel
Gesamtkosten unter 10 €.
Schritt 2: Nokia 5110 LCD
Der Nokia 5110 war ursprünglich ein Handy-Display mit PCD8544-Controller (Low-Power CMOS). Verbrauch: nur 0,4 mA bei aktiver Anzeige ohne Hintergrundbeleuchtung, < 0,06 mA im Sleep-Modus. Anbindung über serielle Bus-Schnittstelle (8 Drähte). Kosten ca. 4 €.
Schritt 3: Drehgeber
Ein Drehgeber wandelt Winkelposition in digitale Signale. Unser günstiges Modell hat einen integrierten Taster und benötigt 5 Anschlüsse. Kosten ca. 1,50 €.
Schritt 4: Aufbau
Display-Verdrahtung:
- RST → D3
- CE → D4
- DC → D5
- DIN → D11
- CLK → D13
- VCC → 3,3 V (Arduino)
- BL (Backlight) → D7 (softwaregesteuert)
- GND → GND
Drehgeber-Verdrahtung:
- GND → GND
- VCC → 3,3 V
- SW (Taster) → A2
- DT → A1
- CLK → A0
Schritt 5: Der Code
Verwendete Bibliotheken:
Kernvariablen:
int menuitem = 1; // gewählter Menüeintrag (1–6)
int frame = 1; // angezeigter Block (1=Einträge 1–3, 2=2–4, …)
int page = 1; // 1=Hauptmenü, 2=Parameterbearbeitung
int lastMenuItem = 1;
Menüeinträge und Parameter als globale Variablen (leicht anpassbar):
String menuItem1 = "Contrast";
String menuItem2 = "Volume";
String menuItem3 = "Language";
String menuItem4 = "Difficulty";
String menuItem5 = "Light: ON";
String menuItem6 = "Reset";
boolean backlight = true;
int contrast = 60;
int volume = 50;
String language[3] = { "EN", "ES", "EL" };
int selectedLanguage = 0;
String difficulty[2] = { "EASY", "HARD" };
int selectedDifficulty = 0;
Im loop() wird zyklisch drawMenu() aufgerufen, dann der Encoder ausgelesen und Taster geprüft. Je nach page und menuitem werden Werte geändert oder Bildschirme gewechselt. Der Code ist ca. 400 Zeilen lang, aber modular und erweiterbar.
Schritt 6: Test
Nach dem Hochladen funktioniert das Menü: Navigation per Drehgeber, Auswahl per Taster, Parameteränderung im Untermenü. Verbesserungspotenzial: Nutzung von Interrupts statt Polling für geringeren Stromverbrauch und saubereren Code.
Code
Der vollständige Sketch (Nokia5110MenuRotary.ino) ist im Originalprojekt angehängt. Wichtige Ausschnitte oben.
Herstellungsprozess
- Monitor-Ambilight selbst bauen mit Arduino Nano & WS2812B LEDs
- 20-kHz-Arduino-Oszilloskop mit Nokia 5110 LCD – Einfacher DIY-Bau
- LCD-Animationen & Spiele mit Arduino UNO erstellen
- Intelligentes Voltmeter mit Arduino & Smartphone bauen – Einfaches DIY-Projekt
- Echtzeit-IoT-Herzfrequenzmonitor mit Arduino & MAX30100
- Arduino UNO WiFi Webserver: LED per Browser steuern
- DIY-Voltmeter mit Arduino und Nokia 5110 Display – Schritt-für-Schritt-Anleitung
- Präzises DIY-Messrad mit Arduino Nano und Drehgeber
- Arduino-gesteuertes automatisiertes Chrome Dino-Spiel bauen
- Kompaktes FM-Radio mit Arduino Nano und RDA5807M selbst bauen