Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Arduino gestuurde flipperkast

Componenten en benodigdheden

Arduino Mega 2560
× 1
Adafruit 2-pins LCD-scherm
× 1
24V-voeding
× 1
Adafruit Krachtsensor
× 1
Pop-bumperconstructie
× 1
Pop-bumperschakelaar
× 1
Doelschakelaar
× 1
Rollover-schakelaar
× 1
Flipper-assemblage
× 1
LED-lampen
× 1

Over dit project

Arduino gestuurde flipperkast

Het bouwen van een door Arduino bestuurde flipperkast vereiste een combinatie van houtbewerking, mechanische, elektronische en programmeervaardigheden. Het kostte ongeveer zes maanden parttime inspanning om te creëren en was het meest gecompliceerde dat ik ooit heb gebouwd. Dit komt vooral omdat ik niet veel informatie kon vinden over het bouwen van een flipperkast.

Dit document geeft een beschrijving van hoe deze machine is gebouwd. Ik zal proberen voldoende referenties te geven, zodat als je besluit om je eigen te bouwen, je het gemakkelijker zou moeten hebben dan ik. Tegelijkertijd kan ik niet genoeg de noodzaak benadrukken om alles te testen. Ik heb een extra stuk triplex gebruikt om een ​​prototype van elk onderdeel te maken voordat ik het in de eigenlijke machine installeerde. Dit zal je op den duur veel verdriet besparen.

Zoals je op de afbeelding kunt zien, heeft de machine een houten kast en worden in de handel verkrijgbare vervangende onderdelen voor flipperkasten gebruikt. De machine wordt bestuurd door een enkel Arduino Mega 2560-bord. Als je de machine in actie wilt zien, ga dan naar deze link, of kijk hier:

De zaak

De behuizing is gemaakt van multiplex met een eikenhouten oppervlak dat in de thuiswinkel is gekocht. Alle afmetingen in dit document zijn in inches. De voor- en achterpanelen zijn 20H x 23W. De zijpanelen zijn 20H x 47L. De stukken werden gesneden met verstekranden en verbonden met behulp van een biscuitschrijnwerker en houtlijm. Zakschroeven en lijm zouden ook hebben gewerkt. De machine zal veel misbruik vergen, dus het moet sterk zijn. Voordat ik het samenvoegde, heb ik ook een ¾ "dado 1 inch vanaf de onderkant gesneden. Lijm de plank niet. Het moet drijven om uitzetting en krimp mogelijk te maken. De plank werd gebruikt voor de hoofdvoeding en de voeding voor de decoratieve LED-lamp die onder het deksel was gemonteerd. Het speeloppervlak is 22w x 42L. Merk op dat het aanzienlijk korter is dan de kast. Dit geeft me ongeveer 3 inch aan de voorkant om draden door te geven naar de flipper-knoppen en naar de LED-lampjes. Het geeft ook ruimte voor het kogelplunjermechanisme. Het speeloppervlak rust eenvoudig op enkele kleine houten blokken die ongeveer 10 cm onder de bovenkant van de behuizing aan de zijkanten zijn geschroefd. Om bij het lef van de machine te komen, open ik gewoon het deksel, verwijder het speelveld en draai het om.

De behuizing en het speeloppervlak zijn allemaal haaks gebouwd. De toonhoogte van het spel wordt gevormd door de benen, zoals te zien is in dit zijaanzicht. Flipperkasten kunnen hoeken hebben van slechts 1 tot maximaal 7 graden. Hoe hoger de hoek, hoe sneller het spel. Omdat ik niet zeker wist welke hoek ik nodig zou hebben, heb ik de poten zo ontworpen dat ze verstelbaar zijn. De poten zelf zijn van hout en verkrijgbaar bij de meeste woonwinkels. Vervolgens boorde ik een gat van 30 cm diep in het uiteinde van elke poot met behulp van een boorbit. Aan de onderkant heb ik een tweecomponenten epoxy gebruikt om een ​​3/8 inch T-moer in te voegen. Pas op dat er geen lijm op de draden komt of waar het het door u geboorde gat blokkeert. Vervolgens heb ik een draadstang van 12 inch 3/8 inch in het been gestoken en een moer op de stang geschroefd. Ik heb toen een stelvoet aan het einde bevestigd. De stelvoet en T-moeren heb ik via de onderstaande links gekregen.

http://www.mscdirect.com/product/details/40610032

http://www.mscdirect.com/product/details/67300962

Montageplaten voor tafelpoten werden eenvoudig op de onderste plank geschroefd en de poten werden erin geschroefd. Om de hoogte van de machine aan te passen, draait u eenvoudig de moer los en schroeft u vervolgens de draadstang in of uit. Draai vervolgens de moer weer vast om ervoor te zorgen dat de tafel stevig vastzit.

Op de afbeelding ziet u een elektrisch snoer en een USB-kabel. Het elektrische snoer komt van een stekkerdoos die ik aan de achterkant van de machine heb bevestigd. Alles wordt daar aangesloten, zodat één schakelaar alles aan of uit zet. De USB-kabel is er, zodat ik het Arduino-bord kan herprogrammeren zonder het speelveld te hoeven verwijderen.

Het deksel

Het dekselframe is gemaakt van eikenhout en heeft dezelfde buitenmaat als de kast. De bovenkant en zijkanten zijn 1,5 inch breed, terwijl de onderkant 5 inch breed is. De extra breedte aan de onderkant wordt gebruikt om de opening tussen het speelveld en de kast te verbergen. Een dado werd langs de binnenrand van de framestukken geleid om de plexiglasafdekking vast te houden. Ik heb plexiglas gebruikt in plaats van glas omdat het lichter, veiliger en gemakkelijker te snijden is. Het deksel werd in elkaar gezet met behulp van zakschroeven. Ik deed dit zodat ik het uit elkaar kon halen voor het geval het plexiglas ooit vervangen moest worden. Ik heb ook een strook kleurrijke LED-lampjes onder het deksel gemonteerd voor decoratieve doeleinden. Ten slotte heb ik het deksel op de koffer gemonteerd met behulp van een pianoscharnier dat ik zowel in het deksel als in de koffer heb verzonken.

Arduino

De Arduino Mega 2560 doet in principe vier dingen. Het bepaalt wanneer schakelaars worden geactiveerd, het schakelt de lichten dienovereenkomstig aan of uit, het houdt de score bij en het geeft de score en het balnummer weer op een klein LCD-scherm. De meeste bedrading is vrij eenvoudig. De doelen zijn bijvoorbeeld verbonden met een van de digitale ingangen van de Arduino en met de grond. De invoer wordt geconfigureerd met behulp van een instructie zoals hieronder weergegeven.

pinMode(Pin_Number,INPUT_PULLUP)

Wanneer de code detecteert dat de invoer van hoog naar laag is veranderd, weet hij dat het doelwit is geraakt en schakelt vervolgens de juiste LED-flipperverlichting in.

De enige complicatie hierin is van de Pop Bumpers. De rollover-schakelaars en doelen die in dit spel worden gebruikt, krijgen allemaal hun kracht van de Arduino. De Pop Bumpers krijgen die van hen van een aparte 25 volt voeding omdat ze meer sap nodig hebben dan de Arduino kan leveren. De Pop Bumpers hebben wel een schakelaar om ze te activeren, maar door de hoge spanning kan ik deze niet direct aflezen. Daarom stuur ik eerst de output van de Pop Bumper-schakelaar naar een spanningsdeler. Een voorbeeld van een spanningsdeler vindt u in de onderstaande link.

Spanningsdeler

Eenmaal door de spanningsdeler wordt de spanning teruggebracht tot 5 volt en kan de Arduino het aan. Ik kwam erachter dat ik hiermee minder foutieve metingen kreeg als ik de analoge ingangen gebruikte, omdat de spanningsdelers altijd wat stroom lijken te lekken. Met de analoge ingangen kon ik controleren of een drempel werd overschreden, zodat ik gemakkelijk een signaal van ruis kon scheiden.

Als tijdens het spelen een bepaald type apparaat (doelwit, popbumpers of rollovers) was geactiveerd, programmeerde ik de Arduino om alle lichten voor die apparaten te laten knipperen en verhoogde vervolgens de score voor hen.

Ik gebruikte ook een kleine krachtsensor om te zien wanneer een bal was verloren. Hierdoor kan ik het aantal gespeelde ballen bijhouden en bepalen wanneer het spel afgelopen is. Als het spel voorbij is, knipperen alle lampjes achter elkaar.

Ten slotte heb ik de Arduino gebruikt om de score en het balnummer weer te geven.

Het bijgevoegde bedradingsschema laat zien hoe een van elk van de belangrijkste componenten werd bedraad. Het diagram zou te verwarrend zijn als ze allemaal zouden worden weergegeven.

Voeding

Om de flipperkastcomponenten van stroom te voorzien, ging ik met een 24 volt voeding. Deze eenheid had voldoende kracht voor de flippers en de sidekicks. Het is een beetje zwak voor de popbumpers. Misschien wilt u hiervoor een sterkere voeding gebruiken. Als je dat doet, moet je je eigen spanningsdelers maken, aangezien ik er alleen kon vinden die maximaal 25 volt hadden. Informatie over het maken van een spanningsdeler vindt u hier.

In plaats van alles rechtstreeks op de voeding aan te sluiten, heb ik er draden van naar een paar busbars geleid die ik aan de onderkant van het speelveld heb gemonteerd. Dit maakte het een stuk makkelijker om de verschillende componenten aan elkaar te koppelen. Je kunt een van de busbars zien op de tweede foto in het gedeelte Slingshot. Ze zijn verkrijgbaar bij de woonwinkel op de elektrische afdeling.

Balschieter of plunjer

De ball shooter of plunger is gekocht via de volgende link

http://www.marcospecialties.com/pinball-parts/B-12445

Er moet een gat door de voorkant van de behuizing worden geboord om de plunjer door te laten. Vervolgens wordt het in de binnenkant van de behuizing geschroefd. Er moet grote zorg worden besteed om ervoor te zorgen dat de plunjer goed is uitgelijnd met het speelveld. Plaats een richtliniaal op het speelveld en markeer het punt waar deze de binnenkant van de koffer raakt. Ga dan zo ver omhoog dat het midden van de plunjer even hoog is als de helft van de hoogte van de flipperkast. (Flipperballen zijn 1 en 1/16 inch groot en zijn verkrijgbaar bij Pinball.)

Speelveld

Het speelveld is gemaakt van ¼ inch berken multiplex. Om het spel decoratiever te maken, kocht ik een afbeelding via de NASA-link hieronder.

http://hubblesite.org/gallery/printshop/ps35/

Ik heb het triplex eerst gespoten met contactlijm en daarna de poster erop gelamineerd. Ik heb het toen omgedraaid en op maat gesneden.

Flippers

De flippers zijn gekocht via de onderstaande link.

http://www.pinballlife.com/index.php?p=product&id=172

Als je de meeste flipperkastcomponenten koopt, hebben ze meestal geen handige instructies. De manier om de flippers aan te sluiten, wordt weergegeven in de onderstaande afbeelding. Het kwam van deze link.

Naast het flippermechanisme heb je een flipperknuppel, flipperschakelaar en een knop nodig.

Slingshots

Een volledige katapultmontage is hier te vinden. Je hebt ook spelden en de elastiekjes nodig. Je vindt ze op dezelfde locatie. Er wordt ook een afbeelding getoond van de katapult wanneer deze eronder is gemonteerd. Ik moet erop wijzen dat 16 gauge draad werd gebruikt voor alle componenten die waren aangesloten op de 24 volt voeding en 22 gauge draad werd gebruikt voor de verbindingen met het Arduino-bord.

De eerste foto toont ook enkele metalen rails naast de flipper bats. Ik kon geen plek vinden om de rails te kopen, dus heb ik ze gemaakt. Ik gebruikte wat chroomstaaldraad die ik in de thuiswinkel vond. Het werd gebruikt om gazons te markeren wanneer ze zijn besproeid met insecticide. Ik heb de draad doorgeknipt en gebogen. Vervolgens heb ik gaten in het speelveld geboord en de rails op hun plaats geëpoxeerd.


Popbumpers

Pop bumpers kunnen hier worden gekocht. Je hebt ook schakelaars en doppen nodig. Popbumpers worden geïnstalleerd door drie gaten te boren, twee voor de metalen steunstangen en één voor de as die de schakelaar activeert. Wanneer een bal in de witte schijf rolt die op het bovenaanzicht te zien is, duwt hij de as naar beneden. Hierdoor wordt de bladschakelaar geactiveerd, die vervolgens de solenoïde activeert. De solenoïde trekt dan een metalen ring naar beneden die de bal in de tegenovergestelde richting stuurt.

Doelen, rollover-schakelaars en lichten

De doelen zijn beschikbaar via onderstaande link.

http://www.marcospecialties.com/pinball-parts/A-14691-5

Rollover-schakelaars en bevestigingen vindt u hieronder.

http://www.actionpinball.com/parts.php?item=A-12687

De lampen die ik gebruikte worden niet meer gemaakt, maar equivalenten staan ​​hieronder weergegeven.

http://www.actionpinball.com/parts.php?item=LED4555

Je hebt ook de onderstaande lamphouders nodig.

http://www.actionpinball.com/parts.php?item=077-5030-00

De bedrading van al deze is in principe hetzelfde en werd genoemd in de Arduino-sectie.

Samenvatting

Als je eenmaal aan de slag bent, zul je ongetwijfeld andere toeters en bellen vinden die je wilt toevoegen, maar dit zou je op weg moeten helpen.

Code

  • Arduino flipperkastcode
Arduino Flipperkast CodeArduino
Hiermee kan de Arduino het spel van een zelfgemaakte flipperkast besturen
 const int TxPin =17; lange score =0; lange oude score =0; lang doel =1; lang pop =1; lange rol =10; int-doelen[8]; int. Rollen[3]; int Pops[4]; int Milli =10; int Som =0; int Flash =100; int Bal =0; int i=0; int Schot =0; int Verloren =0; int Druk =1024; #include ;SoftwareSerial mySerial =SoftwareSerial(255, TxPin);void setup() { /* Woorden zonder s zijn de waarde die wordt bereikt door interactie met een apparaat. * Werkt met een s bijhouden met welke individuele personen interactie hebben gehad. * De laatste is nodig om te bepalen wanneer ze allemaal zijn geraakt en de waarde moet worden geüpgraded * en de lichten moeten worden uitgeschakeld. */ pinMode (TxPin, UITGANG); digitalWrite (TxPin, HOOG); mijnSerial.begin(9600); mijnSerial.write(12); // Wis mySerial.write (17); // Schakel de achtergrondverlichting in // doelingangen pinMode (2,INPUT_PULLUP); pinMode(3,INPUT_PULLUP); pinMode(4,INPUT_PULLUP); pinMode(5,INPUT_PULLUP); pinMode(6,INPUT_PULLUP); pinMode(7,INPUT_PULLUP); pinMode(8,INPUT_PULLUP); pinMode(9,INPUT_PULLUP); // rollover-ingangen pinMode (10, INPUT_PULLUP); pinMode (11,INPUT_PULLUP); pinMode (12,INPUT_PULLUP); //lagere balschot schakelaar pinMode (15, INPUT_PULLUP); // bovenste balschot schakelaar pinMode (16, INPUT_PULLUP); // lcd-uitgang pinMode (17, OUTPUT); // doellichten, respectieve pinMode (32, OUTPUT); pinMode(33,UITGANG); pinMode(34,UITGANG); pinMode(35,UITGANG); pinMode(36,UITGANG); pinMode(37,UITGANG); pinMode(38,UITGANG); pinMode(39,UITGANG); // rollover lichten, respectieve pinMode (40, OUTPUT); pinMode(41,UITGANG); pinMode(42,UITGANG); // pop bumperverlichting pinMode (50, OUTPUT); pinMode(51,UITGANG); pinMode(52,UITGANG); pinMode(53,OUTPUT);}void loop() {// plaats hier uw hoofdcode, om herhaaldelijk uit te voeren:// Als een pull-down-weerstand wordt gebruikt, is de ingangspin LAAG wanneer de schakelaar open is en HOOG wanneer de schakelaar is gesloten. //controleer of een doel is geraakt//****** Doelstellingen ***** voor (int i=0; i<8; i++){ if (digitalRead(i+2) ==LAAG){ / /Target geactiveerde doelen[i]=1; Score =Score + Doel; // zet Target light digitalWrite aan (i+32,HIGH); // vertraging om niet meerdere punten te krijgen voor een vertraging van één hit (Milli); pauze; } } Som =0; for (int i=0; i<8; i++){ Som =Som + Doelen[i]; } if (Sum ==8){ //all Targets verlicht, dus flits en schakel dan uit. for (int j=0; j<3; j++){ for (int i=0; i<8; i++){ digitalWrite(i+32, LOW); } vertraging (Flash); voor (int i=0; i<8; i++){ digitalWrite(i+32, HOOG); } vertraging (Flash); } voor (int i=0; i<8; i++){digitalWrite(i+32, LOW); Doelen[i]=0; } vertraging (Flash); // Vermenigvuldig doelwaarde met 10 Doel =Doel * 5; //ga naar Overslaan; } // *********** Rollovers ********* voor (int i=0; i<3; i++){ if (digitalRead(i+10) ==LAAG) { // rollover geactiveerd Rolls [i] =1; Score =Score + Roll; // zet rollover light digitalWrite aan (i+40,HIGH); // vertraging om niet meerdere punten te krijgen voor een vertraging van één hit (Milli); pauze; } } Som =0; voor (int i=0; i<3; i++){ Som =Som + Rollen[i]; } if (Sum ==3){ // alle rollovers branden, dus knipperen en vervolgens uitschakelen. for (int j=0; j<3; j++){ for (int i=0; i<3; i++){ digitalWrite(i+40, LOW); } vertraging (Flash); voor (int i=0; i<3; i++){ digitalWrite(i+40, HOOG); } vertraging (Flash); } voor (int i=0; i<3; i++){digitalWrite(i+40, LOW); Rollen[i]=0; } vertraging (Flash); // Vermenigvuldig de score met 2 Score =Score * 2; Rol =Rol * 10; //ga naar Overslaan; } //********** Pop Bumpers ********** voor (int i=0; i<4; i++){ if (analogRead(i)> 500){ / /pop geactiveerd Pops[i]=1; Score =Score + Pop; // zet pop-bumperverlichting digitalWrite aan (i+50,HIGH); //vertraging om niet meerdere punten te krijgen voor één hit //mySerial.print(analogRead(i)); //mijnSerial.print(" "); vertraging (Milli); pauze; } } Som =0; for (int i=0; i<4; i++){ Som =Som + Pops[i]; } if (Sum ==4){ // alle popbumpers branden, dus knipperen en vervolgens uitschakelen. for (int j=0; j<3; j++){ for (int i=0; i<4; i++){ digitalWrite(i+50, LOW); } vertraging (Flash); voor (int i=0; i<4; i++){ digitalWrite(i+50, HOOG); } vertraging (Flash); } voor (int i=0; i<4; i++){digitalWrite(i+50, LOW); Knalt[i]=0; } vertraging (Flash); // Vermenigvuldig doelwaarde met 10 Pop =Pop * 2; //ga naar Overslaan; }Skip:// Bepaal balnummer als (digitalRead (15) ==LAAG){ // bal raakt lagere steegschakelaar // indien nog niet gedaan, verhoog bal als (Shot ==0){ // Set Lost =0 aangezien niet op drukkussen Verloren =0; Druk =analoog lezen (7) + 20; // stel OldScore in om de balwaarde opnieuw af te drukken op LCD OldScore =-1; Bal =Bal + 1; if (Bal ==6){ Ball =1; Score =0; Doel =1; Rol =1; Pop =1; } Schot =1; } } if (digitalRead (16) ==LAAG) { // bal raakt onderste steegschakelaar // indien nog niet gedaan, verhoog bal if (Shot ==0) { // Set Lost =0 aangezien niet op drukkussen Lost =0; Druk =analoog lezen (7) + 15; // stel OldScore in om de balwaarde opnieuw af te drukken op LCD OldScore =-1; Bal =Bal + 1; if (Bal ==6){ Ball =1; Score =0; Doel =1; Rol =1; Pop =1; } Schot =1; } } if (analogRead (7)> Druk) { // bal op drukkussen Shot =0; if (Lost ==0) {//mySerial.print(analogRead(7)); //Score =Score + 100; Verloren =1; if (Ball ==5){ //Game Over //flash rollovers en vervolgens uitschakelen. for (int j=0; j<3; j++){ for (int i=0; i<3; i++){ digitalWrite(i+40, LOW); } vertraging (Flash); voor (int i=0; i<3; i++){ digitalWrite(i+40, HOOG); } vertraging (Flash); } voor (int i=0; i<3; i++){digitalWrite(i+40, LOW); Rollen[i]=0; } // flash pop-bumpers en vervolgens uitschakelen voor (int j=0; j<3; j++){ for (int i=0; i<4; i++){ digitalWrite(i+50, LOW); } vertraging (Flash); voor (int i=0; i<4; i++){ digitalWrite(i+50, HOOG); } vertraging (Flash); } voor (int i=0; i<4; i++){digitalWrite(i+50, LOW); Knalt[i]=0; } // Flash-doelen en vervolgens uitschakelen. for (int j=0; j<3; j++){ for (int i=0; i<8; i++){ digitalWrite(i+32, LOW); } vertraging (Flash); voor (int i=0; i<8; i++){ digitalWrite(i+32, HOOG); } vertraging (Flash); } voor (int i=0; i<8; i++){digitalWrite(i+32, LOW); Doelen[i]=0; } mijnSerial.write(12); // Duidelijke vertraging (5); // Vereiste vertraging mySerial.print(Score); // Eerste regel mySerial.write(13); // Form feed mySerial.print ("Game Over!!!"); // Tweede regel } } } // print naar LCD if (Score! =OldScore) { mySerial.write (12); // Duidelijke vertraging (5); // Vereiste vertraging //mySerial.print(analogRead(7)); mijnSerial.print(Score); // Eerste regel mySerial.write(13); // Form feed mySerial.print("Ball ="); // Tweede regel mySerial.print(Ball); OudeScore =Score; }}

Schema's


Productieproces

  1. Raspberry Pi / Hologram SMS-gestuurde wisselstroomschakelaar
  2. Raspberry Pi-robot bestuurd via Bluetooth
  3. Gebaargestuurde interactieve tafellamp
  4. ULTRASONE LEVITATION-machine die ARDUINO gebruikt
  5. Alexa gestuurde LED's via Raspberry Pi
  6. Met joystick bestuurde RC-auto
  7. Nunchuk-gestuurde robotarm (met Arduino)
  8. Draadloze lichtschakelaarmanipulator
  9. Spraakgestuurde robot
  10. Arduino Apple Watch
  11. Arduino-gestuurde pianorobot:PiBot