Table des matières:

Arduino : Flipper : 8 étapes (avec photos)
Arduino : Flipper : 8 étapes (avec photos)

Vidéo: Arduino : Flipper : 8 étapes (avec photos)

Vidéo: Arduino : Flipper : 8 étapes (avec photos)
Vidéo: Arduino Photo Resistor Tutorial (Step by Step) 2024, Novembre
Anonim
Image
Image

Comme j'ai toujours aimé à la fois les flippers et l'électronique, j'ai décidé de construire mon propre flipper. J'ai choisi Arduino pour la programmation et l'électronique, car c'est une plate-forme très accessible, à la fois compacte et facile à utiliser.

Dans ce guide, je vais expliquer mon processus de développement, alors peut-être que l'un de vous, passionné, pourrait créer quelque chose de similaire.

Étape 1: Élaboration du dossier

Construire le cas
Construire le cas

Commençons par le cas du flipper. J'ai fait une construction assez simple. J'ai scié une plaque inférieure et utilisé 4 minuscules piliers en bois dans les coins pour relier les pièces murales. La taille de votre boîtier est votre propre choix, j'ai choisi de le rendre un peu plus petit qu'un flipper d'origine car je n'avais pas l'intention d'ajouter des extras super spectaculaires pour remplir l'espace. J'ai utilisé des vis et de la colle pour rendre le boîtier aussi stable que possible. À l'arrière, j'ai percé deux trous dans le sol pour les deux pieds qui donneront au flipper l'inclinaison emblématique. Encore une fois, la hauteur des jambes dépend de vous. Plus vous faites les jambes hautes, plus la balle roulera vite (vers le bas).

Étape 2: Construire le mécanisme du batteur

Construire le mécanisme de batteur
Construire le mécanisme de batteur

Comme je voulais limiter le coût de ce projet, j'ai décidé de fabriquer des palmes entièrement mécaniques au lieu d'électroniques. Si vous êtes intéressé par les batteurs électroniques, vous pouvez utiliser une construction qui est un peu la même, mais avec un soi-disant « solénoïde » connecté (les solénoïdes avec suffisamment de puissance pour contrôler les batteurs étaient trop chers pour moi).

J'ai commencé par percer deux trous dans le fond pour le point de pivot des deux palmes. J'ai percé les trous (à mon avis) un peu trop près les uns des autres, ce qui a rendu le jeu un peu trop facile au final. Veillez donc à ne pas placer les palmes trop près les unes des autres, à moins que vous ne souhaitiez un style de jeu facile.

J'ai également percé deux trous dans les deux parois latérales parallèles aux trous des nageoires. Ces trous doivent être utilisés pour les deux boutons de flipper.

J'ai utilisé des ressorts pour ramener les nageoires dans leur position d'origine et j'ai fait une construction pivotante entre les nageoires et les boutons pour les faire tourner lorsque les boutons sont enfoncés. Pour empêcher les ressorts de tirer trop loin les palmes, j'ai placé deux vis pour maintenir les palmes dans leur position d'origine.

Étape 3: Placer les murs

Placer les murs
Placer les murs

J'ai placé quelques murs pour rediriger le flipper vers les palmes. Ils sont très simples à réaliser. Percez simplement 3 trous dans le fond du boîtier et enfoncez trois broches en bois. Enroulez un élastique autour des épingles et le tour est joué.

Étape 4: Ajout des blocs de score

Ajout des blocs de score
Ajout des blocs de score
Ajout des blocs de score
Ajout des blocs de score

Les blocs de score sont l'une des parties les plus cruciales du flipper, alors assurez-vous de bien faire cette partie. J'ai fait trois blocs de score pour mon flipper, mais encore une fois, tout dépend de vous.

J'ai scié un petit morceau de manche à balai et enroulé du fil de cuivre autour. L'arduino alimentera ce fil de cuivre en permanence avec 5V. J'ai soudé quatre ressorts de stylo sur le côté pour un meilleur contact avec la balle.

La façon dont fonctionnent les blocs de score est que la balle complète un circuit qui mène à une broche d'entrée sur l'Arduino. Donc, ce que j'ai fait, c'est coller du papier d'aluminium sur le fond du boîtier (NE PAS TOUCHER LE CUIVRE) et câbler le papier jusqu'à une broche sur l'Arduino. Chaque fois que la balle frappe à la fois le cuivre et l'aluminium, le circuit est terminé et l'Arduino recevra un signal.

J'ai connecté tous les blocs de score ensemble à l'aide de la feuille d'aluminium, mais gardez à l'esprit que le côté collant ne conduit PAS l'électricité.

Étape 5: Ajout du contact Game Over

Ajout du contact Game Over
Ajout du contact Game Over

Au bas du flipper, entre les palmes, j'ai ajouté un jeu de contact. Chaque fois que la balle touche ce contact, le joueur perd une balle. La construction que j'ai faite est à peu près la même que les blocs de score. Seulement ici, j'ai utilisé deux vis, et encore un morceau de papier d'aluminium sur le fond.

Étape 6: perçage des trous de câble

Perçage des trous de câble
Perçage des trous de câble
Perçage des trous de câble
Perçage des trous de câble
Perçage des trous de câble
Perçage des trous de câble

Avant de commencer à tout câbler jusqu'à l'Arduino, nous devons d'abord percer quelques trous pour les câbles. J'ai percé un trou dans les deux morceaux de papier d'aluminium, donc un trou dans le papier d'aluminium près des blocs de score et un trou dans le papier d'aluminium près du jeu au-dessus du contact.

En plus de cela, j'ai également percé un trou en bas à gauche, entre les murs, pour le câble menant au servo de porte à billes supplémentaire.

Il devrait également y avoir un trou pour le câble connecté à l'écran LCD en bas.

Étape 7: Tout câbler

Tout câbler
Tout câbler
Tout câbler
Tout câbler

J'ai fait ce schéma pour avoir une meilleure vue d'ensemble de l'endroit où tous les câbles doivent aller. Les croix sont les points de connexion des câbles. J'ai essayé de souder autant que possible pour que tout soit un peu plus stable et fiable. Le câblage prendra un certain temps, mais après cela, vous y êtes presque !

Étape 8: Téléchargement du code

Téléchargez le code suivant sur votre Arduino pour faire vivre votre flipper !

// Inclut la bibliothèque pour l'écran lcd

#include #include

// Initialiser les broches de données lcd

LiquidCrystal LCD (7, 8, 9, 10, 11, 12);

// Créer un servo

Servo ballGateServo;

// Créer des variables pour les broches que nous utilisons

int gameoverPin = 6; int scorePin = 5; int speakerPin = 4; int ballGateServoPin = 3;

// Initialisation des variables de gameplay pour le flipper

score entier = 0; score int = 500; bool highscoreReached = false; boules int = 3; int gameoverTimer = 0; int gameoverTimerDuration = 100; bool gameoverTriggered = false;

//exécuter ce code une fois à la première image

void setup() { // Définit le pinMode pour les broches que nous utilisons pinMode(gameoverPin, INPUT); pinMode(scorePin, INPUT);

// Initialise le lcd en donnant la largeur et la hauteur

lcd.begin (16, 2);

// Attachez le servo de porte à billes à la broche appropriée

ballGateServo.attach(ballGateServoPin);

// Réinitialiser le servo de portail à la position de départ

ballGateServo.write(0); }

// Exécutez ce code à chaque image

void loop() { // Capture les entrées des broches int gameoverState = digitalRead(gameoverPin); int scoreState = digitalRead(scorePin);

// Ajouter au score si une entrée est reçue

if (scoreState) { tone(speakerPin, 1000); note += 10; } else { noTone(4); }

// Soustraire des boules si le gameover pit est déclenché

if (gameoverState et !gameoverTriggered) { balles -= 1; gameoverTriggered = vrai; gameoverTimer = gameoverTimerDuration; }

// Lancer le timer du gameover dès que la balle ne touche pas le contact du gameover

if (!gameoverState) { if (gameoverTimer >= 1) { gameoverTimer -= 1; } else { gameoverTriggered = false; } }

// Clignoter le texte de gameover sur l'écran LCD et réinitialiser le score et les balles

if (boules <= 0) { lcd.setCursor(0, 0); for (int i = 5; i>= 1; i--) { lcd.clear(); retard (250); lcd.print("GAME OVER"); lcd.setCursor(0, 1); lcd.print("Essayer à nouveau ?"); retard (250); } lcd.clear(); note = 0; ballGateServo.write(0); score atteint = faux; boules = 3; }

if (score > meilleur score et ! meilleur score atteint) {

lcd.setCursor(0, 0); for (int i = 5; i >= 1; i--) { lcd.clear(); retard (250); lcd.print("NOUVEAU MEILLEUR"); lcd.setCursor(0, 1); lcd.print("Mort subite !"); retard (250); } lcd.clear(); boules = 1; ballGateServo.write(120); meilleur score = score; highscoreAtteint = vrai; }

// Mettre à jour le meilleur score si le score actuel est plus élevé

if (score > meilleur score) { meilleur score = score; }

// Place le curseur sur la ligne 0

lcd.setCursor(0, 0); // Imprime le (meilleur) score actuel sur l'écran lcd if (score <= 0) { lcd.print("Highscore: " + String(highscore) + " "); } else { lcd.print("Score: " + String(score) + " "); }

// Place le curseur sur la ligne 1

lcd.setCursor(0, 1);

// Imprime le nombre actuel de balles sur l'écran lcd

lcd.print("Boules: " + String(boules)); }

Conseillé: