Lasergamen maakt het kind in me los. Ik kan niet zeggen dat ik er erg goed in ben, maar leuk is het altijd. Je kunt vast ergens kant-en-klare lasergames kopen, maar waarom zou je als je zelf iets kunt maken? Wat je er voor nodig hebt en hoe je vervolgens je eigen lasergame-geweer bouwt, lees je hier.

Tekst: Cor van Essen

Om zelf een lasergame-systeem te ontwerpen, moest ik bedenken hoe ik überhaupt een geweer iets kan laten sturen dat een ander geweer dan ook weer zou kunnen herkennen. Ik kon me niet voorstellen dat de lasergamegeweren echt lasers zouden gebruiken om te schieten. Een heel simpele en veelgebruikte manier om berichten te sturen, is infrarood (ir), zoals in bijna elke afstandsbediening die je thuis hebt liggen.

De afstandsbediening laat een ir-led heel snel knipperen en de tv of stereo-installatie kan de gestuurde code ontcijferen. Voor zover ik weet is dat ook precies hoe de normale lasergame-systemen werken. Ir-ledjes en -ontvangers kosten maar weinig en zijn eenvoudig aan te sluiten op microprocessors zoals bijvoorbeeld een Arduino Uno.

Het plan is dus om een ir-led en meerdere ontvangers in twee speelgoedgeweren te bouwen, zodat ze berichten naar elkaar kunnen sturen. Ik moet toegeven dat het niet zo spannend klinkt als ik het zo omschrijf, maar wees gerust: daar komt snel verandering in.

De benodigdheden

Naast het zend- en ontvanggedeelte moet er natuurlijk een microprocessor zijn die deze dingen kan aansturen en de signalen kan verwerken. Ik had een paar vereisten die mijn keuze hebben bepaald. Het moest klein zijn, het moest zelf een LiPo-batterij kunnen opladen, genoeg aansluitingen hebben én zijn voorzien van bluetooth. Waarom bluetooth? Nou, ik wilde op een of andere manier ergens kunnen opslaan of weergeven wat er tijdens het spel gebeurt. Via bluetooth kun je het geweer verbinden met je smartphone, die vervolgens de informatie het internet op kan sturen.

Daarnaast moet je natuurlijk tijdens het spel ook direct kunnen merken dat je geraakt bent. Daarvoor heb je feedback nodig, bijvoorbeeld in de vorm van felle lichtjes. En er moet natuurlijk een aan/uitschakelaar zijn. En een trekker. En een laser om te richten (oké, die is niet echt noodzakelijk, maar wel erg tof). Nu begon het me een beetje te duizelen: ik kreeg lichte twijfels of dit nu wel zo’n goed idee was … Maar zoals met elk groot probleem moet je het gewoon in kleine problemen opdelen en aan de slag gaan.

Al die onderdelen moeten om te beginnen natuurlijk ergens in. De simpelste oplossing is een speelgoedgeweer van een paar euro. Het exemplaar dat ik op de kop tikte was van binnen nagenoeg leeg. Er was alleen een trekker die een ratelend mechanisme aanstuurt. Doordat ik wist hoeveel plaats er beschikbaar was, heb ik bijvoorbeeld beter kunnen bepalen wat voor batterij ik zou kopen. Het gaf me ook de gelegenheid om te plannen waar ik alle onderdelen kwijt kon.

Feather M0 Bluefruit-microprocessor

Met de eerder genoemde vereisten kwam ik uiteindelijk uit bij de Feather M0 Bluefruit van Adafruit. Het is een microprocessor die je net als een Arduino kunt programmeren, maar een paar serieuze voordelen heeft ten opzichte van een Arduino Uno.

Hij is allereerst veel kleiner: 51 x 23 x 8 mm. Hij heeft een ingebouwde bluetoothmodule en is in staat automatisch via de usb-aansluiting LiPo-batterijen op te laden. Bovendien heeft de Feather M0 een veel snellere chip en ook meer plaats voor je eigen programma.

lasergame-geweer

© PXimport

Arduino en een Feather zijn niet volledig uitwisselbaar, dus ik zal af en toe, waar ik tegen verschillen aanliep, een opmerking plaatsen. Voor mensen die met een Feather aan de slag gaan wil ik vooral zeggen: lees goed de productpagina’s, want misschien zie je wel iets over het hoofd waardoor je denkt dat de Feather stuk is, terwijl dat eigenlijk niet zo is (ik spreek uit ervaring). Aangezien er veel onderdelen zijn, heb ik een stukje perfboard gebruikt om alle 3volt- en GND-aansluitingen te bundelen.

De Feather kunnen we met de Arduino IDE-software programmeren. Download hier de laatste versie. In de Arduino IDE moet je nog enkele aanpassingen doen. Onder File / Preferences vul je onder Additional Boards Manager URLs het volgende in:

http://adafruit.github.io/arduino-board-index/package_adafruit_index.json

Onder Tools / Board / Boards Managers moet je eerst Arduino SAMD boards installeren en daarna Adafruit SAMD Boards.

Nu zou je onder boards de Feather M0 moeten kunnen selecteren. Als je Windows 7 hebt draaien, moet je nog drivers te installeren die je kunt vinden op de Adafruit-website. Op andere systemen is dat niet nodig.

Op de Feather zit een heel klein ingebouwd ledje. Probeer dus eerst eens het Blink-voorbeeldprogramma uit om te zien of het lukt om iets up te loaden.

Ir-zender en ir-ontvanger

Het zendgedeelte van dit project is een led die infraroodlicht uitzendt. Belangrijk bij het aansluiten van een led is het altijd om de richting juist te hebben. De led heeft een lange en een korte aansluiting, waar de lange aan de positieve spanning (3 volt) wordt aangesloten en de korte aan aarde (GND). Direct aan de lange aansluiting heb ik een 330ohm-weerstand gesoldeerd. Om genoeg spanning voor de led te realiseren, heb ik een transistor gebruikt. De spanning komt dan van de 3volt-uitgang van de Feather die door de transistor loopt. Er is dan nog wel een pin nodig die de transistor schakelt.

De ontvanger heeft drie aansluitingen: 3 volt, GND en eentje om informatie door te geven. Per geweer heb ik twee ontvangers aangesloten. De informatie-aansluitingen heb ik naar pinnen 5 en 6 gestuurd.

Om de complexe signalen te ontcijferen die worden gebruikt bij het verzenden, kunnen we gelukkig gebruikmaken van een uitgebreide bibliotheek (library) genaamd IRLib2. Deze kun je van internet downloaden en in de subdirectory ‘Libraries’ in de Arduino-map plaatsen.

lasergame-geweer

© PXimport

Deze library kent veel voorkomende protocollen die worden gebruikt door grote elektronicabedrijven. Voor dit project heb ik de voorbeeld-sketch ‘record.ino’ uit de IRLib2-library als uitgangspunt genomen. Dit script wacht op een signaal van een afstandsbediening en kan datzelfde signaal ook weer versturen zodra je in de Serial Monitor op een knop van het toetsenbord drukt. Met de Serial Monitor kun je via een usb-kabel berichten ontvangen van en versturen naar de Feather. Je vindt hem rechtsboven in de Arduino-IDE – enorm handig tijdens het debuggen van sketches.

Na te hebben gecontroleerd of dat fatsoenlijk werkt ben ik begonnen met het aan te passen. Het versturen van een bericht moet immers pas gebeuren als we op een fysieke knop drukken. En, ook niet onbelangrijk, als we een bericht ontvangen moeten we dat merken.

NeoPixel Stick aansluiten

Om aan de speler te laten zien dat er iets gebeurt, zoals schieten of geraakt worden, heb ik een strip met rgb-leds aangesloten: een zogenoemde NeoPixel Stick. Deze strip heeft acht led-elementen, waarbij je elke kleur kunt kiezen die je maar wilt. Nu moet ik toegeven dat ik me van tevoren niet voldoende had verdiept in de wisselwerking tussen de NeoPixel en de Feather. Ik heb eerder zonder problemen NeoPixels gebruikt in combinatie met de Arduino Uno.

Het verschil tussen een Arduino Uno en een Feather is dat de eerste werkt met 5 volt en de tweede met 3 volt. Door de lagere spanning ontstaat er dit geval een soort miscommunicatie tussen de NeoPixels en de Feather. De leds lichten nog steeds net zo fel op, maar de kleuren zijn niet de juiste. Om dat te voorkomen kun je een zogenoemde Level Shifter gebruiken. Deze zet de 3 volt om naar de 5 volt die de NeoPixels nodig hebben. In de praktijk volstaat het vaak om de plus-aansluiting van de ledstrip te verbinden met 5 volt, waarbij de min-aansluiting van die voeding wordt verbonden met die van de Feather.

Ik heb uiteindelijk twee animaties geprogrammeerd: eentje die de leds om beurten in- en uitschakelt als er geschoten wordt, de tweede animatie laat de lichtjes een aantal seconden heel snel knipperen wanneer het geweer geraakt is. Hierdoor zijn de twee animaties goed te onderscheiden.

lasergame-geweer

© PXimport

Feedback, richtlaser en schakelaars

Om de speler nog meer feedback mee te geven heb ik een trillende motor aangesloten. Dit motortje heeft aan de draaias een asymmetrisch gevormd stukje metaal zitten waardoor het geheel gaat schudden wanneer de motor draait. In principe begint de motor al te bewegen zodra je er spanning op zet – ook bij 3 volt. Bij een test met een Arduino werkt dit door één kant te verbinden met een uitgangspin en de andere kant aan GND. Door de pin op HIGH te zetten is er in dat geval voldoende spanning en stroom om de kleine motor aanzienlijk te laten trillen.

Op de Feather is dat helaas iets ingewikkelder. De motor vraagt waarschijnlijk te veel stroom voor de Feather, waardoor er iets misgaat. De spanning die ik meet over de pin en GND is maar een fractie van de 3 volt die er zou moeten zijn. Dat heb ik opgelost door de motor met een transistor te schakelen. Parallel aan de motor heb ik nog een condensator geplaatst om snelle spanningsverschillen op te vangen, want doorgaans houden microcontrollers daar niet van.

De laser is een simpele klasse-A-laser die een mooie rode straal geeft als je er spanning op zet, ook bij slechts 3 volt. De rode draad gaat naar de 3volt-uitgang van de Feather en de blauwe draad gaat naar GND. Om de stroom te onderbreken heb ik tussen de rode draad een drukknop geplaatst die terugveert als je hem loslaat.

lasergame-geweer

© PXimport

We hebben nog twee schakelaars nodig: een aan-uitschakelaar en een trekker. De Feather heeft een handige manier om te worden aan- en uitgezet: je kunt een tuimelschakelaar tussen GND en de EN-pin aansluiten. Als er niks op de EN-pin is aangesloten, is de Feather altijd ingeschakeld. Met de schakelaar verbonden gaat de Feather echter pas aan zodra de schakelaar geopend is.

De trekker heb ik achter de originele trekker van het speelgoedgeweer geplaatst. Als je de plastic trekker indrukt, raakt die de schakelaar. Om een schakelaar goed te laten werken als input voor de Feather, sluiten we één kant aan op de 3volt-aansluiting, de andere kant via een 10kilo-ohm-weerstand op GND en aan dezelfde kant een draad naar een pin om de input te lezen.

Bluetooth en Internet of Things

Nu nog even het doel omschrijven. We willen immers weten hoe vaak we het doel hebben getroffen. Het zou ook leuk zijn om te weten hoe vaak je uiteindelijk geschoten hebt. Hierdoor kun je zien of je nu echt de Willem Tell van je eigen sciencefictionavontuur bent. Ik had natuurlijk ook een display kunnen maken, maar het leek me beter om de gegevens online te krijgen. Hierdoor kunnen we meteen de informatie die de geweren versturen en ontvangen met elkaar vergelijken.

Zonder een verzamelpunt kun je alleen maar weten hoe vaak je hebt geschoten en hoe vaak je bent getroffen. Bovendien zouden ook andere mensen live kunnen zien wat er gebeurt, zelfs aan de andere kant van de wereld – best cool, toch?

De Feather is ontwikkeld door Adafruit en dat bedrijf staat erom bekend producten snel bruikbaar te maken. Het heeft een app gebouwd waarmee je bluetoothproducten heel snel kunt verbinden, maar die ook andere nuttige opties biedt. Zo kun je met deze app ook de kleur van de NeoPixel Stick instellen of informatie van de smartphone naar de Feather sturen. Wat wij nodig hebben is de optie MQTT (Message Queue Telemetry Transport, zie kader), die berichten van de Feather online stuurt.

Je hoeft niet zelf een website, een app én bluetoothcommunicatie op te tuigen

Score bijhouden

Nog een traktatie van Adafruit om je op weg te helpen is deze website. Nadat je hier een account hebt aangemaakt kun je data afkomstig van je apparaten naar je persoonlijke webpagina sturen. Dat kan je smartphone zijn, maar ook een microprocessors als de populaire ESP8266-chip. Het kanaal waar we iets naartoe sturen noemen we een stream. Deze streams kun je weergeven op een dashboard. Hier kun je weer grafieken, snelheidsmeters of een plattegrond maken. En dat allemaal zonder code.

Om data te kunnen sturen heb je wel een sleutel nodig, die wordt aangemaakt zodra je een account aanmaakt. Deze code kun je ook terugvinden in je account. Om die lange sleutel niet over te hoeven tikken hebben ze in de BlueFruit-app een qr-codelezer ingebouwd (en in je account uiteraard de passende qr-code). Ten slotte moet je in de app aangeven naar welke website de data precies moet (jouw persoonlijke Adafruit.io-pagina).

De website heeft wat beperkingen op het gebied van data, maar aangezien de meesten onder ons niet zelf een website, een smartphone-app én bluetoothcommunicatie kunnen optuigen, is Adafruit.io een mooi startpunt.

Wat nu nog rest is alles inbouwen in het speelgoedgeweer. Ik heb de meeste onderdelen met een lijmpistool vastgemaakt. Voor de schakelaars en dergelijke heb ik natuurlijk openingen moeten maken.

lasergame-geweer

© PXimport

Tot slot

En nu? Allereerst moet ik het bereik zien te vergroten, want voorlopig is dat maar een paar meter. Mijn doel is bovendien dat je in een uiteindelijke versie niet alleen ziet hoe vaak je geschoten hebt en hoe vaak je geraakt bent, maar ook dat je op een kaart precies kunt zien waar iedereen tijdens het spel was. En dat is best mogelijk.

In deze opstelling heb je sowieso een smartphone met gps bij je. Het enige dat ontbreekt is een app die de gps-locatie met de andere informatie meestuurt. En als je de locatie van al je teamgenoten eenmaal op een kaart hebt, kun je ook een commandocentrum instellen waar iemand tips geeft over waar je het best heen kunt gaan.

En waarom stoppen bij locatie? Waarom geen hoofdcamera die livebeelden doorstuurt? Een Raspberry Pi Zero W met wifi en bluetooth ingebouwd is zo geregeld. En daar heb je zelfs minicamera’s met infraroodlicht voor beschikbaar, om in het donker te kunnen filmen.

Nog meer? Wat te denken van een hartslagmeter of een temperatuursensor om bij te houden hoe spannend je het vindt. En misschien nog andere tools? Iets om de locatie van de tegenstanders te raden op basis van gedragsroutines? Infraroodlandmijnen? Het enige wat mij op dit moment tegenhoudt, is tijd. Ik hoop dat er ergens een fabrikant zit mee te lezen. Hoewel … Nee, eigenlijk niet. Ik hoop dat er gewone mensen zijn die dit lezen en er meteen mee aan de slag gaan!

Deel dit artikel
Voeg toe aan favorieten