Aufgabenstellung
Für ein Museumsprojekt sollen Modellautos mit Displays auf dem Dach ausgestattet werden und an bestimmten Positionen Informationen anzeigen. Die Besucher bewegen die Autos über einen Kartentisch.
- Anzeigefläche 4,2 Zoll 400x300 Pixel monochrom
- 10h Akkubetrieb
- An den Informationspunkten werden RFID-Tags gelesen
- Anzeigeninhalt soll sich der Blickrichtung des Besuchers anpassen, 180 Grad Drehung
- Rücksetz/Starttaste
- Mikrokontroller möglichst viel schlafen lassen, ein Radsensor weckt ihn bei Bewegung wieder auf
- Akustische Wiedergabe von Texten und Tönen mittels MP3-Modul
- Steuerung von Objekten auf dem Tisch mittels IR-Signalen?
Nach ersten Überlegungen fiel die Wahl auf E-Paper-Displays, weil sie keinen Ruhestrom benötigen und eine sehr brillante Darstellung auch bei wenig Licht bieten. Eine Demo für den Kunden wurde mit einen Arduino Uno erstellt:
Waveshare 1.54 Inch E-Paper Display Panel Module Kit 3.3v E-Ink
Software von Waveshare verwendet (verwirrend)
Strombedarf mit Arduino Uno: 35 mA Minimum, Display verbraucht in Ruhe nichts.
Der Auftraggeber war angetan.
Bei Erstellung eines realistischen Kostenvoranschlags wurde diese Problemfelder ermittelt:
- RAM-Bedarf des µC für Framebuffer: 400*300/8 Byte = 15 KByte
- Arduino Uno hat nur 2 kiByte, Mega2560 8 kiByte, ein Adapter mit Pegelanpassung ist erforderlich, Lösung: Z.B. Adafruit Modul
- ESP 8266 hat genug RAM, Adapter sind verfügbar, zu wenig Leitungen?
- ESP32 hat genug RAM, Adapter sind verfügbar, höherer Strombedarf, Schlafmodus verwenden
- Strombedarf, Akku laden und überwachen
- Welche Software-Bibliotheken verwenden?
Grundverständnis e-Paper
Leider ist es für einen e-Paper Neuling nur schwer begreifbar, warum der Democode oft so seltsam kompliziert ist, gute Doku scheint kaum erhältlich, ausser man kann Chinesisch, es gibt viele widersprüchliche Aussagen, hier meine Erkenntnisse:
- Elektrostatisch geladene Farbteilchen werden mit ca. 10V Spannung in einer Emulsion zwischen Oberfläche und Hintergrund bewegt.
- Die Art, wie ein Pixel dazu angesteuert wird hängt von der letzten Position des Farbteilchens ab, daher hat das Display zwei Speicher, einen Puffer fürs alte Bild und einen fürs neue Bild. Beim Aktualisieren des Inhalts werden mit einer LUT (look up table) aus altem und neuen Inhalt für die Pixel Signalfolgen erzeugt, um die Farbteilchen optimal zu bewegen. Eine Wissenschaft für sich...
- Refresh des ganzen Inhalts kostet viel Zeit, bei manchen Displays gibt es Verfahren um nur einen Teil zu erneuern: Partial Refresh.
- Prima Erklärvideo: E-paper hacking: fastest possible refresh rate
- Kommunikation geschieht über SPI-Schnittstelle mit 4 oder 3 Leitungen:
- 4 Leitungen: SCK, MOSI, MISO, DC (Data/Command)
- 3 Leitungen: SCK, MOSI, MISO, (9Bit Daten, das 9. Bit unterscheidet Data oder Command)
- Weitere Leitungen für CS (Chip Select), RST (Reset), BUSY (Displaycontroller ist beschäftigt) sind erforderlich.
- Nicht in direkter Sonne aktualisieren (falls kein UV-Filter vorhanden ist)
- Ähnlich wie bei LCDs scheinen lang anhaltende statische DC-Pegel Schäden zu verursachen, daher zwei Empfehlungen der Hersteller:
- Nicht immer nur partiell refreshen
- Nur dann aktivieren, Spannung einschalten, wenn Inhalt verändert werden soll
Arduino Lösungen
Wegen dem geringen Ram-Speicher der Arduinos sind Adapter mit weiterem RAM erforderlich. Funktionen des Shields:
- Ausgelagerte externe Bauteile für Display: 10V Spannungserzeugung und Kondensatoren
- Spannungsregler 5V -> 3,3V (RT9193-33)
- Levelkonverter 3,3V <-> 5V
- SPI ansteuerbares RAM (Library muss das unterstützen)
- SD-Kartenleser
Angebote:
www.waveshare.com/wiki/E-Paper_Shield (Amazon)
Adafruit eInk Breakout Friend with 32KB SRAM
Lösungen sind so nicht geeignet, da 5V Versorgung mit Akku ungeschickt ist.
ESP8266 Lösungen
Programmierung | Reset | 1 | E S P - 1 2 E |
22 | TXD0 | Programmierung |
---|---|---|---|---|---|---|
ADC | 2 | 21 | RXD0 | |||
Enable | 3 | 20 | GPIO5 | eReset | ||
eBUSY/WAKE | GPIO16 | 4 | 19 | GPIO4 | eD/C | |
eSCK | GPIO14 | 5 | 18 | GPIO0 | Programmierung | |
(MISO) | GPIO12 | 6 | 17 | GPIO2 | ||
eMOSI | GPIO13 | 7 | 16 | GPIO15 | eCS | |
VCC 3,3V | 8 | 15 | GND |
Es gibt fertige Lösungen z.B.:
www.waveshare.com/wiki/E-Paper_ESP8266_Driver_Board (Amazon)
Leider sind kaum GPIO-Pins mehr übrig für weitere Funktionen.
Außerdem muss für Deep-Sleep zwischen Wake und Reset eine Brücke gesetzt werden, damit das Ding wieder aufwacht...
ESP32 Lösungen
Lösung mit ESP32: www.waveshare.com/wiki/E-Paper_ESP32_Driver_Board
Dabei fehlt die Akkusteuerung. Es gibt ESP32 mit Akku-Ladetechnik:
wiki.wemos.cc/products:d32:d32 (Amazon)
Hier fehlt die Ansteuerung des e-Papers, die e-Paper Module können mit 3,3V oder 5V betrieben werden:
https://www.waveshare.com/wiki/4.2inch_e-Paper_Module (Amazon)
Eine mögliche Lösung bestünde nun aus wemos D32 und einem e-Paper-Modul.
RFID Modul
Security Access using MFRC522 RFID Reader with Arduino
Anbindung mit SPI-Schnittstelle. Erste Tests sind vielversprechend, Leseabstand 3cm, Strombedarf 20mA. Wie schaltet man das Modul ab, in den Spar-Modus: Power down modes? #269
MP3 Modul
wiki.dfrobot.com/DFPlayer_Mini_SKU_DFR0299
Ansteuerung mit Seriell-Protokoll, zwei Leitungen.
Vorläufiges Fazit
Für Akkubetrieb (1 LiPo-Zelle) bieten sich ESPs an, da diese mit 3,3V betrieben werden können, außerdem ist genug RAM für e-Paper-Buffer vorhanden.
Schwierigkeiten bei der Realisierung kann es massig geben, vieles ist Baustelle und Infos sind oft spärlich, unvollständig und widersprüchlich. Die Anmerkungen zu den völlig willkürlichen Messwerten der AD-Wandler der ESPs sprechen Bände. Sehr spannendes Projekt, leider schlecht planbar.
Aufwandsabschätzung für Projekt:
- Bisher 20h Forschung und Doku
- ESP32 mit e-Paper-Ausgabe 10h
- RFID-Anbindung 5h
- MP3 Modul 5h anbinden
- Akku-Management ?h, Wie gross ist der Strombedarf? Hauptschalter notwendig?
- Software für eigentliches Projekt entwickeln 10h
- Software für Objekte auf dem Tisch 6h
Komponenten wurden bestellt..
ToBe..