Оглавление:

Arduino: автомат для игры в пинбол: 8 шагов (с изображениями)
Arduino: автомат для игры в пинбол: 8 шагов (с изображениями)

Видео: Arduino: автомат для игры в пинбол: 8 шагов (с изображениями)

Видео: Arduino: автомат для игры в пинбол: 8 шагов (с изображениями)
Видео: 🖥️Играю в Cyberpunk на Ардуино! 2024, Ноябрь
Anonim
Image
Image

Поскольку мне всегда нравились и автоматы для игры в пинбол, и электроника, я решил построить свой собственный автомат для игры в пинбол. Я выбрал Arduino для программирования и электроники, потому что это очень доступная платформа, компактная и простая в использовании.

В этом руководстве я объясню свой процесс разработки, так что, возможно, один из вас, энтузиастов, сможет создать что-то подобное.

Шаг 1: создание кейса

Создание дела
Создание дела

Начнем с пинбольного автомата. Я сделал довольно простую конструкцию. Я отпилил нижнюю пластину и использовал 4 крошечных деревянных столбика по углам, чтобы соединить части стены. Размер вашего кейса - ваш собственный выбор, я решил сделать его немного меньше оригинального пинбольного автомата, так как не планировал добавлять какие-либо супер зрелищные дополнения, чтобы заполнить пространство. Я использовал оба винта и клей, чтобы сделать корпус максимально устойчивым. Сзади я просверлил два отверстия в полу для двух ножек, которые придадут автомату для игры в пинбол культовый наклон. Опять же, высота ног зависит от вас. Чем выше вы сделаете ноги, тем быстрее будет катиться мяч (вниз).

Шаг 2: построение механики флиппера

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

Поскольку я хотел ограничить стоимость этого проекта, я решил сделать полностью механические ласты вместо электронных. Если вас интересуют электронные ласты, вы можете использовать аналогичную конструкцию, но с подключенным к ней так называемым «соленоидом» (соленоиды с достаточной мощностью для управления ластами были для меня слишком дорогими).

Я начал с того, что просверлил два отверстия в основании для точки поворота обоих ласт. Я просверлил отверстия (на мой взгляд) слишком близко друг к другу, и это сделало игру в конце слишком простой. Так что будьте осторожны, не ставьте ласты слишком близко друг к другу, если вам не нужен простой стиль игры.

Я также просверлил два отверстия в обеих боковых стенках параллельно отверстиям ласт. Эти отверстия используются для двух пуговиц.

Я использовал пружины, чтобы вернуть ласты в исходное положение, и сделал поворотную конструкцию между ластами и кнопками, чтобы они вращались при нажатии кнопок. Чтобы пружины не оттягивали ласты слишком далеко, я вставил два винта, чтобы удерживать ласты в исходном положении.

Шаг 3: Размещение стен

Размещение стен
Размещение стен

Я разместил пару стен, чтобы перенаправить мяч на ласты. Их очень просто сделать. Просто просверлите 3 отверстия в нижней части корпуса и вставьте три деревянных штифта. Оберните резинку вокруг булавок, и все готово.

Шаг 4: Добавление блоков партитуры

Добавление блоков партитуры
Добавление блоков партитуры
Добавление блоков партитуры
Добавление блоков партитуры

Блоки очков - одна из самых важных частей автомата для игры в пинбол, поэтому убедитесь, что вы все делаете правильно. Я сделал три блока очков для своего пинбольного автомата, но, опять же, все зависит от вас.

Я отпилил небольшой кусок от метлы и обмотал его медной проволокой. Arduino будет постоянно запитывать этот медный провод с помощью 5 В. Я припаял четыре пружины ручки сбоку для лучшего контакта с мячом.

Принцип работы блоков оценки заключается в том, что мяч замыкает цепь, которая ведет к входному выводу на Arduino. Я приклеил алюминиевую фольгу к нижней части корпуса (НЕ ПРИКАСАЯСЬ К МЕДИ) и подключил фольгу к контакту на Arduino. Как только мяч попадает в медь и алюминий, цепь замыкается, и Arduino получает сигнал.

Я соединил все блоки надрезов вместе с помощью алюминиевой фольги, но имейте в виду, что липкая сторона НЕ проводит электричество.

Шаг 5: Добавление контакта Game Over

Добавление контакта Game Over
Добавление контакта Game Over

Внизу автомата для игры в пинбол, между ластами, я добавил игру поверх контакта. Каждый раз, когда мяч попадает в этот контакт, игрок теряет мяч. Конструкция, которую я сделал, очень похожа на блоки очков. Только здесь я использовал два винта, и снова кусок алюминиевой фольги снизу.

Шаг 6: сверление отверстий для кабелей

Сверление отверстий для кабелей
Сверление отверстий для кабелей
Сверление отверстий для кабелей
Сверление отверстий для кабелей
Сверление отверстий для кабелей
Сверление отверстий для кабелей

Прежде чем мы начнем подключать все к Arduino, нам нужно сначала просверлить пару отверстий для кабелей. Я просверлил отверстие в обоих кусках алюминиевой фольги, так что одно отверстие в алюминиевой фольге рядом с блоками для надрезания, а одно отверстие в алюминиевой фольге рядом с игрой при контакте.

Помимо этого, я также просверлил отверстие внизу слева, между стенами, для кабеля, ведущего к дополнительному сервоприводу шаровых затворов.

Также должно быть отверстие для кабеля, подключенного к ЖК-дисплею, внизу.

Шаг 7: все подключаем

Электромонтаж всего
Электромонтаж всего
Электромонтаж всего
Электромонтаж всего

Я сделал эту схему, чтобы лучше понять, где должны быть проложены все кабели. Крестики - это точки подключения кабелей. Я постарался спаять как можно больше, чтобы все было немного устойчивее и надежнее. Подключение займет некоторое время, но после того, как это будет сделано, вы почти у цели!

Шаг 8: загрузка кода

Загрузите следующий код в свой Arduino, чтобы ваш автомат для игры в пинбол ожил!

// Включаем библиотеку для lcd

#include #include

// Инициализируем выводы данных ЖК-дисплея

ЖК-дисплей LiquidCrystal (7, 8, 9, 10, 11, 12);

// Создаем сервопривод

Серво ballGateServo;

// Создаем переменные для контактов, которые мы используем

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

// Инициализируем игровые переменные для пинбольного автомата

int score = 0; int highscore = 500; bool highscoreReached = false; int шары = 3; int gameoverTimer = 0; int gameoverTimerDuration = 100; bool gameoverTriggered = false;

// запускаем этот код один раз в первом кадре

void setup () {// Устанавливаем pinMode для контактов, которые мы используем pinMode (gameoverPin, INPUT); pinMode (scorePin, ВВОД);

// Инициализируем ЖК-дисплей, задав ширину и высоту

lcd.begin (16, 2);

// Присоедините сервопривод шарового затвора к соответствующему штифту

ballGateServo.attach (ballGateServoPin);

// Сбрасываем сервопривод ворот в исходное положение

ballGateServo.write (0); }

// Запускаем этот код каждый кадр

void loop () {// Захват входов вывода int gameoverState = digitalRead (gameoverPin); int scoreState = digitalRead (scorePin);

// Добавить к счету, если ввод получен

если (ScoreState) {тон (SpeakerPin, 1000); оценка + = 10; } else {noTone (4); }

// Вычитаем из шаров, если срабатывает игровая яма

если (gameoverState и! gameoverTriggered) {шары - = 1; gameoverTriggered = true; gameoverTimer = gameoverTimerDuration; }

// Запускаем таймер окончания игры, как только мяч не касается контакта перехода

если (! gameoverState) {если (gameoverTimer> = 1) {gameoverTimer - = 1; } еще {gameoverTriggered = false; }}

// Мигаем текст прохождения игры на ЖК-дисплее и сбрасываем счет и шары

если (шары <= 0) {lcd.setCursor (0, 0); для (int я = 5; я> = 1; я--) {lcd.clear (); задержка (250); lcd.print («ИГРА ЗАВЕРШЕНА»); 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); для (int я = 5; я> = 1; я--) {lcd.clear (); задержка (250); lcd.print («НОВЫЙ ВЫСОКИЙ ЭКСКУРС»); lcd.setCursor (0, 1); lcd.print («Внезапная смерть!»); задержка (250); } lcd.clear (); шары = 1; ballGateServo.write (120); рекорд = оценка; highscoreReached = true; }

// Обновляем рекорд, если текущий результат выше

если (оценка> результат) {рейтинг = оценка; }

// Устанавливаем курсор на строку 0

lcd.setCursor (0, 0); // Выводим текущий (высокий) результат на ЖК-дисплей if (score <= 0) {lcd.print ("Highscore:" + String (highscore) + ""); } else {lcd.print ("Оценка:" + Строка (оценка) + ""); }

// Устанавливаем курсор на строку 1

lcd.setCursor (0, 1);

// Вывести на ЖК-дисплей текущее количество шаров

lcd.print ("Шарики:" + Струна (шары)); }

Рекомендуемые: