Постановка задачи
Задачей проекта является изготовление устройства озвучивания выстрелов 6-ти единиц оружия в электронном тире. Звук выстрела должен читаться с mp3-файла на флешке и подаваться на вход существующих активных колонок.
Так же необходимо предусмотреть возможность оперативного выбора из 5-ти записанных файлов на флешке для озвучки при помощи кнопки выбора.
Особенности питания и входных сигналов.
Входные сигналы от спусковых крючков оружия составляют 10 В в нажатом состоянии и ноль в отпущенном.
Питание устройства от напряжения 9 ... 12 В.
Подбор компонентов
Самое главное - выбираем модуль mp3-проигрывателя Catalex с управлением от контроллера, на борту которого гнездо для флешки и выход прямо под аудио-штекер 3,4 мм, куда можно сразу подключить большинство активных аудио-колонок. Этот модуль позволяет по командам от контроллера проигрывать или единожды определённые файлы в папках или циклично все файлы в папке. Он работает с сигналами 5 В и, при приходе следующей команды на проигрывание, прерывает проигрывание предыдущего файла.
Модуль не будем устанавливать по одному на каждое оружие, а используем один на все. Просто каждый следующий выстрел будет прерывать предыдущий и всем будет казаться, что новый перекрывает по громкости старый. При этом мы сэкономим в себестоимости и в необходимости разрабатывать микшер, для объединения аудио-сигналов от 6-ти mp3-модулей.
Для четкого срабатывания каждого выстрела при параллельной стрельбе из нескольких ружий, заведём каждый входной сигнал 10 В на отдельный дискретный вход контроллера. Поэтому контроллер нужно выбрать с количеством дискретных входо/выходов как минимум в 9 штук (6 ружий, 1 кнопка выбора файла, 2 пина пойдет на управление модулем mp3 по UART). Выбираем самый удобный в монтаже и дешовый контроллер Arduino Nano.
Для согласования сигналов 10 В от оружия на контроллер Arduino Nano 5 В прийдется поразмыслить. Дело в том, что желательно обезопасить дискретные входы контроллера от различных факторов человеческой глупости и рассеяности. Если бы мы точно могли поручиться, что там не появится что-то сильно отличное от 10 В, то можно было бы ограничиться простыми делителями напряжения на резисторах, но я не могу доверить свою драгоценную плату контроллера незнакомым монтажникам и эксплуататорам. Так же мне дорога репутация по надёжности работы моих проектов. По всем этим причинам буду разрабатывать уникальный модуль гальваноразвязки на оптопарах, для чего разработаю схему и изготовлю печатную плату.
Так же нам понадобится модуль питания понижающий 9 ... 12 В до 5 В. Я выбираю понижающий преобразователь напряжения с 4,5...40В до 5В 2А из-за простоты соединения его с контроллером Arduino Nano при помощи USB-кабеля.
Модуль гальваноразвязки
Схема модуля гальваноразвязки на основе оптопар. Резисторы на входе подбираются под конкретное напряжение сигнала. У меня под 10 В получилось сопротивление порядка 300 Ом. Нормальное рабочее падение напряжения на светодиоде выбранной оптопары 1,2 В при токе 20 мА.
SW1 это мини кнопка SMD 6х6 мм выбора файла mp3.
При приходе сигнала 10 В на отдельный канал модуля, на выход пойдёт +5В через открытый фототранзистор. При отсутствии сигнала, транзистор будет закрыт и выходной канал модуля будет подтянут только на общий провод через резистор 10 кОм.
Так же предусматриваем два запасных канала на случай сгорания парочки.
После изготовления модуль выглядит следующим образом
Винтовые клеммники для подключения входных сигналов с ружий, а гребёнки для соединения с контроллером.
Питание 5В заводим прямо с верхней гребёнки контроллера Arduino Nano. А сигналы с выходов модуля подключаем на выводы D3 ... D8. Сигнал с кнопки выбора файла озвучки заводим на вход D2 контроллера Nano.
Подключение модуля MP3 проигрывателя к контроллеру Arduino Nano
Тут всё просто: плюс 5В контроллера на плюс модуля, минус контроллера на минус модуля. Вывод RX контроллера на TX модуля MP3 и так же наоборот вывод TX контроллера подаем на вывод RX модуля проигрывателя. Так же не забываем вставить флешку с MP3 файлами.
Загрузка программы в контроллер
Подключаем комп к контроллеру и загружаем следующую программу:
static int8_t Send_buf[8] = {0} ;
const int songs = 2; // вывод контроллера для кнопки
const int alarm1 = 3; // вывод контроллера для выстрела
const int alarm2 = 4; // вывод контроллера для выстрела
const int alarm3 = 5; // вывод контроллера для выстрела
const int alarm4 = 6; // вывод контроллера для выстрела
const int alarm5 = 7; // вывод контроллера для выстрела
const int alarm6 = 8; // вывод контроллера для выстрела
const int ledPin = 13;
int songs_old = 1; // предидущее значение входа для кнопки
int song = 1; //номер выбранного звука выстрела
int alarm1_old = 1;
int alarm2_old = 1;
int alarm3_old = 1;
int alarm4_old = 1;
int alarm5_old = 1;
int alarm6_old = 1;
#define CMD_PLAY_W_INDEX 0X03
#define CMD_SET_VOLUME 0X06
#define CMD_SEL_DEV 0X09
#define DEV_TF 0X02
#define CMD_PLAY 0X0D
#define CMD_PAUSE 0X0E
#define CMD_SINGLE_CYCLE 0X19
#define SINGLE_CYCLE_ON 0X00
#define SINGLE_CYCLE_OFF 0X01
#define CMD_PLAY_W_VOL 0X22
void setup()
{
pinMode(songs, INPUT_PULLUP); //вывод для кнопки с подтяжкой к плюсу
pinMode(alarm1, INPUT);
pinMode(alarm2, INPUT);
pinMode(alarm3, INPUT);
pinMode(alarm4, INPUT);
pinMode(alarm5, INPUT);
pinMode(alarm6, INPUT);
pinMode(ledPin, OUTPUT); //существующий светодиод на плате контроллера. //будет загораться при нажатии на кнопку выбора файла
Serial.begin(9600);
delay(500);
sendCommand(CMD_SEL_DEV, DEV_TF); //выбор TF карточки
delay(200);
sendCommand(CMD_SET_VOLUME, 0X1E);//установить громкость в 30 (100%)
}
void loop()
{
digitalWrite(ledPin, not digitalRead(songs));
if (((digitalRead(alarm1)==HIGH)&&(alarm1_old==0)) || ((digitalRead(alarm2)==HIGH)&&(alarm2_old==0)) || ((digitalRead(alarm3)==HIGH)&&(alarm3_old==0)) || ((digitalRead(alarm4)==HIGH)&&(alarm4_old==0)) || ((digitalRead(alarm5)==HIGH)&&(alarm5_old==0)) || ((digitalRead(alarm6)==HIGH)&&(alarm6_old==0)))
{
switch (song) {
case 1:
sendCommand(0X0F, 0X0101); //play file 01/001.mp3
break;
case 2:
sendCommand(0X0F, 0X0102); //play file 01/002.mp3
break;
case 3:
sendCommand(0X0F, 0X0103); //play file 01/003.mp3
break;
case 4:
sendCommand(0X0F, 0X0104); //play file 01/004.mp3
break;
case 5:
sendCommand(0X0F, 0X0105); //play file 01/005.mp3
break;
default:
sendCommand(0X0F, 0X0101); //play file 01/001.mp3
break;
}
}
if ((digitalRead(songs)==1)&&(songs_old==0))
{
song = song + 1;
if (song > 5) song = 1;
}
alarm1_old = digitalRead(alarm1);
alarm2_old = digitalRead(alarm2);
alarm3_old = digitalRead(alarm3);
alarm4_old = digitalRead(alarm4);
alarm5_old = digitalRead(alarm5);
alarm6_old = digitalRead(alarm6);
songs_old = digitalRead(songs);
delay(100);
}
void sendCommand(int8_t command, int16_t dat)
{
delay(20);
Send_buf[0] = 0x7e; //начальный байт
Send_buf[1] = 0xff;
Send_buf[2] = 0x06; //число байтов команд без начального и конечного байта
Send_buf[3] = command;
Send_buf[4] = 0x00;//0x00 = no feedback, 0x01 = feedback
Send_buf[5] = (int8_t)(dat >> 8);//данные
Send_buf[6] = (int8_t)(dat); //datal
Send_buf[7] = 0xef; //завершающий байт
for(uint8_t i=0; i<8; i++)//
{
Serial.write(Send_buf[i]) ;
}
}
Питание устройства
Питаем контроллер при помощи выбранного понижающего преобразователя напряжения. Плюс и минус 12 В подаем на клеммник преобразователя, а выход соединяем с контроллером при помощи короткого USB-кабелечка.
Такой удобнейший модуль, который даже показывает текущую величину напряжения на входе, а на выходе выдает стабилизированное напряжение 5 В
Выводы
Устройство в собранном виде выглядит следующим образом
Так как оно будет монтироваться где-то в застенках тира, ему корпус не нужен. Можно все модули приклеить силиконом к монтажной панели.
На видео работа устройства выглядит так:
Каждый канал уверенно стреляет. Работает все в широком диапазоне питающих напряжений. Проверялась работа при питании 6 ... 12 В. Сигналы выстрелов брались с того же источника питания. Срабатывает всё достаточно быстро и реалистично. В который раз меня уже радует модуль mp3 с управлением UART. Всем советую!
Кому нужна озвучка событий с mp3-файлов - обращайтесь по телефонам на сайте.
Преобразователь уровней 5В 3,3В 8-канальный
Модуль 8-канального преобразователя логических уровней на специализированной микросхеме TXS0108E.При..
37.71грн.
Arduino SIM800 исходящий звонок ATD
Привет друзья! Это продолжение серии статей о работе с SIM800. Всех их можно найти на этом канале.&n..
Arduino 3 пина на 6 светодиодов чарлиплексинг
ЧарлиплексингПредлагаю вашему вниманию полезное рабочее решение, как при помощи трех пинов контролле..
Модуль Bluetooth SPP-C
Протокол связи : Bluetooth спецификация v2.1+EDRРадиус действия : до 10 метров (уровень мощности 2)Н..
107.96грн.
Контроллер WeMos D1 mini ESP8266
Очень маленькая и дешевая плата контроллера с WiFi связью на борту. Не может похвастаться множеством..
125.70грн.