In mijn vorige post had ik een digitale variant gemaakt van de bierklok, waarna ik met met smart wachtte op post uit China. 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 simpele stappenmotor, althans als je beide wijzers onafhankelijk van elkaar wilt besturen. Om dit te doen heb ik een BKA30D-R5 (een clone van de VID28-05) aangeschaft. 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 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 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 bepaalde posities 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. In ons geval heeft onze MCU 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.
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 aanpassen van de supermarkt gaat ook via een commando. Om het apparaat eenvoudig aan te kunnen sturen gebruik ik MQTT Dash.
Voor de communicatie gebruik ik MQTT, waarbij er op bepaalde "topics" (kanalen) geluisterd kan worden of er commando's binnenkomen. Als input moet er ofwel een relatieve (voor calibratie) of absolute wijzerpositie worden gegeven, ofwel een lijst met biermerken (bijv. ["hertog jan", "grolsch"]
). De lijst biermerken wordt automatisch verstuurd via MQTT door een script op mijn server. Het is ook mogelijk om de kratjes.net API direct aan te roepen.
Voor het aansturen van de motor gebruik ik de AccelStepper library. De volledige code is hier te vinden.
Resultaat
Onderstaand filmpje gaat over een project dat hier erg op lijkt en is wellicht ook interessant.