Satura rādītājs:

Arduino: Pinball Machine: 8 soļi (ar attēliem)
Arduino: Pinball Machine: 8 soļi (ar attēliem)

Video: Arduino: Pinball Machine: 8 soļi (ar attēliem)

Video: Arduino: Pinball Machine: 8 soļi (ar attēliem)
Video: Ai robots taking over ping pong 👀 #shorts 2024, Jūnijs
Anonim
Image
Image

Tā kā es vienmēr esmu mīlējis gan pinball mašīnas, gan elektroniku, es nolēmu izveidot savu pinball automātu. Programmēšanai un elektronikai es izvēlējos Arduino, jo tā ir ļoti pieejama platforma, kas ir gan kompakta, gan viegli lietojama.

Šajā rokasgrāmatā es izskaidrošu savu attīstības procesu, tāpēc varbūt kāds no jūsu entuziastiem varētu radīt kaut ko līdzīgu.

1. darbība: lietas izveidošana

Lietas veidošana
Lietas veidošana

Sāksim ar pinball mašīnas korpusu. Es izveidoju diezgan vienkāršu konstrukciju. Es nogriezu apakšējo plāksni un izmantoju 4 mazus koka pīlārus stūros, lai savienotu sienas. Jūsu korpusa izmērs ir jūsu izvēle, es izvēlējos to padarīt mazliet mazāku par oriģinālo pinball mašīnu, jo es neplānoju pievienot nekādas super iespaidīgas ekstras, lai aizpildītu vietu. Es izmantoju gan skrūves, gan līmi, lai korpuss būtu pēc iespējas vienmērīgāks. Aizmugurē es izurbju divus caurumus grīdas gabalā abām kājām, kas pinball mašīnai piešķirs ikonu slīpumu. Atkal, kāju augstums ir atkarīgs no jums. Jo augstākas kājas, jo ātrāk bumba ripos (uz leju).

2. darbība: Flipper mehāniķa konstruēšana

Flipper mehāniķa konstruēšana
Flipper mehāniķa konstruēšana

Tā kā es vēlējos ierobežot šī projekta izmaksas, es nolēmu izgatavot pilnībā mehāniskus pleznas, nevis elektroniskus. Ja jūs interesē elektroniskie pleznas, varat izmantot konstrukciju, kas ir nedaudz līdzīga, bet kurai ir pievienots tā sauktais “solenoīds” (solenoīdi ar pietiekamu jaudu, lai kontrolētu pleznas, man bija pārāk dārgi).

Sākumā es urbju divus caurumus apakšā abu pleznu pagrieziena punktam. Es urbju caurumus (pēc manām domām) mazliet pārāk tuvu viens otram, un tas galu galā padarīja spēli pārāk vieglu. Tāpēc esiet piesardzīgs un nelieciet pleznas pārāk tuvu viens otram, ja vien nevēlaties vieglu spēles stilu.

Es arī izurbju divus caurumus abās sānu sienās paralēli pleznas caurumiem. Šie caurumi ir jāizmanto abām flipper pogām.

Es izmantoju atsperes, lai ievilktu pleznas atpakaļ sākotnējā stāvoklī, un izveidoju pagriežamu konstrukciju starp pleznām un pogām, lai tās pagrieztos, nospiežot pogas. Lai atsperes nevarētu pārāk atvilkt pleznas, es ievietoju divas skrūves, lai noturētu pleznas sākotnējā stāvoklī.

3. solis: sienu novietošana

Sienu novietošana
Sienu novietošana

Es novietoju pāris sienas, lai novirzītu pinballu uz pleznām. Tie ir ļoti vienkārši izgatavojami. Vienkārši urbiet 3 caurumus korpusa apakšā un iespiediet trīs koka tapas. Aptiniet gumiju ap tapām un esat pabeidzis.

4. solis: punktu bloku pievienošana

Rezultātu bloku pievienošana
Rezultātu bloku pievienošana
Rezultātu bloku pievienošana
Rezultātu bloku pievienošana

Rezultātu bloki ir viena no vissvarīgākajām pinball mašīnas daļām, tāpēc pārliecinieties, ka šo daļu darāt pareizi. Es izveidoju trīs punktu blokus savai pinball mašīnai, bet atkal viss ir atkarīgs no jums.

Es nogriezu nelielu slotas kāta gabalu un aptinu vara stiepli ap to. Arduino nepārtraukti darbinās šo vara stiepli ar 5 V. Es lodēju četras pildspalvas atsperes uz sāniem, lai labāk saskartos ar bumbu.

Rezultātu bloku darbības veids ir tāds, ka bumba pabeidz ķēdi, kas noved pie Arduino ievades tapas. Tātad, ko es izdarīju, līmēju alumīnija foliju uz korpusa apakšas (NESKAIDROJIET VARU) un pievelciet foliju līdz tapai uz Arduino. Ikreiz, kad bumba atsitās pret varu un alumīniju, ķēde ir pabeigta, un Arduino saņems signālu.

Es savienoju visus punktu blokus kopā, izmantojot alumīnija foliju, taču paturiet prātā, ka lipīgā puse NAV vadījusi elektrību.

5. solis: spēles pievienošana kontaktam

Spēles pievienošana kontaktam
Spēles pievienošana kontaktam

Pinball mašīnas apakšā, starp pleznām, es pievienoju spēli virs kontakta. Ikreiz, kad bumba ietriecas šajā kontaktā, spēlētājs zaudēs bumbu. Manis izgatavotā konstrukcija ir ļoti tāda pati kā punktu bloki. Tikai šeit es izmantoju divas skrūves un atkal alumīnija folijas gabalu apakšā.

6. solis: kabeļu caurumu urbšana

Kabeļu caurumu urbšana
Kabeļu caurumu urbšana
Kabeļu caurumu urbšana
Kabeļu caurumu urbšana
Kabeļu caurumu urbšana
Kabeļu caurumu urbšana

Pirms sākam visu pieslēgt pie Arduino, vispirms ir jāizurbj pāris caurumi kabeļiem. Es izurbju caurumu caur abiem alumīnija folijas gabaliem, tāpēc viens caurums alumīnija folijā netālu no punktu blokiem un viens caurums alumīnija folijā pie spēles virs kontakta.

Bez tam es arī izurbju caurumu apakšējā kreisajā stūrī, starp sienām, kabeli, kas ved uz papildu lodveida vārtiem Servo.

Apakšā vajadzētu būt arī caurumam kabelim, kas savienots ar LCD.

7. solis: visu pieslēdziet vadiem

Visu elektroinstalācija
Visu elektroinstalācija
Visu elektroinstalācija
Visu elektroinstalācija

Es izveidoju šo shēmu, lai būtu labāks pārskats par to, kur vajadzētu novietot visus kabeļus. Krusti ir kabeļu savienojuma punkti. Es centos pēc iespējas vairāk lodēt, lai viss būtu mazliet stabilāks un uzticamāks. Elektroinstalācija prasīs zināmu laiku, bet pēc tam, kad tas ir izdarīts, jūs gandrīz esat tur!

8. darbība: koda augšupielāde

Augšupielādējiet šo kodu savā Arduino, lai jūsu pinball mašīna sāktu darboties!

// Iekļaut lcd bibliotēku

#iekļaut #iekļaut

// Inicializējiet LCD datu tapas

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

// Izveidojiet servo

Servo bumbaGateServo;

// Izveidojiet mainīgos tapām, kuras mēs izmantojam

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

// Inicializēt spēles mainīgos lielumus pinball mašīnai

int rezultāts = 0; int augstākais rezultāts = 500; bool highscoreReached = nepatiess; int bumbiņas = 3; int gameoverTimer = 0; int gameoverTimerDuration = 100; bool gameoverTriggered = false;

// palaidiet šo kodu vienreiz pirmajā kadrā

void setup () {// Iestatiet pinMode tām tapām, kuras mēs izmantojam pinMode (gameoverPin, INPUT); pinMode (scorePin, INPUT);

// Inicializējiet LCD, norādot platumu un augstumu

lcd. sākums (16, 2);

// Piestipriniet lodīšu vārtu servo pie atbilstošās tapas

ballGateServo.attach (ballGateServoPin);

// Atiestatiet vārtu servo sākuma stāvoklī

ballGateServo.write (0); }

// Palaidiet šo kodu katru kadru

void loop () {// Uztveriet PIN ievades int gameoverState = digitalRead (gameoverPin); int scoreState = digitalRead (scorePin);

// Pievienot rezultātam, ja tiek saņemta ievade

if (scoreState) {tone (speakerPin, 1000); rezultāts += 10; } cits {noTone (4); }

// Atņemiet no bumbiņām, ja tiek aktivizēta spēle

ja (gameoverState un! gameoverTriggered) {bumbiņas -= 1; gameoverTriggered = true; gameoverTimer = gameoverTimerDuration; }

// Sāciet spēles pārslēgšanas taimeri, tiklīdz bumba nepieskaras spēles pārslēgšanas kontaktam

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

// Blink gameover tekstu uz LCD un atiestatīt rezultātu un bumbiņas

ja (bumbiņas <= 0) {lcd.setCursor (0, 0); par (int i = 5; i> = 1; i--) {lcd.clear (); kavēšanās (250); lcd.print ("GAME OVER"); lcd.setCursor (0, 1); lcd.print ("Vai mēģināt vēlreiz?"); kavēšanās (250); } lcd.clear (); rezultāts = 0; ballGateServo.write (0); highscoreReached = nepatiess; bumbiņas = 3; }

ja (rezultāts> rekords un! rekordsReached) {

lcd.setCursor (0, 0); par (int i = 5; i> = 1; i--) {lcd.clear (); kavēšanās (250); lcd.print ("NEW HIGHSCORE"); lcd.setCursor (0, 1); lcd.print ("Pēkšņa nāve!"); kavēšanās (250); } lcd.clear (); bumbiņas = 1; ballGateServo.write (120); labākais rezultāts = rezultāts; highscoreReached = taisnība; }

// Atjauniniet labāko rezultātu, ja pašreizējais rādītājs ir augstāks

if (score> topscore) {tops = score; }

// Iestatiet kursoru uz 0 rindu

lcd.setCursor (0, 0); // Izdrukāt pašreizējo (augsto) rezultātu uz lcd, ja (score <= 0) {lcd.print ("Labākais rezultāts:" + String (tops) + ""); } else {lcd.print ("Rezultāts:" + virkne (rezultāts) + ""); }

// Iestatiet kursoru uz 1. rindu

lcd.setCursor (0, 1);

// Izdrukājiet pašreizējo bumbiņu daudzumu uz LCD

lcd.print ("Bumbas:" + Stīga (bumbiņas)); }

Ieteicams: