Этот музыкальный проигрыватель, напоминающий симпатичного робота мастер сделал к 5-летнему дню рождения внучки. Он довольно прост в использовании, интуитивно понятен и дети быстро разбираются в управлении устройством. Проигрыватель имеет встроенную память, на которую можно записать аудиофайлы, и аккумуляторную батарею для автономной работы.
Давайте посмотрим небольшой видеоролик демонстрирующий работу устройства.
Сборка проигрывателя не сложная и доступна большинству из те, кто хоть раз держал паяльник в руках.
Инструменты и материалы:
-Микроконтроллер Lolin32;
-Разъем для платы;
-Модуль мини-MP3-плеера;
-Поворотный энкодер KY 040 — 2 шт;
-Модуль зарядки TP4056;
-1,3-дюймовый OLED-экран;
-МОП-транзистор НДП6020П;
-2N3904 транзистор;
-Диод 1N5819 — 2 шт;
-Резисторы : 1 x 220 Ом, 1 x 470 Ом, 2 x 10 кОм, 2 x 100 кОм, 1 x 220 кОм, 1 x 470 кОм, 1 x 1 МОм;
-0,1 мкФ конденсатор;
-Разъемы JST;
-Комплект проводов dupont;
-Микро SD карта;
-Lipo аккумулятор 2500 мАч;
-Аудиоразъем;
-Динамик;
-Наушники;
-Кнопки 2 шт;
-3D-принтер;
-Лак-спрей;
-Саморезы М2;
Шаг первый: электроника
Аппаратная архитектура основана на микроконтроллере ESP32. LOLIN32 запускает приложение и взаимодействует с различными элементами.
Устройство для чтения MP3 — это очень дешевая плата с драйвером карты micro SD, на котором можно хранить и воспроизводить файлы MP3. ESP32 отправляет основные команды (воспроизведение, остановка и т.д.) на DFPlayer и получает ответ через последовательный интерфейс. Интерфейс используется для отслеживания текущего статуса DFPlayer: работает или не работает. Выход на динамик доступен для подключения динамика мощностью не более 3 Вт или гарнитуры.
1,3-дюймовый OLED-экран подключается через шину I2C. Экран 128 x 64 пикселей используется для отображения изображения, представляющего текущую папку MP3 и уровень оставшегося заряда батареи.
Два поворотных энкодера управляют громкостью и выбором трека. Для выбора трека нужно повернуть ручку, для воспроизведения нажать.
Часть управления питанием используется для управления процессом включения / выключения. Длительное нажатие (1 секунда) запускает систему, второе длительное нажатие останавливает ее. Если в течение 5 минут проигрыватель не включают и песня не воспроизводится, питание автоматически отключится.
Мастер использовал EasyEDA для проектирования схемы.
Блок управления питанием подробно описан на прилагаемой схеме, он основан на MOSFET-транзисторе NDP6020P. Когда переключатель нажат (питание включено), транзистор 2N3904 запускает полевой МОП-транзистор, позволяя току течь от батареи (через TP4056) и загружая ESP32. Одним из первых действий, выполняемых ESP32, является активация сигнала POWER_CONTROL (вывод 12) для фиксации полевого МОП-транзистора. Кнопку можно отпустить, питание ESP32 остается. Второе нажатие на переключатель (для выключения питания) отслеживается ESP32 через сигнал SWITCH_MONITOR (контакт 13). Затем ESP32 деактивирует сигнал POWER_CONTROL, чтобы разблокировать полевой МОП-транзистор и отключить ток.
Питание обеспечивается батареей Lipo емкостью 2500 мАч, связанной с контроллером заряда TP4056. Подключение TP4056 осуществляется следующим образом:
micro-USB: для зарядки аккумулятора
IN- и IN +: не используются
B- и B +: к аккумулятору
OUT- и OUT +: к основной плате.
Уровень заряда батареи контролируется ESP32.
Кабельная разводка стереоразъема позволяет подключать выход HP- / HP + DFPlayer Mini:
внутренний динамик на полную мощность, когда наушники не подключены
на пониженной мощности (в моно) при подключенных наушниках. Это уровень безопасности для защиты детских ушей.
Schematic_Main_2020-12-04_12-53-05.pdf
Schematic_Audio_Connection_Board_2020-12-20_11-30-07.pdf
Шаг второй: монтаж
Печатную плату мастер заказал на сайте занимающимся производством плат.
Основная плата (PCB) включает в себя ESP32, DFPlayer mini и компоненты Power Control. Связь с другими элементами осуществляется с помощью перемычек и разъемов JST.
Файлы для печати платы можно загрузить здесь.
Шаг третий: музыкальные треки
Из-за авторских прав мастер не предоставляет файлы MP3, пользователь должен самостоятельно загрузить файлы. Если нужно изменить темы папок или добавить новые папки, придется изменить код.
При сохранении файлов MP3 на SD-карте необходимо соблюдать определенные требования.
На данной карте формат FAT32, и файлы организованы следующим образом:
6 папок, созданных в корне, пронумерованы от 01 до 06, соответствуют 6 аудио темам:
папка 01: песни для детей
папка 02: сказки
папка 03: песни Диснея
папка 04: Рождественские песни
папка 05: другие песни для детей
папка 06: классическая музыка
Файл 07: песни United Kids
Каждая папка содержит файлы MP3, имена которых состоят из 4 цифр, между которыми следует свободный текст. Например, 001_chanson1, 002_chanson2 и т. д. Важно соблюдать это правило, иначе файлы не будут распознаваться MP3-плеером. Фактически учитываются только первые 4 символа.
В корне создана 1 дополнительная папка с именем 99, в которой содержатся служебные сообщения: например, приветственное сообщение, предупреждение о низком заряде батареи и т. д.
В настоящее время реализовано только одно дополнительное сообщение: приветственное сообщение после загрузки. Пользователь может записать его самостоятельно или просто проигнорировать. Авторское сообщение настроено с именем его внучки. Переписать сообщение можно с помощью приложения Audacity. Сохраните файл нужно, как 001.mp3.
Шаг четвертый: программное обеспечение
Мастер использует IDE Arduino для разработки программного обеспечения и SmartGit для управления конфигурацией.
В коде нет ничего сложного, это обычное программирование, как это часто бывает в таки случаях. Несмотря ни на что, мастер попытался немного структурировать код, создав модули:
Blinky2.ino: основной модуль с классическими функциями setup () и loop ()
Blinky2.h: здесь несколько параметров. Измените NUMBER_OF_FOLDERS, если вы добавляете / удаляете папки MP3.
// Number of folders of songs const int NUMBER_OF_FOLDERS = 7;
ButtonFolder.h, ButtonFolder.ino, ButtonVolume.h, ButtonVolume.ino: асинхронное управление поворотными энкодерами.
Mp3.ino, Mp3.h: управление командами DFPlayer Mini. (необходимо установить библиотеку DFRobotDFPlayerMini)
Power.ino, Power.h: управление включением и выключением, управление батареей
Display.ino: управление OLED-дисплеем с помощью библиотеки U8g2lib, которую также придется установить.
Display.h: в основном включает определение изображений, представляющих каждую папку.
Показать / Скрыть текстBlinky2.ino
Power.ino
Blinky.h
Display.ino
ButtonVolume.ino
ButtonFolder.ino
Mp3.h
Mp3.ino
Display.h
Power.h
ButtonFolder.h
ButtonVolume.h
LICENSE.txt
Шаг пятый: дисплей
Если пользователь решит изменить темы папок или добавить новые папки, также придется изменить маленькое изображение, связанное с ними. В этом разделе объясняется, как можно преобразовать изображение в код C, на примере темы «классическая».
Для начала рекомендуется установить GIMP на свой компьютер.
Затем запускаем GIMP и загружаем файл изображения. Экран имеет размер 128 x 64, поэтому изображение должно соответствовать разрешению.
Далее следуем инструкции по этой ссылке Чтобы изображение поместилось на экране, мастер установил высоту изображения на 64 пикселя.
Теперь у пользователя должен быть файл с расширением .xbm, содержащий исходный код C: classic.xbm со структурой, подобной этой, что ниже:
Показать / Скрыть текст#define classic_width 64
#define classic_height 64
static unsigned char classic_bits[] = {
0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0,
0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ….
…., 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00 };
Скопируйте и вставьте этот код в файл Display.h.
Добавьте (из строки 378) следующее объявление:
IMAGE classic = {classic_width, classic_height, classic_bits};
Наконец, обновите структуру (конец файла):
IMAGE images[NUMBER_OF_FOLDERS]= {comptine, loup, mickey, pere_noel,comptine2, classic, kidsunited};
Теперь можно скомпилировать окончательный код и загрузить файл в ESP32.
Шаг шестой: печать корпуса
Корпус был разработан с использованием программы Fusion 360. Для печати мастер использовал свой принтер Prusa Mk3s + и PrusaSlicer. Параметры печати: нить PLA, качество 0,15 мм, поддержка. Для печати мастер использовал нить розового цвета.
После печати нужно приклеить уши в верхней части корпуса, нанести два слоя матового лака и установить заднюю панель.
Файлы для печати можно скачать ниже.
Display protection v32.stl
Box v38.stl
Ear v34.stl
Speaker protection v33.stl
Back panel v30.stl
Battery protection v30.stl
Шаг седьмой: окончательная сборка
Теперь можно приступить к сборке проигрывателя. Устанавливает и закрепляет винтами дисплей. Задняя часть дисплея закрывается крышкой.
Динамик закрывает тканью, а затем устанавливает в слот. Устанавливает кнопку включения и энкондеры. Прикручивает основную плату. Плату TP4056 устанавливает в держатель зарядного устройства. Устанавливает и подключает аккумулятор и аудиоразъем.
Теперь осталось только прикрутить заднюю крышку.
Все готово.