Inleiding
Wat hebben bowlingballen, pooltafels, boten, drones en airhockeytafels met elkaar gemeen? Heel weinig zou je zeggen, maar toch is er een link: het bedrijf achter de eerste airhockeytafels, Brunswick Bowling & Billiards, produceerde al deze producten. Sommige ervan worden er al sinds 1845 gemaakt, andere al lang niet meer. Het bedrijf maakt airhockeytafels sinds 1972, nadat medewerkers in 1969 met het concept waren begonnen.
De airhockeytafel is gebaseerd op een air table, een concept om een ondergrond met zo min mogelijk wrijving te maken, waarop in 1968 patent werd verleend. De ontwerpers van Brunswick wilden in 1969 een spel op basis van zo'n tafel ontwerpen, maar pas een paar jaar later werd daarvoor het concept van een vereenvoudigde versie van ijshockey bedacht.
Tot zover de geschiedenis, want in plaats van praten over airhockey moet je het gewoon spelen. Zoals waarschijnlijk bekend, heb je daar twee mensen voor nodig. Of toch niet? In dit geval niet, want we hebben een manier gevonden om te spelen tegen een mechanische tegenstander, een robot zo je wilt. Zo kun je in je eentje met de puck en paddles aan de gang, en speel je tegen een ai. In deze .Build leggen we uit hoe je zo'n gerobotiseerde tafel bouwt.
Een robot-kitje
Voor wie niet precies weet hoe airhockey werkt, geven we eerst een korte uitleg. Op de eerdergenoemde wrijvingsarme tafel drijft een puck op een luchtkussentje, en met een paddle of schuiver probeer je de puck bij de tegenstander in het doel te schieten. De tafel gaan we niet maken, want zo'n tafel, met een luchtkamer eronder en alle kleine gaatjes waar gelijkmatig lucht door wordt gelaten, zit redelijk complex in elkaar. In plaats daarvan kiezen we voor een compacte, kant-en-klare tafel waarop we de 'robot' gemakkelijk kunnen monteren.
/i/2003268210.jpeg?f=imagenormal)
Die robot bestaat uit een kit met optionele 3d-geprinte onderdelen. En om bij dat thema te blijven, lijken ook de overige onderdelen sprekend op die uit een 3d-printer. Twee stappenmotoren zorgen voor de beweging, waarbij de paddle met behulp van tandriemen en glijlagers over twee assen kan glijden. Een Arduino Leonardo-bordje zorgt voor de aansturing van die steppers, met behulp van twee drivers op een speciaal pcb dat op de Leonardo wordt geprikt.
Het complete pakket met alle benodigde onderdelen is te bestellen via de ontwikkelaars van deze Air Hockey Robot EVO, zoals het project wordt genoemd. Het Britse bedrijf JJRobots heeft de robot ontwikkeld op basis van 3d-printeronderdelen en heeft het ontwerp open source gemaakt. Alle onderdelen, zoals tandwielen, poelies en assen zijn dus ook gewoon los te koop en de plastic onderdelen kun je printen. De benodigde bestanden voor je printer staan op Thingiverse.
/i/2003268218.jpeg?f=imagenormal)
Het brein van de besturing bestaat uit je eigen smartphone. Zo bespaar je op dure hardware die voor de computer vision-component moet zorgen en heb je over het algemeen een redelijke camera tot je beschikking. De software kijkt naar blauwe en groene vlakken om de positie van de puck en paddle te bepalen. De puck krijgt namelijk een groen stuk vilt opgeplakt en de paddle een blauw stuk vilt. De app maakt gebruik van machine vision, detecteert bewegingen van de puck en paddle, en extrapoleert de baan van de puck om zo de paddle naar de juist plek te bewegen. Je kunt de robotsoftware instellen om op drie niveaus te spelen. Bovendien kun je de robot desgewenst handmatig bedienen. Er is ook een optie om de machine vision extern af te handelen.
De onderdelen
Je kunt deze Air Hockey Robot EVO op verschillende manieren bouwen. Aangezien het ontwerp open source is, kun je gewoon zelf alle benodigde onderdelen verzamelen. Heel ingewikkeld is dat niet, want aan hardware heb je niet zo gek veel nodig. Twee stappenmotoren zorgen voor de beweging, samen met een tandriem. Je hebt twee metalen staven nodig met glijlagers en twee dwarsliggers die van aluminium zijn gemaakt.
Wie weleens een 3d-printer heeft gezien of gebouwd, zal de onderdelen wel herkennen; om de kosten te drukken en de verkrijgbaarheid te garanderen, is deze robot grotendeels uit 3d-printeronderdelen gemaakt. De meeste onderdelen kun je dan ook bij shops voor 3d-printers kopen. De aansturing is een halve uitzondering, want naast de Arduino Leonardo, die je overigens kunt vervangen door andere varianten, is een custom pcb nodig. Die maakt JJRobots en biedt plaats aan twee standaard stepper motor controllers, in ons geval de goedkoopste A4988's en een ESP8266-E12. Die laatste verzorgt de communicatie tussen de Arduino en je smartphone. Aangezien het project open source is, kun je ook zelf met een breadboard aan de gang gaan en de stepper controllers via de Arduino-i/o-pinnen zelf bedraden. Het is ook niet ingewikkeld om een E12 van een interface te voorzien. Desgewenst kun je dat pcb ook los kopen: het Devia control board kost 37 euro.
Printlijst
Ter indicatie hebben we de printtijd en benodigd filament op een rij gezet.
6x 623 Pulley: 1 uur / 14 gram
2x Bushing: 38 min / 5 gram
1x Pole support base: 1 uur 17 min / 18 gram
1x Smartphone support top: 40 min / 10 gram
2x Fan support: 36 min / 8 gram
2x Lateral slider: 1 uur 25 min / 21 gram
2x Lateral support: 52 min / 12 gram
1x Motor holder left / right:
2 uur 18 min / 32 gram
2x Motor pulley: 29 min / 7 gram
1x Robot pusher + base:
1 uur 56 min / 31 gram
2x Puck: 32 min / 8 gram
Totaal ~ 12 uur printtijd, 166 gram filament
Printinstellingen: 80mm/s 0,2mm layer height, 20% infill, 2 perimeters, 4 top/bottom layers
De overige onderdelen, los van wat m3-schroeven en moertjes, kun je zelf 3d-printen. JJRobots kan ook alle 3d-geprinte onderdelen leveren. We hebben voor dat laatste gekozen, maar als je zelf een printer hebt, raden we je aan alles zelf te printen. De kwaliteit van de geleverde printjes is goed genoeg, maar niet geweldig. Je kunt het zelf vast beter printen. Bovendien bespaart je dat 45 euro, terwijl de kosten bestaan uit ongeveer 170g filament plus twaalf uur printen met als printinstellingen 80mm/s, 0,2mm layer height en 20 procent infill. Je hebt een aantal poelies en GT2-aandrijfwielen nodig die je kunt printen. Heb je liever meer metalen onderdelen, dan kun je ze uiteraard ook kopen.
Een van de onderdelen die niet tot de opensourceonderdelenlijst behoren, is de airhockeytafel zelf. Het is knap lastig om zelf zo'n tafel te bouwen, aangezien de kleine luchtgaatjes en bijbehorende luchtkanalen nogal nauwe toleranties hebben. Het is zaak dat het oppervlak zo glad en vlak mogelijk is. Daarom hebben we voor een kant-en-klaar model gekozen dat door JJRobots wordt aangeraden. De onderdelen zijn ook op dit formaat tafel afgestemd, maar als je metalen staven van andere grootte kiest, kun je grotere tafels automatiseren. Wij kozen in ieder geval voor de gemakkelijke oplossing, met een kleine tafel met een speeloppervlak van 92 bij 46 centimeter. Deze Buffalo Explorer is in diverse Nederlandse webshops te koop, voor 60 tot 70 euro.
De bouw
Het monteren van de robot, zoals we deze voor het gemak blijven noemen, is niet bijster ingewikkeld. Ervan uitgaande dat je de complete kit hebt gekocht is het een kwestie van de online handleiding volgen om alles in elkaar te zetten. Dat begint met de poelies op een asje met kogellagers vastzetten en de aandrijftandwielen op de steppers zetten.
Wij kwamen twee lastige puntjes tegen, die met grof geweld en puzzelen opgelost kunnen worden. De asjes moeten in de 3d-geprinte onderdelen worden geschoven. Dat is met opzet een nogal krappe bedoening, want je wil niet dat de boel uit elkaar valt. Het grove geweld komt kijken bij de aluminium buizen. Onze 3d-geprinte onderdelen waarin deze moesten worden gestoken, waren extra, extra krap, waardoor we een hamer ter hand moesten nemen om ze erin te kloppen. Dat ging uiteraard niet met echt grof geweld, maar door voorzichtig te tikken waarbij we met houten klosjes het plastic en aluminium beschermden.
Het andere puntje is de tandriem. Die moet je langs alle poelies voeren en dat bleek nogal tegenintuïtief te werken. We gingen er in gedachten namelijk van uit dat de ene stepper voor de beweging langs de x-as zorgt en de andere voor die langs de y-as, net als bij een printer. De route van de tandriem maakte dat onmogelijk. Maar niet getreurd: volg gewoon de instructies. De twee motoren werken namelijk samen om de x- en y-bewegingen te verzorgen, zodat het aan elkaar koppelen van de twee steppers met de tandriem geen obstakel bleek. Nog een puntje van zorg: let op de uitlijning van de assen. Die moeten zo recht en parallel mogelijk lopen, wat zeker met de twee aluminium glijstangen best lastig is. Het is natuurlijk zaak dat de pusher of striker straks met zo min mogelijk weerstand kan worden bewogen, zodat de robot snel kan reageren. Een beetje smering in de vorm van vaseline of machineolie kan dan ook geen kwaad.
Het afstellen
Als alles is gemonteerd, kun je je airhockeyrobot op je tafel schroeven. Als je de instructies dan wel suggestie van JJRobots hebt gevolgd en een van de aangeraden tafels hebt gekocht, is dit een kwestie van een paar schroeven in het faux-hout draaien. Dit is het moment waarop je kunt testen of je geen fouten hebt gemaakt. Als je de Arduino met Brainshield hebt aangesloten, kun je een zelftestprocedure starten. Simpeler gezegd: er zit een testknop op het printplaatje, waarmee je de motoren een testpatroon laat afdraaien.
Een van de laatste actiepunten is de montage van de camerastang waaraan je je telefoon kunt bevestigen. Die moet je met geprinte onderdelen aan de tafelrand vastschroeven, waarna je je telefoon aan de paal vastklemt. Met de bijbehorende app op je telefoon kun je de tafel kalibreren en zelfs besturen. Je communiceert met de robot via een directe wifiverbinding. De ingebouwde ESP12-chip biedt een accesspoint waarmee je verbinding maakt.
Eenmaal verbonden kun je de tafel kalibreren. Dat doe je door hem eerst netjes binnen de kaders van het camerabeeld te positioneren, of liever door de telefoon zodanig te kantelen en draaien dat je de hele tafel in beeld hebt. Voor de fijnafstelling kun je de randen van het computervisiesysteem met je vinger aanpassen, zodat het actieve deel keurig de randjes van het speelveld volgt.
Het computervisiealgoritme heeft als grenzen dus het speelveld. Om de puck en pusher te zien, kijkt het systeem naar kleuren. Daarom moet je vilten schijfjes met dubbelzijdig plakband op de pusher en puck plakken. Voor de pusher gebruik je een stukje blauw vilt en voor de puck gebruik je groen vilt. Waarom vilt, vraag je je misschien af. We kiezen dit materiaal omdat je hiermee geen last van reflecties hebt. Als je plastic zou gebruiken om de pusher en puck te identificeren, zouden ze onzichtbaar kunnen worden als ze licht van een lamp of de zon ongelukkig reflecteren.
Dat licht is overigens wel een puntje, want we wilden aanvankelijk een oude smartphone gebruiken om de software op te draaien. Tijdens testen met een Pixel 2, die toch geen onaardige, vrij lichtsterke camera heeft, bleek dat de camera-app behoorlijk wat licht nodig heeft. Je kunt in de besturingssoftware wel een beetje compenseren, maar goede verlichting op het speelveld is aan te raden.Nog een puntje van aandacht zijn je vingers. Tijdens het spelen kan de robot af en toe vast komen te zitten. De pusher blokkeert dan bijvoorbeeld het zicht van de camera op de puck, en dan gebeurt er niets. Dan moet je dus de puck bevrijden en dat brengt risico's met zich mee. De robot wil de puck immers met de pusher raken en als deze opeens weer in zicht komt, kan de pusher onverwacht weer in beweging komen. Let dus op je vingers, en helemaal op de vingertjes van eventuele kleine tweakers.
Tot slot: modificaties
Je kunt ervoor kiezen een webcam aan de camerastang te hangen en deze met een pc of laptop te verbinden. JJRobots heeft het specifiek over een PS3-camera, maar we hadden ook succes met een gewone Logitech-webcam. Ook in dit geval moet je een directe wifiverbinding met het Brain-shield maken. Via een config-bestandje kun je de gevoeligheid voor kleuren aanpassen, evenals andere parameters zoals puckafmetingen en tafeldimensies.
Je kunt ook met de Arduino-code aan de gang. Alle broncode staat op Github, dus je kunt alle benodigde data downloaden en aanpassen voordat je ze naar de Atmega-chip flasht. Zo kun je bijvoorbeeld spelen met de acceleratie of de snelheden, mits je steppers en controllers dat aankunnen. Standaard worden zoals gezegd Pololu A4988-drivers meegeleverd, maar die kun je natuurlijk eenvoudig upgraden naar andere stepper drivers, bijvoorbeeld de in de 3d-printerwereld populaire TMC-stepperdrivers 2208 of 2209.
Boodschappenlijstje
Air Hockey Robot 126 euro
Meerprijs 3d-prints 43 euro
Air Hockey-tafel 70 euro
Totaal 239 euro
Ten slotte kun je, als je je airhockeytafel dan wel robot zat bent, dezelfde hardware hergebruiken voor andere projecten. Vrijwel alle 'robots' van JJRobots maken namelijk gebruik van dezelfde bouwstenen. De Arduino met Brain-shield zorgt voor de aansturing en communicatie met bijvoorbeeld je smartphone, en de steppers worden voor actuatie gebruikt. Zo heeft JJRobots projecten om een cameraslider, tekenrobot of eierschilderrobot te maken. De benodigde software is steeds vrij verkrijgbaar en de bijkomende onderdelen kun je zelf printen op je 3d-printer of bestellen als je geen printer hebt. Zo kun je dezelfde componenten hergebruiken voor verschillende builds.