Мазмұны:

Arduino: Pinball Machine: 8 қадам (суреттермен)
Arduino: Pinball Machine: 8 қадам (суреттермен)

Бейне: Arduino: Pinball Machine: 8 қадам (суреттермен)

Бейне: Arduino: Pinball Machine: 8 қадам (суреттермен)
Бейне: Virtual Pinball: How to install a sainsmart usb 8 channel relay board for mechanical toys 2024, Маусым
Anonim
Image
Image

Мен әрқашан пинбол ойнайтын машиналарды да, электрониканы да жақсы көретіндіктен, мен өзімнің пинбол ойнау машинасын жасауды шештім. Мен Arduino -ны бағдарламалау мен электроника үшін таңдадым, себебі бұл ықшам әрі қолдануға ыңғайлы платформа.

Бұл нұсқаулықта мен даму процесін түсіндіремін, сондықтан сіздердің бірлеріңіз энтузиасттар ұқсас нәрсе жасай аласыз.

1 -қадам: Істі құру

Істі құрастыру
Істі құрастыру

Пинбол машинасының корпусынан бастайық. Мен өте қарапайым конструкция жасадым. Мен астыңғы тақтайшаны араладым және қабырға бөліктерін жалғау үшін бұрыштарда 4 кішкентай ағаш бағанды қолдандым. Сіздің қаптың өлшемі - сіздің жеке таңдауыңыз, мен оны түпнұсқалық пинбол машинасынан сәл кішірек етіп таңдадым, өйткені мен кеңістікті толтыру үшін керемет керемет қоспалар қосуды жоспарламадым. Мен корпусты мүмкіндігінше тұрақты ету үшін бұрандаларды да, желімді де қолдандым. Мен артқы жағында еден бөлігінде екі аяққа арналған екі тесік бұрғыладым, бұл пинбол машинасына белгі береді. Тағы да, аяқтың биіктігі сізге байланысты. Сіз аяқтарыңызды неғұрлым жоғары жасасаңыз, доп соғұрлым тез айналады (төмен қарай).

2 -қадам: Флиппер механикасын құру

Флиппер механикасын құру
Флиппер механикасын құру

Мен бұл жобаның құнын шектегім келгендіктен, электронды емес, толық механикалық жүзгіштерді жасауды шештім. Егер сізде электронды жүзгіштер қызықтыратын болса, сіз конструкцияны біршама қолдана аласыз, бірақ оған «соленоид» қосылған (фланецтерді басқаруға жеткілікті қуаты бар соленоидтар мен үшін тым қымбат болды).

Мен екі қанатшаның айналу нүктесі үшін түбінде екі тесік бұрғылаудан бастадым. Мен тесіктерді (менің ойымша) бір -біріне тым жақын бұрғыладым, бұл ақырында ойынның тым жеңіл болуына әкелді. Егер ойынның жеңіл стилін қаламасаңыз, жүзгіштерді бір -біріне тым жақын қоймаңыз.

Мен сондай -ақ бүйір қабырғаларында флиппер тесіктеріне параллель екі тесік бұрғыладым. Бұл тесіктер екі аударғыш түймеге арналған.

Мен сүйреуіштерді сүйреуіштерді бастапқы күйіне қайтару үшін қолдандым, және түйме басылған кезде оларды айналдыру үшін қанаттар мен түймелер арасында айналмалы конструкция жасадым. Серіппелердің тым көп артқа қарай шегінуін тоқтату үшін, мен екі бұранданы орналастырып, оларды бастапқы қалыпта ұстадым.

3 -қадам: Қабырғаларды орналастыру

Қабырғаларды орналастыру
Қабырғаларды орналастыру

Пинболды қанаттарға қарай бағыттау үшін мен бірнеше қабырға қойдым. Оларды жасау өте қарапайым. Корпустың түбінде 3 тесік бұрғылап, үш ағаш түйреуішті итеріңіз. Ілгектерге резеңке таспаны ораңыз, сіз аяқтадыңыз.

4 -қадам: баллдық блоктарды қосу

Есеп блоктарын қосу
Есеп блоктарын қосу
Есеп блоктарын қосу
Есеп блоктарын қосу

Есеп блоктары - бұл пинболдың ең маңызды бөліктерінің бірі, сондықтан бұл бөлікті дұрыс орындағаныңызға көз жеткізіңіз. Мен пинбол ойнау машинасына үш баллдық блок жасадым, бірақ мұның бәрі сізге байланысты.

Мен сыпырғыш таяқшаның кішкене бөлігін араладым және мыс сымды орап алдым. Arduino бұл мыс сымды үнемі 5В қуатымен қамтамасыз етеді. Мен допқа жақсы тию үшін төрт қалам серіппесін жағына дәнекерледім.

Есептік блоктардың жұмыс әдісі - бұл доп Arduino -да кіріс түйреуішке әкелетін тізбекті аяқтайды. Менің істегенім - корпустың түбіне алюминий фольга таспасын (мысқа тигізбеу) және фольганы Arduino түйреуішіне дейін сыммен жабу. Доп мыстан да, алюминийден де соғылған кезде, схема аяқталады және Arduino сигнал алады.

Мен барлық блок блоктарын алюминий фольга көмегімен біріктірдім, бірақ жабысқақ жағы электр өткізбейтінін есте сақтаңыз.

5 -қадам: Ойынды контактіге қосу

Байланыс арқылы ойынды қосу
Байланыс арқылы ойынды қосу

Пинбол машинасының төменгі жағында, қанаттардың арасында мен контакт бойынша ойын қостым. Доп осы контактіге тиген сайын ойыншы доптан айырылады. Мен жасаған құрылыс есептік блоктармен өте ұқсас. Тек мұнда мен екі бұранданы қолдандым, қайтадан түбінде алюминий фольга.

6 -қадам: Кабель саңылауларын бұрғылау

Кабель саңылауларын бұрғылау
Кабель саңылауларын бұрғылау
Кабель саңылауларын бұрғылау
Кабель саңылауларын бұрғылау
Кабель саңылауларын бұрғылау
Кабель саңылауларын бұрғылау

Біз бәрін Arduino -ға қосуды бастамас бұрын, алдымен кабельдер үшін бірнеше тесік бұрғылауымыз керек. Мен алюминий фольгасының екі бөлігінен де тесік жасадым, сондықтан алюминий фольгадағы бір тесік блоктарға жақын, ал алюминий фольгадағы бір тесік ойынға жақын жерде болды.

Бұдан басқа, мен төменгі сол жақта, қабырғалар арасында, қосымша шарлы қақпаға Servo шығатын кабель үшін тесік бұрғыладым.

Төменгі жағында СКД қосылған кабель үшін тесік болуы керек.

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 highscore = 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);

// Доп қақпасының сервосын тиісті түйреуішке бекітіңіз

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; }}

// Ойын үстіндегі мәтінді дисплейге жыпылықтап, есепті және шарларды қалпына келтіріңіз

if (шарлар <= 0) {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 (); балл = 0; ballGateServo.write (0); highscoreReached = жалған; шарлар = 3; }

if (score> highscore and! highscoreReached) {

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 (score> highscore) {highscore = балл; }

// Меңзерді 0 жолына қойыңыз

lcd.setCursor (0, 0); // Егер ағымдағы (жоғары) баллды lcd -ге басып шығарыңыз, егер (балл <= 0) {lcd.print («Highscore:» + String (highscore) + «»); } else {lcd.print («Ұпай:» + Жол (балл) + «»); }

// Курсорды 1 -жолға қойыңыз

lcd.setCursor (0, 1);

// Доптардың ағымдағы мөлшерін lcd -ге басып шығарыңыз

lcd.print («Доптар:» + Жол (шарлар)); }

Ұсынылған: