====== Пиротехнический радиопульт ====== {{ :projects:firework:firework_overview.jpg?nolink |}} * Платформы: Iskra Neo, Iskra Mini * Языки программирования: Arduino (C++) * Тэги: своими руками, пиротехника, 8 марта, фейерверк, Arduino. ===== Что это? ===== Хотите, чтобы ваш подарок запомнился надолго? Запустите салют в честь виновника торжества. Если, после покупки самого подарка, денег на масштабное пиротехническое шоу не хватает — сделаем своё, скромное, с фонтанчиками и Arduino. Для этого соберём пульт дистанционного управления пиротехникой. ===== Что нам понадобится? ===== {{ :projects:firework:firework_parts.jpg?nolink |}} Проект будет состоять из 3 составляющих: * Стартер — беспроводной пульт управления. * Пиротехнический пульт — основной блок управления. * Запал — воспламеняется при подаче электричества. Для изготовления стартера нам понадобятся: - [[amp>product/iskra-mini-headless?utm_source=proj&utm_campaign=firework&utm_medium=wiki|Iskra Mini (без ног)]] - [[amp>product/rf-433-transmitter?utm_source=proj&utm_campaign=firework&utm_medium=wiki|Беспроводной передатчик на 433 МГц]] - [[amp>product/ldr?utm_source=proj&utm_campaign=firework&utm_medium=wiki|Фоторезистор]] - [[amp>product/resistor?utm_source=proj&utm_campaign=firework&utm_medium=wiki|Резистор 10 кОм ]](1 шт.) - [[amp>product/wire-fm?utm_source=proj&utm_campaign=firework&utm_medium=wiki|Соединительные провода «мама-папа»]] - Малогабаритная батарейка на 12 вольт - Подарочная коробка Для изготовления пиротехнического пульта нам понадобятся: - [[amp>product/iskra-neo?utm_source=proj&utm_campaign=firework&utm_medium=wiki|Iskra Neo]] - [[amp>product/arduino-troyka-shield?utm_source=proj&utm_campaign=firework&utm_medium=wiki|Troyka Shield]] - [[amp>product/rf-433-receiver?utm_source=proj&utm_campaign=firework&utm_medium=wiki|Беспроводной приёмник на 433 МГц]] - [[amp>product/troyka-mosfet-n-channel-v3?utm_source=proj&utm_campaign=firework&utm_medium=wiki|Силовой ключ (Troyka-модуль)]] - [[amp>product/breadboard-mini?utm_source=proj&utm_campaign=firework&utm_medium=wiki|Breadboard Mini]] - [[amp>product/nimh-aa-cell?utm_source=proj&utm_campaign=firework&utm_medium=wiki|Аккумулятор NiMH AA 2500 мАч]] - [[amp>product/battery-holder-3x2-aa?utm_source=proj&utm_campaign=firework&utm_medium=wiki|Батарейный отсек 3×2 AA]] - [[amp>product/wire-mm?utm_source=proj&utm_campaign=firework&utm_medium=wiki|Соединительные провода «папа-папа»]] - [[amp>product/structor-mega?utm_source=proj&utm_campaign=firework&utm_medium=wiki|Пластина мега (#Структор)]] - [[amp>product/structor-troyka?utm_source=proj&utm_campaign=firework&utm_medium=wiki|Крепления Troyka (#Структор)]] - [[amp>product/nylon-screw-m3x8?utm_source=proj&utm_campaign=firework&utm_medium=wiki|Нейлоновые винты М3×8 (4 шт.)]] - Металлические винты М3×8 (4 шт.) - Влагозащищенный корпус - Нажимной разъём (2 pin) - Переключатель (ON-OFF) Для изготовления запала нам понадобятся: - Многожильный монтажный провод (2 шт. разного цвета) - Нихромовая нить. Мы достали из из паяльника - Огнепроводной шнур. Мы отрезали от фейерверка ===== Как собрать? ===== ==== Сборка стартера ==== - Используя [[продукты:iskra-mini|руководство]] по плате Iskra Mini, прошейте её [[#код_стартера|скетчем]], приведённым ниже. - Возьмите провод от витой пары длиной около 15 см, скрутите из него спираль и припаяйте к пину ''ANT'' беспроводного передатчика.{{ :projects:firework:firework_transmitter_build1.jpg?nolink |}} - Используя монтажные провода, припаяйте беспроводной передатчик на 433 МГц к плате Iskra Mini: - пин ''DATA'' передатчика — к ''12'' пину платы Iskra Mini. - пин ''VCC'' — к пину ''5V''. - пин ''GND'' — к пину ''GND''.{{ :projects:firework:firework_transmitter_build2.jpg?nolink |}} - Соберите схему [[Схемотехника:делитель-напряжения|делителя напряжения]], где один резистор — это фоторезистор, а второй — резистор на 10 кОм, и подключите к платформе Iskra Mini: - общий пин фоторезистора и резистора — к аналоговому пину ''A0''. - пин резистора — к пину ''5V''. - пин фоторезистора — к пину ''GND''.{{ :projects:firework:firework_transmitter_build3.jpg?nolink |}} - Разрежьте пополам провода «мама-папа». Одни концы проводов припаяйте к батарейке на 12 вольт, а вторые — к пинам ''Vin'' и ''GND'' платы Iskra Mini. Таким образом мы сможем включать/отключать питание от платформы.{{ :projects:firework:firework_transmitter_build4.jpg?nolink |}} - Установите конструкцию в коробку для подарка.{{ :projects:firework:firework_transmitter_build5.jpg?nolink |}} - Замаскируйте все элементы схемы, кроме фоторезистора.{{ :projects:firework:firework_transmitter_build6.jpg?nolink |}} ==== Сборка пиротехнического пульта ==== - Прошейте плату Iskra Neo [[#код_электроподжига|скетчем]], приведённым ниже. - Закрепите макетную плату на Troyka Shield. Установите шилд на платформу Iskra Neo.{{ :projects:firework:firework_receiver_build1.jpg?nolink |}} - Возьмите провод от витой пары длиной около 15 см, скрутите из него спираль и припаяйте к пину ''ANT'' беспроводного приёмника.{{ :projects:firework:firework_receiver_build2.jpg?nolink |}} - Установите приёмник на Breadboard Mini и подключите его с помощью проводов «папа-папа» к плате Iskra Neo: - пин ''DATA'' приёмника — к ''11'' пину платы Iskra Neo. - пин ''VCC'' — к пину ''5V''. - пин ''GND'' — к пину ''GND''.{{ :projects:firework:firework_receiver_build3.jpg?nolink |}} - Сделайте рельсы питания ''Vin'' и земли ''GND'' на макетной плате. Для этого соедините плату Iskra Neo и Breadboard Mini двумя проводами «папа-папа», где: - оранжевый — к питанию; - чёрный — к земле.{{ :projects:firework:firework_receiver_build4.jpg?nolink |}} - Установите полученную конструкцию в герметичный корпус, используя мегапластину от #структора.{{ :projects:firework:firework_receiver_build5.jpg?nolink |}} - Вставьте аккумуляторные батареи в батарейный отсек и подключите их к рельсам питания ''Vin'' и земли ''GND'' макетной платы, через переключатель (ON-OFF).{{ :projects:firework:firework_receiver_build6.jpg?nolink |}} - Так как микроконтроллер не может напрямую управлять мощной нагрузкой, будем подключать запалы к платформе Iskra Neo через силовой ключ. Закрепите MOSFET с помощью нейлоновых винтов к детали #структора (крепление Troyka 4×4 шипа) и подключите, используя 3-проводной шлейф, к ''6'' пину Troyka Shield.{{ :projects:firework:firework_receiver_build7.jpg?nolink |}} - Установите в герметичный корпус нажимной разъём (2 pin) и соедините следующим образом: - Один контакт нажимного разъёма подключите к рельсе питания ''Vin''. - Второй — через клеммник к плюсу силового ключа. - Минус силового ключа — к рельсе земли ''GND''.{{ :projects:firework:firework_receiver_build8.jpg?nolink |}} - Установите MOSFET в бокс и закройте корпус.{{ :projects:firework:firework_receiver_build9.jpg?nolink |}} ==== Сборка запала ==== - Возьмите 2 провода и залудите их с обеих сторон.{{ :projects:firework:firework_electfuze_build1.jpg?nolink |}} - Извлеките из паяльника нагревательный элемент с нихромовой нитью.{{ :projects:firework:firework_electfuze_build2.jpg?nolink |}} - Отрежьте 30–40 мм нихромовой нити и намотайте её на кусок огнепроводного шнура длиной около 15 мм. Закрепите с двух сторон проводами.{{ :projects:firework:firework_electfuze_build3.jpg?nolink |}} - Готовый запал примотайте малярным скотчем к фитилю фейерверка.{{ :projects:firework:firework_electfuze_build4.jpg?nolink |}} - Подключите второй конец запала в нажимной разъём пиротехнического пульта.{{ :projects:firework:firework_electfuze_build5.jpg?nolink |}} Для нагрева нихромовой нити нужно много энергии. Если у вас много фейерверков, используйте мощный аккумулятор. {{ :projects:firework:firework_powerful_battery.jpg?nolink |}} ===== Алгоритм ===== ==== Алгоритм передатчика ==== * Сразу после подачи питания считываем значения с датчика уровня освещённости. * Если значения сенсора превышает заданный порог, передаём сигнал с передатчика для дальнейшей активации фейерверка. * Повторяем цикл. ==== Алгоритм приёмника ==== * После подключения питания проверяем есть ли принятые данные с приёмника. * Если нет, ждём. * Проверяем нам ли адресовано сообщение. * Если нет, возвращаемся в начало цикла. * Проверяем содержит ли принятое сообщение код запуска фонтана. * Если да, поджигаем запалы. ===== Исходный код ===== ==== Код стартера ==== // библиотека для работы с приёмником и передатчиком на 433 МГц #include // даём разумное имя для пина, к которому подключен передатчик #define TRANSNMIT_PIN 12 // даём разумное имя для пина, к которому подключен фоторезистор #define LIGHT_PIN A0 // символ первого и последнего байта посылки #define FIRST_BYTE "<" #define LAST_BYTE ">" // код запуска фейерверка #define KEY_TNT "2560" void setup(void) { // устанавливаем номер пина, к которому подключён передатчик vw_set_tx_pin(TRANSNMIT_PIN); // устанавливаем скорость передачи vw_setup(2000); } void loop(void) { // считываем значения с датчика уровня освещённости int sensorLight = analogRead(LIGHT_PIN); // если значения сенсора превышает порог if (sensorLight < 1000) { // посылаем сигнал с передатчика sendData(); } } // функция отправки данных с передатчика void sendData() { // буфер для хранения текстового сообщения char strMsg[12] = FIRST_BYTE; // добавляем к буферу код запуска фейерверка strcat(strMsg, KEY_TNT); // добавляем к буферу символ конца посылки strcat(strMsg, LAST_BYTE); // передаём сообщение и его длину vw_send((uint8_t *)strMsg, strlen(strMsg)); // ждем пока передача будет окончена vw_wait_tx(); } ==== Код для пиротехнического пульта ==== // библиотека для работы с приёмником и передатчиком на 433 МГц #include // даём разумное имя для пина к которому подключен приёмник на 433 МГц #define RECEIVER_PIN 11 // даём разумное имя для пина к которому подключен силовой ключ #define MOSFET_PIN 6 // символ первого и последнего байта посылки #define FIRST_BYTE '<' #define LAST_BYTE '>' // код запуска фейерверка #define KEY_TNT 2560 void setup() { // настраиваем пин силового ключа в режим выхода pinMode(MOSFET_PIN, OUTPUT); // устанавливаем номер пина, к которому подключён приёмник vw_set_rx_pin(RECEIVER_PIN); // устанавливаем скорость передачи vw_setup(2000); // ожидаем входящее сообщение vw_rx_start(); } void loop() { // буфер для хранения текста сообщения uint8_t buf[VW_MAX_MESSAGE_LEN]; // длина сообщения uint8_t buflen = VW_MAX_MESSAGE_LEN; // переменная для хранения индекса принятого сообщения int i = 1; // переменная для хранения полученного кода int key = 0; // если принято сообщение if (vw_get_message(buf, &buflen)) { // если сообщение адресовано не нам, выходим if (buf[0] != FIRST_BYTE || buf[buflen-1]!= LAST_BYTE) { return; } // поскольку передача идет посимвольно, // преобразовываем набор символов в число while (buf[i] != LAST_BYTE) { key *= 10; key += buf[i] - '0'; i++; } // если полученный в сообщении код совпадает с кодом запуска if (key == KEY_TNT) { // поджигаем запалы startFireShow(); } } } // функция, реализующая поджёг запалов void startFireShow() { // подаём на силовой ключ высокий уровень digitalWrite(MOSFET_PIN, HIGH); // ждём 10 секунд delay(10000); // подаём на силовой ключ низкий уровень digitalWrite(MOSFET_PIN, LOW); } ===== Демонстрация работы устройства ===== {{youtube>nZMwjzGKow0?large}} ===== Что дальше? ===== В качестве приёмника и передатчика можно использовать любые другие [[amp>collection/wireless?utm_source=proj&utm_campaign=firework&utm_medium=wiki | беспроводные модули]] и запускать фонтан по звонку, SMS или Ethernet. Также в роли стартера можно использовать любой пульт от бытовой техники, установив в пиротехнический пульт вместо модуля беспроводной связи [[amp>product/troyka-ir-receiver?utm_source=proj&utm_campaign=firework&utm_medium=wiki | ИК-приёмник (Troyka-модуль)]].