====== Пиротехнический радиопульт ======
{{ :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-модуль)]].