Новогоднее волшебство или магическая коробочка на Arduino

Волшебная коробочка

Скоро Новый Год – время магии и волшебства. Почему бы не сделать волшебную коробочку, чтобы порадовать семью и друзей? Заодно разберемся с ещё одним видом беспроводной связи – ИК, а так же научимся работать со звуком на Arduino с помощью MP3 плеера.

Давайте сделаем коробку-загадку. Для того чтобы разгадать секрет, нужно будет угадать шифр, который предварительно записывается в устройство с помощью пультов. Когда шифр будет разгадан, загорится гирлянда и заиграет музыка.

Нам понадобятся

Arduino UNO

Будет мозгом нашего устройства.

Troyka shield

Его надеваем на UNO. К нему проще простого подключить все датчики и MP3.

DF MP3 плеер

Этот небольшой плеер и сам способен играть, но мы его подключим к Arduino и команды о запуске посылать будем с контроллера. К нему нужно подключить динамик.

Динамик

 Берем динамик в соответствии с нашими потребностями. К DF можно подключить динамик мощностью до 3 Ватт.

ИК приемник

Немного рассыпухи

  • Резистор 1КОм
  • Три кнопки
  • Соединительные провода “МАМА-ПАПА”
  • Соединительные провода “ПАПА-ПАПА”
  • Макетная плата
  • Пять светодиодов

MP3

Начнем, пожалуй, с плеера. Для запуска нам нужна карта micro SD и динамик. На micro SD запишем звуки. Записывать надо хитро – в корневой директории создать папку MP3, а в нее закидывать файлы с названием 0001….mp3, 0002….mp3.

 

Теперь подключаем плеер по этой схеме. Распиновка плеера есть ниже.

Для первого подключения достаточно использовать контакты VCC, RX, TX, SPK_1, GND и SPK_2.

  • SPK – к ним подключается динамик
  • VCC и GND – питание
  • RX и TX – обмен данными с Arduino

Я использовал ещё два контакта – IO_1 и IO_2. К этим контактам подключаются кнопки. Короткое нажатие – следующая или предыдущая композиция, длинное – прибавить/убавить громкость.

Теперь нужно скачать библиотеку. Скачать. Распаковываем архив в папку с библиотеками и запускаем этот скетч.

#include <DFPlayer_Mini_Mp3.h>
#include <SoftwareSerial.h>

SoftwareSerial mySerial(11, 10); // RX, TX
void setup ()
{
mySerial.begin (9600);
mp3_set_serial (mySerial);
mp3_set_volume (10);
}

void loop ()
{
mp3_play (1);
}

/*
mp3_play (); //воспроизвести первый файл из папки mp3
mp3_play (5); //воспроизвести «mp3/0005.mp3»
mp3_next (); //воспроизвести следующий
mp3_prev (); //воспроизвести предыдущий
mp3_set_volume (uint16_t volume); //установить громкость от 0 до 30
mp3_set_EQ (); //эквалайзер 6 режимов — от 0 до 5
mp3_pause (); //пауза
mp3_stop (); //стоп

void mp3_get_state ();
void mp3_get_volume ();
void mp3_get_u_sum ();
void mp3_get_tf_sum (); //Получение различных данных с плеера
void mp3_get_flash_sum ();
void mp3_get_tf_current ();
void mp3_get_u_current ();
void mp3_get_flash_current ();

void mp3_single_loop (boolean state); //зациклить воспроизведение
void mp3_random_play (); //воспроизводить рандомный файл из папки mp3
*/

Этот плеер можно использовать и без Arduino. Для управления есть контакты, которые мы не использовали. Мы пока не будем туда лезть. Полную документацию можно найти тут. Идем дальше.

ИК

ИК (инфракрасный канал) связь – это беспроводная связь, которую мы применяем для передачи данных в прямой видимости и на небольшой(5 – 10 Мбит/с) скорости. Переключая каналы телевизора, мы пользуемся этой самой ИК связью. Кстати, многие путают Мбит и МБ. Мбит – это Мегабиты, а МБ — Мегабайты. 1 МБ = 8 Мбит

Связь происходит за счет инфракрасного передатчика и приемника. Передатчиком является светодиод, который излучает свет в инфракрасном диапазоне. Наш глаз не может увидеть такой свет, а вот ИК приемник – запросто.

Камера тоже может видеть ИК диапазон. Если включить камеру, навести ее на светодиод пульта от телевизора и ткнуть кнопку, то можно увидеть, как светодиод мигнет. Этот способ так же поможет узнать самую частую причину того, что телевизор не переключает каналы – сели батарейки.

Вернемся к Arduino. Есть классная библиотека. Называется IR Remote. Скачать ее можно тут. После установки библиотеки запускаем этот скетч.

#include <IRremote.h>

#define IRR 12 //Пин, к которому подключен ИК приемник

//Определяем необходимые объект и переменную
IRrecv irrecv(IRR);
decode_results results;

void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); //Включаем прием
}

void loop()
{
//Если появились данные
if (irrecv.decode(&results))
{
//Отправляем данные в Serial
Serial.println(results.value, HEX);
irrecv.resume(); // Ждем следующих данных
}
}

/*
*
* Чтобы включить светодиод по нажатию кнопки пульта,
* мы должны узнать код этой кнопки, что мы и сделали выше.
*
* Сравниваем входящие данные с кодом нужной кнопки
*
* if(results.value = 0xFFFFFFFF) Вместо FFFFFFFF пишем код кнопки
{
digitalWrite(LED, HIGH);
}
*
* Запись кода с 0x обязательна.
* Она говорит о том, что значение в шестнадцатеричной СС
*
*/

При выводе данных в Serial мы задали дополнительный параметр – HEX. Он говорит о том, что данные должны быть выведены в шестнадцатеричной системе счисления. Так же можно выводить в десятичной DEC, восьмеричной OCT и двоичной BIN.

Теперь можно побегать по дому и разыскать всякие пульты, научиться считывать их показания и применять в различных местах. Роботом управлять, например. А можно сделать универсальный пульт, который при входе в дом включает вашу любимую музыку или кондиционер.

Сборка устройства

Теории пока хватит. Пришло время практики. Внимание на схему.

Крайняя левая кнопка отвечает за режим записи. После нажатия на нее раздастся сигнал, который сообщит о начале записи. Средняя  кнопка – за убавление звука, правая – за прибавление.

Я сделал корпус, чтобы коробочка стала коробочкой.

Светодиоды и ИК приемник выведены на лицевую сторону коробки. Для пущей праздничности можно нарисовать снежинки, снеговика и елочку. Ну и обмотать мишурой, конечно.

Динамик, светодиоды и ИК приемник прикрепляем с помощью термоклея.

Стоит позаботиться о питании. Компьютера с USB рядом может не оказаться. Первой идеей была установка “Кроны”, но напряжение проседало, и из динамика раздавался треск. Тогда я сделал такую конструкцию. 4 аккумуляторных батареи, DC-DC преобразователь и 2.1 мм разъем. Преобразователь нужен чтобы обеспечить Arduino нужным напряжением.

Можно ещё подсоединить большую гирлянду, но потому что работа с высоким электричеством требует кристального понимания и трезвого рассудка, а Новый год не очень подходит для этого, то я решил отказаться. Кто все же хочет добавить размаха – я закомментировал части кода, отвечающие за включение и выключение реле.

Код

Код можно найти ниже, в прикрепленных файлах.

Видео

На видео показан процесс записи и расшифровки. После расшифровки замигали светодиоды и, заиграла мелодия, но ее, почему то не слышно. Стоило прибавить звук. Благо для этого предусмотрены кнопки.

Итог

Сегодня мы разобрались с ещё одним видом беспроводной связи, послушали музыку и помигали светодиодами. А объединив все это, можно создать реальную магию – магию микроконтроллеров.

С Новым Годом, Паяльник и его обитатели! Пусть сбываются все мечты, а новый год приносит лишь радость! До встречи в 2017!

Прикрепленные файлы:

Добавить комментарий

Ваш адрес email не будет опубликован.