Al geruime tijd (als in: al enige jaren) staat er op de afdeling zo'n sapmachine die je ook in supermarkten tegenkomt. De machine wordt van bovenaf geladen met sinaasappels en als je op een knop drukt, of er geld in werpt of wat dan ook, dan worden deze sinaasappels automatisch geperst zodat je fijn versgeperst sap krijgt.
Het idee was ooit om deze machine in te zetten op open dagen en dergelijke; op de één of andere manier zou hij gebruikt kunnen worden om mensen te motiveren naar een bepaalde locatie te komen om daar meer informatie over de opleiding te weten te komen. Natuurlijk moest hier een stuk (digitale) technologie aan te pas komen, zodat de link met informatica expliciet gemaakt kon worden.
De collega die dit ooit had bedacht had het wel voor elkaar dat je via whatsapp of twitter een glaasje sap kreeg, maar dat sloot niet echt aan bij de doelgroep: leerlingen in de bovenbouw van de middelbare school gebruiken in de regel geen twitter, en om een whatsapp te sturen moet je je telefoonnummer afgeven, wat ook niet echt lekker is, qua AVG.
Dus stond dat ding al geruime tijd werkloos en voor de voeten in de kamer van die collega. Maar het bloed kruipt waar het niet gaan kan, dus toen onze communicatiemedewerker ons tijd gaf om iets origineels te bedenken voor het techniekfestival op 2 december, bedachten we dat het leuk zou zijn om iets met die sapmachine te doen.
Hoewel we vrij waren in de uitwerking van de opdracht, waren er wel wat eisen waar het systeem aan moest voldoen. Het moest eenvoudig zijn (geen dingen downloaden, geen gegevens achterlaten, geen gebruik van derde partijen), het moest direct duidelijk zijn wat de bedoeling was, het moest mensen motiveren om naar een specifieke locatie te komen, en er moest een duidelijke link zijn met informatietechnologie.
Na wat brainstormsessies met de collega's (en dikwijls bier) kwamen we op de volgende flow. Een bezoeker van een open dag kon ergens met de telefoon een QR-code scannen die hem naar een online vragenlijstje bracht. Wanneer hij deze vragenlijst had ingevuld, en voldoende antwoorden correct had beantwoord, zou hij op zijn telefoon een QR-code terug krijgen, en een plattegrond van waar hij heen zou moeten gaan. Op deze plek zou hij de sapmachine aantreffen, en een camera die zijn QR-code zou scannen. Als dat allemaal gelukt was, zou de machine een glaasje sap voor hem maken.
Onderstaand sequentiediagram geeft deze volledige flow grafisch weer.
De eerste, meest eenvoudige stap van dit proces, was natuurlijk het maken van een QR-code op de telefoon. Om de vragenlijst te simuleren maakten we gewoon een eenvoudige knop: het maken van die vragenlijst, het bijhouden van het aantal goede antwoorden en dat uiteindelijk verwerken in de QR-code is redelijk triviaal, dus om het testen en de flow te simuleren volstond eenvoudig een mobiele site met maar één enkele knop.
Gelukkig vonden we snel een bibliotheek waarmee je in JavaScript een QR-code kunt maken, dus deze stap in de flow was snel gemaakt. Het was nog wel het idee om aan de backend af te vangen dat de site alleen door mobiele telefoons benaderd kon worden (gebruik maken van de User Agent header), maar dat was een nice to have. Voorlopig werkte het met media queries en dat deed het ook prima.
De volgende uitdaging was natuurlijk het scannen van een QR-code. Ik had wel wat dingetje gelezen die het mogelijk maakte om met een speciale camera dat met een Arduino te doen, maar die camera moest je bestellen en dat duurde me te lang. Dus ben ik maar naar onze vrienden van Okaphone gegaan om eens te kijken wat zij hierover te melden hadden. Als altijd konden ze me daar goed helpen en stelden ze voor om gebruik te maken van een ESP32-CAM-MB. Dit bordje heeft object-detectie on board (!), dus het vermoeden was dat hij ook wel een QR-code kon identificeren. Een korte zoektocht in de winkel leerde dat er inderdaad een bibliotheek voor is, en aangezien dat ding maar iets meer dan een tientje kostte was dit een prima oplossing.
Eenmaal thuis wilde ik natuurlijk gelijk aan de gang met dat ding. Het was inmiddels vrijdagavond en ik zou dan mooi in het weekend hier één en ander aan kunnen klussen. Helaas kreeg ik de ESP met geen mogelijkheid aan de praat. Vanzelfsprekend had ik eerst de juiste extensies voor Arduino geïnstalleerd, maar dat mocht niet baten: ik kreeg de ESP niet te zien in mijn ontwikkelomgeving.
Elders las ik dat er geen usb driver op de ESP32 is meegebakken en dat je gebruik moest maken van een FTDI om de connectie met je computer aan de praat te krijgen. Ik dacht dat dat misschien aan de hand was, dus ik baalde een beetje omdat ik die hardware natuurlijk niet in huis had en dus niet verder kon. Maar een tweede bezoekje aan Okaphone de volgende dag leerde me dat het toch echt zonder zou moeten kunnen – en de LED op het bordje brandde ook, dus er moest iets anders aan de hand zijn.
Uiteindelijk bleek de USB-kabel die ik gebruikte niet goed te zijn: die gaf alleen de 5V, maar er zaten geen data-kabels is. Echt stom, want daar had ik dus een paar uur aan gespendeerd...
Het techniekfestival was op vrijdag en toevallig had ik de hele donderdag daarvoor vrij, dus ik kon mooi de hele dag in de makerspace doorbrengen om de boel in elkaar te zetten. Fijne deadline wel, te meer omdat ik op vrijdag de hele dag op Minerva zit dus geen ondersteuning kon bieden mocht dat nodig zijn.
Nadat ik had geïdentificeerd welke pinnen van de ESP niet door de camera gebruikt worden kon ik daar wat draadjes aan solderen. Die pinnen zouden uiteindelijk gebruikt worden om de sapmachine aan te sturen. In eerste instantie wilde ik LEDjes laten branden wanneer een qr-code gescand werd en andere LEDs wanneer de qr-code herkend werd.
De code hiervoor was vrij simpel. Ik had een goeie library met demos gevonden die ik gebruikte om de qr-tag te lezen; het enige wat ik hoefde te doen was die code aanpassen zodat er de juiste LEDs aangingen wanneer er werd gescand en herkend. Met een beetje tweaken werkte dat vrij snel en soepel.
Ik wilde de bezoeker visuele feedback geven op de drie stadia van de scanner: IDLE, SCANNING, en SCANNED. Ik had drie driekleurenleds bij me, dus het leek me aardig om deze drie op honderdtwintig graden rondom de lens van de ESP te monteren. Daarvoor moest ik echter wel even zeker weten dat de stroom van dat bordje die drie LEDs aankon. Kleine moeite natuurlijk: even op een breadboard monteren en de hele boel aanzetten.
We hadden de dag ervoor al de vorm van een sinaasappel gelasercut, maar dat was nog gewoon triplex dus die moest nog een mooi kleurtje krijgen. De bladeren groen en de vrucht (je raad het niet) oranje. Daarna de gaten voor de lens en de drie driekleurenleds boren. Ik heb nog even nagedacht hoe je met alleen een passer en een liniaal hoeken van honderdtwintig graden kon uitmeten, maar gelukkig vond ik al snel een geodriehoek.
Eén van de dingen die lastig bleek te zijn, was dat de camera maar erg weinig ruimte had om aan het hout van de sinaasappel vastgezet te worden. Het monteren van de LEDs was vrij eenvoudig, want die klem je gewoon in een gaatje van vijf millimeter, maar die camera kon je niet vastklemmen en ik wilde het niet vastlijmen met hot glue bijvoorbeeld (het idee was dat het ding relatief eenvoudig weer uit elkaar te halen zou zijn).
Bij de makerspace zelf hadden geen ducttape (wat is dat nou voor makerspace...), maar gelukkig bij de congiërges wel.
Feitelijk de laatste uitdaging vóór het finetunen was het daadwerkelijk aansturen van de sapmachine. Om te vookomen dat de schakeling van de machine in direct contact stond met de ESP en de camera was hier al eerder (toen de boel nog werkte met een raspberry( een relais tussengezet. Het kostte enige moeite om de juiste bedrading hiervan terug te halen, maar met behulp van een voltmeter, wat kroonsteentjes en breadboards kregen we uiteindelijk een puls op de machine zelf.
Na wat testjes draaien leek de setup wel redelijk compleet. Het enige wat nog problematisch was, was dat de actie van de sapmachine op het verkeerde moment ingezet werd. Hoewel ik meende dat dat met software wel af te vangen zou zijn, was het toch het handigste om de bedrading opnieuw te solderen (maar dit keer goedom). Nu correspondeerde de acties van de LEDs met de status van de scanner en de sapmachine.
Het was alleen wat jammer dat één van de pinnen waarvan ik dacht dat die nog vrij waren blijkbaar toch door de camera werden gebruikt, waardoor ik feitelijk maar twee pennetjes over had. Dus in plaats van verschillende kleurtjes moest ik de LEDs maar laten knipperen op het moment dat er gescand werd. Soit.
Een ander punt waar we niet echt over hadden nagedacht was de montage van de sinaasappel-plus-camera. Gelukkig had één van de collega's nog een soort lessenaar op de kamer waar we deze constructie een beetje schuin op konden neerzetten. Verder hadden we niet echt rekening gehouden met het wegwerken van de techniek achter de sinaasappel, maar dat was min of meer bewust – het was immers een techniekfestival...
Al met al was het al half vijf en ik vond het wel mooi geweest. En ik moest om kwart over vijf trainen, dus uiteindelijk kwam alles goed uit qua planning.
Het was alleen jammer dat het scannen het uiteindelijk niet deed. Waarschijnlijk toch omdat ik op het laatste moment besloten had om de QR-code in het hanze-oranje te kleuren – waarschijnlijk leverde dat te weinig contrast op. En fin, in ieder geval hebben we nu een mooie basis voor de volgende open dag of andere gelegenheid.