De evolutie van de automobielsector, vanuit het oogpunt van de integratie van elektronische technologie in voertuigen, heeft een zeer hoog niveau bereikt. Vrijwel elk functioneel aspect wordt optimaal beheerd door geavanceerde sensoren, digitale interfaces, microprocessoren en bijbehorende software. In de cockpit van wat nu kan worden beschouwd als ‘een computer op wielen’ is echter nog nog maar al te vaak een onmisbaar instrument te vinden, gemaakt van eenvoudig karton en handmatig bediend. Dit is de parkeerschijf, die nodig is om het begin van het parkeren in betreffend gereglementeerde zones aan te geven. In de loop der decennia is dit accessoire vrijwel onveranderd gebleven – gemaakt van karton, plastic of andere meer edele materialen – en pas sinds kort zijn er digitale modellen op de markt. Het in dit artikel voorgestelde exemplaar maakt gebruik van een modern e-papier display met enkele speciale functies, zoals het instellen van de aankomsttijd met een enkele knop, een bericht in een keuze uit vier talen en indien gewenst de weergave van de huidige tijd en datum, de omgevingstemperatuur en het batterijniveau.

Inschrijven
Schrijf u in voor tag alert e-mails over e-paper!

Het e-papier display

Deze relatief recente uitvinding (1996), de e-ink technologie (elektroforetische inkt), meestal e-Paper genoemd, dankt zijn succes voornamelijk aan het gebruik ervan in e-boek readers of kortweg e-readers, de draagbare apparaten die een elektronisch alternatief bieden voor traditionele boeken, dankzij de papierachtige leeservaring en perfecte zichtbaarheid, zelfs bij veel licht. Het unieke kenmerk dat heeft geleid tot de verspreiding van deze technologie op andere gebieden is echter het vermogen om informatie gedurende lange tijd lange tijd weer te geven, zelfs zonder stroomvoorziening, waardoor apparaten kunnen worden gerealiseerd die in theorie alleen stroom nodig hebben gedurende de tijd die nodig is om het scherm bij te werken (refresh). Typische toepassingen, die steeds populairder worden in de detailhandel, zijn elektronische etiketten en prijskaartjes, vaak moeilijk te onderscheiden van papieren etiketten, die zo nodig kunnen worden bijgewerkt, zelfs op afstand met behulp van draadloze technologieën. Voor een beter begrip hoe elektronische inkt werkt, werpen we een blik op figuur 1.

Figuur 1. Het werkingsprincipe het het e-papier display (1: bovenste laag; 2: transparante elektrodelaag; 3: transparante microcapsules; 4: positief geladen wit pigment; 5: negatief geladen zwart pigment; 6: transparante olie; 7: pixel-elektrodelaag; 8: onderste laag; 9: licht; 10: wit; 11: zwart) (bron: http://en.wikipedia.org/wiki/E_Ink).

In de eenvoudigste zwart/wit-versie worden positief (wit) en negatief (zwart) geladen pigmenten gesuspendeerd in een vloeistof binnenin microbolletjes die pixels voorstellen. Als gevolg van de polarisatie die door een geschikt elektrisch veld wordt veroorzaakt, positioneren de pigmenten, aangetrokken door de tegengestelde lading (elektroforese), zich zodanig dat er zwarte of witte pixels ontstaan die het gewenste beeld vormen. Op dit punt blijven de pigmenten in positie (zelfs als het elektrische veld wordt uitgeschakeld) tot een nieuwe ladingsverdeling wordt gemaakt. De zichtbaarheid (met zeer grote kijkhoek) wordt bereikt door weerkaatsing van het dag-/omgevingslicht; bij gebrek daaraan is een speciale lichtbron nodig. Interessant is echter dat bij direct zonlicht de verversing van het scherm niet correct verloopt. Op basis van dit werkingsprincipe zijn talrijke soorten displays gerealiseerd, zelfs grote en full-color displays, die echter nog steeds bijzonder prijzig zijn.

Het aanbod van betaalbare kleinere, zwart/wit- en grijstint-displays of exemplaren met een beperkt aantal kleuren door gespecialiseerde handelaren is toegenomen. Anderzijds blijft de belangstelling van doe-het-zelvers voor deze componenten binnen de perken, voor zover ik op het internet heb kunnen zien. Naar mijn mening is de reden hiervoor te vinden in verschillende kritische punten, die ook duidelijk werden tijdens de ontwikkeling van dit project, door factoren zoals het buitensporige aantal modellen, versies, groottes, drivers en kleurencombinaties die op de markt zijn, het gebrek aan goed gedocumenteerde en gemakkelijk te implementeren bibliotheken voor de verschillende ontwikkelingsplatforms, en de vaak fragmentarische en onvoldoende informatie en ondersteuning van de fabrikanten zelf. Desondanks was het mogelijk, door een keuze te maken uit de best ondersteunde producten en als een echte Maker stug door te ploeteren, een resultaat te bereiken dat naar mijn mening interessant kan zijn. We gaan daarom door met de analyse van het schema, afgebeeld in figuur 2.
 

Figuur 2. Schema van de schakeling.

Het schema

Een ATmega328P microcontroller werd gekozen om het display aan te sturen, dezelfde als wordt gebruikt op het Arduino UNO-board. De reden is de beschikbaarheid van een veelzijdige bibliotheek die specifiek is voor dit platform. De MCU werkt met een klokfrequentie van 8 MHz, dankzij de externe keramische resonator, en bevindt zich normaal gesproken in een energiebesparende toestand (SLEEP_MODE_PWR_DOWN), om slechts ‘wakker te worden’ als het display moet worden bijgewerkt. De geïntegreerde DS3231M Real-Time Clock (RTC) daarentegen blijft altijd actief en kan, zolang hij onder spanning staat, de datum en tijd handhaven met een nauwkeurigheid van ±5 ppm (±0,432 s/dag). Andere opvallende kenmerken zijn een temperatuursensor, een dubbel alarm en een extreem laag stroomverbruik, in de orde van microampères (µA) in de gebruikte single supply-configuratie (alleen VBAT). Hij communiceert met de microcontroller via een I2C-interface en een speciale bibliotheek. De knop SW2 (blauw in het prototype) ‘wekt’ de MCU, die zo gegevens over de huidige tijd kan ontvangen en deze op het display kan weergeven, samen met het bericht ‘TIME OF ARRIVAL’ en het ‘P’-logo, alvorens terug te keren naar de slaapstand. Een korte pieptoon van de zoemer bevestigt het indrukken van de knop, terwijl de blauwe LED D2 blijft branden voor de duur van de gebeurtenis. SW1 (rood in het prototype) zorgt daarentegen voor een hardware-reset van de ATmega328P, onmiddellijk gevolgd door de weergave van een scherm met het ‘P’-logo, het batterijsymbool en de batterijspanning, de omgevingstemperatuur, de huidige tijd en datum, en de geselecteerde taal voor het bericht, als in het voorbeeld van figuur 3.

Figuur 3. Voorbeeld van de info- en parking-schermen.

Hetzelfde scherm wordt elke 24 uur automatisch weergegeven (op een door de gebruiker gewenst tijdstip, dankzij de RTC-alarmfunctie) om het display compleet te verversen, zoals aanbevolen door de fabrikant, en om de batterijstatus en de goede werking van het hele systeem te controleren. Daarom kunnen we SW2 definiëren als ‘parkeerknop’ en SW1 als ‘infoknop’. Weerstanden R1 en R10 en de condensatoren C1 en C5 helpen eventuele narigheid als gevolg van de knop-contactdender te onderdrukken, terwijl R2, R4, R5 en R6 pull-up weerstanden zijn. C2, C3 en C4 zijn de gebruikelijke ontkoppelcondensatoren voor de voeding van de IC’s. R11 beperkt de stroom die door de reset-aansluiting van het gebruikte display wordt getrokken. JP2 is de connector voor het display, terwijl JP1 het uploaden van firmware mogelijk maakt door een USBasp-programmer aan te sluiten. Vanwege het geringe stroomverbruik wordt de voeding van het prototype verzorgd door een kleine oplaadbare NiMH-accu van 3,6 V met een capaciteit van 40 mAh. De schakeling rond Q1, Q2, R8 en R9 is een constante-stroomregelaar met lage spanningsval, die de laadstroom beperkt tot ongeveer 6 mA, een waarde die dit type batterij zonder enig ongemak kan verdragen, zelfs als de aanbevolen laadduur van 14...16 uur wordt overschreden. Een micro-USB aansluiting maakt de aansluiting van een gewone 5V-lader mogelijk via een zelfherstellende zekering ter beveiliging, terwijl D1 diode een ‘backflow’ vanuit de accu voorkomt. LED D3 geeft aan dat het apparaat aan het opladen is. Op het thema voeding komen we later nog terug.

Praktische uitvoering

Het prototype van de parkeerschijf werd zoals gebruikelijk opgebouwd op een experimenteerprint (figuur 4). Natuurlijk is dit slechts een van de vele mogelijkheden; met SMD-componenten en een ‘echte’ print kunnen de afmetingen kleiner blijven – niet veel groter dan het display zelf. De accu en de zoemer bevinden zich onder de e-papier module, terwijl de achtpolige connector daarvan is samengesteld uit male en female headers/busstrips. De IC’s zijn in voetjes gemonteerd, en voor de DS3231M is een gemakkelijk verkrijgbare SO-8 adapter gebruikt. De keuze van de behuizing is helemaal vrij – zolang deze een transparant venster heeft!

Figuur 4. De onderdelenzijde van het prototype.

Wat de e-papier module betreft, is het, zoals we al opmerkten, best wel moeilijk om niet te verdwalen tussen het zeer grote aanbod van schijnbaar identieke componenten. Het in het prototype gebruikte exemplaar is te zien in figuur 5. Het is een Waveshare-exemplaar met 2,9 inch diagonaal, zwart/wit, resolutie 296 x 128. Dit model heeft een ingebouwde level shifter en ondersteunt gedeeltelijke refresh, een onmisbare functie in dit project. Andere modellen maken wellicht niet dezelfde resultaten mogelijk die ik behaalde, of vereisen eventueel wijzigingen in de firmware of de bedrading. Ook moet rekening worden gehouden met het toegestane temperatuurbereik, in dit geval 0...50 °C.

Figuur 5. De in het project gebruikte e-papier module met zijn ‘op maat gemaakte’ connector (bron: Waveshare).

Figuur 6 toont de soldeerzijde van het prototype, waar ook diode D1 (een SMD-type) en de micro-USB laadconnector zijn gemonteerd.

Figuur 6. De soldeerzijde van het prototype.

Terug naar de voeding. De keuze voor een oplaadbare NiMH-accu, niet de meest recente technologie, is vooral ingegeven door het streven naar meer veiligheid en betrouwbaarheid in de niet altijd optimale gebruiksomstandigheden van een voertuig. In vergelijking met bijvoorbeeld Li-Ion accu’s is het (uiterst gering) gevaar van ontploffing nihil en zijn de prestaties bij lage temperaturen zelfs beter. Normaal opladen duurt weliswaar langer, maar is gemakkelijker te realiseren. Gezien het minimale stroomverbruik en het feit dat voedingsspanning van de schakeling tussen 3,3 V en 5,0 V mag liggen, zou in ieder geval ook een oplossing met drie in serie geschakelde AAA-alkalinebatterijen kunnen worden overwogen, waardoor het laadcircuit overbodig wordt en men toch kan rekenen op een gebruiksduur die waarschijnlijk langer is dan die van de auto zelf! Het is niet eenvoudig om het ‘verbruik’ van de steeds populairder wordende batterijgevoede apparaten die afwisselend actief zijn en in de energiebesparende modus (ook wel slaapstand, power-down of spaarstand genoemd) verkeren, nauwkeurig te berekenen; helaas is het niet voldoende om een multimeter in serie met de voeding te plaatsen en de stroom te meten. De basisberekening die moet worden uitgevoerd om de gemiddelde waarde van de opgenomen stroom en dus een schatting van de levensduur van de batterij te verkrijgen, kan worden weergegeven met de volgende pseudo-formule:

waarbij IAVG de gemiddelde stroom is, ION de stroom in actieve toestand, ISBY de standby-stroom, TON de tijd dat de schakeling actief is en TSBY de stand-by-tijd.

Ik heb het verloop van de stroom in actieve toestand ‘gevangen’ met de oscilloscoop (figuur 7) door de spanningsval over een kleine precisieweerstand in serie met de voeding te detecteren, resulterend in een aanvaardbare benadering van 10 mA gedurende 7,5 s, wat de duur van een weergavecyclus is.

Figuur 7. Verloop van de door de schakeling opgenomen stroom.

De ruststroom, gemeten met een digitale multimeter, bedraagt slechts 3 µA. Ervan uitgaande dat we de parkeerschijf vier keer per dag gebruiken, plus een complete verversingscyclus, krijgen we een totale bedrijfsduur van 7,5 x 5 = 37,5 s en een rusttijd van (24 x 3600) – 37,5 = 86.362,5 s gedurende 24 uur. Dat geeft:

Een batterij van 40 mAh – we laten voor het gemak de afname van de capaciteit door zelfontlading, de afname van de nominale spanning, temperatuurschommelingen en andere factoren buiten beschouwing – zou bij een gemiddelde stroom van 0,008 mA de schakeling idealiter ongeveer 40 / 0,008 = 5.000 uur van stroom kunnen voorzien (dus meer dan 200 dagen, minimaal in elk geval zes maanden)! Realistisch gezien zou zelfs de helft daarvan een goed resultaat zijn. Voor dit soort berekeningen zijn nu ook handige online-apps beschikbaar. Een link naar een app die ik als een van de meest effectieve en practische heb ervaren is .

De firmware en zijn functionaliteit

De broncode voor dit project is geschreven met de Arduino IDE 1.8.19 en vereist, voor een goede compilatie, de installatie van de Arduino-core MiniCore v2.1.3 en enkele specifieke bibliotheken. De gebruikte core staat een efficiënter en veelzijdiger beheer van de ATmega328P microcontroller toe en optimaliseert vooral het geheugengebruik van de gecompileerde code, die 31.264 van de 32.768 bytes programmageheugen (flash) en 1.501 van de 2.048 bytes dynamisch geheugen (SRAM) in beslag neemt, bijna aan de grens van de mogelijkheden van deze MCU.

Er zij op gewezen dat dit project niet uitvoerbaar is, hoezeer je je best ook doet, met een Arduino Uno-board, aangezien een deel van het geheugen van dat bord gebruikt wordt door de bootloader om directe programmering mogelijk te maken, terwijl we voor de ‘kale’ microcontroller een externe USBasp-programmer gebruiken. En over geheugen gesproken: het sleutelwoord PROGMEM komt verschillende keren voor in de listing, verwijzend naar de read-only byte-arrays van de bitmap- en tekst-tekenreeksen. Door deze arrays als PROGMEM te declareren, kunnen functies deze gegevens rechtstreeks uit het flash-geheugen lezen zonder ze eerst naar het veel kleinere SRAM te kopiëren; daar blijft dan ruimte over voor ‘dynamische’ uitvoering van het programma. We gebruiken de bibliotheek DS3231M 1.0.6 voor de communicatie met de geïntegreerde real-time klok, terwijl de bibliotheek GxEPD2 1.3.6, ondersteund door de grafische bibliotheek GFX_Root 2.0.0, is gekozen voor het basisbeheer van het e-papier display.

Deze laatste moet worden overschreven met de bij het project geleverde versie met gewijzigde fonts. De GxEPD2-bibliotheek is een enorm stuk werk, maar helaas ontbreekt gestructureerde documentatie; die is te vinden in de code van de talloze beschikbare voorbeelden die op het eerste gezicht afschrikwekkend complex lijken. Dat komt door de poging om de voorbeelden met zoveel mogelijk verschillende displaymodellen compatibel te maken. Ik heb daarom geprobeerd een samenvatting te maken, waarbij ik alleen de functies en definities heb laten staan die nodig zijn voor het type display dat in het project wordt gebruikt. Deze zijn te vinden in het bestand Waveshare_29_BW_avr.h, terwijl het bestand ParkBitmap128x128.h de byte-array (verkregen door middel van een speciale converter, bevat die de bitmapafbeelding van het parkeerlogo voorstelt (hoofdletter P in een vierkant met afgeronde hoeken, formaat 128 x 128 pixels, zwart/wit). Deze bestanden, die kunnen worden gedownload, bevinden zich in de sketch-map, samen met het hoofdbestand van de broncode Disco_Orario_e-Paper.ino, waarin zich ook links bevinden naar de kern- en bibliotheeksites, uitgebreid commentaar op de code, en andere aanwijzingen die ik nuttig vond. Ik raad lezers die geïnteresseerd zijn in de details van de listing aan om deze te bestuderen door hem te openen met de Arduino IDE (of een andere favoriete editor). In plaats daarvan wil ik hier de werking van het programma op een meer beschrijvende manier illustreren, met behulp van het stroomdiagram van figuur 8.

Figuur 8: Stroomdiagram van de firmware.

Bedenkend dat de schakeling altijd is aangesloten op de batterij, worden bij de eerste keer inschakelen (Power-Up) de initialisatie-bewerkingen en de setup()-functie uitgevoerd, met de activering van een interrupt, en vervolgens wordt loop () uitgevoerd.

Aan het begin van de loop wordt de omgevingstemperatuur gecontroleerd. Als deze niet binnen het acceptabele bereik ligt, wordt een hoor- en zichtbaar alarmsignaal gegeven, waarna de microcontroller in de maximale energiespaarmodus wordt geplaatst (SLEEP_MODE_PWR_DOWN). Anders gaat loop() verder met het initialiseren van het display, het weergeven van het ‘P’-logo, de batterijstatus, de huidige datum en tijd, de temperatuur en de geselecteerde taal voor het aankomstbericht, met wat we info-modus kunnen noemen, waarna het display in ‘slaapstand’ wordt gezet (om energie te sparen), de MCU wordt uitgeschakeld en loop() wordt afgebroken. Vanuit deze toestand kan de microcontroller worden ‘gewekt’ (Wake Up) door een hardware-reset (met de SW1-knop) of door een interrupt, een gebeurtenis die in dit geval wordt gegenereerd door de dagelijkse alarmfunctie van de RTC of door de knop SW2. Als de hervatting is veroorzaakt door de reset of het alarm, begint loop() opnieuw vanaf het begin en eindigt hij altijd in de info-modus. Maar als de microcontroller is gereactiveerd via SW2, start loop() opnieuw, initialiseert het display, toont het logo en als de knop werd ingedrukt en onmiddellijk losgelaten, toont hij het aankomstbericht en de huidige tijd, in wat we de parking-modus zullen noemen. Door SW2 daarentegen ingedrukt te houden, worden de berichten in de vier talen na elkaar weergegeven. Laat de knop los wanneer de gewenste taal verschijnt; die instelling wordt dan opgeslagen in EEPROM tot de volgende wijziging. De huidige tijd verschijnt dan, en de cyclus eindigt altijd in de parking-modus. Een voorbeeld van de verschillende schermen is te zien in figuur 3. We hebben gezien hoe de huidige datum en tijd worden geleverd en onderhouden door de geïntegreerde RTC DS3231M, die nog moet worden geprogrammeerd na de eerste maal inschakelen van de voedingsspanning (of wanneer de voedingsspanning is uitgevallen). Om de firmware en de schakeling te vereenvoudigen en de toevoeging van verdere knoppen te vermijden, worden de datum en de tijd gelijktijdig met het laden van de sketch geprogrammeerd via een speciale regel code die in de setup()-routine is ingevoegd:

DS3231M.adjust(DateTime(2022, 03, 02, 19, 10, 00));

Het te gebruiken formaat is van het type “JJJJJ,MM,DD,hh,mm,ss”. Zodra je de juiste gegevens hebt ingevoerd, kun je de sketch laden, de datum en tijd controleren, de regel uitcommentariëren (voeg de dubbele slash toe aan het begin) en de sketch opnieuw laden (dit is om te voorkomen dat de klok bij elke reset terugkeert naar zijn oorspronkelijke instelling). Om voldoende nauwkeurigheid te bereiken, meet je gewoon de tijd die nodig is om de code te uploaden, zeg 30 seconden, en begin je de eerste upload 30 seconden voor de geprogrammeerde tijd. Met wat oefening kan een synchronisatie op de seconde nauwkeurig worden bereikt... zonder extra kosten! De dagelijkse verversingstijd wordt ook in de code geprogrammeerd, gewoon door de gewenste tijd in te voeren.

Tot slot een opmerking over de methode die wordt gebruikt om de batterijspanning te meten. Die is in verschillende varianten te vinden op het Internet, en ook Microchip zelf noemt hem in een eigen application note. De ‘truc’ is om via de juiste registers de interne referentiespanning (1,1 V) in te stellen als ingangswaarde van de ADC en de te meten spanning (VCC) als referentie. Elke verandering in VCC zal de ADC-uitlezing veranderen, zodat de spanning met voldoende nauwkeurigheid kan worden berekend.

Afsluitende overwegingen

Hoewel de e-papier technologie ontegenzeggelijk interessante kenmerken heeft, die hem bijzonder geschikt maken voor het onderhavige project, heeft hij ook bepaalde beperkingen, waarvan de meest in het oog springende de lage verversingsfrequentie is. Het hier gebruikte model voert de volledige verversingscyclus uit in 2 seconden en de gedeeltelijke verversing in 0,3 seconden. Deze waarden kunnen dus niet concurreren met andere beeldschermtypes bij de visualisatie van snel veranderende beelden, grafieken en tekst. Tenslotte hoop ik, zoals ik pleeg te zeggen, dat je naast de eigenlijke bedoeling van het voorgestelde project een aantal interessante ideeën hebt gekregen om uit te werken en te hergebruiken – met de mentaliteit van een Maker – en dat dit artikel je zin en nieuwsgierigheid heeft gewekt om te experimenteren met e-papier displays!
 


Dit artikel verschijnt in Elektor Mei/Juni 2023. Heeft u technische vragen of opmerkingen over deze e-paper displays of over iets anders dat in dit artikel wordt behandeld? U kunt contact opnemen met de auteur of de Elektor-redactie.