Mündəricat:

Arduino: Pinball Machine: 8 Addım (Şəkillərlə birlikdə)
Arduino: Pinball Machine: 8 Addım (Şəkillərlə birlikdə)

Video: Arduino: Pinball Machine: 8 Addım (Şəkillərlə birlikdə)

Video: Arduino: Pinball Machine: 8 Addım (Şəkillərlə birlikdə)
Video: CS50 2014 - Week 7 2024, Noyabr
Anonim
Image
Image

Həmişə langırt maşınlarını və elektronikanı çox sevdiyim üçün öz langırt maşınımı qurmağa qərar verdim. Proqramlaşdırma və elektronika üçün Arduinonu seçdim, çünki həm yığcam, həm də istifadəsi asan bir platformadır.

Bu təlimatda inkişaf prosesimi izah edəcəyəm, buna görə də ehtirasçılarınızdan biri eyni şeyi yarada bilər.

Addım 1: Davanın qurulması

Davanın qurulması
Davanın qurulması

Langırt maşınının vəziyyətindən başlayaq. Kifayət qədər sadə bir tikinti etdim. Bir alt lövhəni kəsdim və divar hissələrini birləşdirmək üçün künclərdə 4 kiçik taxta sütundan istifadə etdim. Çantanızın ölçüsü öz seçiminizdir, yerini doldurmaq üçün super möhtəşəm əlavələr əlavə etməyi planlaşdırmadığım üçün orijinal bir langırt maşınından bir qədər kiçik etməyi seçdim. Çantanı mümkün qədər sabit etmək üçün həm vintlər, həm də yapışqan istifadə etdim. Arxa tərəfdə, langırt maşınının əyilməsini təmin edəcək iki ayaq üçün döşəmə hissəsində iki delik açdım. Yenə də ayaqların hündürlüyü hər şeydən asılıdır. Ayaqları nə qədər hündür etsəniz, top daha sürətli yuvarlanacaq (aşağıya doğru).

Addım 2: Flipper Mexanikinin qurulması

Flipper Mexanikinin qurulması
Flipper Mexanikinin qurulması

Bu layihənin dəyərini məhdudlaşdırmaq istədiyim üçün, elektron deyil, tam mexaniki üzlük hazırlamağa qərar verdim. Elektron çarxlar ilə maraqlanırsınızsa, bir qədər eynidır, ancaq ona "solenoid" deyilən bir konstruksiyadan istifadə edə bilərsiniz (üzgəcləri idarə etmək üçün kifayət qədər gücə malik solenoidlər mənim üçün çox bahalı idi).

Hər iki qanadın dönmə nöqtəsi üçün altda iki delik açmağa başladım. Delikləri (fikrimcə) bir -birinə çox yaxın qazdım və bu, oyunun sonunda bir az çox asan olmasına səbəb oldu. Asan bir oyun tərzi istəməsəniz, üzgəcləri bir -birinə çox yaxın qoymamağa diqqət edin.

Yan divarların hər ikisində dəliklərə paralel olaraq iki delik açdım. Bu deliklər iki döngə düyməsi üçün istifadə edilməlidir.

Flippers'ı orijinal vəziyyətinə qaytarmaq üçün yaylardan istifadə etdim və düymələr basıldıqda dönməsini təmin etmək üçün flippers və düymələr arasında dönmə quruluşu etdim. Yayların üzgəcləri çox geri çəkməsini dayandırmaq üçün, qanadları orijinal vəziyyətində saxlamaq üçün iki vida qoydum.

Addım 3: Divarların yerləşdirilməsi

Divarların yerləşdirilməsi
Divarların yerləşdirilməsi

Pinbolu üzüklərə doğru yönləndirmək üçün bir neçə divar qoydum. Hazırlanması çox sadədir. Kassanın altındakı 3 delik qazın və üç taxta sancağı itələyin. Sancaqlar ətrafında bir rezin bant sarın və işiniz bitdi.

Addım 4: Skor Bloklarını əlavə edin

Hesab Bloklarının Əlavə edilməsi
Hesab Bloklarının Əlavə edilməsi
Hesab Bloklarının Əlavə edilməsi
Hesab Bloklarının Əlavə edilməsi

Hesab blokları langırt maşınının ən vacib hissələrindən biridir, buna görə də bu hissəni düzgün etdiyinizə əmin olun. Langırt maşınım üçün üç hesab bloku hazırladım, amma yenə də hər şey sənə aiddir.

Kiçik bir süpürgə parçasını kəsdim və ətrafına mis tel sardım. Arduino bu mis teli 5V ilə davamlı olaraq işlədəcək. Topla daha yaxşı təmasda olmaq üçün dörd qələm yayını yan tərəfə lehimlədim.

Hesab bloklarının işləmə üsulu, topun Arduino'ya giriş pininə aparan bir dövrəni tamamlamasıdır. Yəni etdiyim işin altındakı alüminium folqa lenti (MƏSƏNƏ DOKUNMADAN) və folqa ilə Arduinonun bir pininə qədər tel bağlamaq idi. Top həm misə, həm də alüminiuma dəyəndə dövrə tamam olur və Arduino bir siqnal alacaq.

Alüminium folqa istifadə edərək bütün hesab bloklarını bir -birinə bağladım, ancaq yapışqan tərəfin elektrik keçirmədiyini unutmayın.

Addım 5: Əlaqəyə Oyunun Əlavə Edilməsi

Əlaqə üzərində Oyunun Əlavə edilməsi
Əlaqə üzərində Oyunun Əlavə edilməsi

Langırt maşınının altındakı, qanadların arasına təmasda bir oyun əlavə etdim. Top bu təmasa nə zaman dəysə, oyunçu topunu itirər. Hazırladığım tikinti hesab blokları ilə çox eynidir. Yalnız burada iki vida istifadə etdim və yenə altda alüminium folqa parçası.

Addım 6: Kabel Deliklərinin Qazılması

Kabel Deliklərinin Qazılması
Kabel Deliklərinin Qazılması
Kabel Deliklərinin Qazılması
Kabel Deliklərinin Qazılması
Kabel Deliklərinin Qazılması
Kabel Deliklərinin Qazılması

Hər şeyi Arduinoya bağlamağa başlamazdan əvvəl əvvəlcə kabellər üçün bir neçə delik açmalıyıq. Hər iki alüminium folqa dəliyindən bir deşik açdım, buna görə alüminium folqa içərisindəki skor bloklarının yaxınlığında və oyunun yanında alüminium folqa ilə təmasda bir çuxur qazdım.

Bundan əlavə, sol altda, divarlar arasında, əlavə top qapısı Servo -ya gedən kabel üçün dəlik açdım.

Aşağıda LCD -yə qoşulan kabel üçün dəlik olmalıdır.

Addım 7: Hər şeyi bağlayın

Hər şeyi yuxarı çəkmək
Hər şeyi yuxarı çəkmək
Hər şeyi yuxarı çəkmək
Hər şeyi yuxarı çəkmək

Bütün kabellərin hara getməli olduğunu daha yaxşı bir şəkildə görmək üçün bu sxematik etdim. Xaçlar kabellərin birləşdiyi nöqtələrdir. Hər şeyi bir az daha sabit və etibarlı etmək üçün mümkün qədər lehimləməyə çalışdım. Kablolama bir az vaxt aparacaq, ancaq bu iş bitdikdən sonra demək olar ki, oradasınız!

Addım 8: Kodun Yüklənməsi

Langırt maşınınızın canlanması üçün aşağıdakı kodu Arduino -ya yükləyin!

// LCD üçün kitabxananı daxil edin

#daxil edin #daxil edin

// LCD məlumat pinlərini işə salın

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

// Bir servo yaradın

Servo topuGateServo;

// İstifadə etdiyimiz sancaqlar üçün dəyişənlər yaradın

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

// Langırt maşını üçün oyun dəyişənlərini işə salın

int hesab = 0; int yüksək puanı = 500; bool highscoreReached = yalan; int topları = 3; int gameoverTimer = 0; int gameoverTimerDuration = 100; bool gameoverTriggered = yalan;

// bu kodu ilk çərçivədə bir dəfə işlədin

void setup () {// pinMode (gameoverPin, INPUT) istifadə etdiyimiz sancaqlar üçün pinMode qurun; pinMode (scorePin, INPUT);

// Genişliyi və hündürlüyü verərək lcd -ni işə salın

lcd.begin (16, 2);

// Top qapısı servosunu uyğun pinə bağlayın

ballGateServo.attach (ballGateServoPin);

// Qapı servosunu başlanğıc vəziyyətinə qaytarın

ballGateServo.write (0); }

// Bu kodu hər çərçivədə işlədin

void loop () {// pin girişlərini int gameoverState = digitalRead (gameoverPin) tutun; int scoreState = digitalRead (scorePin);

// Giriş alınarsa hesaba əlavə edin

if (scoreState) {ton (SpeakerPin, 1000); bal += 10; } başqa {noTone (4); }

// Oyundakı çuxur tetiklenirse toplardan çıxarın

if (gameoverState və! gameoverTriggered) {toplar -= 1; gameoverTriggered = doğru; gameoverTimer = gameoverTimerDuration; }

// Top oyunun təmas hissəsinə toxunmadığı anda oyun vaxtı sayğacını işə salın

if (! gameoverState) {if (gameoverTimer> = 1) {gameoverTimer -= 1; } başqa {gameoverTriggered = false; }}

// Oyundakı mətni lcd -ə yandırın və hesabı və topları sıfırlayın

əgər (toplar <= 0) {lcd.setCursor (0, 0); for (int i = 5; i> = 1; i--) {lcd.clear (); gecikmə (250); lcd.print ("OYUN BİTDİ"); lcd.setCursor (0, 1); lcd.print ("Yenidən cəhd edilsin?"); gecikmə (250); } lcd.clear (); bal = 0; ballGateServo.write (0); highscoreReached = yalan; toplar = 3; }

if (hesab> yüksək və! yüksək skorReach) {

lcd.setCursor (0, 0); for (int i = 5; i> = 1; i--) {lcd.clear (); gecikmə (250); lcd.print ("YENİ YÜKSƏK"); lcd.setCursor (0, 1); lcd.print ("Ani ölüm!"); gecikmə (250); } lcd.clear (); toplar = 1; ballGateServo.write (120); yüksək bal = hesab; highscoreReached = doğru; }

// Mövcud hesab daha yüksəkdirsə, yüksək puanı yeniləyin

if (score> highscore) {highscore = score; }

// Kursoru 0 sətirinə qoyun

lcd.setCursor (0, 0); // Cari (yüksək) balı lcd -ə yazdırsanız (bal <= 0) {lcd.print ("Highscore:" + String (highscore) + ""); } başqa {lcd.print ("Hesab:" + String (hesab) + ""); }

// Kursoru 1 -ci sətrə təyin edin

lcd.setCursor (0, 1);

// Topların cari miqdarını lcd -ə yazdırın

lcd.print ("Toplar:" + String (toplar)); }

Tövsiyə: