Пиротехнический радиопульт

  • Платформы: Iskra Neo, Iskra Mini
  • Языки программирования: Arduino (C++)
  • Тэги: своими руками, пиротехника, 8 марта, фейерверк, Arduino.

Что это?

Хотите, чтобы ваш подарок запомнился надолго? Запустите салют в честь виновника торжества. Если, после покупки самого подарка, денег на масштабное пиротехническое шоу не хватает — сделаем своё, скромное, с фонтанчиками и Arduino. Для этого соберём пульт дистанционного управления пиротехникой.

Что нам понадобится?

Проект будет состоять из 3 составляющих:

  • Стартер — беспроводной пульт управления.
  • Пиротехнический пульт — основной блок управления.
  • Запал — воспламеняется при подаче электричества.

Для изготовления стартера нам понадобятся:

  1. Малогабаритная батарейка на 12 вольт
  2. Подарочная коробка

Для изготовления пиротехнического пульта нам понадобятся:

  1. Металлические винты М3×8 (4 шт.)
  2. Влагозащищенный корпус
  3. Нажимной разъём (2 pin)
  4. Переключатель (ON-OFF)

Для изготовления запала нам понадобятся:

  1. Многожильный монтажный провод (2 шт. разного цвета)
  2. Нихромовая нить. Мы достали из из паяльника
  3. Огнепроводной шнур. Мы отрезали от фейерверка

Как собрать?

Сборка стартера

  1. Используя руководство по плате Iskra Mini, прошейте её скетчем, приведённым ниже.
  2. Возьмите провод от витой пары длиной около 15 см, скрутите из него спираль и припаяйте к пину ANT беспроводного передатчика.
  3. Используя монтажные провода, припаяйте беспроводной передатчик на 433 МГц к плате Iskra Mini:
    1. пин DATA передатчика — к 12 пину платы Iskra Mini.
    2. пин VCC — к пину 5V.
    3. пин GND — к пину GND.
  4. Соберите схему делителя напряжения, где один резистор — это фоторезистор, а второй — резистор на 10 кОм, и подключите к платформе Iskra Mini:
    1. общий пин фоторезистора и резистора — к аналоговому пину A0.
    2. пин резистора — к пину 5V.
    3. пин фоторезистора — к пину GND.
  5. Разрежьте пополам провода «мама-папа». Одни концы проводов припаяйте к батарейке на 12 вольт, а вторые — к пинам Vin и GND платы Iskra Mini. Таким образом мы сможем включать/отключать питание от платформы.
  6. Установите конструкцию в коробку для подарка.
  7. Замаскируйте все элементы схемы, кроме фоторезистора.

Сборка пиротехнического пульта

  1. Прошейте плату Iskra Neo скетчем, приведённым ниже.
  2. Закрепите макетную плату на Troyka Shield. Установите шилд на платформу Iskra Neo.
  3. Возьмите провод от витой пары длиной около 15 см, скрутите из него спираль и припаяйте к пину ANT беспроводного приёмника.
  4. Установите приёмник на Breadboard Mini и подключите его с помощью проводов «папа-папа» к плате Iskra Neo:
    1. пин DATA приёмника — к 11 пину платы Iskra Neo.
    2. пин VCC — к пину 5V.
    3. пин GND — к пину GND.
  5. Сделайте рельсы питания Vin и земли GND на макетной плате. Для этого соедините плату Iskra Neo и Breadboard Mini двумя проводами «папа-папа», где:
    1. оранжевый — к питанию;
    2. чёрный — к земле.
  6. Установите полученную конструкцию в герметичный корпус, используя мегапластину от #структора.
  7. Вставьте аккумуляторные батареи в батарейный отсек и подключите их к рельсам питания Vin и земли GND макетной платы, через переключатель (ON-OFF).
  8. Так как микроконтроллер не может напрямую управлять мощной нагрузкой, будем подключать запалы к платформе Iskra Neo через силовой ключ. Закрепите MOSFET с помощью нейлоновых винтов к детали #структора (крепление Troyka 4×4 шипа) и подключите, используя 3-проводной шлейф, к 6 пину Troyka Shield.
  9. Установите в герметичный корпус нажимной разъём (2 pin) и соедините следующим образом:
    1. Один контакт нажимного разъёма подключите к рельсе питания Vin.
    2. Второй — через клеммник к плюсу силового ключа.
    3. Минус силового ключа — к рельсе земли GND.
  10. Установите MOSFET в бокс и закройте корпус.

Сборка запала

  1. Возьмите 2 провода и залудите их с обеих сторон.
  2. Извлеките из паяльника нагревательный элемент с нихромовой нитью.
  3. Отрежьте 30–40 мм нихромовой нити и намотайте её на кусок огнепроводного шнура длиной около 15 мм. Закрепите с двух сторон проводами.
  4. Готовый запал примотайте малярным скотчем к фитилю фейерверка.
  5. Подключите второй конец запала в нажимной разъём пиротехнического пульта.

Для нагрева нихромовой нити нужно много энергии. Если у вас много фейерверков, используйте мощный аккумулятор.

Алгоритм

Алгоритм передатчика

  • Сразу после подачи питания считываем значения с датчика уровня освещённости.
    • Если значения сенсора превышает заданный порог, передаём сигнал с передатчика для дальнейшей активации фейерверка.
  • Повторяем цикл.

Алгоритм приёмника

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

Исходный код

Код стартера

fireworkTransmitter.ino
// библиотека для работы с приёмником и передатчиком на 433 МГц
#include <VirtualWire.h>
 
// даём разумное имя для пина, к которому подключен передатчик
#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();
}

Код для пиротехнического пульта

fireworkReceiver.ino
// библиотека для работы с приёмником и передатчиком на 433 МГц
#include <VirtualWire.h>
 
// даём разумное имя для пина к которому подключен приёмник на 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);
}

Демонстрация работы устройства

Что дальше?

В качестве приёмника и передатчика можно использовать любые другие беспроводные модули и запускать фонтан по звонку, SMS или Ethernet. Также в роли стартера можно использовать любой пульт от бытовой техники, установив в пиротехнический пульт вместо модуля беспроводной связи ИК-приёмник (Troyka-модуль).