Как воспроизвести звук на ардуино
Урок 17. Подключение Mini MP3 плеера к Arduino
Наверное, часто в ваших проектах возникала необходимость воспроизводить определенный звук или мелодию. Например, по завершению какого-нибудь процесса, или просто звуковое сопровождение. В этом нам поможет Mini MP3 Проигрыватель, который обладает очень большим потенциалом.
В данный модуль вставляется microSD карточка, на которую предварительно мы можем записать Mp3 композиции, которые, в дальнейшем, сможем воспроизводить с помощью Mini MP3 Проигрывателя.
Нам понадобится:
Для реализации проекта нам необходимо установить библиотеки:
Демонстрация:
Подготавливаем microSD карточку:
Описание контактов:
Пример 1. Управление с помощью Arduino
Схема подключения:
Данный Mini MP3 Проигрыватель может быть подключен как обычному Serial порту, так и к виртуальному Serial порту. Это дает возможность arduino подключиться к компьютеру и к mp3 проигрывателю.
Подключать удобнее всего с помощью Breadboard mini и проводков папа-папа. Так же не забудьте подключать Mp3 плеер к Serial порту с через резисторы на 1 кОм.
В результате у вас должна получиться примерно следующая картина:
Не забудьте установить библиотеку Mini mp3 Arduino Library V2.0.
Скетч №1:
Данный пример запустит проигрывание треков и каждые 10 секунд будет переключать на следующий трек.
Между двумя командами необходимо делать задержку delay (100); 100 миллисекунд, в противном случае некоторые команды могут работать не стабильно.
Скетч №2:
В этом примере мы запускаем плеер, он начинает проигрывать композиции целиком одна за другой в случайном порядке.
Скетч №3:
Полный список функций:
Пример 2. Автономное управление без Arduino, с помощью подключенных кнопок.
Данный модуль может работать как под управлением микроконтроллера Arduino, так и автономно, как самостоятельный проигрыватель mp3.
Но модулем нужно как-то управлять, регулировать громкость, переключать треки и тд. Эти возможности мы можем реализовать очень просто, нам нужно подключить управляющие кнопки, и с помощью них мы сможем полноценно управлять mp3 проигрывателем.
Есть несколько вариантов подключения:
Простой способ (Минимум функций):
Расширенный способ (Максимальный функционал):
#13.2 Arduino SD карта. Воспроизводим звуки и музыку в wav формате.
Это связанно с вычислительными способностями Arduino. Поэтому требования к аудио файлам будут напрямую зависеть от возможности микроконтроллера данной отладочной платы:
Давайте подготовим файлы для нашего проекта. Скачаем нужные нам треки или уведомления и конвертируем их. Для этого я использую онлайн конвектором аудио файлов.
Выбираем файл настраиваем параметры и конвертируем. По моему опыту можно использовать достаточно большие файлы в несколько десятков Мб.
После чего скачиваем полученный трек и загружаем его на флешку.
Я подготовил 6 различных файлов. Скачать их можно внизу страницы урока. В разделе файлы для скачивания.
Для урока нам понадобиться:
5. Динамик. Я использую от ноутбука.
Подключаем SD-модуль и динамик к Arduino UNO по такой схеме.
Для данного урока нам понадобится библиотека TMRpcm, которая умеет асинхронного воспроизведения PCM/WAV файлов напрямую с SD карты.
Основные функции библиотеки TMRpcm.
Давайте сделаем на основе предыдущего урока небольшую программу воспроизведения 6 файлов.
Как видим наши уведомления и музыка воспроизводятся. В мониторе порта можно увидить какя мелодия сейчас воспроизводиться.
Управлять будем через Монитор порта.
Команды:
В мониторе порта видим что у нас все работает отлично.
Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.
Всем Пока-Пока. И до встречи в следующем уроке.
Понравилась статья? Поделитесь ею с друзьями:
Делаем аудио плеер на Ардуино для проигрывания WAV-файлов
Что нам понадобится и где купить
Кол-во | Деталь |
1 | Arduino Uno (другие платы Ардуино тоже подойдут кроме Duo |
1 | Адаптер Micro-SD карт (читать и записывать) |
1 | 8 Ом динамик |
1 | Micro-SD карта |
1 | Макетная плата |
1 | BC 546b NPN-транзистор |
1 | 7K резистор |
Провода-перемычки папа-папа |
На данный момент мы рекомендуем заказывать всё на известном сайте АлиЭкспресс. При тщательном выборе поставщика именно там вы получите качественный и недорогой товар. Большинство российских Интернет-магазинов ставят цены зачастую в разы выше. В ближайшее время мы сделаем очень подробное описание процесса заказа на сайте АлиЭкспресс, а пока можно ознакомиться с нашей мини-инструкцией.
Программное обеспечение
Также нам для проекта пригодится некоторое программное обеспечение на нашем компьютере и некоторые библиотеки.
Как работает аудиоплеер?
Сэмплов в секунду (Гц): 16000 (16 КГц)
Канал: Моно
Бит на сэмпл: 8
Небольшая инструкция для того, чтобы сделать песни совместимыми с аудиоплеером на Ардуино:
Форматирование Micro-SD карты
Загрузите инструмент SD Formatter, ссылку мы давали выше.
Запустите инструмент как администратор. Выберите нужный диск для форматирования. Назовите свою карту, заполнив поле метки тома и нажмите кнопку «Форматировать».
Добавьте ранее сконвертированные WAV-файлы на карту и сохраните их с простыми именами, такими как, например, «81.wav».
Схема соединения аудиоплеера
Наша схема выглядит так:
Пин 4 используется для согласованности с кодом Ардуино ниже.
Код для устройства
Скетч для нашей платы:
В целом, на этом всё. Осталось просто подключить питание, и ваш аудиоплеер Arduino будет успешно воспроизводить вашу любимую песню.
SimpleSDAudio: воспроизведение с помощью Arduino аудиофайлов с SD карты
Содержание
О библиотеке
Воспроизведение в хорошем качестве с помощью Arduino аудиофайлов с SD карты. Понадобится всего лишь несколько дополнительных комплектующих.
Минимальный набор для SimpleSDAudio (здесь нет потенциометров для управления уровнем звука – только для Arduino, работающих на напряжении 3,3В)
Минимальный набор для SimpleSDAudio с Arduino Ethernet – громкоговоритель подключен к аудиовыходу через конденсатор 100 мкФ
Особенности
Ограничения
Альтернативы
В данное время существует альтернативная библиотека под названием TMRpcm, которая делает что-то похожее: https://github.com/TMRh20/TMRpcm/wiki. Она немного проще в использовании (не требуется конвертирование WAV файлов). Ниже приведена таблица различий.
Особенность | SimpleSDAudio | TMRpcm |
---|---|---|
Максимальная частота дискретизации | X | — |
Воспроизведение обычного WAV (не требуется конвертирование файлов) | — | X |
Высокоскоростной оптимизированный код (использование ассемблера в ядре аудио) | X | — |
Использование оптимизированной по размеру маленькой библиотеки SD-FAT | X | — |
Использование универсальной SD библиотеки, поддерживающей фрагментированные файлы и многие другие виды использования | — | X |
Возможность работы в режиме стерео | X | X |
Возможность работы с четырехканальным звуком | X | X |
Поддержка установки громкости | — | X |
Поэтому, в зависимости от ваших потребностей, попробуйте библиотеку, которая наилучшим образом соответствует вашим требованиям. TMRpcm может быть проще для новичков. Обе библиотеки должны работать с одними и теми же подключениями. Информацию о подключениях вы можете получить ниже и использовать с ними библиотеку TMRpcm.
Вам нужно большее: воспроизведение многоканального звука, цифровые фильтры, микшеры, функции DSP? Тогда посмотрите на Teensy 3.1 Audio Library, использующую серьезный (но всё еще доступный) микроконтроллер, и всё еще использующую Arduino IDE.
Загрузка
Использование
Руководство по быстрому старту
Руководство по установке ПО
Чтобы узнать, как преобразовать аудиофайлы для использования в данной библиотеке, смотрите следующий раздел.
Подготовка SD карты и конвертирование аудиофайлов
Аудиобиблиотека использует очень урезанную библиотеку SD, которая использует FAT только для поиска начального сектора файлов. Поэтому файл должен быть полностью не фрагментирован на SD карте. Лучший способ обеспечить это – заново выполнить полное форматирование карты (не используйте быстрое форматирование!). После форматирования SD просто скопируйте на нее новые файлы. Не удаляйте файлы и избегайте операций переименования, которые создают новые имена файлов, не соответствующие формату 8.3 (смотрите https://ru.wikipedia.org/wiki/8.3). Все файлы должны размещаться в корневом каталоге, так как каталоги не поддерживаются данной аудиобиблиотекой.
Для конвертирования аудиофайлов я предлагаю использовать SoX из http://sox.sourceforge.net/.
Для пользователей Windows
Для пользователей Linux
Пользователи Linux должны скомпилировать SoX из исходников или использовать свой любимый менеджер пакетов для установки SoX. Для конвертирования я рекомендую использовать следующую командную строку:
Исходя из своих потребностей, вы можете изменить следующие параметры:
Соглашения об именах файлов
Хотя вы можете выбрать любые имя файла и расширение, я предлагаю использовать расширение, которое показывает разрядность, частоту дискретизации и режим стерео или моно. В bat-файлах я использую следующие расширения:
Сборка аппаратных комплектующих
Подключение SD карты
SD карта должна быть подключена к SPI порту микроконтроллера. Вывод выбора микросхемы от карты может быть подключен к любому свободному цифровому выводу, но если воспользоваться для этого выводом 4 Arduino, то никаких изменений в исходном коде не понадобится. Здесь будут работать многие платы расширения с поддержкой SD карт, например, Ethernet-Shield. Для большинства плат Arduino (кроме тех, которые работают с напряжением 3,3В) вам понадобятся преобразователи уровней от 5 до 3,3 вольт – достаточно будет трех резисторных делителей. На схеме ниже показано, как это сделать.
Подключение SD карты с согласованием уровней плат Arduino
Подключение аудиовыхода
Будьте осторожны, так как выводы аудиовыхода являются цифровыми портами, на которые выдается постоянное положительное напряжение между 0В и 5В. Подача постоянного напряжения на линейный выход или небольшие громкоговорители является не очень хорошей идеей, поскольку через них будет протекать постоянный ток. Поэтому последовательно с нагрузкой должен быть включен конденсатор. Для начала используйте конденсатор от 100 нФ до 100 мкФ. Для линейных выходов используйте делитель напряжения или потенциометр для уменьшения напряжения.
Примеры простых 8-битных аудиовыходов
Увеличение разрядности аудио примерно до 16-бит
Всё еще недорогое решение для получения качественного 16-разрядного аудиовыхода
16-разрядный выход выполняется путем одновременного управления двумя 8-разрядными выходами: один будет обеспечивать сигнал, содержащий старшие 8 бит, а второй – сигнал, содержащий младшие 8 бит. Если вы послушаете каждый из этих каналов отдельно, то на выходе старших 8 бит услышите обычный звук, но с заметным 8-битным шумом, особенно на тихих звуковых участках. На выходе младших 8 бит вы услышите только шум. Но когда вы добавите этот шум (уменьшенный по громкости с помощью резисторов в 256 раз) к старшим 8 битам, произойдет что-то волшебное: 8-битный шум исчезнет (но, к сожалению, часто большое количество шума, исходящего от источника питания, может всё равно остаться).
Аудиоусилитель для громкоговорителей
Если вам необходима большая мощность, то можете собрать дешевый ШИМ усилитель класса D на 74AC14 (шесть инверторов с триггерами Шмитта на входах). Катушки индуктивности необязательны, но должны использоваться для непропускания ВЧ помех при использовании длинных кабелей.
8-битный моно усилитель на макетной плате
Схема 8-битного моно усилителя
16-битный стерео усилитель на макетной плате, используйте триггеры Шмитта для уменьшения шума
Схема 16-битного стерео усилителя
Собираем собственный макетный адаптер для SD карты
Следуйте следующим инструкциям с картинками, чтобы собрать очень дешевый адаптер SD карты.
Вам понадобится один однорядный и один двухрядный разъемы по 7 выводов каждый.
Используя плоскогубцы, загните выводы с одной стороны в виде фигуры
У вас должно получиться что-то похожее.
Припаяйте однорядный разъем к незагнутому (всё еще прямому) ряду двухрядного разъема.
Поместите карту в получившийся держатель. Контакты карты должны быть подключены к незагнутым выводам.
Вставьте всё это в макетную плату (вид спереди).
Вставьте всё это в макетную плату (вид сзади).
Справка по API
Константы
Ниже приведен обзор констант, используемых в библиотеке.
Имя класса и экземпляр по умолчанию
Публичные методы класса
Вызовите этот метод, чтобы инициализировать библиотеку и установить режим звука. Данная функция также получит необходимый буфер (если он еще не установлен вручную с помощью setWorkBuffer ), инициализирует SD карту и настроит все используемые выводы.
В качестве аргумента должна быть передана комбинация следующих флагов (комбинируются с помощью оператора ИЛИ):
Данная функция возвращает true в случае успеха и false в случае возникновения ошибки. Вы можете использовать getLastError() для получения кода ошибки. Типовыми причинами возникновения ошибок являются неправильное подключение SD карты или слишком малый размер RAM (требуется куча размером 1 килобайт), доступный для внутреннего буфера.
После успешной инициализации вызовите данный метод, чтобы выбрать аудиофайл, предоставив имя файла в формате 8.3.
Данная функция возвращает true в случае успеха и false в случае возникновения ошибки. Вы можете использовать getLastError() для получения кода ошибки. Типовой причиной возникновения ошибок является то, что файл не был найден.
Вызывайте этот метод постоянно, по крайней мере, пока выполняется воспроизведение аудиофайла. Данная функция заполняет внутренний буфер, считывая следующие сектора с SD карты. Вы не можете вызывать эту функцию слишком часто, но и при слишком большом времени между вызовами данной функции может произойти опустошение буфера.
Начиная с версии 1.03: Добавьте при инициализации флаг
Если звук не проигрывается, то воспроизведение будет запущено. Если звук уже проигрывается, то воспроизведение начнется снова с нуля.
Останавливает воспроизведение, если оно запущено, и устанавливает позицию воспроизведения на ноль.
Ставит воспроизведение на паузу, если оно запущено, или возобновляет его, если была пауза.
Вызовите этот метод перед инициализацией, чтобы выбрать вывод, подключенный к CS выводу SD карты, отличающийся от значения по умолчанию.
Вызовите этот метод, если хотите использовать собственный буфер (минимальный размер 1024 байта, размер должен быть кратен 512). Вызовите его перед инициализацией, после чего инициализация будет использовать этот буфер вместо использования malloc для создания собственного буфера.
Вызовите этот метод, чтобы освободить ресурсы, такие как буфер, освободить выводы SD карты, аудио прерывания и аудио выводы.
Вывод каталога SD карты. Методу должен быть передан указатель на функцию обратного вызова. Функция обратного вызова вызывается один раз для каждого файла, найденного в корневом каталоге карты. Строки содержат нулевое завершение, но в них нет перевода строки.
isStopped(), isPlaying(), isPaused()
Примеры
Пустой минимум с исполнителем:
Не компилируется
Неудача SdPlay.init
Как использовать 16-битное аудио?
TMRpcm: Arduino библиотека для воспроизведения PCM/WAV аудиофайлов напрямую с SD карты
Содержание
О библиотеке
TMRpcm – Arduino библиотека для асинхронного воспроизведения PCM/WAV файлов напрямую с SD карты.
Использует стандартную библиотеку SD Arduino, SD карту и выходное устройство (громкоговоритель, наушники, усилитель и т.д.).
Особенности
Подготовка аудиофайлов
Файлы конвертируются легко и просто:
Затем с помощью компьютера скопируйте файл на SD карту.
Известные ограничения
Данная библиотека сильно нагружает процессор, и выполнение кода во время воспроизведения будет медленнее, чем обычно. Нагрузка от обработки аудиофайлов может быть уменьшена за счет использования аудио более низкого качества, кодированного с меньшей частотой дискретизации (с минимальным значением 8 кГц).
Управление громкостью допускает хороший диапазон регулировки громкости, но при большой громкости возможно появление искажений.
Загрузка
Также проект можно найти на GitHub: ссылка.
Функции
Пример использования
Это простая схема для проигрывания wav файлов с помощью Arduino Nano v.3.0, она содержит 4 кнопки, при нажатии каждой из которых воспроизводится заданный wav файл, загруженный на SD карту.
Комплектующие
Подготовка SD карты
Схема
Перед написанием кода вам необходимо скачать (ссылка выше в разделе «Загрузка») и установить библиотеку TMRpcm.
Поиск неисправностей
Если у вас не получилось заставить эту схему работать, то ниже приведены два тестовых скетча для поиска неисправностей. Код был протестирован на Arduino Nano, Uno и Mega.
Подключать кнопки нет необходимости, файлы будут воспроизводится автоматически.
Нет необходимости подключать транзистор, подключите небольшой динамик или наушники напрямую к выводу 9 платы Arduino Nano или к выводу 11 платы Arduino Mega.
Скачанные по ссылке выше аудиофайлы скопируйте в корневой каталог SD карты.
Arduinio Nano
Arduino Nano | SD карта |
---|---|
12 | MISO |
11 | MOSI |
13 | SCK |
4 | CS |
9 | динамик |
GND | GND |
5V | VCC |
Arduino Mega
Arduino Mega | SD карта |
---|---|
50 | MISO |
51 | MOSI |
52 | SCK |
53 | CS |
11 | динамик |
GND | GND |
5V | VCC |
Если тестовый код работает, то добавьте строку #include в программу с кнопками.
Дополнительные возможности
Большинство дополнительных функций требуют больше памяти RAM, больше программной памяти и, в некоторых случаях, большей вычислительной мощности для воспроизведения. Некоторые из них до сих пор еще отлажены не полностью. Помните об этом при включении данных функций.
Смотрите pcmConfig.h для настройки следующих параметров:
Пользовательские определения
В pcmConfig.h настраиваются следующие параметры:
Параметр | Описание |
---|---|
#define buffSize 128 | Управляет размером двух буферов (или четырех в режиме MULTI). |
#define DISABLE_SPEAKER2 | Выключает вывод по умолчанию второго динамика для совместимости с другими библиотеками (вывод 10 на Uno). |
#define ENABLE_MULTI | Включает режим воспроизведения нескольких треков (по умолчанию на одном таймере). |
#define STEREO_OR_16BIT | Включает воспроизведение стерео или 16-битных файлов. |
#define MODE2 | Включает режим двойного таймера для воспроизведения нескольких треков. Не доступен с TIMER2. |
#define SDFAT | Библиотека SdFat использует меньше памяти программ и RAM. Смотрите пример SDFAT в составе данной библиотеки. |
#define HANDLE_TAGS | Пропускает теги WAV файлов, которые содержат метаданные. |
#define USE_TIMER2 | Использует 8-разрядный TIMER2, вместо 16-разрядных таймеров. |
#define rampMega | Принудительный ручной выбор включения/выключения метода линейного изменения ШИМ. |
#define ENABLE_RF | Включает стриминг аудио через радиоканал (NRF24L01+). |
Второй громкоговоритель / двухтактный режим
Данная библиотека по умолчанию выводит данные на два вывода таймер, хотя по умолчанию полностью включен только один.
Для включения дополнительный вывод должен быть настроен на выход, например:
Режим Multi
Режим Multi включает одновременное воспроизведение двух треков.
Функции множественного режима немного отличаются от функций стандартного режима:
Стандартный режим (2 вывода, один трек) | 1 или 2 динамика |
Стандартный режим стерео (2 вывода, один трек) | 2 динамика, не двухтактные (нагрузка между выводом и корпусом) |
Стандартный режим стерео MODE2 (4 вывода, один трек) | 4 динамика ИЛИ двухтактные выходы (нагрузка между двумя выводами) на 2 динамика |
Режим Multi (2 вывода, два трека) | 1 или 2 динамика |
Режим Multi стерео (4 вывода, два трека) | 2 или 4 динамика, не двухтактные |
Режим Multi MODE2 (4 вывода, два трека) | 2 динамика на двухтактных выходах или 4 динамика на не двухтактных выходах |
Примечание: все 4-выводные режимы требуют платы с двумя и более 16-разрядными таймерами.
Воспроизведение стерео и 16-битного аудио
Эти режимы требуют дополнительных ресурсов и вычислительной мощности, так как с SD карты должны считываться удвоенные данные. Треки моно могут воспроизводиться в режиме стерео, но не наоборот.
В стандартном режиме:
#define STEREO_OR_16BIT Включение этой опции вместе с режимом MULTI позволит воспроизводить два стерео или 16-разрядных трека на отдельных выводах таймера. Это обеспечивает выход для четырех громкоговорителей, подключенных между выводом (выводами) и корпусом, или один 16-разрядный выход для каждого трека. #define MODE2 Включение этой опции с режимом MULTI и STEREO_OR_16BIT ни на что не влияет.
Использование SDFAT
Библиотека SDFAT может использоваться для уменьшения использования оперативной памяти и памяти программ и для повышения производительности. Файлы должны быть включены в скетч. Смотрите пример в архиве с библиотекой.
Метаданные (теги ID3v2.3 и LIST)
Функции были добавлены для чтения данных о песне, артисте и альбоме из тегов ID3v2.3 и LIST в WAV файлах.
Примечание: добавление, модифицирование и редактирование метаданных поддерживает программа Audacity.
listInfo Прочитать теги LIST в символьный буфер, возвращает длину тега. id3Info Прочитать теги ID3 в символьный буфер, возвращает длину тега. getInfo Ищет оба тега и считывает в символьный буфер, возвращает длину тега. Первым ищется ID3.
Использование TIMER2
Часто данная библиотека используется с платами Uno, Nano и т.д. только с одним 16-разрядным таймером. Когда TIMER1 необходим для других целей, для воспроизведения аудио может быть использован TIMER2.
Выводы динамика – на Uno, Nano и т.д. только вывод 3.
Для включения использования 8-разрядного TIMER2 раскомментируйте строку #define USE_TIMER2 в секции пользовательских определений.
ШИМ и опция rampMega
В попытках уменьшить шумы треска, создаваемые ШИМ, было опеределено четыре основных источника проблемы:
Простое цифровое создание WAV файлов
Данные функции будут генерировать стандартные WAV файлы. Исходные данные с аналоговых входов или других датчиков могут быть записаны в файл для генерации цифрового звука, который может быть воспроизведен на любом устройстве, поддерживающем WAV файлы, или легко конвертирован в другие форматы.
Примечание: в дальнейшем будут добавлены и другие форматы wav.
Синтаксис:
Использование:
Примечания: Если указанный файл существует, он будет перезаписан при создании, но обновлен только при завершении. Эти функции при использовании функций записи вызываются автоматически.
Запись звука
Запись звука находится всё еще в тестировании и может работать не так, как ожидается.
Функции:
startRecording Начать запись с указанного аналогового вывода. stopRecording Остановить запись и финализировать wav файл.
Проходной режим – во время записи выдает звук на динамик.
Режимы: 0 – нормальный/нет; 1 – динамик включен; 2 – записи нет, вывод только на динамик.
Синтаксис:
Использование:
Примечания:
На сайте работает сервис комментирования DISQUS, который позволяет вам оставлять комментарии на множестве сайтов, имея лишь один аккаунт на Disqus.com.
В случае комментирования в качестве гостя (без регистрации на disqus.com) для публикации комментария требуется время на премодерацию.