Говорящая Arduino шапка Деда Мороза
Общие сведения:
В этом уроке мы создадим шуточное устройство, которое можно использовать как украшение новогоднего стола, а именно говорящую Arduino-шапку Деда Мороза, реагирующую на движение в зоне видимости датчика расстояния и читающую стихи (но вы можете заставить её делать практически всё, что угодно).
Видео:
Нам понадобится:
- 1х Шапка Деда Мороза;
- 1х Arduino / Piranha UNO;
- 1х Battery Shield;
- 1х Trema Shield;
- 2х Trema-модуль Адресный светодиод NeoPixel;
- 1х датчика расстояния HC-SR04;
- 1х MP3-плеер;
- 1х Карта памяти MicroSD;
- 1х Динамик;
- 1х Сервопривод;
- 2х нейлоновые стойки;
- 1х ПВХ-конструктор 1;
- 1х ПВХ-конструктор 2;
- 1х ПВХ-конструктор 3;
- 1х Крепёж;
- 14х Провода типа "мама-мама";
Для реализации проекта нам необходимо установить библиотеки:
- DFPlayer Mini mp3 Arduino Library V1.3 — для работы с плеером;
- iarduino_HC_SR04_int — для работы с ультразвуковыми датчиками расстояния;
- iarduino_NeoPixel — для работы с адресными светодиодами NeoPixel;
- Servo — входит в стандартный набор библиотек Arduino IDE и не требует дополнительной установки;
О том, как устанавливать библиотеки, Вы можете ознакомиться на странице Wiki - Установка библиотек в Arduino IDE.
Описание работы устройства:
После подачи питания говорящая Arduino-шапка готова к работе.
Для того, чтобы включить анимацию, достаточно поднести руку к датчику на указанное расстояние.
Схема сборки:
Arduino / Piranha UNO:
Batery Shield:
Установите Battery Shield на Arduino / Piranha UNO:
Trema Shield:
На Battery Shield установите Trema Shield:
MP3-плеер:
Подключите MP3-плеер к Trema Shield и динамик к MP3-плееру:
Так как выводы 0 и 1 зарезервированы под RX и TX, перед загрузкой скетча необходимо отключить плеер от платы, а после загрузки и перед использованием подключить обратно.
Датчик расстояния
Подключите датчик расстояния HC-SR04 к Trema Shield:
Сервопривод
Подключите Сервопривод к Trema Shield:
Адресные светодиоды:
Подключите адресные светодиоды NeoPixel к Trema Shield:
Trema-модули NeoPixel соединены друг c другом, а первый модуль можно подключить к любому выводу Arduino (в скетче используется вывод D4
). Чем больше модулей в цепи, тем больше тока она потребляет, поэтому в схеме используется стабилизированный источник питания Battery Shield на 5В постоянного тока.
ПВХ-конструктор
Так как проект не предполагает использования готовых корпусов, для изготовления всех необходимых элементов корпуса воспользуемся готовыми пластинами №1, №2 и №3 из которых, используя любой режущий инструмент, можно вырезать детали необходимого размера. Более подробно о том, как это сделать, вы можете увидеть в видео выше.
В данном проекте мы сделали следующие детали (размер одной "пустой" клетки 5х5мм, размеры приведены по количеству "сквозных" клеток):
- 1х пластина для основания 12х13;
- 1х пластина для крепления Piranha Uno 12х9;
- 4х опоры 5х3;
- 2х пластина для крепления сервопривода 11х4;
- 1х узкая пластина для крепления верхней "губы" 8х4;
- 1х широкая пластина для имитации верхней "губы" 8х7;
- 1х широкая пластина для имитации нижней "губы" 7х5;
- 2х квадрат для крепления модуля NeoPixel 5х5;
- 1х перемычка для крепления двух модулей NeoPixel 12х3;
- 1х пластина для крепления ультразвукового датчика расстояния 12х10;
Код программы (скетч):
Алгоритм работы скетча:
До кода void setup()
определяются переменные, подключаются необходимые библиотеки.
В коде void setup()
инициализируется MP3-плеер, адресные светодиоды NeoPixel, датчик расстояния, сервопривод, выключаются светодиоды, если до этого они горели.
Код void loop()
делится 2 части:
- ЧАСТЬ 1: Проверяется, обнаружил ли датчик расстояния препятствие в указанной зоне:
- Если да, то запускается трек с мелодией (который при каждом следующем срабатывании увеличивается на 1), ставится флаг
flg_moroz
илиflg_terminator
в данной зоне (в зависимости от трека, который будет играть), обнуляется счётчик времениtimer1
, фиксирующий наступление события, чтобы в следующий раз оно сработало через времяhcsr_waiting_time_near
, настраивается времяaction time
для каждого конкретного трека;
- Если да, то запускается трек с мелодией (который при каждом следующем срабатывании увеличивается на 1), ставится флаг
- ЧАСТЬ 2: Проверяется, был ли установлен флаг наличия препятствия:
- Если был установлен флаг
flg_moroz
:- Проверяем, истекло время выполнения анимации
timer1 + action_time
или нет;- Если не истекло, то задаём режим работы светодиодных модулей (строки
60
-73
) и сервопривода (строки75
-202
); - Для того, чтобы соотнести слова трека и движение сервопривода, применён следующий метод:
- на букве "А" сервопривод отклоняется на 45 градусов;
- на всех гласных, кроме "А", сервопривод отклоняется на 20 градусов;
- на всех согласных сервопривод не отклоняется (0 градусов);
- Помимо этого, вам понадобится любой аудиоредактор, чтобы можно было определить время произнесения тех или иных букв с точностью до миллисекунд;
- Если истекло, то гасим все светодиоды и сбрасываем флаг;
- Если не истекло, то задаём режим работы светодиодных модулей (строки
- Проверяем, истекло время выполнения анимации
- Если был установлен флаг
flg_terminator
:- Проверяем, истекло время выполнения анимации
timer1 + action_time
или нет;- Если не истекло, то задаём режим работы светодиодных модулей (строки
216
-226
) и сервопривода (строки228
-235
); - Для того, чтобы соотнести слова трека и движение сервопривода, применён следующий метод:
- на букве "А" сервопривод отклоняется на 45 градусов;
- на всех гласных, кроме "А", сервопривод отклоняется на 20 градусов;
- на всех согласных сервопривод не отклоняется (0 градусов);
- Помимо этого, вам понадобится любой аудиоредактор, чтобы можно было определить время произнесения тех или иных букв с точностью до миллисекунд;
- Если истекло, то гасим все светодиоды и сбрасываем флаг;
- Если не истекло, то задаём режим работы светодиодных модулей (строки
- Проверяем, истекло время выполнения анимации
- Если был установлен флаг
Про треки:
Для того, чтобы плеер верно мог воспроизвести ваши треки, их необходимо разместить на SD-карте следующим образом:
- Переименуйте все ваши треки, которые вы хотите воспроизвести с плеера, используя следующую форму: 000Х.mp3, где Х - порядковый номер трека;
- Создайте в основной директории карты новую папку и переименуйте её в "mp3";
- Скопируйте ваши переименованные файлы с компьютера на карту памяти;
Готово! Теперь, зная количество и названия треков, внесите изменения в скетче там, где указывается порядковый номер трека и условия его воспроизведения (строки 43
-53
)
Ссылки:
- Библиотека iarduino_NeoPixel;
- Библиотека DFPlayer Mini mp3 Arduino Library V1.3;
- Библиотека iarduino_HC_SR04_int;
- Wiki - Установка библиотек в Arduino IDE;
- Wiki - Piranha UNO;
- Wiki - Battery Shield;
- Wiki - Trema Shield;
- Wiki - Trema-модуль Адресные светодиоды NeoPixel;
- Wiki - Ультразвуковой датчик измерения расстояния HC-SR04;
Станьте первым!