Андрей Смирнов
Время чтения: ~13 мин.
Просмотров: 5

Учим разговаривать DIY с помощью MP3 модуля

DFPlayer-%D0%9C%D0%B8%D0%BD%D0%B8-Mp-3-%D0%9F%D0%BB%D0%B5%D0%B5%D1%80-%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C-%D0%94%D0%BB%D1%8F-Arduino.jpg

  • Цена: $ 3.04 на момент покупки

Представляю вашему вниманию цифровой магнитофон DFPlayer-Mini и небольшой колхозинг из него и Ардуино на бытовую тему. У этого продавца модули закончились (а может сам продавец закончился, не знаю), но поиском без труда находятся другие лоты. Заказ пришел довольно быстро в стандартной упаковке — ничего примечательного. Из достоинств хочу отметить наличие на борту этого модуля встроенного усилителя аж на 3 Вт (по мнению даташита). Не проверял конкретную мощность, но орет он знатно. Весь контент хранится на карте памяти sd объемом до 32Гб. То есть музыки туда залить можно немерено. Для проверки подключил его по простейшей схеме (все схемы есть в мануале, например здесь www.dfrobot.com/image/data/DFR0299/DFPlayer%20Mini%20Manul.pdf)2fa1b6.png Попробовал подсовывать ему различные файлы mp3 — переваривает. Подсунул парочку WMV — схавал (но их я особо не тестировал, мне и mp3 за глаза хватает). Функционал DFплеера предполагает различные виды воспроизведения. Можно управлять парой мелодий (как на рисунке выше), можно поставить кучу кнопок через два AD контакта (AD key control mode):96755d.png Но самое, на мой взгляд, интересное — управление из Arduino через UART Port. Убедился, что работает… и что же дальше, подумал я? Компактный размер позволяет встраивать это модуль в различные поделки. А я чем хуже? — буду колхозить! Случилось так, что у меня образовался неожиданный запас из: магнитофона DFPlayer-Mini aliexpress.com/item/DFPlayer-Mini-MP3-Player-Module-For-Arduino/32571281167.html микроконтроллера Arduino Nano aliexpress.com/item/1PCS-Nano-3-0-controller-compatible-with-nano-CH340-USB-driver-NO-CABLE-NANO-V3-0/2035011839.html электронных часов DS3231 aliexpress.com/item/DS3231-AT24C32-IIC-High-Precision-RTC-Module-Clock-Timer-Memory-Module-for-Ar-H/1859103686.html ультразвукого датчика SR-04 yandex.ru/search/?text=site%3Aaliexpress.com%20HC-SR04&lr=213 и решил я соорудить музыкальную шкатулку. Смысл ее работы в том, что при нахождении поблизости объекта начинается воспроизведение музыки с плавным нарастанием громкости, а при удалении больше определенного расстояния — плавное уменьшение громкости и остановка воспроизведения. Расстояние определяется достаточно точно (плюс минус 2-3 см), поэтому пока объект не займет надлежащее, фиксированное положение, музыка не заиграет. Кроме того, вынесенный датчик освещения не позволяет запуститься модулю в темноте (сделал из первого попавшегося фоторезистора), а часы DS3231 ограничивают работы в период с 23 до 8 утра. Нечего по ночам музыку слушать! Я знаю язык С++ чуть больше, чем 0, поэтому использую для программирования замечательную программу FLProg (FLProg.ru). Программа бесплатна и позволяет не зная СИ полноценно программировать Arduino. Принцип работы прост — я рисую на экране блоки на языке FBD, а программа уже сама переводит их в ардуино-СИ.Например, моя шкатулка выглядит в FLProg так: Сказано-сделано — методом навесного соплемонтажа установил модули на самую распростую макетную плату, всю конструкцию засунул в подходящий корпус (вроде, тоже на ALI брал, но сейчас ссылки не найду) и подключил выносные датчики. Кстати,для монтажа SR-04 очень рекоммендую такой кронштейн: брал на Ali, у этого продавца уже нет, но можно запросто найти подобный. Вот так выглядит смонтированный датчик расстояния SR-04: Вот сама смонтированная шкатулка (располагается в шкафчике неподалеку): Ну и, внимание!, вся система в сборе:Нервных просят удалиться Напоминаю, при занятии объектом заданного положения, плавно, по возрастающей, начинает играть музыка. Я поставил классику: Вот несколько названий из списка: Система уже установлена, работает и приносит радость окружающим и мне. На этом все, спасибо за внимание.

  • Цена: $1.30

Когда мы мастерим различные полезности для дома, используя Ардуино, мы мало задумываемся, как получать информацию от этого устройства. Если ее немного, то обходимся чащe всего светодиодами. Но если информации выводить нужно больше, то конечно, это будет видео в том или ином виде — разнообразные индикаторы и дисплейчики, коих в продаже великое множество. Ибо это просто и это привычно. Да, зрение у нас основной орган чувств, но иногда звук гораздо более удобный, а зачастую и единственный способ донести до нас информацию. Примерами могут служить будильник, сигналка на авто или, увы, слабовидящие люди. Но в своих поделках дальше использования пищалки мы звуком не пользовались, поскольку не было удобного инструмента для этого. Теперь это в прошлом. В этом обзоре мы научим разговаривать (и даже немного шутить) часы и другие приборы и напишем аудиосинтезатор, с помощью которого Ардуино сможет произносить любые числа из натурального ряда голосом. Для начала о цене вопроса. Не слишком ли она окажется высока для заявленных возможностей? И вот тут нас ожидает первый и весьма приятный сюрприз. Чуть больше доллара MP3 модуль плюс чуть меньше бакса micro SD карточка на 64 mb (я брал на ebay по 99 центов), без которой модуль бесполезен. Недорого, правда? Да, для вывода звука, конечно, понадобится еще динамик, но поскольку никаких выдающихся характеристик от него не требуется, мы его покупать не станем, а вытащим, к примеру, из какого-нибудь старого системника или радиоприемника. А зато в качестве бонуса мы получим возможность выбросить из проекта пищалку, если она там была — с ее ролью прекрасно справится сам MP3 модуль. Познакомимся с железом: Модуль представляет собой вполне себе самостоятельный девайс, который можно использовать и без Ардуино. Для этого достаточно подключить к нему несколько кнопок (или даже резистивную клаву), динамик или внешний усилитель, вставить micro SD карточку с музоном и все, можно слушать любимые композиции. Но это совсем неинтересно. Гораздо интересней управлять им программно, чем мы сегодня и займемся. Ниже расписаны все его контакты, но нам для работы с Ардуино понадобятся только первые семь. Вывод Описание 1. VCC Питание «+» 2. GND Питание «−» 3. RX UART приём 4. TX UART передача 5. SPK1 Громкоговоритель «+» 6. SPK2 Громкоговоритель «−» 7. BUSY Индикатор состояния («0» — простой, «1» — проигрывание) 8. DAC_R Выход на наушник или усилитель (канал «R») 9. DAC_L Выход на наушник или усилитель (канал «L») 10. IO1 Вход управления: короткое нажатие — «назад», длинное — уменьшить громкость 11. IO2 Вход управления: короткое нажатие — «вперёд», длинное — увеличить громкость 12. ADKEY1 Порт для подключения резистивной клавиатуры, вход 1 13. ADKEY2 Порт для подключения резистивной клавиатуры, вход 2 14. USB+ USB порт, вывод «+» 15. USB− USB порт, вывод «−» Что нам следует знать о железке? Плеер может проигрывать как mp3 файлы с битрейтом до 320kbps, так и wav. На его борту присутствует встроенный усилитель, к которому, согласно даташита, можно подключить динамик и выжать до 3W. Качество звука не ахти, но для экспериментов пойдет. Лучше использовать все-таки внешний стерео усилитель, задействовав выводы DAC_R и DAC_L. Для питания требуется напряжение в диапазоне 3.2 — 5V. В плеере присутствует простенький эквалайзер на 5 профилей: NORMAL, POP, ROCK, JAZZ, CLASSIC и BASS. Общаться наш плеер с Ардуино будет через последовательный интерфейс с скоростью 9600bps. В принципе, используя команды из даташита, можно управлять плеером напрямую через UART, но мы будем использовать библиотеку mp3TF, где управление реализовано нагляднее и удобнее. Для обратной связи будем использовать пин BUSY, чтобы знать о состоянии плеера (режим воспроизведения или ожидания). Один интересный момент касается реализации связи по UART. Хотя, в даташите указано прямое соединение TX-RX, RX-TX, народ рекомендует включить в эти цепи по резистору 1-2 кОм. Без них, якобы, появляются искажения, идет нагрев плеера и у кого-то даже плеер вышел из строя. Поверим и включим эти резисторы. О железе плеера пока все, можно приступать к сборке. В качестве Ардуино я буду использовать Uno, но подойдет любая модель. Поскольку плеер с динамиком 0.5W потребляет прилично для возможностей USB, с которого и пойдет у нас питание, на высокой громкости довольно существенно просаживается напряжение, из-за чего плеер вырубается. Поэтому я к цепи питания добавил конденсатор на 4700 mkF. После такой модификации плеер стабильно работает на любой громкости. Теперь что касается программной части. Как я уже упоминал выше, я буду использовать библиотеку mp3TF, а не более распространенную DFPlayer-Mini-mp3, так как эта библиотека, предоставляя бОльшие возможности, генерит более компактный код. Но самое главное, в ее составе есть функции, позволяющие воспроизводить файлы из нужной папки! Присутствуют также стандартные функции управления громкостью, навигацией, эквалайзером и несколько экзотических, которые мы применим для модернизации Тетриса. Немного об организации файлов на micro SD карте при использовании функции playFolder2 из этой библиотеки. Файлы могут располагаться в папках с двузначным номером. Допустимо использовать не более 15 папок, в каждой из которых до 3000 файлов. Файлы при этом сортируются по имени в алфавитном порядке. Номер трека указывается в соответствии с этой сортировкой. Чтобы не путаться, перед именем файла будем ставить четырехзначный номер, типа 0015file.mp3 или просто 0015.mp3. Чтобы изучение возможностей плеера было нескучным, соберем на макетной плате несколько полезных устройств из того что у меня оказалось под рукой. Поскольку были найдены модуль реального времени DS1307 и дисплейчик на TM1637, то соберем говорящие часы. Активатором голосового вывода времени будет сенсорный датчик. Подготовка micro SD карточки. Отформатируем ее в FAT16 или FAT32 и наговорим в микрофон все возможные часы и минуты. Получится 84 файла — 24 часа и 60 минут. Скачаем и установим библиотеки DS1307RTC.h и TimeLib.h для работы с часами, TM1637Display.h для работы с дисплеем и SoftwareSerial.h для организации виртуального последовательного порта. Можно, конечно, пользоваться и встроенным портом, но так мы получим более гибкую конструкцию с одинаковыми номерами пинов для подключения всех моделей Ардуино. Собираем схему. Теперь нам нужно установить время в наших часах. Поскольку мы собираем часы только для демонстрации возможностей плеера, то не будем писать код для установки и корректировки даты/времени, а воспользуемся примером из состава библиотеки DS1307RTC.h с названием SetTime. Этот скетч просто заливает в RTC дату/время своей компиляции, он выполнит инициализацию модуля DS1307 и больше нам не потребуется. Теперь зальем в папку с именем 02 на флешку наши голосовые файлы, набросаем небольшой скетч для наших часов и запустим его.Говорящие часы Мы увидим на дисплее текущее время и моргающее двоеточие-секунды. А теперь прикоснемся к сенсору и вот оно! Часы сообщают нам время голосом. Такие часы я видел когда-то очень давно и мне очень хотелось тогда их иметь, но, увы, возможностей не было. Теперь, не особо напрягаясь, любой может собрать их за несколько минут. Но мы пойдем еще дальше и дадим часам сварливый характер. Пусть наши часы начнут ворчать, если к сенсору прикасаться слишком часто. Для этого добавим несколько файлов с соответствующей озвучкой и несколько строк кода. Обновленный скетч будет выглядеть так:Говорящие часы — ворчуны ) А вот как они работают. Теперь, если касаться сенсора чаще, чем раз в 5 сек, часы начинают раздражаться, а после 3-го раза вообще обижаются и перестают сообщать время. Но, конечно, ненадолго ). После 5 секунд настроение у них снова восстанавливается. Характеры можно придумать разные, все ограничивается только нашей фантазией. Собрав подобные часы в корпусе (мыльница?), мы получим отличный подарок для близких. И даже весьма полезный для слабовидящих. А может кому то понравится возможность узнавать ночью время, не открывая глаз, а просто коснувшись корпуса часов рядом. Себе-то я точно соберу, как только приедет микрофон (чтобы в зависимости от шумности вокруг, регулировалась громкость). Собирая часы, мы использовали полный набор файлов с часами и минутами, где в каждом файле присутствует число и его размерность: “Два часа”, “Двадцать одна минута”, “Восемнадцать часов” и т.д. Нам не пришлось заниматься лексическим разбором: “одна минутА”, но “две минутЫ” или “пять минуТ”. Мы упростили себе жизнь, соединяя только 2 файла – количество часов и количество минут. А комбинаций всех возможных часов и минут получилось всего 84, это немного и нас это устроило. Но мы можем озвучить не только часы, но и показания любых других приборов, значения которых могут превышать тысячи и более. В этом случае все возможные комбинации не надиктуешь. Значит нужно написать универсальный голосовой синтезатор чисел. Этим и займемся. Как мы произносим число? Есть базовые лексические единицы и сборные. Например, числа “один”, “пятнадцать”, “семьдесят”, “сто” являются базовыми, а число “сто двадцать пять” синтезируется из 3-х базовых единиц. В интервале от 0 до 19 числа все базовые, поэтому надиктуем их в 20 файлов. Далее идут десятки от 20 до 90, их также запишем в 8 файлов. За ними 9 файлов с произношением сотен. Дальше начинаются тысячи. Тут уже новый лексический нюанс. “ОДНА тысячА”, “ДВЕ тысячИ” и “пять тысяЧ”. Почти все в тысячах будет соответствовать и для более высоких размерностей, кроме слов “ОДНА” и “ДВЕ”. Для всех остальных размерностей это будут слова “ОДИН” и “ДВА”. Надиктуем эти варианты произношения для тысяч в 2 файла и добавим их в нашу папку. А затем по три варианта произношения для каждой последующей размерности: «миллион», “миллиона”, “миллионов” и т.д. Все файлы надиктованы, идея понятна, осталось воплотить её в скетч. Но мы-же программисты, ёпт…Скетч голосового синтезатора чисел Вот такая небольшая функция voicedig() способна лексически верно произнести любое натуральное число до 42-х разрядов. А вы сможете? Тогда вперед! ))) Видео работы голосового синтезатора: Если кому-то этого недостаточно, можно надиктовать еще размерностей, но мне их названия неизвестны. (Не проблема обучить систему произношению дробей и еще многому чему, но для демонстрации возможностей сабжа вполне, думаю, приведенного примера будет достаточно.) Теперь давайте применим нашу функцию для реальных измерений. Для этого добавим на макетку датчик освещенности BH1750. Значит, нам понадобятся еще 3 файла со словами “люкс”, “люкса”, “люксов”. Закинем эти файлы в новую папку и напишем скетч для опроса датчика. Немножко похулиганим и добавим в инициализацию прибора прибора приветствие ).Скетч говорящего датчика освещенности Видео работы говорящего люксметра: Заменим люксметр на дальномер, поправим немного код и получим говорящий дальномер.Скетч говорящего дальномера Видео работы говорящего дальномера: Конечно, данные датчики используют нашу функцию лишь на малую долю. Но ее возможностей хватит на любой прибор с запасом. Напоследок мы модернизируем игру Тетрис из этого обзора. Отключим уже ненужную пьезопищалку и поставим сабж. Запишем фоновый трек, звук проваливания линии и озвучим установление нового рекорда. Применим из вышеозвученной библиотеки крайне интересные функции: repeatCurrent(bool start) (Проигрывать по кругу текущий трек) и setInterCut(uint16_t track)(ставит текущий проигрываемый трек на паузу и проигрывает заданный).Тетрис с озвучкой Посмотреть, что вышло можно ниже. Прошу прощение за качество записи, особенно звука. Снимал чем было, но главное, я думаю, оценить можно. Кстати, из видео можно услышать звук проваливания линий. Кто первый догадается откуда он, сразу плюс в карму! )) Все скетчи, описанные выше, работают с тем набором файлом, под который заточены. Скачать этот набор можно здесь. Разумеется, я не диктор, потому рекомендую тем, кто захочет повторить эти эксперименты, попросить человека с хорошей дикцией надиктовать эти файлы. Главное — соблюдать последовательность. Итак, мы увидели, что звук может не только заменять дисплеи, но и, дополняя их, заметно разнообразить выдачу информации. Здесь все будет зависеть только от нашей фантазии… и умения немного программировать.Выводы: Из минусов я, пожалуй, отмечу только ограничения на имена файлов и папок, поскольку нужно знать не столько имя файла, сколько его место в таблице FAT. Из-за этого, бывало, надиктуешь полсотни файлов с именами 0001-0050, а один в середине пропустишь. И потом приходится вручную переименовывать кучу файлов, чтобы вставить забытый. Поэтому я написал себе программку на Delphi для вставки и удаления файлов в папке, так, что теперь это для меня не проблема, но производителю все-таки нужно подумать над этим. Плеер обладает огромным потенциалом и, при своей низкой цене и творческом подходе способен стать отличным помощником программиста микроконтроллеров. Вердикт: Must have!Используемые источники:

  • https://mysku.ru/blog/aliexpress/43709.html
  • https://mysku.ru/blog/aliexpress/50345.html

Рейтинг автора
5
Подборку подготовил
Максим Уваров
Наш эксперт
Написано статей
171
Ссылка на основную публикацию
Похожие публикации