Bierklok

Mijn vorige post ging over een digitale variant van de bierklok. Om die echt te kunnen bouwen moest ik namelijk nog wachten op post uit het verre Oosten. De bierklok is in staat om realtime de biermerken die in de aanbieding zijn bij een gegeven supermarkt aan te wijzen. Hieronder volgt een korte beschrijving van hoe ik de fysieke klok gemaakt heb.
Hardware
- ROTBLÖTA klok
- ESP8266 (NodeMCU V3)
- BKA30D-R5 (360 graden)
- Micro USB-kabel
- Perfboard
- Duct tape
- Lijmpistool
Om een klok aan te sturen heb je niet genoeg aan een enkelvoudige stappenmotor, althans als je beide wijzers onafhankelijk van elkaar wilt besturen. Om dit te doen gebruik ik een BKA30D-R5 (een clone van de VID28-05). Het is hierbij belangrijk om de versie te kiezen die 360 graden kan draaien. De ‘stop’ (een klein stukje plastic) die in de reguliere variant zit, kun je wel zelf met een mesje weghalen maar dan bestaat het risico dat een tandwiel beschadigt en het radarwerk niet meer vlot loopt.
Het circuit is erg eenvoudig: elke motor heeft vier pins die aangesloten moeten worden op de microcontroller. Voor de stroomtoevoer heb ik gewoon een USB-kabel gebruikt. De motor verbruikt zo weinig stroom dat die direct aangestuurd kan worden door de microcontroller.
De wijzers van de ROTBLÖTA (inderdaad: van de IKEA 😉) heb ik vastgelijmd aan de assen van de motor. Ik heb ze zo hoog mogelijk op de as geplaatst. Op deze manier was er genoeg ruimte tussen de klok en de kleine wijzer, en tussen de wijzers zelf.
Het resultaat ziet er zo uit:


Software
De klok moet de wijzers op de posities van de dopjes zetten. Daarvoor is het noodzakelijk dat het apparaat ook weet wat de huidige posities van de wijzers zijn. Daar zou je eventueel een calibratiesysteem gebaseerd op licht- of magneetsensors voor kunnen gebruiken. Maar onze MCU heeft een geheugen (EEPROM) waarin de posities van de wijzers kunnen worden opgeslagen. Iedere keer als de klok een commando krijgt, wordt de doelpositie opgeslagen. Bij het opnieuw opstarten van het apparaat worden die posities weer uitgelezen.
De klok gebruikt dezelfde backend als kratjes.net en krijgt iedere dag de dan geldende bonussen aangleverd. Voor de communicatie gebruik ik MQTT, waarbij er op bepaalde topics (kanalen) geluisterd wordt of er commando’s binnenkomen. Als input kun je een relatieve (zeg: 10 stapjes terug) of absolute wijzerpositie (positie ‘Grolsch’) geven. Als de stroom uit zou vallen midden in een beweging of de wijzers blijven haken dan loopt de klok asynchroon. Hierom heb ik een calibreerfunctie ingebouwd waarmee je de wijzers handmatig naar een bekende positie kan sturen.
Het veranderen van de supermarkt waarvan de aanbiedingen worden weergegeven, gaat ook via een commando. Om het apparaat eenvoudig via mijn telefoon aan te kunnen sturen gebruik ik MQTT Dash. Voor het aansturen van de motor gebruik ik de AccelStepper library.
Resultaat
Onderstaand filmpje gaat over een project dat hier erg op lijkt en is misschien ook interessant.