Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Flipper contrôlé par Arduino

Composants et fournitures

Arduino Mega 2560
× 1
Écran LCD Adafruit à 2 broches
× 1
Alimentation 24V
× 1
Capteur de force Adafruit
× 1
Pop Bumper Assembly
× 1
Interrupteur Pop Bumper
× 1
Commutateur cible
× 1
Rollover Switch
× 1
Flipper Assembly
× 1
Lampes LED
× 1

À propos de ce projet

Flipper contrôlé par Arduino

La construction d'un flipper contrôlé par Arduino nécessitait une combinaison de compétences en menuiserie, en mécanique, en électronique et en programmation. Il m'a fallu environ six mois d'efforts à temps partiel pour créer et c'était la chose la plus compliquée que j'aie jamais construite. C'est principalement parce que je n'ai pas pu trouver beaucoup d'informations sur la façon de construire un flipper.

Ce document fournira une description de la façon dont cette machine a été construite. J'essaierai de fournir suffisamment de références pour que si vous décidez de créer le vôtre, vous ayez plus de facilité que moi. En même temps, je ne saurais trop insister sur la nécessité de tout tester. J'ai utilisé une pièce de contreplaqué de rechange pour prototyper chaque composant avant de l'installer dans la machine réelle. Cela vous évitera bien des soucis à long terme.

Comme vous pouvez le voir sur la photo, la machine a une armoire en bois et utilise des pièces de rechange pour flipper disponibles dans le commerce. La machine est contrôlée par une seule carte Arduino Mega 2560. Si vous voulez voir la machine en action, allez sur ce lien, ou regardez ici :

L'affaire

Le boîtier est fabriqué à partir de contreplaqué à face de chêne acheté au magasin de la maison. Toutes les dimensions de ce document sont en pouces. Les panneaux avant et arrière mesurent 20H x 23W. Les panneaux latéraux mesurent 20H x 47L. Les pièces ont été coupées avec des bords en onglet et reliées à l'aide d'un menuisier à biscuits et de colle à bois. Des vis de poche et de la colle auraient également fonctionné. La machine va subir beaucoup d'abus, elle doit donc être solide. Avant de les assembler, j'ai également coupé un dado de ¾" à 1 pouce du bas. Ne collez pas l'étagère. Il doit flotter pour permettre l'expansion et la contraction. L'étagère a été utilisée pour contenir l'alimentation principale et l'alimentation de la lumière LED décorative montée sous le couvercle. La surface de jeu est de 22w x 42L. A noter qu'il est nettement plus court que le cabinet. Cela me donne environ 3 pouces devant pour faire passer les fils jusqu'aux boutons des batteurs et aux lumières LED. Il laisse également de la place pour le mécanisme du piston à bille. La surface de jeu repose simplement sur de petits blocs de bois vissés sur les côtés à environ 4 pouces sous le haut du boîtier. Pour accéder aux entrailles de la machine, j'ouvre simplement le couvercle, retire le terrain de jeu et le retourne.

Le boîtier et la surface de jeu sont tous construits à angle droit. Le pas du jeu est fourni par les jambes comme le montre cette vue de côté. Les flippers peuvent avoir des angles d'aussi peu que 1 à 7 degrés. Plus l'angle est élevé, plus le jeu est rapide. Comme je n'étais pas sûr de l'angle dont j'allais avoir besoin, j'ai conçu les jambes pour qu'elles soient réglables. Les pieds eux-mêmes sont en bois et disponibles dans la plupart des magasins de bricolage. J'ai ensuite percé un trou de 12 pouces de profondeur au bout de chaque jambe à l'aide d'une tarière. À l'extrémité inférieure, j'ai utilisé un époxy à deux composants pour insérer un écrou en T de 3/8 pouces. Faites attention à ne pas mettre de colle sur les filets ou là où cela bloquerait le trou que vous avez percé. J'ai ensuite inséré une tige filetée de 12 pouces 3/8 pouces dans la jambe et j'ai vissé un écrou sur la tige. J'ai ensuite attaché un pied de nivellement à la fin. Le pied de nivellement et les écrous en T que j'ai obtenus sur les liens ci-dessous.

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

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

Les plaques de montage des pieds de table étaient simplement vissées sur l'étagère inférieure et les pieds vissés. Pour régler la hauteur de la machine, desserrez simplement l'écrou, puis vissez ou dévissez la tige filetée. Resserrez ensuite l'écrou pour vous assurer que la table reste sécurisée.

Sur la photo, vous remarquerez un cordon électrique et un câble USB. Le cordon électrique provient d'une multiprise que j'ai fixée à l'arrière de la machine. Tout y est branché, de sorte qu'un seul interrupteur allume ou éteint tout. Le câble USB est là, pour que je puisse reprogrammer la carte Arduino sans avoir à retirer le terrain de jeu.

Le couvercle

Le cadre du couvercle est en chêne et a la même dimension extérieure que le meuble. Le haut et les côtés mesurent 1,5 pouces de large, tandis que le bas mesure 5 pouces de large. La largeur supplémentaire en bas est utilisée pour masquer l'espace entre le terrain de jeu et le meuble. Un dado a été exécuté le long du bord intérieur des pièces du cadre pour maintenir le couvercle en plexiglas. J'ai utilisé du plexiglas au lieu du verre car il est plus léger, plus sûr et plus facile à couper. Le couvercle a été mis en place à l'aide de vis de poche. Je l'ai fait pour pouvoir le démonter au cas où le plexiglas aurait besoin d'être remplacé. J'ai également monté une bande de lumières LED colorées sous le couvercle à des fins décoratives. Enfin, j'ai monté le couvercle sur le boîtier à l'aide d'une charnière à piano que j'ai encastrée à la fois dans le couvercle et dans le boîtier.

Arduino

L'Arduino Mega 2560 fait essentiellement quatre choses. Il détermine quand les interrupteurs sont activés, il allume ou éteint les lumières en conséquence, il garde une trace du score et il affiche le score et le numéro de la balle sur un petit écran LCD. La plupart du câblage est assez simple. Par exemple, les cibles sont connectées à l'une des entrées numériques de l'Arduino et à la terre. L'entrée est configurée à l'aide d'une instruction comme indiqué ci-dessous.

pinMode(Pin_Number, INPUT_PULLUP)

Lorsque le code détecte que l'entrée est passée de haut en bas, il sait que la cible a été touchée, puis allume la lumière de flipper LED appropriée.

La seule complication vient des Pop Bumpers. Les commutateurs de retournement et les cibles utilisés dans ce jeu tirent tous leur puissance de l'Arduino. Les Pop Bumpers sont alimentés par une alimentation séparée de 25 volts, car ils ont besoin de plus de jus que l'Arduino ne peut en fournir. Les Pop Bumpers ont un interrupteur qui les active, mais je ne peux pas le lire directement à cause de la haute tension. Par conséquent, j'envoie d'abord la sortie du commutateur Pop Bumper à un diviseur de tension. Un exemple de diviseur de tension peut être trouvé dans le lien ci-dessous.

Diviseur de tension

Une fois à travers le diviseur de tension, la tension est réduite à 5 volts et l'Arduino peut la gérer. J'ai découvert que j'obtenais moins de fausses lectures avec celles-ci si j'utilisais les entrées analogiques, car les diviseurs de tension semblent toujours laisser fuir du courant. Avec les entrées analogiques, je pouvais vérifier qu'un seuil était dépassé afin de pouvoir facilement séparer un signal du bruit.

Pendant le jeu, si tout un certain type d'appareil (cible, pare-chocs pop ou renversements) avait été activé, j'ai programmé l'Arduino pour faire clignoter toutes les lumières de ces appareils, puis j'ai augmenté le score pour eux.

J'ai également utilisé un petit capteur de force pour dire quand une balle avait été perdue. Cela me permet de garder une trace du nombre de balles jouées et de déterminer quand le jeu est terminé. Lorsque le jeu est terminé, tous les voyants clignotent en séquence.

Enfin, j'ai utilisé l'Arduino pour afficher le score et le numéro de balle.

Le schéma de câblage ci-joint montre comment l'un des principaux composants a été câblé. Le diagramme serait trop confus s'ils étaient tous affichés.

Alimentation

Pour alimenter les composants du flipper, j'ai opté pour une alimentation 24 volts. Cette unité avait beaucoup de puissance pour les palmes et les acolytes. C'est un peu faible pour les bumpers pop. Vous pouvez utiliser une alimentation plus puissante pour ces derniers. Si vous le faites, vous devrez fabriquer vos propres diviseurs de tension, car je n'ai pu en trouver que ceux qui avaient un maximum de 25 volts. Vous trouverez ici des informations sur la fabrication d'un diviseur de tension.

Plutôt que de tout connecter directement à l'alimentation, j'ai fait passer des fils à une paire de barres omnibus que j'ai montées sous le terrain de jeu. Cela a rendu beaucoup plus facile la connexion des différents composants. Vous pouvez voir l'une des barres omnibus dans la deuxième image dans la section Slingshot. Ils sont disponibles au magasin de la maison au rayon électrique.

lanceur de balles ou plongeur

Le lanceur de balle ou le piston a été acheté sur le lien suivant

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

Un trou doit être percé à l'avant du boîtier pour le passage du piston. Il est ensuite vissé à l'intérieur du boîtier. Un grand soin doit être fait pour s'assurer que le piston est correctement aligné avec le terrain de jeu. Placez une règle sur le terrain de jeu et marquez le point où elle touche l'intérieur du boîtier. Montez ensuite suffisamment pour que le milieu du piston soit de hauteur égale à la moitié de la hauteur du flipper. (Les flippers ont une taille de 1 et 1/16 pouces et sont disponibles chez Pinball.)

Terrain de jeu

Le terrain de jeu est fait de contreplaqué de bouleau de ¼ de pouce. Pour rendre le jeu plus décoratif, j'ai acheté une photo du lien Nasa ci-dessous.

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

J'ai d'abord vaporisé le contreplaqué d'adhésif de contact, puis j'ai plastifié l'affiche dessus. Je l'ai ensuite retourné et coupé à la bonne taille.

Nageoires

Les palmes ont été achetées sur le lien ci-dessous.

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

Lorsque vous achetez la plupart des composants de flipper, ils ont tendance à ne pas être accompagnés d'instructions utiles. La façon de câbler les palmes est illustrée dans l'image ci-dessous. Cela vient de ce lien.

En plus du mécanisme de batteur, vous aurez besoin d'une batte de batteur, d'un interrupteur à batteur et d'un bouton.

Slingshots

Un assemblage de fronde complet peut être trouvé ici. Vous aurez également besoin d'épingles et d'élastiques. Vous pouvez les trouver au même endroit. Une photo de la fronde lorsqu'elle est montée en dessous est également montrée. Je dois souligner qu'un fil de calibre 16 a été utilisé pour tous les composants connectés à l'alimentation 24 volts et un fil de calibre 22 a été utilisé pour les connexions à la carte Arduino.

La première photo montre également des rails métalliques à côté des battes à nageoires. Je n'ai pas pu trouver d'endroit pour acheter les rails, alors je les ai fabriqués. J'ai utilisé du fil d'acier chromé que j'ai trouvé dans le magasin de la maison. Il était utilisé pour marquer les pelouses lorsqu'elles étaient aspergées d'insecticide. J'ai coupé et plié le fil. J'ai ensuite percé des trous dans le terrain de jeu et collé les rails à l'époxyde.


Pare-chocs anti-pop

Les ensembles de pare-chocs pop peuvent être achetés ici. Vous aurez également besoin d'interrupteurs et de capuchons. Les pare-chocs anti-pop sont installés en perçant trois trous, deux pour les tiges de support métalliques et un pour l'arbre qui déclenche l'interrupteur. Lorsqu'une balle roule dans le disque blanc vu sur la vue de dessus, elle pousse l'arbre vers le bas. Cela déclenche l'interrupteur à lames, qui active alors le solénoïde. Le solénoïde tire alors un anneau métallique vers le bas qui envoie la balle dans la direction opposée.

Cibles, commutateurs de renversement et lumières

Les cibles sont disponibles sur le lien ci-dessous.

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

Les commutateurs et les supports de renversement se trouvent ci-dessous.

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

Les lampes que j'ai utilisées ne sont plus fabriquées, mais des équivalents sont indiqués ci-dessous.

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

Vous aurez également besoin des supports de lampe illustrés ci-dessous.

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

Le câblage de tous ces éléments est fondamentalement le même et a été mentionné dans la section Arduino.

Résumé

Une fois que vous aurez commencé, vous trouverez sans aucun doute d'autres cloches et sifflets que vous voudrez ajouter, mais cela devrait vous aider à démarrer.

Code

  • Code du flipper Arduino
Code du flipper ArduinoArduino
Permet à l'Arduino de contrôler le jeu d'un flipper fait maison
 const int TxPin =17 ; Note longue =0 ; long OldScore =0 ; longue cible =1 ; Pop longue =1 ; Rouleau long =10 ; Cibles int[8]; rouleaux int[3] ; int Pops[4]; int Milli =10; int Somme =0 ; entier Flash =100 ; int Boule =0; entier i=0; Int Shot =0 ; entier Perdu =0 ; Pression int =1024 ; #include ;SoftwareSerial mySerial =SoftwareSerial(255, TxPin);void setup() { /* Les mots sans s sont la valeur obtenue en interagissant avec un périphérique. * Fonctionne avec un s garder une trace des personnes avec lesquelles on a interagi. * Ce dernier est nécessaire pour déterminer quand tous ont été touchés et la valeur doit être améliorée * et les lumières doivent être éteintes. */ pinMode (TxPin, SORTIE); digitalWrite (TxPin, HAUT); mySerial.begin(9600); mySerial.write(12); // Effacer mySerial.write(17); // Activer le rétro-éclairage // Entrées cibles 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); //renversement des entrées pinMode(10,INPUT_PULLUP); pinMode(11, INPUT_PULLUP); pinMode(12,INPUT_PULLUP); // commutateur de balle inférieure pinMode (15, INPUT_PULLUP); // commutateur de balle supérieure pinMode (16, INPUT_PULLUP); //lcd sortie pinMode (17, SORTIE); //Lumières cibles, pinMode(32,OUTPUT); pinMode(33,SORTIE); pinMode (34, SORTIE); pinMode (35, SORTIE); pinMode (36, SORTIE); pinMode (37, SORTIE); pinMode (38, SORTIE); pinMode (39, SORTIE); //feux de survol, pinMode(40,OUTPUT); pinMode (41, SORTIE); pinMode (42, SORTIE); // pop pare-chocs s'allume pinMode (50, OUTPUT); pinMode (51, SORTIE); pinMode (52, SORTIE); pinMode(53,OUTPUT);}void loop() { // mettez votre code principal ici, pour l'exécuter à plusieurs reprises :// Si une résistance pull-down est utilisée, la broche d'entrée sera LOW lorsque le commutateur est ouvert et HIGH lorsque l'interrupteur est fermé. //vérifier si une cible a été touchée//****** Cibles ***** pour (int i=0; i<8; i++){ if (digitalRead(i+2) ==LOW){ / /Cible activée Cibles[i]=1 ; Note =Note + Cible ; //allumer la lumière cible digitalWrite(i+32,HIGH); //retard pour ne pas obtenir plusieurs points pour un seul coup delay(Milli); Pause; } } Somme =0; for (int i=0; i<8; i++){ Sum =Sum + Targets[i]; } if (Sum ==8){ //toutes les cibles allumées, donc clignotent puis s'éteignent. for (int j=0; j<3; j++){ for (int i=0; i<8; i++){ digitalWrite(i+32, LOW); } délai(Flash); pour (int i=0; i<8; i++){ digitalWrite(i+32, HIGH); } délai(Flash); } pour (int i=0; i<8; i++){ digitalWrite(i+32, LOW); Cibles[i]=0 ; } délai(Flash); //Multiplier la valeur cible par 10 Cible =Cible * 5; //goto Ignorer; } // *********** Rollovers ********* pour (int i=0; i<3; i++){ if (digitalRead(i+10) ==LOW) { //rollover activé Rolls[i]=1; Score =score + lancer ; //activer la lumière de survol digitalWrite(i+40,HIGH); //retard pour ne pas obtenir plusieurs points pour un seul coup delay(Milli); Pause; } } Somme =0; for (int i=0; i<3; i++){ Sum =Sum + Rolls[i]; } if (Sum ==3){ //tous les rollovers sont allumés, donc clignotent puis s'éteignent. for (int j=0; j<3; j++){ for (int i=0; i<3; i++){ digitalWrite(i+40, LOW); } délai(Flash); for (int i=0; i<3; i++){ digitalWrite(i+40, HIGH); } délai(Flash); } pour (int i=0; i<3; i++){ digitalWrite(i+40, LOW); Rouleaux[i]=0 ; } délai(Flash); //Multiplier le score par 2 Score =Score * 2 ; Rouleau =Rouleau * 10 ; //goto Ignorer; } //********** Pop Bumpers ********** pour (int i=0; i<4; i++){ if (analogRead(i)> 500){ / /pop activé Pops[i]=1 ; Partition =Partition + Pop ; // allumer la lumière du pare-chocs pop digitalWrite (i + 50, HIGH); //retarder pour ne pas obtenir plusieurs points pour un seul coup //mySerial.print(analogRead(i)); //mySerial.print(" "); retard (Milli); Pause; } } Somme =0; for (int i=0; i<4; i++){ Sum =Sum + Pops[i]; } if (Sum ==4){ // tous les bumpers sont allumés, donc clignotent puis s'éteignent. for (int j=0; j<3; j++){ for (int i=0; i<4; i++){ digitalWrite(i+50, LOW); } délai(Flash); for (int i=0; i<4; i++){ digitalWrite(i+50, HIGH); } délai(Flash); } pour (int i=0; i<4; i++){ digitalWrite(i+50, LOW); Pop[i]=0 ; } délai(Flash); //Multipliez la valeur cible par 10 Pop =Pop * 2; //goto Ignorer; } Ignorer :// Déterminez le numéro de la balle si (digitalRead(15) ==LOW){ // la balle frappe le commutateur de la ruelle inférieure // si ce n'est déjà fait, augmentez Ball if (Shot ==0){ // Set Lost =0 car pas sur le coussin de pression Perdu =0 ; Pression =analogRead (7) + 20 ; //définir OldScore de manière à réimprimer la valeur de la balle sur LCD OldScore =-1; Boule =Boule + 1 ; if (Ball ==6){ Ball =1; Note =0 ; Cible =1 ; Rouleau =1 ; Pop =1 ; } Tir =1 ; } } if (digitalRead(16) ==LOW){ //la balle frappe l'interrupteur de la ruelle inférieure //si ce n'est déjà fait, augmentez Ball if (Shot ==0){ //Set Lost =0 car pas sur le coussin de pression Lost =0 ; Pression =analogRead (7) + 15 ; //définir OldScore de manière à réimprimer la valeur de la balle sur LCD OldScore =-1; Boule =Boule + 1 ; if (Ball ==6){ Ball =1; Note =0 ; Cible =1 ; Rouleau =1 ; Pop =1 ; } Tir =1 ; } } if (analogRead(7)> Pressure){ //ball on press pad Shot =0; if (Lost ==0){ //mySerial.print(analogRead(7)); //Note =Note + 100 ; Perdu =1 ; if (Ball ==5){ //Game Over //flash rollovers puis s'éteint. for (int j=0; j<3; j++){ for (int i=0; i<3; i++){ digitalWrite(i+40, LOW); } délai(Flash); for (int i=0; i<3; i++){ digitalWrite(i+40, HIGH); } délai(Flash); } pour (int i=0; i<3; i++){ digitalWrite(i+40, LOW); Rouleaux[i]=0 ; } // flash pop bumpers puis éteint pour (int j=0; j<3; j++){ for (int i=0; i<4; i++){ digitalWrite(i+50, LOW); } délai(Flash); for (int i=0; i<4; i++){ digitalWrite(i+50, HIGH); } délai(Flash); } pour (int i=0; i<4; i++){ digitalWrite(i+50, LOW); Pop[i]=0 ; } //Flash Targets, puis éteint. for (int j=0; j<3; j++){ for (int i=0; i<8; i++){ digitalWrite(i+32, LOW); } délai(Flash); pour (int i=0; i<8; i++){ digitalWrite(i+32, HIGH); } délai(Flash); } pour (int i=0; i<8; i++){ digitalWrite(i+32, LOW); Cibles[i]=0 ; } maSérie.write(12); // Effacer le délai(5) ; // Délai requis mySerial.print(Score); // Première ligne mySerial.write(13); // Flux de formulaire mySerial.print("Game Over!!!"); // Deuxième ligne } } } // imprimer sur l'écran LCD if (Score !=OldScore){ mySerial.write(12); // Effacer le délai(5) ; // Délai requis //mySerial.print(analogRead(7)); mySerial.print(Score); // Première ligne mySerial.write(13); // Form feed mySerial.print("Ball ="); // Deuxième ligne mySerial.print(Ball); OldScore = Note ; }}

Schémas


Processus de fabrication

  1. Interrupteur d'alimentation AC contrôlé par SMS Raspberry Pi/Hologram
  2. Robot Raspberry Pi contrôlé par Bluetooth
  3. Lumière de table interactive à commande gestuelle
  4. Machine à LÉVITATION ULTRASONIQUE utilisant ARDUINO
  5. LED contrôlées par Alexa via Raspberry Pi
  6. Voiture RC contrôlée par joystick
  7. Bras robotique contrôlé par Nunchuk (avec Arduino)
  8. Manipulateur d'interrupteur d'éclairage sans fil
  9. Robot à commande vocale