}
abonneren

Je eigen bingospel maken met behulp van Arduino

Bij bingo worden een voor een de getallen 1 tot en met 75 getrokken. Op een bingokaart staan 24 willekeurige getallen uit deze reeks. Wie het eerst een kaart vol heeft, roept ‘Bingo!’ en wint de ronde. Slechts drie spelregels, waarvoor we een imposante code en een printplaat vol componenten optuigen. Je eigen bingospel maken kan met Arduino op deze manier.

Het hart van de schakeling is een Arduino. Dat kan een Uno zijn, maar een nano(kloon) is het goedkoopst en volstaat prima! Voor het weergeven van de getallen gebruiken we twee bovenmaatse 7-segmentdisplays (bekend van die oplichtende cijfers op wekkerradio’s en wasmachines). Omdat die dingen meer stroom vragen dan de Arduino kan leveren, gebruiken we twee zogenoemde darlington-arrays die dat probleem oplossen.

Om de getrokken getallen bij te houden, zodat je kunt controleren of iemand daadwerkelijk bingo heeft, gebruiken we een oled-beeldschermpje. De meest gebruikte schermpjes die je tegenkomt hebben een beelddiagonaal van 0,96 inch (2,44 cm). Dat is wat te klein, zeker als je bedenkt dat het maximaal 75 getallen moet kunnen weergeven. Het kan wel, maar alleen met heel goede ogen of een vergrootglas. Vandaar de keuze voor een exemplaar van 1,3 inch (3,3 cm), dat scheelt een leesbril.

De rest van de schakeling bestaat uit één schakelaar voor de trekkingen en één voor een nieuwe speelronde, een piëzobuzzer, een elco voor (extra) stabilisatie van de voeding en een handvol weerstanden. Sommen we even het boodschappenlijstje op:

Bingo met Arduino: benodigdheden

2x ULN2003A-ic (€ 0,52 p.s.)

1x Elco 1000 uF, 25 V (€ 0,22)

14x Weerstand 39 ohm (€ 0,02 p.s.)

1x Weerstand 1 kilo-ohm (€ 0,02)

1x Passieve piëzo-buzzer 5V – zonder elektronica (€ 0,96)

1x Draad 0,14 mm² 5 meter (€ 0,70)

1x 2-aderige usb-kabel 2 meter (€ 2,–)

1x Netadapter* 12V, 1A (€ 7,-)

1x Experimenteerprintplaatje 100 × 80 mm (€ 5,–)

1x Behuizing voor de knop – bijvoorbeeld Tru Components TC-2099 SW203 (€ 2,–)

1x Behuizing voor de schakeling – bijvoorbeeld transparant vershoudbakje (€ 5,–)

2x Schroefklemblok 12-polig (€ 0,62 p.s.)

2x Wartel met trekontlasting M10 (€ 1,- p.s.)

2x Drukknop – bijvoorbeeld Tru Components GQ 16F-N (€ 5,– p.s.)

1x Ethernetkabel 2 meter (€ 1,75)

1x Arduino Nano compatible (€ 6,-)

1x Oled-scherm 1,3 inch – http://tiny.cc/oledscherm (€ 3,50)

2x 8-inch 7-segmentdisplay – common anode,http://tiny.cc/7-segment (28,– p.s.)

Voor de montage volstaat een plaatje plexiglas (uit lcd-scherm of lamp) of een stukje multiplex. Verder benodigd: soldeerbout en soldeertin, ronde vijl, zijkniptang, een mini-usb-kabel en een pc of laptop.

Totale kosten: tussen ca. € 45,– en € 105,–

*De voedingsspanning is afhankelijk van de gebruikte 7-segmentdisplays, maar ga niet hoger dan 20 volt!

Hoeft het allemaal niet zo groot, dan kun je flink besparen op met name de 7-segmentdisplays. Kleinere displays zijn aanzienlijk goedkoper, exemplaren van 6 inch vind je al vanaf ongeveer 10 euro per stuk. Een andere mogelijkheid is de 7-segmentdisplays zelf te maken met stukken die je van een ledstrip knipt. Dan heb je wel aanzienlijk meer werk om het allemaal toonbaar te maken.

Als alleen de spelleider de getallen hoeft op te lezen, kun je volstaan met schermpjes van 1,3 cm en rond een euro per stuk. De ULN2803A-ic’s zijn dan niet langer nodig, je sluit de schermpjes via de weerstanden aan op de Arduino. Wat kleine aanpassingen zijn dan wel noodzakelijk: vervang de weerstanden van 39 ohm door exemplaren van 390 ohm en kies schermpjes van het type ‘common cathode’. Deze gemeenschappelijke aansluiting komt op GND en de netadapter wordt er een van 5 volt. De totale kosten van de schakeling komen hiermee uit op ongeveer 45 euro, een aanzienlijke besparing!

Toelichting code

We beginnen met het opnemen van twee bibliotheken: U8glib.h voor het tonen van tekens op het oled-schermpje en Wire.h voor de communicatie met het oled-scherm. Meteen daaronder definiëren we het type schermpje. Daarop volgt de declaratie van enkele constanten en variabelen. De pinnen voor de aansturing van de eenheden en tientallen via de 7-segmentdisplays spreken hopelijk voor zich. Pin A4 en A5 hoeven we niet zelf te definiëren: die zijn door de bibliotheek Wire.h al toegewezen aan het beeldscherm. De belangrijkste hier zijn het aantal nummers dat we trekken en de rij bingonummers. De variabele trekking bevat het aantal getallen dat we al getrokken hebben.

In setup maken we eerst het oled-schermpje leeg, voor het geval dat er nog gegevens van een vorige ronde op staan. Daarna stellen we alle pinnen in de juiste modus in. Merk op: we gaan in de for-lus alle pinnen van 4 tot en met A5 af. Je vraagt je wellicht af of A5 wel een geldig getal is waarmee we in de for-lus pinNumber kunnen vergelijken. Dat werkt inderdaad, omdat de analoge pinnen A0 tot en met A5 intern eigenlijk pinnummers 14 tot en met 19 hebben.

Op het einde van setup roepen we de functie willekeurigeRij aan, die bingoRij vult met de getallen 1 tot en met 75 in willekeurige volgorde. De functie loop is vrij kort: als je de drukknop indrukt en het aantal trekkingen nog geen 75 bedraagt, spelen we een toon af op de piëzoluidspreker en trekken we een getal.

De functie trekGetal is waar de magie gebeurt, dus daar blijven we wat langer bij stilstaan. We nemen een getal uit bingoRij op plaats trekking. Die variabele heeft in het begin als waarde 0, waardoor we het eerste getal uit de rij nemen. In het eerste deel van de functie schrijven we het getal naar het oled-scherm, waarbij er telkens elf getallen op elke rij passen. De getrokken getallen worden eerst omgezet naar losse tekens en vervolgens verwerkt door de functie drawScr, die op zijn beurt gebruikmaakt van de bibliotheek U8glib.h.

Het schrijven van het getal naar de 7-segmentdisplays gaat iets anders. We delen het getal door 10 en kennen dit toe aan de variabele tiental. Omdat dit een getal van type int is, gaat het om een gehele deling, dus zonder komma. Daardoor bevat tiental het eerste cijfer van het getrokken getal, namelijk het tiental. Het tweede cijfer verkrijgen we door de rest van getal bij deling door 10 te berekenen, en dat doen we met getal % 10. Het %-teken berekent namelijk die rest. Daarna tellen we 1 bij de variabele trekking op, zodat we bij de volgende trekking het volgende getal nemen. Daarna roepen we de functies Tientallen en Eenheden aan met de variabelen tiental en eenheid om de juiste leds in te schakelen. Voor elk weer te geven cijfer is een aparte functie beschikbaar.

Dan rest alleen nog de functie willekeurigeRij, die de rij bingoRij vult met alle getallen van 1 tot en met aantalNummers in willekeurige volgorde. Het is voor het begrip van de rest van de code niet belangrijk dat je de werking van deze functie begrijpt, maar de ambitieuze lezers raden we zeker aan om zich eens in de functie te verdiepen.

Overigens hebben we geen pinnen meer over om als digitale ingang te gebruiken om een nieuwe reeks van 75 cijfers te trekken. A6 en A7 zijn namelijk alleen als analoge ingang te gebruiken. Daarvoor dient de drukknop tussen pinnen RST en GND. Als we die indrukken, reset de Arduino zichzelf en voert deze opnieuw de functie setup uit, waardoor de functie willekeurigeRij weer een nieuwe reeks willekeurig geschudde getallen creëert. En dat zonder dat we hiervoor code nodig hebben!

Arduino-IDE installeren en prepareren

Op Windows-pc’s, en systemen met macOS X en Linux wordt de Arduino automatisch herkend, nadat je de Arduino-ontwikkelomgeving (IDE) hebt geïnstalleerd. Doe dat dus altijd als eerste!

1. Installeer Arduino IDE.

2. Sluit de Arduino aan met de usb-kabel. Als bij deze stap de module onverhoopt toch niet wordt herkend, trek dan de usb-kabel van module los. Download en installeer zonodig de Arduino-driver en sluit de module weer aan.

3. Geef indien nodig de firewall toestemming.

4. Selecteer het juiste model (Hulpmiddelen / Board / Arduino Nano).

5. Selecteer de juiste (meestal de hoogste) poort (Hulpmiddelen / Poort / Com-poort XX).

6. Als je een Arduino Nano-kloon gebruikt (zoals wij), zul je bij de nieuwe Arduino-IDE ook de processor moeten instellen via Hulpmiddelen / Processor / ATmega328 (Old Bootloader).

Het oled-schermpje dat we gebruiken, is al wat ouder en dat geldt ook voor de bibliotheek U8glib.h. Helaas blijkt deze niet compatibel met de meest recente instellingen van de IDE, zodat we die eerst gedeeltelijk moeten terugzetten naar een oudere versie. Dat is gelukkig zo gedaan. Start de IDE en klik op Hulpmiddelen / Board / Board Beheer. Selecteer bij Arduino AVR Boards by Arduino versie 1.6.21 en klik op Installeren. Als het goed is, staat daarna INSTALLED achter deze versie. Beantwoord de vraag Wil je Arduino AVR Boards bijwerken? met No.

De laatste stappen zijn het installeren van de oled-bibliotheek en het programma. Download het bestand Bingo_display_trekking_groot_display.zip en pak het uit. Klik in de Arduino-IDE op Schets / Bibliotheek gebruiken / .ZIP Bibliotheek toevoegen en blader in de zojuist uitgepakte map Bingo_display_trekking_groot_display naar U8glib for Arduino.zip. Open nu het bestand Bingo_display_trekking_groot_display.ino en klik op Schets / Uploaden. Er valt nu nog weinig te testen, dus nadat het uploaden is voltooid kun je ervan uitgaan dat alles tot nu toe is gelukt. Koppel de Arduino los.

Bouwen van de schakeling

Het in elkaar zetten van het pakket begint met het bestukken van de printplaat. Hoewel er ruimte genoeg is, zul je even moeten passen en meten om alle componenten op een efficiënte manier te plaatsen. Je wilt natuurlijk waar mogelijk gebruikmaken van de al aanwezige koperen baantjes, zodat je zo min mogelijk draadjes hoeft te gebruiken. De darlington-arrays ULN2003A zijn zo ontworpen dat de aansluitingen als het ware rechtdoor lopen, wat erg handig is bij het plaatsen van deze onderdelen. Zet de schroefklemblokken aan de randen van de printplaat, aangezien daarop alles wordt aangesloten. Nadat alle onderdelen zijn geplaatst, kun je ze op de printplaat vastsolderen. Lees eventueel ook onze soldeer-tips.

Nadat je alle soldeerverbindingen hebt gemaakt, verbind je de componenten onderling volgens onderstaand schema met stukjes draad waarvan je de uiteinden enkele millimeters hebt gestript. Let goed op dat ook alle voedingsaansluitingen (in het schema aangeduid met +12V, +5V en het aarde-symbool) overal zijn verbonden.

Testen

De grootste klus zit erop, tijd om te controleren of alle verbindingen werken. Om het risico op beschadiging door verkeerd aangesloten onderdelen zoveel mogelijk te beperken, kan dat het beste in twee etappes. Verbind allereerst met twee stukjes draad de drukknop die in het schema is aangeduid als ‘Trekking’. Sluit vervolgens de Arduino aan op de ingeschakelde pc of usb-voeding met een usb-kabel en wacht een paar seconden. Als je de knop indrukt, moet je een piep horen en het eerste getal (klein weergegeven) zien verschijnen in het oled-scherm. Bij elke keer dat je de knop indrukt, verschijnt een nieuw getal. Werkt dat? Over naar de volgende etappe.

Knip twee gelijke delen van de ethernetkabel af (de lengte hangt af van je ontwerp, zie de paragraaf Afwerking) en verwijder aan elk van de vier uiteinden tien centimeter van de mantel. Strip de uiteinden van alle draadjes enkele millimeters en vertin deze. Soldeer de draadjes van één kant van de halve ethernetkabel aan het eerste 7-segmentdisplay en die van de andere halve ethernetkabel aan het tweede display. Maak gebruik van de kleurcodering om de draadjes uit elkaar te houden. Verbind de displays door de andere uiteinden van de kabels in de schroefklemmen vast te zetten. Sluit dan de tweede drukknop aan, in het schema aangeduid als ‘Nieuwe ronde’.

Verbind tot slot de uitgeschakelde netadapter met de schakeling. Nadat je alles zorgvuldig hebt gecontroleerd, kun je de adapter inschakelen. Brandt er géén ledje op de Arduino? Schakel dan direct de voeding uit en begin met het zoeken naar de oorzaak. Brandt de led wel, druk dan op de knop Trekking. Als het goed is verschijnt het eerste getal zowel op het oled-scherm als op het 7-segmentdisplay.

Afwerking

Als de proefronde met succes is doorlopen, kun je beginnen met de feitelijke bouw van het toestel. Hoe het er uiteindelijk uit gaat zien, hangt onder andere af van persoonlijke smaak en de gekozen 7-segmentdisplays. Ben je handig met hout of heb je een 3D-printer, dan zijn de mogelijkheden daarmee natuurlijk eindeloos. Als voorbeeld gaan we aan de slag met twee stukken plexiglas van een afgedankte plafondlamp. De 7-segmentdisplays komen daartussenin.

De rest van de schakeling wordt in een transparant vershoudbakje aan de achterkant bevestigd. Die behuizing zou je eventueel ook los van de rest kunnen houden, zodat je een aparte controllerunit hebt. Dan zijn er twee extra wartels met trekontlasting nodig voor de ethernetkabels tussen de printplaat en de 7-sementdisplays.

Om het trekken van getallen zo eenvoudig mogelijk te maken, monteren we de desbetreffende knop in een aparte behuizing die je in de hand kunt houden. Daarmee heb je een soort afstandsbediening die de spelleider wat bewegingsruimte geeft. De knop voor een nieuwe ronde komt op een plek waar je hem niet snel per ongeluk kunt indrukken. Wij kiezen voor de behuizing van de printplaat, achter het plexiglas.

Het snoer van de ‘afstandsbediening’ (de usb-kabel) en dat van de netadapter gaan door wartels die eveneens in de behuizing zitten. Een kunststof snijplank dient als stevige basis voor het geheel.

Online zijn volop gratis bingokaarten te vinden die je kunt downloaden en afdrukken. Je kunt kiezen voor het standaardspel, maar leuker is beginnen met een ronde voor de eerste volle horizontale of verticale getallenrij. Vervolgens kun je spelen voor een van tevoren afgesproken vorm zoals een O, een L of een X, om te eindigen met de volle kaart. De grootste uitdaging voor de bingomaster is het bijhouden van de getrokken getallen. Weliswaar houdt onze schakeling die bij, maar de controle van een bingokaart gaat echt een stuk sneller als de getallen zijn afgestreept, omcirkeld of gemarkeerd in de juiste kolom. Download hiervoor het bestand Bingotrekking.pdf en druk het af op A4-formaat. Veel speelplezier!

Geschreven door: Redactie PCM op

Category: Workshop, Algemeen

Tags: arduino, DIY

Laatste Vacatures

Uitgelicht: Java Developer - CGI