Съдържание:

Arduino: Pinball Machine: 8 стъпки (със снимки)
Arduino: Pinball Machine: 8 стъпки (със снимки)

Видео: Arduino: Pinball Machine: 8 стъпки (със снимки)

Видео: Arduino: Pinball Machine: 8 стъпки (със снимки)
Видео: CS50 2014 – 7-я неделя 2024, Юни
Anonim
Image
Image

Тъй като винаги съм обичал както пинбол машините, така и електрониката, реших да направя своя собствена пинбол машина. Избрах Arduino за програмиране и електроника, защото това е изключително достъпна платформа, която е едновременно компактна и лесна за използване.

В това ръководство ще обясня моя процес на развитие, така че може би един от вас ентусиасти би могъл да създаде нещо подобно.

Стъпка 1: Изграждане на случая

Изграждане на случая
Изграждане на случая

Нека започнем с случая на пинбол машината. Направих доста проста конструкция. Отрязах долната плоча и използвах 4 малки дървени стълба в ъглите, за да свържа стенните части. Размерът на вашия калъф е ваш собствен избор, аз избрах да го направя малко по -малък от оригиналната машина за пинбол, тъй като не смятах да добавям супер ефектни екстри, които да запълнят пространството. Използвах и винтове, и лепило, за да направя корпуса възможно най -стабилен. Отзад пробих две дупки в пода за двата крака, които ще придадат на пинбол машината емблематичния наклон. Отново височината на краката зависи от вас. Колкото по -високи правите краката, толкова по -бързо топката се търкаля (надолу).

Стъпка 2: Конструиране на механика на плавниците

Конструиране на флип механик
Конструиране на флип механик

Тъй като исках да огранича цената на този проект, реших да направя изцяло механични ласти вместо електронни. Ако се интересувате от електронни плавници, можете да използвате конструкция, която е донякъде същата, но с т.нар.

Започнах с пробиване на две дупки в долната част за точката на завъртане на двете плавници. Пробих дупките (според мен) малко прекалено близо един до друг и това накара играта да стане малко прекалено лесна в крайна сметка. Затова внимавайте да не поставяте ластите твърде близо един до друг, освен ако не искате лесен стил на игра.

Пробих и два отвора в двете странични стени, успоредни на отворите за плавници. Тези отвори трябва да се използват за двата бутона с плавници.

Използвах пружини, за да издърпам плавниците обратно в първоначалното им положение и направих завъртаща се конструкция между ластите и бутоните, за да ги накарам да се въртят при натискане на бутоните. За да попреча на пружините да издърпват плавниците твърде далеч, поставих два винта, за да задържам ластите в първоначалното им положение.

Стъпка 3: Поставяне на стените

Поставяне на стените
Поставяне на стените

Поставих няколко стени, за да пренасоча пинбола към плавниците. Те са много лесни за правене. Просто пробийте 3 дупки в долната част на кутията и натиснете три дървени щифта. Увийте гумена лента около щифтовете и сте готови.

Стъпка 4: Добавяне на блокове за оценка

Добавяне на точкови блокове
Добавяне на точкови блокове
Добавяне на точкови блокове
Добавяне на точкови блокове

Блоковете за оценка са една от най -важните части на пинбол машината, затова се уверете, че правите тази част правилно. Направих три блокчета за моята пинбол машина, но отново всичко зависи от вас.

Отрязах малко парче метла и обвих медна тел около него. Arduino ще захранва този меден проводник постоянно с 5V. Запоявах четири пружини за писалка отстрани за по -добър контакт с топката.

Начинът, по който действат блоковете за оценка, е, че топката завършва верига, която води до входен щифт на 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 = false; int топки = 3; int gameoverTimer = 0; int gameoverTimerDuration = 100; bool gameoverTriggered = false;

// стартирайте този код веднъж в първия кадър

void setup () {// Задайте pinMode за пиновете, които използваме pinMode (gameoverPin, INPUT); pinMode (scorePin, INPUT);

// Инициализираме lcd, като даваме ширина и височина

lcd.begin (16, 2);

// Прикрепете сервопривода на сферичната порта към подходящия щифт

ballGateServo.attach (ballGateServoPin);

// Възстановяване на сервосистемата на портата в изходна позиция

ballGateServo.write (0); }

// Изпълнява този код на всеки отделен кадър

void loop () {// Заснемане на пин входовете int gameoverState = digitalRead (gameoverPin); int scoreState = digitalRead (scorePin);

// Добавяне към резултата, ако е получен вход

if (scoreState) {тон (speakerPin, 1000); резултат += 10; } else {noTone (4); }

// Изваждаме от топките, ако се задейства играта

if (gameoverState и! gameoverTriggered) {топки -= 1; gameoverTriggered = вярно; gameoverTimer = gameoverTimerDuration; }

// Стартирайте таймера за превключване на играта веднага щом топката не докосне контакта за игра

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

// Премигване на текста на играта към lcd и нулиране на резултата и топките

if (топки <= 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 = false; топки = 3; }

if (score> highscore and! highscoreReached) {

lcd.setCursor (0, 0); for (int i = 5; i> = 1; i--) {lcd.clear (); забавяне (250); lcd.print ("NEW HIGHSCORE"); lcd.setCursor (0, 1); lcd.print ("Внезапна смърт!"); забавяне (250); } lcd.clear (); топки = 1; ballGateServo.write (120); рекорд = резултат; highscoreReached = вярно; }

// Актуализиране на рекорда, ако текущият резултат е по -висок

if (резултат> рекорд) {рекорд = резултат; }

// Поставете курсора на ред 0

lcd.setCursor (0, 0); // Отпечатва текущия (най -висок) резултат на lcd if (score <= 0) {lcd.print ("Highscore:" + String (highscore) + ""); } else {lcd.print ("Резултат:" + String (резултат) + ""); }

// Поставете курсора на ред 1

lcd.setCursor (0, 1);

// Отпечатайте текущото количество топки на lcd

lcd.print ("Топки:" + Низ (топки)); }

Препоръчано: