Cuprins:
2025 Autor: John Day | [email protected]. Modificat ultima dată: 2025-01-13 06:58
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
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
Î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
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
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
Î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
Î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
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)); }