Агуулгын хүснэгт:

Arduino: Pinball Machine: 8 алхам (зурагтай)
Arduino: Pinball Machine: 8 алхам (зурагтай)

Видео: Arduino: Pinball Machine: 8 алхам (зурагтай)

Видео: Arduino: Pinball Machine: 8 алхам (зурагтай)
Видео: TSPP Pinball пинбол настройка купюроприемника и монетоприемника 2024, Арваннэгдүгээр
Anonim
Image
Image

Пинболын машин, электроникийн аль алинд нь би үргэлж дуртай байсан болохоор би өөрөө пинболын машин бүтээхээр шийдсэн. Би програмчлал, электроникийн чиглэлээр Arduino -г сонгосон, учир нь энэ нь авсаархан, ашиглахад хялбар платформ юм.

Энэхүү гарын авлагад би өөрийн хөгжлийн явцыг тайлбарлах болно, тиймээс та нарын нэг нь энтертайнистууд ижил төстэй зүйлийг бүтээж магадгүй юм.

Алхам 1: Хэргийг бүрдүүлэх

Хэргийг бүрдүүлэх
Хэргийг бүрдүүлэх

Пинболын машины жишээнээс эхэлье. Би нэлээд энгийн хийц хийсэн. Би ёроолын хавтанг хөрөөдөөд булангийн 4 жижиг модон баганыг ашиглан хананы хэсгүүдийг холбосон. Таны хайрцагны хэмжээ нь таны сонголт бөгөөд би зайг дүүргэхийн тулд ямар нэгэн гайхалтай нэмэлт зүйл нэмж оруулахаар төлөвлөөгүй байсан тул үүнийг анхны пинболын машинаас арай жижиг болгохоор шийдсэн. Би хайрцгийг аль болох тогтвортой байлгахын тулд боолт, цавуу хоёуланг нь ашигласан. Ар талд нь би хоёр хөлний шалан дээр хоёр цооног өрөмдсөн бөгөөд энэ нь пинболын машинд гайхалтай хазайлт өгөх болно. Дахин хэлэхэд, хөлний өндөр нь зөвхөн танд хамаарна. Та хөлөө өндөр болгох тусам бөмбөг хурдан эргэлддэг (доошоо).

Алхам 2: Флипперийн механик бүтээх

Флипперийн механик бүтээх
Флипперийн механик бүтээх

Энэ төслийн өртөгийг хязгаарлахыг хүссэн тул би электрон биш харин бүрэн механик сэрвээ хийхээр шийдсэн. Хэрэв та электрон эрвээхэйг сонирхож байгаа бол үүнтэй ижил төстэй, гэхдээ "соленоид" гэж нэрлэгддэг конструкцийг ашиглаж болно (сэрвээг удирдах хангалттай хүч чадалтай ороомог нь надад хэтэрхий үнэтэй байсан).

Би хоёр эрвээхэйний эргэлтийн цэгийг ёроолд нь хоёр цооног өрөмдөж эхлэв. Би нүх өрөмдсөн (миний бодлоор) бие биентэйгээ хэт ойрхон байсан бөгөөд энэ нь тоглоомыг арай хялбар болгоход хүргэсэн. Тоглоомын хялбар хэв маягийг хүсэхгүй бол сэрвээгээ бие биендээ хэт ойр байрлуулахгүй байхыг анхаарна уу.

Би мөн хажуугийн хананы хоёр хажуугийн нүхтэй зэрэгцэн хоёр цооног өрөмдсөн. Эдгээр нүхийг хоёр эргүүлэх товчлуурт ашиглах ёстой.

Би булаг ашиглан сэрвээгээ анхны байрлалдаа буцааж татаж, товчлуурыг дарж байх үед эргүүлэхийн тулд сэрвээ болон товчлууруудын хооронд эргэлддэг хийц хийв. Булгийг эргүүлэх ажлыг хэт холоос нь зогсоохын тулд би сэрвээийг анхны байрлалд нь барихын тулд хоёр боолтыг байрлууллаа.

Алхам 3: Ханыг байрлуулах

Хана байрлуулах
Хана байрлуулах

Пинболыг сэрвээ рүү чиглүүлэхийн тулд би хэд хэдэн хана байрлуулсан. Тэдгээрийг хийхэд маш энгийн. Хэргийн доод хэсэгт 3 цооног өрөмдөж, гурван модон тээглүүр шургуулна. Тээглүүрийг резинэн боолтоор боож хий.

Алхам 4: Онооны блокуудыг нэмэх

Онооны блокуудыг нэмж оруулах
Онооны блокуудыг нэмж оруулах
Онооны блокуудыг нэмж оруулах
Онооны блокуудыг нэмж оруулах

Онооны блокууд нь пинболын машины хамгийн чухал хэсгүүдийн нэг тул та энэ хэсгийг зөв хийсэн эсэхээ шалгаарай. Би пинболын машиндаа гурван онооны блок хийсэн боловч дахиад л энэ бүхэн танаас хамаарна.

Би шүүрний жижиг хэсгийг хөрөөдөөд зэс утсаар ороосон. Arduino нь энэхүү зэс утсыг 5В хүчдэлээр байнга тэжээх болно. Бөмбөгтэй илүү сайн харьцахын тулд би дөрвөн үзэгний булгийг хажуу тийш нь гагнав.

Оноо хаах арга нь бөмбөг нь Arduino дээрх оролтын зүү рүү хөтлөх хэлхээг дуусгах явдал юм. Тиймээс миний хийсэн зүйл бол хайрцгийн ёроолд хөнгөн цагаан тугалган цаас соронзон хальс хийх (ЗЭСИЙГ ХҮРҮҮЛЭХГҮЙ) ба тугалган цаасыг Arduino дээрх зүү хүртэл утсаар холбох явдал байв. Бөмбөг зэс, хөнгөн цагаан хоёуланд нь цохилт өгөх бүрт хэлхээ дуусч, Arduino дохио хүлээн авах болно.

Би бүх онооны блокуудыг хөнгөн цагаан тугалган цаасаар холбосон боловч наалдамхай тал нь цахилгаан дамжуулдаггүй гэдгийг санаарай.

Алхам 5: Тоглоомыг контакт дээр нэмэх

Холбоо барих тоглоомыг нэмж байна
Холбоо барих тоглоомыг нэмж байна

Пинболын машины доод талд, сэрвээний хооронд би холбоо барих тоглоом нэмсэн. Бөмбөг энэ контакт руу цохих бүрт тоглогч бөмбөг алдах болно. Миний хийсэн барилга нь онооны блоктой маш төстэй юм. Зөвхөн энд би хоёр боолтыг ашиглаж, доод талд нь хөнгөн цагаан тугалган цаас хийлээ.

Алхам 6: Кабелийн нүхийг өрөмдөх

Кабелийн нүх өрөмдөх
Кабелийн нүх өрөмдөх
Кабелийн нүх өрөмдөх
Кабелийн нүх өрөмдөх
Кабелийн нүх өрөмдөх
Кабелийн нүх өрөмдөх

Бид Arduino руу бүх зүйлийг холбож эхлэхээсээ өмнө эхлээд кабелийн хэд хэдэн цооног өрөмдөх хэрэгтэй. Би хөнгөн цагаан тугалган цаасны аль алинаар нь цооног өрөмдсөн тул хөнгөн цагаан тугалган цаасны нэг нүх онооны блокуудын ойролцоо, мөн тоглолтын ойролцоо хөнгөн цагаан тугалган цаасны нэг нүхийг холбоо барьсан.

Үүнээс гадна би зүүн доод талд, хананы хооронд нэмэлт бөмбөг хаалга Servo руу орох кабелийн нүх өрөмдсөн.

Мөн доод талд нь LCD -т холбогдсон кабелийн нүх байх ёстой.

Алхам 7: Бүгдийг утсаар холбоно уу

Бүх зүйлийг утсаар холбож байна
Бүх зүйлийг утсаар холбож байна
Бүх зүйлийг утсаар холбож байна
Бүх зүйлийг утсаар холбож байна

Бүх схемүүд хаашаа явах ёстой талаар илүү сайн тоймлохын тулд би энэ схемийг хийсэн. Загалмай нь кабелийг холбох цэг юм. Би бүх зүйлийг арай тогтвортой, найдвартай болгохын тулд аль болох их гагнах гэж оролдсон. Утас холбоход хэсэг хугацаа шаардагдах болно, гэхдээ үүнийг хийсний дараа та бараг л тэнд байна!

Алхам 8: Кодыг байршуулах

Пинболын машинаа ажиллуулахын тулд дараах кодыг Arduino -д байршуулаарай!

// lcd -ийн номын санг оруулах

#оруулах #оруулах

// lcd өгөгдлийн зүүг эхлүүлэх

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

// Серво үүсгэ

Servo ballGateServo;

// Бидний ашиглаж буй тээглүүрүүдэд хувьсагч үүсгэх

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

// Пинболын машины тоглоомын хувьсагчдыг эхлүүлэх

int оноо = 0; int өндөр оноо = 500; bool highscoreReached = худал; int бөмбөг = 3; int gameoverTimer = 0; int gameoverTimerDuration = 100; bool gameoverTriggered = худал;

// энэ хүрээг эхний хүрээ дээр нэг удаа ажиллуулна уу

void setup () {// Бидний ашиглаж байгаа pinMode (gameoverPin, INPUT) pinMode -ийг тохируулах; pinMode (scorePin, INPUT);

// Өргөн ба өндрийг өгч lcd -ийг эхлүүлнэ

lcd.begin (16, 2);

// Бөмбөгний хаалганы servo -ийг зохих зүүгээр холбоно уу

ballGateServo.attach (ballGateServoPin);

// Хаалганы servo -г анхны байрлал руу нь тохируулна уу

ballGateServo.write (0); }

// Энэ кодыг хүрээ бүрт ажиллуулна уу

void loop () {// Залгуурын оролтыг int gameoverState = digitalRead (gameoverPin) авах; int scoreState = digitalRead (scorePin);

// Оролт хүлээн авсан бол оноог нэмнэ үү

if (scoreState) {ая (speakerPin, 1000); оноо += 10; } өөр {noTone (4); }

// Тоглоомын нүхийг асаахад бөмбөгнөөс хас

if (gameoverState and! gameoverTriggered) {бөмбөг -= 1; gameoverTriggered = үнэн; gameoverTimer = gameoverTimerDuration; }

// Бөмбөг тоглоомын контактад хүрэхгүй болмогц тоглоомын тоолуурыг эхлүүлнэ үү

if (! gameoverState) {if (gameoverTimer> = 1) {gameoverTimer -= 1; } өөр {gameoverTriggered = худал; }}

// Тоглоомын текстийг lcd дээр анивчиж, оноо, бөмбөгийг дахин тохируулна уу

if (balls <= 0) {lcd.setCursor (0, 0); for (int i = 5; i> = 1; i--) {lcd.clear (); саатал (250); lcd.print ("GAME OVER"); lcd.setCursor (0, 1); lcd.print ("Дахин оролдох уу?"); саатал (250); } lcd.clear (); оноо = 0; ballGateServo.write (0); highscoreReached = худал; бөмбөг = 3; }

if (оноо> өндөр оноо ба! өндөр онооХүрсэн) {

lcd.setCursor (0, 0); for (int i = 5; i> = 1; i--) {lcd.clear (); саатал (250); lcd.print ("ШИНЭ ДЭЛГЭРЭН"); lcd.setCursor (0, 1); lcd.print ("Гэнэтийн үхэл!"); саатал (250); } lcd.clear (); бөмбөг = 1; ballGateServo.write (120); өндөр оноо = оноо; highscoreReached = үнэн; }

// Одоогийн оноо өндөр байвал өндөр оноог шинэчилнэ үү

if (оноо> өндөр оноо) {өндөр оноо = оноо; }

// Курсорыг 0 мөрөнд тохируулна уу

lcd.setCursor (0, 0); // Одоогийн (өндөр) оноог lcd дээр хэвлэх бол (оноо <= 0) {lcd.print ("Өндөр оноо:" + String (өндөр оноо) + ""); } өөр {lcd.print ("Оноо:" + мөр (оноо) + ""); }

// Курсорыг 1 -р мөрөнд тохируулна уу

lcd.setCursor (0, 1);

// Одоогийн бөмбөгний хэмжээг lcd дээр хэвлэ

lcd.print ("Бөмбөг:" + Мөр (бөмбөг)); }

Зөвлөмж болгож буй: