Përmbajtje:

Arduino: Makinë Pinball: 8 hapa (me fotografi)
Arduino: Makinë Pinball: 8 hapa (me fotografi)

Video: Arduino: Makinë Pinball: 8 hapa (me fotografi)

Video: Arduino: Makinë Pinball: 8 hapa (me fotografi)
Video: Lesson 02 Arduino IDE Software | Robojax Arduino Step By Step Course 2024, Qershor
Anonim
Image
Image

Meqenëse gjithmonë i kam dashur të dy makinat e pinballit dhe elektronikën, vendosa të krijoj makinën time të pinballit. Zgjodha Arduino për programim dhe elektronikë, sepse është një platformë shumë e arritshme që është kompakte dhe e lehtë për t’u përdorur.

Në këtë udhëzues unë do të shpjegoj procesin tim të zhvillimit, kështu që ndoshta njëri prej jush entuziastë mund të krijojë diçka të ngjashme.

Hapi 1: Ndërtimi i çështjes

Ndërtimi i Rastit
Ndërtimi i Rastit

Le të fillojmë me rastin e makinës pinball. Kam bërë një ndërtim mjaft të thjeshtë. Kam sharruar një pjatë të poshtme dhe kam përdorur 4 shtylla të vogla prej druri në qoshe për të lidhur pjesët e murit. Madhësia e kutisë suaj është zgjedhja juaj, unë zgjodha ta bëj atë më të vogël se një makinë pinball origjinale pasi nuk po planifikoja të shtoja ndonjë shtesë super spektakolare për të mbushur hapësirën. Kam përdorur të dy vida dhe zam për ta bërë rastin sa më të qëndrueshëm. Në pjesën e pasme kam shpuar dy vrima në pjesën e dyshemesë për dy këmbët që do t'i japin makinës së pinballit pjerrësinë portreti. Përsëri, lartësia e këmbëve varet nga ju. Sa më i gjatë të bëni këmbët, aq më shpejt topi do të rrokulliset (poshtë).

Hapi 2: Ndërtimi i Mekanikës Flipper

Ndërtimi i Mekanikës Flipper
Ndërtimi i Mekanikës Flipper

Meqë doja të kufizoja koston e këtij projekti, vendosa të bëj rrahëse plotësisht mekanike në vend të atyre elektronike. Nëse jeni të interesuar për rrahësit elektronikë, mund të përdorni një strukturë që është disi e njëjtë, por me një të ashtuquajtur 'solenoid' të lidhur me të (solenoidët me fuqi të mjaftueshme për të kontrolluar rrahësit ishin shumë të shtrenjtë për mua).

Fillova duke shpuar dy vrima në pjesën e poshtme për pikën e boshtit të të dy rrahësve. Unë i shpova vrimat (sipas mendimit tim) pak shumë pranë njëra -tjetrës, dhe kjo bëri që loja të ishte pak shumë e lehtë në fund. Pra, kini kujdes që të mos i vendosni rrahësit shumë pranë njëri -tjetrit, përveç nëse dëshironi një stil të lehtë të lojës.

Unë gjithashtu shpova dy vrima në të dy muret anësore paralelisht me vrimat e palosjeve. Këto vrima do të përdoren për dy butonat e rrotulluesve.

Kam përdorur burime për t'i tërhequr rrahësit përsëri në pozicionin origjinal, dhe kam bërë një konstruksion rrotullues midis rrahësve dhe butonave për t'i bërë ata të rrotullohen kur shtypen butonat. Për të ndaluar që burimet të tërhiqen shumë përpara, unë vendosa dy vida për t'i mbajtur palosësit në pozicionin e tyre origjinal.

Hapi 3: Vendosja e Mureve

Vendosja e Mureve
Vendosja e Mureve

Vendosa nja dy mure për të përcjellur pinballin drejt flippers. Ato janë shumë të thjeshta për tu bërë. Thjesht shponi 3 vrima në pjesën e poshtme të kutisë dhe futni tre kunja prej druri. Mbështillni një brez gome rreth kunjave dhe mbaroni.

Hapi 4: Shtimi i Blloqeve të Rezultateve

Shtimi i Blloqeve të Rezultateve
Shtimi i Blloqeve të Rezultateve
Shtimi i Blloqeve të Rezultateve
Shtimi i Blloqeve të Rezultateve

Blloqet e rezultateve janë një nga pjesët më vendimtare të makinës së pinballit, prandaj sigurohuni që ta bëni këtë pjesë siç duhet. Kam bërë tre blloqe për makinën time të pinballit, por përsëri e gjitha varet nga ju.

Unë sharrova një copë të vogël të një fshesë, dhe mbështolla tela bakri rreth saj. Arduino do ta furnizojë këtë tel bakri vazhdimisht me 5V. Kam ngjitur katër burime stilolapsi në anën për kontakt më të mirë me topin.

Mënyra se si funksionon blloqet e rezultateve është se topi përfundon një qark që çon në një kunj hyrës në Arduino. Kështu që ajo që bëra ishte ngjitja e letrës së aluminit në pjesën e poshtme të kutisë (MOS PREK T CO BAKURIT) dhe lidhja petë me një kunj në Arduino. Sa herë që topi godet si bakrin ashtu edhe aluminin, qarku është i plotë dhe Arduino do të marrë një sinjal.

Unë i lidha të gjitha blloqet e rezultateve së bashku duke përdorur fletë alumini, por mbani në mend se ana ngjitëse NUK përcjell energji elektrike.

Hapi 5: Shtimi i lojës mbi kontaktin

Shtimi i lojës mbi kontaktin
Shtimi i lojës mbi kontaktin

Në fund të makinës së pinballit, në mes të rrahësve, shtova një lojë mbi kontaktin. Sa herë që topi godet këtë kontakt, lojtari do të humbasë një top. Ndërtimi që kam bërë është shumë i njëjtë me blloqet e rezultateve. Vetëm këtu kam përdorur dy vida, dhe përsëri një copë letër alumini në pjesën e poshtme.

Hapi 6: Shpimi i vrimave të kabllove

Shpimi i vrimave të kabllove
Shpimi i vrimave të kabllove
Shpimi i vrimave të kabllove
Shpimi i vrimave të kabllove
Shpimi i vrimave të kabllove
Shpimi i vrimave të kabllove

Para se të fillojmë të lidhim gjithçka deri në Arduino, duhet së pari të shpojmë disa vrima për kabllot. Unë shpova një vrimë përmes të dy pjesëve të fletës së aluminit, kështu që një vrimë në fletën e aluminit afër blloqeve të pikave dhe një vrimë në fletën e aluminit pranë lojës mbi kontakt.

Përveç kësaj, unë gjithashtu shpova një vrimë në pjesën e poshtme të majtë, në mes të mureve, për kabllon që çon në portën shtesë të topit Servo.

Gjithashtu duhet të ketë një vrimë për kabllon e lidhur me LCD -në në fund.

Hapi 7: Instalimi i gjithçkaje

Instalimi i gjithçkaje
Instalimi i gjithçkaje
Instalimi i gjithçkaje
Instalimi i gjithçkaje

Unë e bëra këtë skemë për të pasur një pasqyrë më të mirë se ku duhet të shkojnë të gjitha kabllot. Kryqet janë pikat ku lidhen kabllot. Unë u përpoqa të bashkoj sa më shumë që të jetë e mundur për t'i bërë gjithçka pak më të qëndrueshme dhe të besueshme. Instalimet elektrike do të kërkojnë ca kohë, por pasi të jetë bërë kjo, ju jeni pothuajse atje!

Hapi 8: Ngarkimi i Kodit

Ngarko kodin e mëposhtëm në Arduino tuaj për të bërë që pinball -i juaj të jetojë!

// Përfshini bibliotekën për LCD

#përfshi #përfshi

// Filloni kunjat e të dhënave LCD

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

// Krijoni një servo

Servo ballGateServo;

// Krijoni variabla për kunjat që po përdorim

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

// Filloni variablat e lojës për makinën e pinballit

int rezultati = 0; int rezultati i lartë = 500; bool highscoreReached = false; topa int = 3; int gameoverTimer = 0; int gameoverTimerDuration = 100; bool gameoverTriggered = false;

// ekzekutoni këtë kod një herë në kuadrin e parë

void setup () {// Vendosni pinMode për kunjat që po përdorim pinMode (gameoverPin, INPUT); pinMode (scorePin, INPUT);

// Filloni LCD duke dhënë gjerësinë dhe lartësinë

lcd.filloni (16, 2);

// Bashkojeni servo portën e topit në kunjin e duhur

ballGateServo.attach (ballGateServoPin);

// Rivendosni servo portën në pozicionin fillestar

ballGateServo.shkruaj (0); }

// Drejtojeni këtë kod çdo kornizë të vetme

void loop () {// Kapni hyrjet e pin në gameoverState = digitalRead (gameoverPin); int scoreState = digitalRead (scorePin);

// Shtoni në rezultatin nëse merret hyrja

if (scoreState) {ton (speakerPin, 1000); rezultati += 10; } tjetër {noTone (4); }

// Zbritni nga topat nëse gropa e lojërave nxitet

nëse (gameoverState dhe! gameoverTriggered) {topa -= 1; gameoverTriggered = e vërtetë; gameoverTimer = gameoverTimerDuration; }

// Nisni kohëmatësin e lojës, sapo topi të mos prekë kontaktin e lojës

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

// Mbyllni sytë tekstin e lojës mbi LCD dhe rivendosni rezultatin dhe topat

if (topa <= 0) {lcd.setCursor (0, 0); për (int i = 5; i> = 1; i--) {lcd.qartë (); vonesë (250); lcd.print ("GAME OVER"); lcd.setCursor (0, 1); lcd.print ("Provo përsëri?"); vonesë (250); } lcd.qartë (); rezultat = 0; ballGateServo.shkruaj (0); highscoreReached = false; topa = 3; }

nëse (rezultati> rezultati më i lartë dhe! rezultati më i lartëRrihet) {

lcd.setCursor (0, 0); për (int i = 5; i> = 1; i--) {lcd.qartë (); vonesë (250); lcd.print ("REAL HIGHSCORE"); lcd.setCursor (0, 1); lcd.print ("Vdekja e papritur!"); vonesë (250); } lcd.qartë (); topa = 1; ballGateServo.shkruaj (120); rezultati i lartë = rezultati; highscoreReached = e vërtetë; }

// Përditësoni rezultatin e lartë nëse rezultati aktual është më i lartë

nëse (rezultati> rezultati më i lartë) {rezultati më i lartë = rezultati; }

// Vendoseni kursorin në rreshtin 0

lcd.setCursor (0, 0); // Shtyp rezultatin aktual (të lartë) në LCD nëse (rezultati <= 0) {lcd.print ("Rezultati më i lartë:" + Vargu (rezultati i lartë) + ""); } else {lcd.print ("Rezultati:" + Vargu (rezultati) + ""); }

// Vendoseni kursorin në rreshtin 1

lcd.setCursor (0, 1);

// Shtypni sasinë aktuale të topave në LCD

lcd.print ("Topa:" + Varg (topa)); }

Recommended: