Mundarija:

Arduino: Pinball mashinasi: 8 qadam (rasmlar bilan)
Arduino: Pinball mashinasi: 8 qadam (rasmlar bilan)

Video: Arduino: Pinball mashinasi: 8 qadam (rasmlar bilan)

Video: Arduino: Pinball mashinasi: 8 qadam (rasmlar bilan)
Video: It Became Unliveable! ~ Abandoned Home Of The Spenser's In The USA 2024, Iyun
Anonim
Image
Image

Men har doim pinball mashinalarini ham, elektronikani ham yaxshi ko'rganim uchun, men o'zim pinball mashinasini yasashga qaror qildim. Men Arduino -ni dasturlash va elektronika uchun tanladim, chunki bu juda qulay va ixcham platforma.

Ushbu qo'llanmada men o'zimning rivojlanish jarayonimni tushuntiraman, shuning uchun ehtimol sizlardan biringiz qiziqtirgan narsalarga o'xshash narsalarni yaratishi mumkin.

1 -qadam: Kosonni yaratish

Kosonni qurish
Kosonni qurish

Keling, pinball mashinasining holatidan boshlaylik. Men juda oddiy qurilish qildim. Men pastki plastinani arraladim va devor qismlarini ulash uchun burchaklaridagi 4 ta kichik yog'och ustunni ishlatdim. Sizning sumkangizning o'lchami - bu sizning shaxsiy tanlovingiz, men bo'sh joyni to'ldirish uchun hech qanday ajoyib qo'shimchalar qo'shishni rejalashtirmaganim uchun uni asl pinball mashinasidan biroz kichikroq qilib tanladim. Kosonni iloji boricha barqaror qilish uchun men ikkala vintni ham, elimdan ham foydalandim. Orqa tarafda men ikki oyoq uchun polga ikkita teshik ochdim, bu pinbol mashinasiga o'ziga xos qiyalik beradi. Shunga qaramay, oyoqlarning balandligi sizga bog'liq. Oyoqlaringizni qanchalik baland qilsangiz, to'p tezroq aylanadi (pastga).

2 -qadam: Flipper mexanikasini qurish

Flipper mexanikasini qurish
Flipper mexanikasini qurish

Men bu loyihaning narxini cheklamoqchi bo'lganim uchun, elektron o'rniga to'liq mexanik qanot yasashga qaror qildim. Agar siz elektron qanotlarga qiziqsangiz, bir xil konstruktsiyani ishlatishingiz mumkin, lekin unga "solenoid" ulangan (qanotlarni boshqarish uchun etarli kuchga ega solenoidlar men uchun juda qimmat bo'lgan).

Men ikkala qanotning burilish nuqtasi uchun pastki qismida ikkita teshik ochishdan boshladim. Men teshiklarni (mening fikrimcha) bir -biriga juda yaqin burg'uladim va bu oxir -oqibat o'yinni biroz osonlashtirdi. Oson o'yin uslubini xohlamasangiz, qanotlarni bir -biriga juda yaqin qo'yishdan ehtiyot bo'ling.

Men, shuningdek, yon devorlarda burilish teshiklariga parallel ikkita teshik ochdim. Bu teshiklar ikkita burilish tugmasi uchun ishlatilishi kerak.

Men qanotlarni asl holatiga qaytarish uchun kamonlardan foydalandim va tugmalar bosilganda ularni aylantirish uchun qanotlar va tugmalar o'rtasida aylanadigan konstruktsiya qildim. Buloqlarni qanotlarni orqaga qaytarib olishini to'xtatish uchun, men qanotlarni asl holatida ushlab turish uchun ikkita vintni joylashtirdim.

3 -qadam: Devorlarni joylashtirish

Devorlarni joylashtirish
Devorlarni joylashtirish

Pinbolni qanotlarga yo'naltirish uchun men ikkita devor qo'ydim. Ularni tayyorlash juda oddiy. Qutining pastki qismida 3 teshik oching va uchta yog'och pimni kiriting. Pimlarni rezina tasma bilan o'rab oling va ishingiz tugadi.

4 -qadam: Ballar bloklarini qo'shish

Ballar bloklarini qo'shish
Ballar bloklarini qo'shish
Ballar bloklarini qo'shish
Ballar bloklarini qo'shish

Hisob bloklari pinball mashinasining eng muhim qismlaridan biridir, shuning uchun bu qismni to'g'ri bajarganingizga ishonch hosil qiling. Men pinball mashinam uchun uchta ball blok yasadim, lekin yana hammasi sizga bog'liq.

Men supurgi tayog'ining kichkina qismini arralab, mis simni o'rab oldim. Arduino bu mis simni doimiy ravishda 5V quvvat bilan ta'minlaydi. To'p bilan yaxshiroq aloqa qilish uchun men to'rtta qalamli buloqni yon tomonga lehimladim.

Hisobni blokirovka qilish usuli shundaki, to'p Arduino -ga kirish piniga olib keladigan kontaktlarning zanglashiga olib keladi. Shunday qilib, men korpusning pastki qismiga alyumin folga yopishtirdim (misga tegmayman) va plyonkani Arduino piniga mahkamlang. Qachonki, to'p misga ham, alyuminiyga ham tegsa, kontaktlarning zanglashi tugallanadi va Arduino signal oladi.

Men alyumin folga yordamida barcha ball bloklarini birlashtirdim, lekin shuni esda tutingki, yopishqoq tomoni elektr o'tkazmaydi.

5 -qadam: O'yinni aloqa orqali qo'shish

Kontakt orqali o'yinni qo'shish
Kontakt orqali o'yinni qo'shish

Pinball mashinasining pastki qismida, suzgichlar orasiga men aloqa orqali o'yin qo'shdim. Qachonki bu kontaktga to'p tegsa, o'yinchi to'pni yo'qotadi. Men qilgan qurilish balli bloklar bilan bir xil. Faqat bu erda men ikkita vintni ishlatdim, yana tagida alyumin folga.

6 -qadam: Kabel teshiklarini burg'ulash

Kabel teshiklarini burg'ulash
Kabel teshiklarini burg'ulash
Kabel teshiklarini burg'ulash
Kabel teshiklarini burg'ulash
Kabel teshiklarini burg'ulash
Kabel teshiklarini burg'ulash

Hamma narsani Arduino -ga ulashni boshlashdan oldin, biz avval kabellar uchun bir nechta teshik ochishimiz kerak. Men alyumin folga bo'lagining ikkala bo'lagidan teshik ochdim, shuning uchun alyumin folga teshiklari bloklar yonida va o'yin yaqinida alyumin folga bir teshik bilan tegdi.

Bundan tashqari, men chap pastki qismida, devorlar oralig'ida, qo'shimcha sharli Servo darvozasiga olib boruvchi kabel uchun teshik ochdim.

Bundan tashqari, pastki qismida LCD ga ulangan kabel uchun teshik bo'lishi kerak.

7 -qadam: Hamma narsani ulash

Hammasini yuqoriga ulash
Hammasini yuqoriga ulash
Hammasini yuqoriga ulash
Hammasini yuqoriga ulash

Men ushbu sxemani barcha kabellar qaerga ketishi kerakligini yaxshiroq ko'rib chiqish uchun qildim. Xochlar kabellar ulanadigan joylardir. Men hamma narsani biroz barqaror va ishonchli qilish uchun iloji boricha lehimlashga harakat qildim. Kabelni uzatish biroz vaqt talab etadi, lekin bu tugagandan so'ng siz deyarli keldingiz!

8 -qadam: Kodni yuklash

Pinball mashinangizni ishga tushirish uchun Arduino -ga quyidagi kodni yuklang!

// LCD uchun kutubxonani qo'shing

#qo'shing #qo'shing

// LCD ma'lumot pinlarini ishga tushiring

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

// Servo yarating

Servo to'pi GateServo;

// Biz foydalanadigan pinlar uchun o'zgaruvchilar yarating

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

// Pinball mashinasi uchun o'yin o'zgaruvchilarini ishga tushiring

int bal = 0; int yuqori ball = 500; bool highscoreReached = noto'g'ri; int to'plari = 3; int gameoverTimer = 0; int gameoverTimerDuration = 100; bool gameoverTriggered = noto'g'ri;

// bu kodni birinchi freymda bir marta ishga tushiring

void setup () {// biz ishlatayotgan pinMode uchun pinMode -ni o'rnating (gameoverPin, INPUT); pinMode (scorePin, INPUT);

// Kenglik va balandlikni berish orqali LCD -ni ishga tushiring

lcd.begin (16, 2);

// Balli darvoza servosini mos keladigan pinga ulang

ballGateServo.attach (ballGateServoPin);

// Darvoza servosini dastlabki holatiga qaytaring

ballGateServo.write (0); }

// Ushbu kodni har bir freymda ishga tushiring

void loop () {// pin o'yinlarini int gameoverState = digitalRead (gameoverPin) yozib oling; int scoreState = digitalRead (scorePin);

// Kirish qabul qilingan bo'lsa, ballarni qo'shing

if (scoreState) {ohang (SpeakerPin, 1000); ball += 10; } boshqa {noTone (4); }

// O'yindagi chuqur ishga tushirilsa, to'plardan olib tashlang

agar (gameoverState va! gameoverTriggered) {sharlar -= 1; gameoverTriggered = rost; gameoverTimer = gameoverTimerDuration; }

// To'p o'yindagi kontaktga tegmaguncha, o'yin taymerini ishga tushiring

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

// O'yindagi matnni LCD -ga o'chiring va hisob va to'plarni qayta o'rnating

if (sharlar <= 0) {lcd.setCursor (0, 0); uchun (int i = 5; i> = 1; i--) {lcd.clear (); kechikish (250); lcd.print ("O'YIN TUG'ULDI"); lcd.setCursor (0, 1); lcd.print ("Qayta urinasizmi?"); kechikish (250); } lcd.clear (); ball = 0; ballGateServo.write (0); highscoreReached = noto'g'ri; to'p = 3; }

agar (ball> yuqori va! yuqori reytingga erishilgan) {

lcd.setCursor (0, 0); uchun (int i = 5; i> = 1; i--) {lcd.clear (); kechikish (250); lcd.print ("YANGI YUQORI"); lcd.setCursor (0, 1); lcd.print ("To'satdan o'lim!"); kechikish (250); } lcd.clear (); to'plar = 1; ballGateServo.write (120); yuqori ball = ball; highscoreReached = rost; }

// Agar joriy ball yuqori bo'lsa, yuqori ballni yangilang

if (ball> yuqori ball) {yuqori ball = ball; }

// Kursorni 0 qatoriga o'rnating

lcd.setCursor (0, 0); // Joriy (yuqori) ballni lcd -ga chop eting, agar (ball <= 0) {lcd.print ("Yuqori reyting:" + String (yuqori ball) + ""); } boshqa {lcd.print ("Hisob:" + String (ball) + ""); }

// Kursorni 1 -qatorga o'rnating

lcd.setCursor (0, 1);

// Hozirgi to'plar miqdorini lcd -ga chop eting

lcd.print ("To'plar:" + String (to'plar)); }

Tavsiya: