CASINO - Fruitmachine!

Lego Mindstorms NXT - Slot MachineEchte 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!!!

Slot Machine - Winning combinations

 

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.

 

Enkele details over de bouw en werking:

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 spelers-display laat zien hoeveel credits je hebt en welke HOLD-knoppen je hebt ingedrukt.

 

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  van Andreas Dreier. Werkelijk PERFECT! Klik op het logo als je het wilt bekijken. Het werkt werkelijk heel simpel en je kan er alles mee. Je kan natuurlijk ook gewoon mijn RIC-files downloaden.

 

 

 

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.

 

De grote cijfers zijn opgebouwd uit dezelfde RIC-files als voor de Credits display in NXT-2. Maar dit is een andere “Mijn Blok” dan in NXT-2. Deze DisplayBig4 kan negatieve getallen laten zien en je kan een komma plaatsen (Decimal point).

 

Bovendien worden “leading zero’s” onderdrukt zodat het getal er netjes uit ziet.

 

Het grote getal is de winst in Euro’s die de fruitmachine vanaf de start heeft gemaakt. Nu dus nog op 0,00 Euro. Winst is alles dat de speler in de fruitmachine al vergokt heeft, minus de prijzen die zijn uitbetaald. Als de speler de eerste munten in de fruitmachine werpt noteert NXT-1 dus nog geen winst… eerst moet dat geld vergokt zijn!

 

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 onderscheidten munten. Grotere munten passen er niet in. Althans, niet zonder de boel te forceren. Kleinere munten (1, 2 en 5 Cent) zijn uitstekend geschikt om het apparaat voor de gek te houden. Misschien pas ik dat nog aan al is er inwendig nog maar weinig plaats voor. Als de munt is ingeworpen krijg je er 20 of 10 Credits bij. Achter de schermen wordt er op dat moment druk gewerkt!

 

 

 

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.

 

Het geld dat aan de voorzijde naar binnen wordt gelaten, komt op een glijbaan terecht. 20Cent stukken volgen de blauwe pijl, glijden onder een lichtsensor door en komen in de 20Cent container terecht. 10Cent stukken zijn kleiner en volgen de groene pijl. Dit komt omdat er een gat in de glijbaan zit, precies ter grootte van 10Cent. Zo worden de 10Cent stukken onder een andere lichtsensor doorgelaten en komen in de container voor 10Cent stukken terecht. Telkens als een munt de lichtsensor passeert telt NXT-1 de munt op bij de voorraad en stuurt een Bluetooth Message met het aantal extra Credits naar NXT-2.

 

De munten vallen in een vierkante koker. De maximale capaciteit bedraagt 54x 20Cent en 60x 10Cent. Ofwel 16,80 Euro in totaal, 1680 Credits.

 

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

Dat doen NXT-1 motor A en B voor de 10c en 20c muntstukken. Onderin elke geldcontainer zit een gleuf waar precies één munt tussendoor kan schuiven. Een hefboompje, aangedreven door de motor, schuift naar voren waardoor één munt onderuit de stapel wordt gedrukt. De munt valt vervolgens naar beneden in de grote groene opvangbak, binnen onderin de fruitmachine.

 

De groene bodem van de opvangbak is een omgekeerde bodemplaat. Hij helt flink naar voren zodat de munten vanzelf naar het geldbakje van de fruitmachine glijden. KASSA!

 

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!

 

 

 

 

Downloads (rechter muisknop)

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!

 

GEBRUIKSHANDLEIDING;

Opstarten van de Fruitmachine:

 

Instellen van de Fruitmachine (ook bij 1ste keer gebruiken):

 

Gokken met de Fruitmachine:

 

Afsluiten van de Fruitmachine:

 

 

BLUETOOTH MESSAGING CONVENTION


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)

 

 

 

 

 

 

 

 

Terug naar de TOP