Diy

Пью Пью! Как Построить Лазерную Башню с Arduino

Пью Пью! Как Построить Лазерную Башню с Arduino

Вам скучно? Можно также построить лазерную башню. Вы знаете — тот, который идет на скамейке , стреляет красным лучом во многих разных направлениях и, возможно, даже бросает дымовую машину? Да, один из них.

Что тебе понадобится

  • Arduino
  • 2 сервопривода
  • Лазерный модуль, например, один из этого комплекта датчиков
  • Пьезо-зуммер или другое маленькое устройство вывода
  • Металлическая проволока и кабельные стяжки для крепления
  • Длинные женские-> мужские соединительные кабели, а также обычные соединительные кабели

По желанию, требуется дымовая установка — у лазера достаточно низкая мощность, поэтому вы не сможете увидеть луч без дыма даже в темной комнате.

составные части

План строительства

Основная идея турели состоит в том, чтобы поместить лазерный модуль поверх одного сервопривода, чтобы обеспечить горизонтальное вращение; затем установите этот пакет на другой сервопривод, расположенный под углом 90 градусов, чтобы обеспечить вертикальное перемещение. У нас есть пьезо, чтобы обеспечить звуковые эффекты, и я добавляю дымовую машину для хорошей меры.

Серво Тестирование

В зависимости от вашего сервопривода, провода могут быть окрашены по-разному, но в целом:

  • Красный — это положительный провод, и на обоих моих сервоприводах он был центром трех — для подключения к шине + 5В.
  • Коричневый или черный — это негатив, который должен быть подключен к GND на Arduino.
  • Белый или оранжевый — это сигнальный провод, который нужно подключить к выводу цифрового ввода / вывода с ШИМ (9 и 10 в демонстрационном примере ниже).

После того, как вы подключите два сервопривода, загрузите следующий пример кода. Я назвал один сервопривод Hori для управления горизонтальным движением, а другой — Vert. Каждый должен выполнить полный диапазон движения (около 60 градусов, в моем случае).

#include <servo.h> Servo vert,hori; // create servo object to control a servo // a maximum of eight servo objects can be created int pos = 0; // variable to store the servo position void setup() { hori.attach(9); vert.attach(10); // attaches the servo on pin 9,10 to the servo objects vert.write(0); hori.write(0); } void loop() { for(pos = 0; pos < 180; pos += 10) // goes from 0 degrees to 180 degrees { // in steps of 10 degrees vert.write(pos); hori.write(pos); // tell servo to go to position in variable 'pos' delay(100); // waits 100ms for the servo to reach the position } for(pos = 180; pos>=1; pos-=10) // goes back from 180 degrees to 0 degrees { vert.write(pos); // tell servo to go to position in variable 'pos' hori.write(pos); delay(100); // waits 100ms for the servo to reach the position } } 

Все хорошо? Идем дальше.

Тестирование лазера и звука Pew Pew

Лазерный модуль похож на светодиод, но в него встроен резистор, поэтому мы можем подключить его непосредственно к цифровому вводу / выводу — очень просто. Если вы используете тот же лазерный модуль, что и у меня, « » переходит к GND , S — к выводу 12. Измените приведенный выше пример кода, чтобы вывод 12 выводил:

 int laser = 12; pinMode(laser,OUTPUT); 

Затем моргайте контактом на каждой петле, используя стандартный метод digitalWrite () .

Мы просто используем PWM для управления пьезо-зуммером на комфортном уровне звука — вы можете поэкспериментировать с использованием библиотеки тонов, если хотите, но мне нужен простой шум. Подключите черный провод к земле и красный провод к контакту 11. Определите зуммер на соответствующем контакте, установите выходной режим и активируйте, используя analogWrite (зуммер, 100) (или любое другое число, которое вы хотите до 254); и analogWrite (зуммер, 0), чтобы выключить.

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

Все ваши компоненты должны работать — теперь нам нужно связать все это вместе.

Создание башни

Используя кабельные стяжки, прикрепите один сервопривод к другому; это не имеет значения, просто убедитесь, что один будет двигаться по горизонтали, а другой — по вертикали. Вы можете снять лезвие ротора и снова установить его во время тестирования, если угол не правильный.

сервоприводы

Используйте жесткий провод для моделирования, чтобы прикрепить лазерный модуль к лезвию другого сервопривода, например:

проволоки для лазера-модуля

Наконец, я прикрепил все это к ножке стола с еще большим количеством кабельных стяжек и небольшим количеством древесины.

присоединять-турель-к столу

Программирование башни

Я не знаю о вас, но моя идея лазерной башни основана на бесчисленном количестве научно-фантастических фильмов и эпизодов из «Звездного пути». Неизменно кто-то пролетит мимо башни, и маленькие выстрелы, сделанные на скамье подсудимых, будут лететь стремительными темпами, всегда на миллисекунды слишком медленно, поэтому наш главный герой на самом деле не попадет в цель. Это то, что я пытаюсь воспроизвести, хотя не стесняйтесь настраивать основной режим, чтобы соответствовать вашему представлению о том, что должна делать турель.

Вот псевдокод, который я использовал для основного цикла:

  • Рандомизируйте время между очередями и время между каждым выстрелом.
  • Произведите рандомизацию начальной и конечной позиции для каждого сервопривода, вертикали и горизонта.
  • Случайное количество снимков, чтобы сделать.
  • Определите количество степеней изменения после каждого выстрела как разницу между начальной и конечной позициями, деленную на количество выстрелов.
  • Переместите сервоприводы в исходное положение и немного подождите, пока они достигнут (100 мс)
  • Зацикливайтесь, пока не будут сделаны все снимки, каждый раз слегка перемещая сервоприводы, как рассчитывалось ранее; двигаться и стрелять, двигаться и стрелять.
  • Повторение.

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

 #include <servo.h> Servo vert,hori; // create servo object to control a servo int pos = 0; // variable to store the servo position int laser = 12; int buzzer = 11; void setup() { hori.attach(9); vert.attach(10); // attaches the servo on pin 9 to the servo object pinMode(laser,OUTPUT); pinMode(buzzer,OUTPUT); } void loop() { int timeBetweenBursts = random(200,1000); int timeBetweenShots = random(50,200); int vertStart = random(1,180); int vertEnd = random(1,180); int horiStart = random(1,180); int horiEnd = random(1,180); int numShots = random(5,20); int vertChange = (vertEnd - vertStart) / numShots; //how much to move vertical axis by each shot int horiChange = (horiEnd - horiStart) / numShots; vert.write(vertStart);//let it get to start position first, wait a little hori.write(horiStart); delay(100); for(int shot = 0; shot<numShots; shot++){ vert.write(vertStart); hori.write(horiStart); vertStart += vertChange;//increment the vert value for next time horiStart += horiChange; fire(); delay(timeBetweenShots); //add a bit of variety to the speed of shots } delay(timeBetweenBursts); } void fire(){ digitalWrite(laser,HIGH); analogWrite(buzzer,100); delay(20);//adjust this to change length of turret shot digitalWrite(laser,LOW); analogWrite(buzzer, 0); } 

В бою

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

Похожие посты
Diy

Вещи, которые вы должны иметь в виду, прежде чем брать ноутбук или смартфон в службу технической поддержки

Diy

Как использовать Arduino для съемки красивой скоростной фотографии

DiyLinux

Пять великолепных расширений Raspberry Pi, которые делают его еще более полезным

Diy

Первые шаги с Arduino: пристальный взгляд на печатную плату и структуру программы