Het visueel maken van ‘de tijd’ is een boeiend en uitdagend fenomeen. Zeno Otten noemt zijn ontwerp “niet uniek, maar wel van deze tijd: duurzaam, zuinig en onthaastend.” De klok verandert namelijk elke vijf minuten. Zeno programmeerde hem op de Raspberry Pi en bouwde ook er ook mobiele app bij.
Hier is het papieren lettersjabloon met de led-matrix weergegeven. Eén regel is geheel vrij gelaten, hier zou een extra tekst of informatie kunnen worden weergegeven |
Er bestaan klokken die op de honderdste van een seconde de tijd kunnen weergeven. Het weergeven van uren, minuten en seconden doet dit ontwerp niet. Wel wordt de tijd weergegeven met een resolutie van vijf minuten. Meer dan voldoende om te onthaasten! Verder wordt de tijd in mijn ontwerp niet uitgedrukt in cijfers, maar in tekstregels. Zo worden twaalf tekstregels weergegeven met bijvoorbeeld ‘het is drie uur’, ‘het is vijf over drie’, ‘het is tien over drie’ of ‘het is tien voor half vier’.
De tekstregels worden weergegeven door het belichten van een papieren lettersjabloon, dat ik geprint heb. De achtergrond van het sjabloon is zwart, terwijl de karakters doorschijnend zijn voor een oplichtende led. Achter het lettersjabloon heb ik een matrixdisplay van leds geplaatst. Door de leds aan te sturen en te laten oplichten, wordt de gewenste kloktekst belicht en wordt de tekst zichtbaar in een gewenste kleur en helderheid. Als de tekst in een andere taal moet worden weergeven, kan het ontwerp eenvoudig worden aangepast door een ander lettersjabloon te printen en in de software de aansturing van de leds te wijzigen.
Duurzaam
Het klokontwerp is uitgerust met een aanwezigheidsdetectie. Wanneer er geen behoefte is aan weergeven van de tijd, bijvoorbeeld omdat er niemand in de ruimte is, wordt het matrixdisplay uitgeschakeld om energie te besparen. Indien na tien minuten geen beweging meer in de ruimte wordt gedetecteerd, schakelt het display uit. Om ook op de langere termijn energie te besparen, wordt de helderheid van het display aangepast aan de hoeveelheid omgevingslicht. Hierdoor bespaar je zeker 50 procent energie.
De tijd- en tekstinformatie van de klok heb ik opgeslagen in een database. Dit maakt het mogelijk om - onafhankelijk van de tijd en de plaats - de klokinformatie te raadplegen via een web-appje op elk mobiel apparaat of computerwerkplek.
Hardware
Hieronder vind je alle componenten die ik gebruikt heb bij de bouw van mijn eigenzinnige wandklok.
Hier zie je het complete elektronische schema van de klok. |
Raspberry Pi Zero
De klok wordt aangestuurd door een Raspberry Pi Zero-microcontroller. Dit kleine broertje van de populaire Raspberry Pi heeft dezelfde technische mogelijkheden, maar is 75 procent goedkoper. De prestatie van de Zero is weliswaar lager, maar voor het weergeven van de tijd in tekstvorm op een led-matrixdisplay is hij krachtig en flexibel genoeg. De Zero heeft ook wifi en bluetooth aan boord voor communicatie met de buitenwereld.
De Raspberry Pi Zero draait onder het zeer stabiele besturingssysteem van Linux. Dankzij de complete en gebruikersvriendelijke grafische user interface en de standaard aanwezige programmeertaal Python kon ik de software lokaal op de Zero ontwikkelen en was het programmeren relatief eenvoudig.
De Zero heeft geen intern uurwerk, dus configureerde ik hem in het lokale wifinetwerk. De tijd is dan via het netwerk beschikbaar. Eventueel gekoppeld aan een NTP-server van het netwerk vormt dit een nauwkeurige tijdbron voor de klok. Als je de Zero niet kan opnemen in een wifinetwerk, moet je een andere, externe tijdsbron gebruiken, zoals een DS3231 (I2C Precisie RTC Real Time Clock Module). Deze module kan via het I2C-protocol eenvoudig de tijd met de Zero synchroniseren en deze opslaan.
Omgevingslicht meten
Het energiegebruik van de led-matrix is aanzienlijk. Er is dus energie te besparen als je de leds niet op volle sterkte laat branden, maar de helderheid daarvan afhankelijk maakt van de hoeveelheid omgevingslicht. De leds branden dan met minimaal energiegebruik in het donker.
Het omgevingslicht meten we met een eenvoudige LDR. De lichtafhankelijke weerstand wordt met behulp van R1 omgezet naar een analoge spanning die wordt aangeboden aan een analoog-naar-digitaal-converter op een PCF8591-module-ingang AIN0. Dit bordje is ideaal geschikt om het gemis van een A/D-converter op de Zero op te vangen. Hij bevat een 8-bits A/D-converter met vier analoge ingangen en één analoge uitgang. De communicatie met de Zero vindt plaats via het I2C-protocol via de GPIO 2 (SDA-signaal) en GPIO 3 (SCL-signaal). In de software wordt deze gemeten analoge waarde vervolgens omgezet naar een helderheidswaarde voor de leds.
Status leds aansturen
Via de AOUT-pin van de PCF8591-module bieden we via R2 een analoge spanning aan een led aan. Door de helderheid van de led aan te sturen en bijvoorbeeld de knipperfrequentie te variëren, kan extra statusinformatie van de klok naar de buitenwereld worden verzonden. In dit ontwerp wordt de led elke tien seconden kort aangestuurd met respectievelijk de halve en volledige helderheid om aan te geven dat de klok nog operationeel is en gelijkloopt. Het aansturen van de AOUT-poort gaat eveneens via het I2C-protocol.
Spanningsverschillen
De PCF8591 is aangesloten op 5 volt voedingsspanning. De I2C-lijnen SDA en SCL werken dan ook op 5 volt-logica. De Zero IO-lijnen werken echter op 3.3-volt logica. Om de signalen veilig en compleet op beide spanningen te kunnen handhaven, pas ik een level converter toe: een bi-directionele Logic Level Shifter Converter. De signalen aan de HV-kant (5 volt ) worden verlaagd naar de LV-kant (3.3 volt) van de converter en vice versa.
Aanwezigheidsdetectie
Als er geen personen in de ruimte aanwezig zijn, heeft het geen zin om de tijd weer te geven en energie te gebruiken. Daarom wordt met een PIR infrarood bewegingssensor gedetecteerd of zich iemand in de ruimte bevindt. De sensor is aangesloten op de 5 volt voedingsspanning van de Zero. Het uitgangssignaal gaat rechtstreeks naar de GPIO-poort 17 van de Zero omdat het uitgangssignaal van de PIR maar maximaal 3.6 volt is.
De leds zijn in een tweedimensionaal array
|
Led-matrixbord
Led matrixborden zijn erg populair en in allerlei varianten leverbaar. De belangrijkste eigenschap is dat de kleur en intensiteit van elke led individueel kan worden aangestuurd. Vaak via een ééndraads of I2C-protocol. Een WS2812-chip bestaande uit meer dan 5000 onderdelen, controleert en stuurt elke individuele led op kleur en intensiteit.
De WS2812-leds zijn te verkrijgen per stuk, op een rol, per meter en in verschillende groottes. Afknippen, strippen, solderen en onder elkaar monteren levert dan voor dit project een matrix van 11 regels en 14 kolommen op. Om de leds te monteren in een matrixvorm, heb ik een raster laten geprint met een 3d-printer. In het raster passen de leds van 6x6 millimeter. Het *.stl bestand voor de 3d-printer vind je in het zipbestand van de te downloaden software op pcactive.nl/workshops.
Voeding
De Rasperry Zero gebruikt al snel 400 mA bij 5 volt voedingsspanning (opvolgers van de Zero zijn minder energiezuinig). Het energiegebruik van de leds uit de matrix is afhankelijk van de RGB-waarde en de ingestelde helderheid. Een blauwe kleur met helderheid van 100 procent kan al snel 50 mA gebruiken. Wanneer we alle leds zouden aansturen, betekent dit een gebruik van 154 x 50 mA = 7.7 A bij 5 volt en maximale helderheid! Gelukkig worden niet alle leds tegelijkertijd aangestuurd en zal het nominale verbruik van het display ongeveer één ampère zijn. Samen met het gebruik van de Zero moet de voeding dus ruim 1.4 A kunnen leveren. In het ontwerp is gekozen voor een voeding die zowel de Zero als de led-matrix ruim kan voeden.
Zo ziet de inbouw van de klok eruit |
Totale opbouw klok
De Raspberry Pi Zero en level shifter, het PCF-bord, de PIR-sensor, LDR en status led heb ik bij elkaar gebracht in een eenvoudige houten behuizing. Het getoonde model is een prototype en zou anderen moeten inspireren tot een wat meer ‘design’ uitvoering. Belangrijk detail is dat in dit prototype de grootte van de voeding (max 5 A) voor een belangrijk deel de grootte van de totale behuizing bepaalt.
Behalve voor de houten behuizing heb ik de klok ook geschikt gemaakt als app voor de smartphone |
Ontwerp software
Het complete programma van het prototype uit dit artikel is geschreven in Python 3 en is te downloaden in de online workshop. De source bevat veel commentaar en extra print-statements die als debug-info tijdens het ontwikkelen van de software zijn gebruikt. Het programma kan eenvoudig worden aangepast naar eigen behoefte. Wel is enige kennis van programmeren met Python en het configureren van een Raspberry Pi wenselijk.
Kijk verder op pc.active.nl/workshops