Echte gokmachine met Lego Mindstorms
NXT!
Na het experimenteren met tal van rijdende robots met de Sonar-module van Mindstorms NXT werd het weer eens tijd voor iets totaal anders! De 360-graden detectie in de NXT-Motoren biedt tal van nieuwe uitdagingen. Zo kan je er prima een gokmachine mee maken! Nou ja, eenvoudig was het niet….
De speler gooit 10 of 20 Eurocent muntstukken in de gleuf, rechts van het display. Op het display is te zien hoeveel credits er zijn ingeworpen. 100 credits is totaal 1 Euro. Eén keer draaien kost 10 credits… Het spel kan beginnen!
De gele rechthoekige knop is de startknop. De rollen gaan nu draaien als er op de knop wordt gedrukt (tast sensor er onder). Na een paar tellen zullen de rollen achter elkaar tot stilstand komen. Is het prijs? Dan klinkt er feestelijk getoeter, is op het scherm zichtbaar hoeveel Credits er verdiend zijn en rolt de credit waarde aan geld meteen in de geldlade, onder aan de machine! Wat een heerlijk geluid is dat! Veel leuker dan gewoon een paar credits er bij krijgen toch? Geld moet rollen!
Heeft de speler minder geluk maar staan er twee rollen op
hetzelfde fruitstuk? Dan zijn de rode knoppen in te drukken om de rollen naar
keuze vast te houden bij de volgende beurt. Druk weer op de gele startknop en
hoppa!!! Nu wel prijs! Of niet…? :-(
Pak die kans en WIN!!!
Doe je best en win 200 Credits en meer extra prijzen in de volgende beurten! Hier zie je op welke plaatjes je het best kunt gokken.
Heb je pech en ben je inmiddels al de nodige credits kwijt? Niet getreurd want naarmate je langer moet wachten op een prijs, hoe groter de kans wordt dat je er ook werkelijk eentje wint!
Op een gegeven moment staat de kast werkelijk op springen en rollen de prijzen soms wel achter elkaar de kast uit….
En ehhh… we zouden het bijna vergeten… Als je de Lego Fruitmachine weer uit elkaar haalt heb je in ieder geval mooi je geld weer terug!!! Dat kan je van een echte Casino Fruitmachine niet zeggen!
Kijk zelf hoe de Fruitmachine werkt, of
bekijk een grote foto van de Fruitmachine aan de voorzijde.
Het programmeren was deze keer helemaal een ware veldslag. De bugs in de NI LabView software beginnen nu toch wel erg op te breken. Soms moet je na een aanpassing minuten lang wachten tot je verder kan. In andere gevallen krijg je meldingen over “Insane Objects” of data verbindingen die verbroken zijn. De NI LabView software vertelt verder niet waar het probleem zit en je NXT programma is dan helaas wel mooi verwoest… Je kan de ontstane fout alleen maar herstellen door een vorige versie van jouw NXT programma op te halen en de bewerkingen opnieuw - maar op een andere manier - toe te passen… Zorg dus dat je regelmatig een tussenversie op je harde schijf bewaart! Ik overweeg serieus naar een andere programmeertaal over te stappen. NXC bijvoorbeeld.
|
De
NXT achter gesloten deuren. De
fruitmachine heeft een verborgen deur en klep om de twee NXT modulen te
kunnen bedienen bij het opstarten. Als de software is gestart gaan deze zaken
natuurlijk dicht en kan de eerste speler beginnen. De
bovenste NXT (NXT-2) is de spelleider. Deze NXT let op de knoppen die de
speler zelf zal bedienen, de ene gele (start) en drie rode (Hold) knoppen. De
NXT bedient tevens de drie rollen en bepaalt op welke stand elk van de rollen
zal stoppen. Hij controleert of er een prijs gewonnen is, laat dat zien op het
spelers-display en geeft door aan de Cash Unit wat er eventueel uitbetaald
moet worden. De
spelersknoppen (3x rood en 1x geel) zijn lego steentjes die elk op zich
rusten op een vertikaal naar boven gerichte RCX tast-sensor. De nieuwe NXT
tast-sensoren hebben een prettiger “indrukbeweging” maar ik heb er vier van
nodig…. Dan de oude typen maar. Die doen het ook nog prima overigens! Er
is ook een uitvergroting van de
geopende fruitmachine beschikbaar. |
|
Speciaal
NXT display-ontwerp op NXT-2
Het
NXT display is van zichzelf niet zo goed leesbaar op grotere afstand. De
cijfertjes zijn erg klein. Daarom heb ik speciaal voor deze toepassing een
nieuwe routine geschreven (een “Mijn Blok” aangemaakt) die deze grote cijfers
laat zien! De
routine zet het getal in één klap op het display op de plek waar jij dat wilt.
De HOLD-knoppen worden apart op het display geplaatst (zwart=Hold). |
|
Eigen
RIC files maken voor op de NXT-2 spelers-display. Om
te zien of je de Hold-knop nu ingedrukt hebt of niet laat het display de
status van de knoppen zien (en hoor je natuurlijk een bevestigings-piepje).
De afbeeldingen van de knoppen (en ook de grote cijfers) heb ik vooraf
gemaakt en zijn als RIC-files opgeslagen. Deze worden van je PC automatisch
naar je NXT gedownload zodra je deze in je NXT-programma gebruikt en je ze op
de goede plaats in je PC hebt staan. (In de map ..\engine\pictures van je NXT
Programma directory) Op
internet ontdekte ik het programma |
|
Papier
met ExoForce Sonic Phantom [7704] Motoren als “fruitrollen”. Dit
is het resultaat van een speurtocht naar een origineel Lego onderdeel dat
rondom perfect ondersteunt aan het papier en toch groot genoeg is. Een andere
mogelijkheid was natuurlijk om gewoon een groot wiel te pakken. Het gewicht
van een wiel (incl. band) is een groot nadeel. Met deze ExoForce onderdelen
blijft het geheel lekker licht en dat spaart weer flink wat batterijen bij
het starten en stoppen van de rollen! Met
wat speurwerk op het internet vond ik de symbolen voor de fruitmachine. Na
het grafisch editen stonden de symbooltjes mooi onder elkaar. En dan printen.
Maar wel op precies het juiste formaat! De omtrek van de rol is 252mm. De
figuurtjes zitten 252/9=28mm van elkaar (gemeten vanaf hartlijn). De
papierstrook is een centimeter langer i.v.m. een lijmstrook. De grafische
file voor de fruitrollen kan je downloaden. |
|
Geen
één rol is hetzelfde. Ik
heb geen idee hoe het bij echte fruitmachines zit (ik speel nooit met die
dingen) maar mij staat wel bij dat als je bijvoorbeeld drie watermeloenen op
rij hebt, de rij er boven en er onder niet hetzelfde zijn. Om
dat effect te bereiken zonder halsbrekende toeren te moeten uithalen met
tabellen waarin staat op welke plek betreffend symbool op de rol staat, heb ik
een rekenkundig truckje toegepast. Op
rol A staat op elke 40 graden een symbool (360 graden op een volle cirkel,
gedeeld door 9 posities). Stel dat de watermeloen op 0 graden staat. Op rol B
heb ik de stapgrootte van 40 graden verdubbeld, naar 80 graden. Op rol C is
dat 160 graden. Elk symbool heeft een vast nummer. Stel de STER is symbool
nr. 5. Op rol A staat de STER dan op positie 5x40=200 graden. Diezelfde STER
staat bij rol B dus op 5x80=400 graden, ofwel op 360+40 is de 2e
positie dus. Bij rol C staat deze op 5x160=800 graden, ofwel op de 3e
positie (800 graden = 2x360+80 graden). Zo
kan de software dus eenvoudig de getallen 5 5 5 naar de rollen sturen. Rol B
draait vanzelf verder door dan rol A en rol C draait verder door dan rol B.
Zo stoppen ze ook netjes na elkaar zoals een echte fruitmachine dat doet.
Vervolgens kan je de getallen 5 5 5
makkelijk controleren op winnende combinaties (in dit geval prijs, 200
Credits uitbetalen). Het
zal nu duidelijk zijn dat de software niet “kijkt” waar de rol op uit zal
draaien maar vooraf berekent op welk symbool hij moet stoppen! Dit biedt dus
mogelijkheden om de kansen op een prijs naar je eigen hand te zetten (en dat
is hard nodig, want anders win je zelden wat). |
|
Elke
rol zijn eigen motor, niet zonder problemen helaas! Dat de NXT motoren geen echte stappermotoren zijn,
is mij op pijnlijke wijze duidelijk geworden… Het blijkt dat een NXT-Motor
bij elke keer dat hij stopt een meetfout maakt. Stel dat je 10 keer het
commando geeft voor 100 graden draaien. Dan blijkt (bij de snelheid van de
fruitmachinerollen) dat de motor na die tien keer geen 1000 graden maar
gemiddeld 1004,881 graden heeft gedraaid. De software is heeft dat niet in de
gaten, die meet gewoon 1000 graden… De afwijking is niet afhankelijk van het
aantal graden dat de motor draait maar van het aantal start-stop bewegingen.
Dit ondanks de “doorschietverrekening” die in de motorprogrammablokken van de
NXT is ingebouwd. De afwijking van ongeveer een halve graad per
start-stop actie heeft waarschijnlijk te maken met het feit dat de NXT geen
halve graden kan meten. Als de motor bij een commando van 100 graden dus
eigenlijk een halve graad “doorschiet” dan kan de NXT dat vertalen in 100 of
101 graden. Met de draaisnelheid in de fruitmachine (Powerlevel = 10 in de
laatste 100 graden) blijkt dit dus een 0,4881 graden afwijking te geven. Dat
is erg veel… want na 82 keer spelen is de afwijking inmiddels 40 graden! Nu
heeft Rol C in 82x spelen al zo’n 230.000 graden afgelegd, dus wat maakt die
40 graden extra dan uit zou je denken… Wel, zou je vervolgens rol C op een Meloen
willen laten stoppen, dan stopt hij in werkelijkheid op een Peer
(40 graden verderop) zonder dat de NXT dat in de gaten heeft! Deze afwijking heb
ik softwarematig moeten corrigeren. Elke 2e keer -1 graden en elke
100ste keer +1 graden correctie. |
|
Bluetoothverbinding
tussen beide NXTen Jammer, jammer, jammer…. Dat je vanuit het
programma geen Bluetoothverbinding kunt opzetten. Als je de fruitmachine aan
zet zal je dus eerst handmatig een verbinding op moeten zetten tussen NXT-2
en NXT-1. Ik doe het vanuit NXT-2, via kanaal 1 naar NXT-1. NXT-1 kiest dan
automatisch kanaal 0 om terug te praten naar NXT-2. Dit moet je niet wijzigen
want in het NXT programma moet zijn vastgesteld via welk kanaal je gaat
communiceren… Als je een ander kanaal hebt ingesteld kan het programma die
wijziging helaas niet volgen. Pas op dat je op het moment van verbinden geen
andere bleutoothverbindingen actief hebt, met je PC bijvoorbeeld. Dan is de
“line busy“ en lukt het eenvoudigweg niet. Om deze reden heb ik de NXTen zo
gemonteerd dat ik nog een USB kabel in de apparaten kan stoppen zodat ik niet
steeds bluetoothverbindingen aan en uit hoef te zetten bij het testen. |
|
De
Cash Unit veilig achter een onzichtbare gesloten deur… NXT-1 (onder) zit achter een gesloten deur. Die
deur is als het ware onzichtbaar. NXT-1 is de baas over het geld. De Cash Unit. Hij houdt
bij hoeveel geld er is ontvangen en hoeveel er uitgegeven is aan prijzengeld.
Hij herkent 10c en 20c munten en kan op commando van de spelleider (NXT-2)
een gepast bedrag uitbetalen. Hij weet precies hoeveel er in kas is en hij
bepaalt of de fruitmachine op “springen” moet worden gezet. Dat is ook op het
display zichtbaar. De deur blijft dus
dicht als de spelers aantreden, dat begrijp je. |
|
Gedetailleerde
statusinformatie – alleen voor de insiders! Als het programma is gestart zie je de startwaarden
op het display. Links boven in het scherm van NXT-1 zie je hoeveel 10c munten
en 20c munten er in kas zitten. Standaard zijn dat er elk 15. Die zijn er
éénmalig bij de bouw van de fruitmachine dus al in gedaan. Rechts zie je “E=
450” staan. Dat is het bedrag in kas: 15x10c + 15x20c = 1,50 Euro + 3,00 Euro
= 4,50 Euro.
Bovendien worden “leading zero’s” onderdrukt zodat
het getal er netjes uit ziet.
Verder zie je “Plvl = 0” rechtsboven in de
display. Dit is het ProfitLevel. Dit getal wordt steeds naar NXT-2 verzonden.
Hoe hoger dit getal des te groter de kans dat NXT-2, de spelleider, een
winnende combinatie uitrekent! NXT-1 bepaalt wanneer de ProfitLevel indicator
verhoogd of verlaagd moet worden. Wil je meer weten over de werking van het
Profit Level? Kijk dan in de NXT Programmafiles. |
|
De
geld-inname. Rechts van het spelers-display kan het geld worden
ingeworpen. Tussen de pijl en de gele balk is een opening waardoor het geld
naar binnen glijdt. En nu maar hopen dat je het ooit terug ziet! De fruitmachine onderscheidt |
|
Een
compleet uitneembaar geld-afhandelings-systeem. De
achterzijde van de fruitmachine heeft twee grote gele deuren met daarachter alles
dat nodig is voor het innemen, sorteren, tellen, opslaan en uitbetalen van
het geld. De Cash Unit rust op en rail en is makkelijk uitneembaar. Niet
overbodig, want bij het testen moesten de geldcontainers nog wel eens geleegd
of gevuld worden… Er is ook een uitvergroting van de geheel geopende
achterzijde beschikbaar.
Mocht
de speler dat niet genoeg vinden en nog meer geld in de machine gooien dan
geeft NXT-1 een heftige “Error-beep” en werpt direct de onderste munt uit de
stapel waardoor het saldo gelijk blijft. Overstromen kan dus niet. De 10Cent
kolom is wat nauwer gemaakt met 1x10nops platte plaatjes (Tiles) langs twee
wanden. Overigens heb ik later twee kolomwanden van beide kokers met papier
bekleed dat ietsje bol staat. Zo is alle ruimte tussen munt en wand ingenomen
en kan een volgende munt er niet tussen bekneld raken als deze toevallig precies
in verticale positie op die plek terecht komt. |
|
De
munten even “opschudden”… Bij het testen van de geldcontainers bleek dat
ongeveer één in de 15 tot 20 keer de munt niet plat op de onderliggende munt
valt. De ingeworpen munt blijft schuin tegen de wand op staan. Bij het
inwerpen van een volgende munt blijft ook deze dan rechtop staan en
vervolgens gaat het helemaal mis. Alle volgende munten liggen geen van allen
meer netjes plat in de container. Dat geeft problemen bij het uitbetalen… De twee geldcontainers rusten op een scharnierpunt
(onderin de kolom). Motor C van NXT-1 start in de aangegeven draairichting
zodra een munt een lichtsensor passeert. Vier kleine wieltjes drukken de
geldcontainer om beurten naar rechts. Daardoor worden de geldcontainers flink
heen en weer geschud. Het muntje dat op dat moment de koker in valt zal niet
meer recht op blijven staan. Motor C wordt direct weer uitgeschakeld. |
|
Gepast
prijzengeld uitbetalen
In theorie zouden de 10c muntstukken op kunnen
raken als de speler steeds 50 credits wint maar de 10c stukken niet opnieuw
inwerpt en de speer steeds met 20c stukken betaalt. Zou de kast verkeerd staan afgesteld dan is het
zelfs mogelijk dat ook de 20c stukken op zouden raken. In het geval dat NXT-1 niet gepast kan betalen
omdat de 10c stukken op zijn of omdat het geld helemaal op is terwijl je net
een prijs gewonnen hebt, dan geeft NXT-1 het tekort aan prijzengeld als
Credits terug aan de speler! |
|
|
Bouwinstructies : voor MLCad & voor Acrobat Reader
Software
NXT-1 : Programma voor Cash
Unit
Software NXT-2 : Programma voor FruitMachine
LabView Blokken : Programmablokken voor grote cijfers op display
RIC-Files : Grafische files voor NXT Display
Roll Images : File met afbeeldingen voor de fruitrollen
Mini Blocks : Repareer “gebroken blokken” met deze updates
Pas op! Als je de LabView file “FruitMachine26a.rbt” wilt bewerken. In de oktober 2006 release van NI LabView NXT software zitten bugs die het bijzonder lastig maken delen van een groot programma als dit te “verplaatsen”. Ook bij het tussenvoegen van blokken kunnen er vreemde zaken gebeuren. Zo kan je bijvoorbeeld opeens je blok “kwijt” zijn. Het is er wel maar je ziet het nergens meer, erg lastig. Zorg dat je altijd een vorige versie opgeslagen hebt voordat je gaat schuiven met blokken! Als je gebroken blokken hebt, dan heb je mogelijk niet de verbeterde NXT-Mini-Blokken van lego.com gedownload en in je NXT-G omgeving geïnstalleerd!
Opstarten van de
Fruitmachine:
Instellen van de
Fruitmachine (ook bij 1ste keer gebruiken):
Gokken met de Fruitmachine:
Afsluiten van de
Fruitmachine:
SM = Slot
Machine (NXT-2)
CU = Cash Unit (NXT-1)
From |
To |
Box Nr. |
Function |
CU |
SM |
1 |
Value (in credits) of coin that is inserted
by player |
CU |
SM |
2 |
Profit level indicator to increase WIN-CHANCE
in slot machine |
SM |
CU |
1 |
Credits to be paid to player because a price
is won |
SM |
CU |
2 |
Consumed credits by player (when start button
is pressed) |
SM |
CU |
3 |
Shut-down command (Flush profit back to
player) |
|
|
|
|