Cuprins:

Arduino: Pinball Machine: 8 pași (cu imagini)
Arduino: Pinball Machine: 8 pași (cu imagini)

Video: Arduino: Pinball Machine: 8 pași (cu imagini)

Video: Arduino: Pinball Machine: 8 pași (cu imagini)
Video: Ai robots taking over ping pong 👀 #shorts 2024, Iunie
Anonim
Image
Image

Deoarece mi-au plăcut întotdeauna atât aparatele de pinball, cât și electronice, am decis să-mi construiesc propriul meu pinball. Am ales Arduino pentru programare și electronică, deoarece este o platformă extrem de accesibilă, compactă și ușor de utilizat.

În acest ghid vă voi explica procesul de dezvoltare, așa că poate unul dintre voi entuziaști ar putea crea ceva la fel.

Pasul 1: Construirea carcasei

Construind cazul
Construind cazul

Să începem cu carcasa pinballului. Am făcut o construcție destul de simplă. Am tăiat o placă de jos și am folosit 4 stâlpi mici de lemn în colțuri pentru a conecta piesele de perete. Dimensiunea husei dvs. este alegerea dvs., am ales să o fac puțin mai mică decât un pinball original, deoarece nu intenționam să adăugăm extras super spectaculoase pentru a umple spațiul. Am folosit ambele șuruburi și lipici pentru a face carcasa cât mai stabilă. În spate am forat două găuri în piesa de podea pentru cele două picioare care vor conferi mașinii de pinball înclinarea iconică. Din nou, înălțimea picioarelor depinde de tine. Cu cât faci picioarele mai înalte, cu atât mingea va rula mai repede (în jos).

Pasul 2: Construirea mecanicului Flipper

Construirea mecanicului Flipper
Construirea mecanicului Flipper

Întrucât am vrut să limitez costul acestui proiect, am decis să fac flipuri complet mecanice în locul celor electronice. Dacă sunteți interesat de clapetele electronice, puteți utiliza o construcție care este oarecum la fel, dar cu așa-numitul „solenoid” conectat la acesta (solenoizii cu suficientă putere pentru a controla clapetele erau prea scumpe pentru mine).

Am început prin găurirea a două găuri în partea inferioară pentru punctul de pivot al ambelor flippers. Am forat găurile (după părerea mea) un pic prea aproape unul de altul, iar acest lucru a făcut ca jocul să fie un pic prea ușor în cele din urmă. Așadar, aveți grijă să nu așezați flippers prea aproape unul de altul, cu excepția cazului în care doriți un stil de joc ușor.

De asemenea, am forat două găuri în ambii pereți laterali paraleli cu găurile flipper. Aceste găuri trebuie utilizate pentru cele două butoane cu flipper.

Am folosit arcuri pentru a trage flippers înapoi în poziția inițială și am făcut o construcție pivotantă între flippers și butoane pentru a le face să se rotească atunci când butoanele sunt apăsate. Pentru a împiedica arcurile să tragă înapoi picioarele prea departe, am așezat două șuruburi pentru a ține picioarele în poziția lor inițială.

Pasul 3: Plasarea pereților

Așezarea zidurilor
Așezarea zidurilor

Am așezat câțiva pereți pentru a redirecționa pinballul către flippers. Sunt foarte simplu de realizat. Pur și simplu găuriți 3 găuri în partea inferioară a carcasei și împingeți trei știfturi de lemn. Înfășurați o bandă de cauciuc în jurul știfturilor și ați terminat.

Pasul 4: Adăugarea blocurilor de scor

Adăugarea blocurilor de scor
Adăugarea blocurilor de scor
Adăugarea blocurilor de scor
Adăugarea blocurilor de scor

Blocurile de scor sunt una dintre cele mai importante părți ale mașinii de pinball, așa că asigurați-vă că faceți corect această parte. Am făcut trei blocuri de scor pentru mașina mea de pinball, dar din nou totul depinde de tine.

Am tăiat o bucată mică de bețișor de mătură și am înfășurat sârmă de cupru în jurul său. Arduino va alimenta constant acest fir de cupru cu 5V. Am lipit patru arcuri stilou în lateral pentru un contact mai bun cu mingea.

Modul în care funcționează blocurile de scor este că mingea completează un circuit care duce la un pin de intrare pe Arduino. Deci, ceea ce am făcut a fost să lipiți folie de aluminiu pe partea de jos a carcasei (NU ATINGEȚI ARAMĂ) și să conectați folia până la un știft de pe Arduino. Ori de câte ori mingea lovește atât cuprul, cât și aluminiul, circuitul este complet, iar Arduino va primi un semnal.

Am conectat toate blocurile cu ajutorul foliei de aluminiu, dar rețineți că partea lipicioasă NU conduce electricitatea.

Pasul 5: Adăugarea contactului peste joc

Adăugarea contactului peste joc
Adăugarea contactului peste joc

În partea de jos a jocului de pinball, între flippers, am adăugat un joc peste contact. Ori de câte ori mingea lovește acest contact, jucătorul va pierde o minge. Construcția pe care am făcut-o este foarte similară cu blocurile de scor. Doar aici am folosit două șuruburi și, din nou, o bucată de folie de aluminiu pe fund.

Pasul 6: găurirea găurilor cablurilor

Găurirea găurilor cablurilor
Găurirea găurilor cablurilor
Găurirea găurilor cablurilor
Găurirea găurilor cablurilor
Găurirea găurilor cablurilor
Găurirea găurilor cablurilor

Înainte de a începe să conectăm totul până la Arduino, trebuie mai întâi să forăm câteva găuri pentru cabluri. Am forat o gaură prin ambele bucăți de folie de aluminiu, deci o gaură în folia de aluminiu aproape de blocurile de scor și o gaură în folia de aluminiu lângă joc, la contact.

În afară de aceasta, am forat și o gaură în partea stângă jos, între pereți, pentru cablul care ducea la poarta cu bilă suplimentară Servo.

Ar trebui să existe, de asemenea, o gaură pentru cablul conectat la LCD în partea de jos.

Pasul 7: Cablarea totul

Cablarea totul
Cablarea totul
Cablarea totul
Cablarea totul

Am făcut această schemă pentru a avea o imagine de ansamblu mai bună despre unde ar trebui să meargă toate cablurile. Crucile sunt punctele în care se conectează cablurile. Am încercat să lipesc cât mai mult posibil pentru a face totul puțin mai stabil și mai fiabil. Cablarea va dura ceva timp, dar după ce ați terminat, sunteți aproape acolo!

Pasul 8: Încărcarea codului

Încarcă următorul cod pe Arduino pentru a-ți face pinball-ul să trăiască!

// Includeți biblioteca pentru ecranul LCD

#include #include

// Inițializați pinii de date LCD

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

// Creați un servo

Servo BallGateServo;

// Creați variabile pentru pinii pe care îi folosim

int gameoverPin = 6; int scor Pin = 5; int speakerPin = 4; int ballGateServoPin = 3;

// Inițializați variabilele de joc pentru pinball

int scor = 0; int highscore = 500; bool highscoreReached = false; bile int = 3; int gameoverTimer = 0; int gameoverTimerDuration = 100; bool gameoverTriggered = false;

// rulați acest cod o dată la primul cadru

void setup () {// Setați pinMode pentru pinii pe care îi folosim pinMode (gameoverPin, INPUT); pinMode (scorePin, INPUT);

// Inițializați lcd-ul dând lățimea și înălțimea

lcd.inceput (16, 2);

// Atașați servo-poartă cu bile la știftul adecvat

ballGateServo.attach (ballGateServoPin);

// Resetați servo-poartă în poziția de pornire

ballGateServo.write (0); }

// Rulați acest cod fiecare cadru

void loop () {// Captează intrările pin în gameoverState = digitalRead (gameoverPin); int scoreState = digitalRead (scorePin);

// Adăugați la scor dacă este primită intrarea

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

// Scade din bile dacă se declanșează groapa de joc

if (gameoverState și! gameoverTriggered) {bile - = 1; gameoverTriggered = adevărat; gameoverTimer = gameoverTimerDuration; }

// Porniți cronometrul jocului imediat ce mingea nu atinge contactul de joc

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

// Clipiți textul gameover pe ecranul LCD și resetați scorul și bilele

if (bile <= 0) {lcd.setCursor (0, 0); for (int i = 5; i> = 1; i--) {lcd.clear (); întârziere (250); lcd.print ("GAME OVER"); lcd.setCursor (0, 1); lcd.print („Încercați din nou?”); întârziere (250); } lcd.clear (); scor = 0; ballGateServo.write (0); highscoreReached = false; bile = 3; }

if (scor> scor maxim și! scor înaltAtins) {

lcd.setCursor (0, 0); for (int i = 5; i> = 1; i--) {lcd.clear (); întârziere (250); lcd.print („NEW HIGHSCORE”); lcd.setCursor (0, 1); lcd.print („Moarte subită!”); întârziere (250); } lcd.clear (); bile = 1; ballGateServo.write (120); highscore = scor; highscoreReached = adevărat; }

// Actualizați scorul dacă scorul curent este mai mare

if (scor> scor maxim) {scor înalt = scor; }

// Setați cursorul pe linia 0

lcd.setCursor (0, 0); // Imprimați scorul curent (mare) pe lcd dacă (scor <= 0) {lcd.print ("Highscore:" + String (highscore) + ""); } else {lcd.print ("Scor:" + Șir (scor) + ""); }

// Setați cursorul pe linia 1

lcd.setCursor (0, 1);

// Imprimați cantitatea actuală de bile pe lcd

lcd.print ("Bile:" + Șir (bile)); }

Recomandat: