Хотите, чтобы ваш подарок запомнился надолго? Запустите салют в честь виновника торжества. Если, после покупки самого подарка, денег на масштабное пиротехническое шоу не хватает — сделаем своё, скромное, с фонтанчиками и Arduino. Для этого соберём пульт дистанционного управления пиротехникой.
Проект будет состоять из 3 составляющих:
Для изготовления стартера нам понадобятся:
Для изготовления пиротехнического пульта нам понадобятся:
Для изготовления запала нам понадобятся:
ANT
беспроводного передатчика.DATA
передатчика — к 12
пину платы Iskra Mini.VCC
— к пину 5V
.GND
— к пину GND
.A0
.5V
.GND
.Vin
и GND
платы Iskra Mini. Таким образом мы сможем включать/отключать питание от платформы.ANT
беспроводного приёмника.DATA
приёмника — к 11
пину платы Iskra Neo.VCC
— к пину 5V
.GND
— к пину GND
.Vin
и земли GND
на макетной плате. Для этого соедините плату Iskra Neo и Breadboard Mini двумя проводами «папа-папа», где:Vin
и земли GND
макетной платы, через переключатель (ON-OFF).6
пину Troyka Shield.Vin
.GND
.Для нагрева нихромовой нити нужно много энергии. Если у вас много фейерверков, используйте мощный аккумулятор.
// библиотека для работы с приёмником и передатчиком на 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(); }
// библиотека для работы с приёмником и передатчиком на 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-модуль).