Электрификация

Справочник домашнего мастера

Плеер на ардуино

Содержание

Аудиоплеер на Arduino

Соберем аудиоплеер. Что нам для этого понадобится? Во-первых, нам нужен «мозг», который будет все контролировать. В качестве такого мозга возьмем Arduino. Во-вторых, нам нужно будет откуда-то считывать данные. В качестве такого носителя данных возьмем компактные мини SD-карты. И, конечно же, динамики для воспроизведения звука. Еще запрограммируем пульт для дистанционного управления.

Сначала разберемся как подключить SD карту к Arduino. Есть специальные SD Card Shield, в которых выведены все контакты. Но такие шилды стоят денег, а я думаю у каждого где-нибудь завалялся адаптер для подключения мини SD-карты в разъем для полноразмерной SD-карты. Они, как правило, идут в комплекте. Распиновка у них следующая

Как видим, SD-карты работают от напряжения 3.3 вольта, а у Arduino высокий логический уровень это 5 вольт. По-хорошему, надо бы использовать тут делители напряжения или стабилизаторы. Хорошая статья есть на сайте Паяльник. Но так как у меня не оказалось под рукой ни стабилизаторов, ни резисторов нужных номиналов, то на свой страх и риск я напрямую припаял провода к этим выводам.

Две земли соединил между собой, чтобы подключать только одну из них. Вывод MISO соединяем с 12 пином, CLK — с 13, MOSI — с 11 и CS — c 4 пинами.

Воспроизводить звук на Arduino будем при помощи библиотеки TMRpcm. Особенностью этой библиотеки является то, что она может воспроизводить только файлы в 8 битном 8-32 кГц WAV-формате. К сожалению, программно Arduino не сможет быстро раскодировать MP3 поток, поэтому для воспроизведения MP3 файлов надо купить отдельный шилд с декодером. В 8 битных WAV-файлах амплитуда колебания кодируется 8 битами, которые легко считать в 8 битные регистры Arduino для последующей отправки уже на пины. Лучше всего конвертировать файлы в этот формат у меня получилось с помощью утилиты Wav Sample Rate Converter.

Усилитель двухканальный, а библиотека может выводить только моно звук. Поэтому нам понадобится немного изменить аудио провод: припаяем только землю и один любой канал. В принципе, два канала можно соединить в одном, но я оставил один нетронутым на случай, если потом понадобится задействовать его тоже.

Землю (черный провод) воткнем в GND, а канал (белый провод) — в 9 пин.

Звук можно напрямую или через резистор подавать на плюс динамика, а можно сделать простейший усилитель на одном транзисторе. Но для более качественного звучания нам понадобится усилитель получше. Возьмем колонку на усилителе TDA2822M из вот этой статьи. Пока что у нас получается следующая картина

Далее разберемся с пультом дистанционного управления. У меня завалялся какой-то пульт от китайской mp3 магнитолы. Я буду использовать его, а вы можете взять любой пульт от телевизора, потому что мы будем использовать библиотеку IRremote, которая поддерживает практически все форматы кодирования. В качестве ИК приемника я возьму VS 1838В. Вот его распиновка

Левая ножка будет подключена ко 2 пину Arduino, средняя к GND, а правая к 5 вольтам. Хорошую статью про то как подключать ИК -приемник тоже можно найти на сайте Паяльник.

С железом разобрались, теперь разберемся с управлением. Что нам нужно от пульта? Нужны функции воспроизведения, паузы, регулировки звука и выбора песни. Можно подключить еще монитор, выводить на него список файлов, выбирать нужный с помощью стрелочек «вверх-вниз» на пульте, но пока сделаем проще. Сделаем так, чтобы при нажатии кнопки «следующий» у нас играл следующий по списку файл, а при нажатии на кнопку «предыдущий» мы начинали проигрывание с первого файла. Нам потребуется узнать у какой кнопки какой код. После загрузки скетча «player.ino» при нажатии на кнопку вы сможете увидеть ее код в консоли. После этого надо будет поправить файл «Buttons.h» с вашими кодами

И вот он — конечный результат

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

DF Player mini подключение к Ардуино

Довольно часто в проектах требуется сделать проигрывание музыки на Ардуино с SD карты. Для этого используется звуковой модуль dfplayer mini, который позволяет воспроизводить звуки в формате mp3 с флэшки или карты памяти. Рассмотрим, как подключить dfplayer mini к Arduino UNO, дадим описание и распиновку данного модуля, а также команды с библиотекой DFPlayer_Mini_Mp3.h для управления.

Характеристики DF Player mini

Распиновка модуля приведена на изображении, он представляет собой недорогой MP3-модуль со встроенным усилителем и выходами к динамикам. DFPlayer поддерживает такие аудио форматы, как MP3, WAV и WMA, которые можно считывать с флэшки или TF-карты до 32 Гб. С помощью данного модуля можно озвучивать проекты на Ардуино, один из них мы представляли ранее — это световой меч своими руками для детей.

Распиновка. Подключение кнопок и динамика, dfplayer mini datasheet

Кроме того, данный модуль можно использовать без платы Arduino Nano, подключив к модулю питание, динамик и кнопки напрямую. Схема данного подключения (datasheet dfplayer mini) размещена далее на схеме выше. Питание модуля должно быть в пределах 3,3 — 5 Вольт. Все звуковые файлы должны лежать в папке «mp3» на флэшке или TF карты в следующем формате: «0001.mp3», «0002.mp3», «0003.mp3» и т.д.

Подключение DF Player mini к Arduino

Для занятия нам понадобятся следующие детали:

  • плата Arduino Uno / Arduino Nano / Arduino Mega;
  • модуль DF Player mini;
  • SD карта или флэшка;
  • динамик;
  • провода «папа-мама».

На приведенной ниже схеме представлено подключение DFplayer mini Arduino Nano. Также на приведенной схеме проиллюстрировано, как подключить к звуковому модулю USB порт, чтобы проигрывать звуки флэшки. После сборки схемы, сохраните на Flash-карте несколько звуковых файлов в формате: «0001.mp3», «0002.mp3», «0003.mp3» в папке «mp3». Все файлы и скетч можно скачать одним архивом ниже.

Схема подключения модуля DF Player Mini mp3 к Arduino Nano

После сборки схемы загрузите следующий скетч. Внимание! Перед загрузкой отключите последовательный порт UART (порты RX и TX) на Ардуино. Иначе компьютер не определит микроконтроллер и программа не загрузится. Скачать скетч, библиотеку DFPlayer_Mini_Mp3.h и звуковые файлы можно одним архивом .

Скетч для mp3 модуля к Ардуино

#include <SoftwareSerial.h> // библиотека для для обмена данными #include <DFPlayer_Mini_Mp3.h> // подключаем библиотеку для DFPlayer Mini void setup() { Serial.begin(9600); mp3_set_serial(Serial); // включаем передачу данных с DFPlayer mini mp3 delay(1); // задержка в 1ms для установки громкости mp3_set_volume(15); // устанавливаем громкость от 0 до 30 mp3_set_EQ(0); // устанавливаем эквалайзер от 0 до 5 } void loop() { mp3_play(1); // проигрываем файл mp3/0001.mp3 delay(5000); // задержка 5 секунд mp3_next(); // проигрываем следующий файл delay(5000); // задержка 5 секунд mp3_play(4); // проигрываем файл mp3/0004.mp3 delay(5000); // задержка 5 секунд mp3_prev(); // проигрываем предыдущий файл delay(5000); // задержка 5 секунд }

Пояснения к коду:

  1. звуковой модуль, кроме усилителя, имеет эквалайзер. С помощью команды mp3_set_EQ (); задается разная частота звучания музыки. Можно выставлять следующие значения: 0 — Normal, 1 — Pop, 2 — Rock, 3 — Jazz, 4 — Classic, 5 — Bass.

Описание команд библиотеки DFPlayer_Mini_Mp3.h:

Простой и забавный проект для Ардуино, благодаря которому мы сможем за 10-15 минут сделать аудио плеер, который воспроизводит файлы формата .wav. Он состоит из динамика, простого транзистора, действующего в качестве усилителя и адаптера micro-SD-карты на которой мы разместим наши файлы WAV.

Что нам понадобится и где купить

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

Кол-во Деталь
1 Arduino Uno (другие платы Ардуино тоже подойдут кроме Duo
1 Адаптер Micro-SD карт (читать и записывать)
1 8 Ом динамик
1 Micro-SD карта
1 Печатная плата
1 BC 546b NPN-транзистор
1 7K резистор
Провода-перемычки папа-папа

На данный момент мы рекомендуем заказывать всё на известном сайте АлиЭкспресс. При тщательном выборе поставщика именно там вы получите качественный и недорогой товар. Большинство российских Интернет-магазинов ставят цены зачастую в разы выше. В ближайшее время мы сделаем очень подробное описание процесса заказа на сайте АлиЭкспресс, а пока можно ознакомиться с нашей мини-инструкцией.

Программное обеспечение

Также нам для проекта пригодится некоторое программное обеспечение на нашем компьютере и некоторые библиотеки.

  • Arduino IDE (рекомендуем последнюю версию)
  • SD Formatter tool от SD Association
  • Библиотека TMRpcm library (Github)

Как работает аудиоплеер?

Ардуино в приведенной ниже схеме загружает файлы .wav с карты micro-SD. Затем он генерирует сигнал и выводит его через динамик, подключенный к цифровому выходу 9. Это позволяет динамику создавать звуки и воспроизводить музыку. В этом уроке вы можете запрограммировать аудиоплеер Ардуино так, чтобы он играл ваш любимую песню или мелодию.

Файлы .wav, используемые в этой схеме, имеют небольшое ограничение при воспроизведении звука. Поскольку в качестве усилителя используется транзистор, он не может читать сложные .wav-файлы. Поэтому файлы .wav должны быть преобразованы, чтобы иметь следующие размеры:

Сэмплов в секунду (Гц): 16000 (16 КГц)
Канал: Моно
Бит на сэмпл: 8

Преобразование файлов в формат .wav для вашего аудиоплеера Arduino

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

Небольшая инструкция для того, чтобы сделать песни совместимыми с аудиоплеером на Ардуино:

  1. Загрузите музыкальный файл или введите ссылку на песню или аудиофайл, который нужно преобразовать. Вы даже можете выбрать файлы из Dropbox или Google Диска.
  2. В дополнительных настройках измените разрешение бит на 8 бит.
  3. Измените частоту дискретизации до 16000 Гц.
  4. Измените аудиоканалы на моно.
  5. Нажмите «Показать дополнительные параметры» («Show advanced options»).
  6. Установите формат PCM как 8-битный — PCM unsigned 8-bit.
  7. Нажмите «Преобразовать» (Convert), и файлы будут преобразованы!

Форматирование Micro-SD карты

Загрузите инструмент SD Formatter, ссылку мы давали выше.

Запустите инструмент как администратор. Выберите нужный диск для форматирования. Назовите свою карту, заполнив поле метки тома и нажмите кнопку «Форматировать».

Добавьте ранее сконвертированные WAV-файлы на карту и сохраните их с простыми именами, такими как, например, «81.wav».

Схема соединения аудиоплеера

Наша схема выглядит так:

  • MOSI — контакт 11 на Arduino Uno
  • MISO — контакт 12 на Arduino Uno
  • CLK-контакт 13 на Arduino Uno
  • CS — зависит от экрана или модуля SD-карты.

Пин 4 используется для согласованности с кодом Ардуино ниже.

Код для устройства

Скетч для нашей платы:

#include «SD.h» #define SD_ChipSelectPin 4 #include «TMRpcm.h» #include «SPI.h» TMRpcm tmrpcm; void setup(){ tmrpcm.speakerPin = 9; Serial.begin(9600); if (!SD.begin(SD_ChipSelectPin)) { Serial.println(«SD fail»); return; } tmrpcm.setVolume(6); tmrpcm.play(«rain.wav»); } void loop(){ }

В целом, на этом всё. Осталось просто подключить питание, и ваш аудиоплеер Arduino будет успешно воспроизводить вашу любимую песню.

#13.2 Arduino SD карта. Воспроизводим звуки и музыку в wav формате.

Продолжаем работу с SD картой в среде Ardino IDE. И сегодня мы будем воспроизводить мелодии и уведомления с карты памяти .

Качество воспроизводимой музыки не очень хорошее . Смотрите пример в виде. Звук тихий так как мелодии и оповещения воспроизводятся без какого либо усиления. Так звук воспроизводит Arduino. Не забудьте добавить звук при просмотре видео.

Это связанно с вычислительными способностями Arduino. Поэтому требования к аудио файлам будут напрямую зависеть от возможности микроконтроллера данной отладочной платы:

  • частота дискретизации: 16000 Гц;
  • количество каналов: моно;
  • количество бит: 8.

Давайте подготовим файлы для нашего проекта. Скачаем нужные нам треки или уведомления и конвертируем их. Для этого я использую онлайн конвектором аудио файлов.

Выбираем файл настраиваем параметры и конвертируем. По моему опыту можно использовать достаточно большие файлы в несколько десятков Мб.

После чего скачиваем полученный трек и загружаем его на флешку.

Я подготовил 6 различных файлов. Скачать их можно внизу страницы урока. В разделе файлы для скачивания.

Для урока нам понадобиться:

1. Arduino UNO или Arduino NANO

2. Модуль SD карты .

3. Беспаечная макетная плата .

4. Соединительные провода .

5. Динамик. Я использую от ноутбука.

Подключаем SD-модуль и динамик к Arduino UNO по такой схеме.

Для данного урока нам понадобится библиотека TMRpcm, которая умеет асинхронного воспроизведения PCM/WAV файлов напрямую с SD карты.

Скачать и более подробная документация смотрите на GitHub .

Основные функции библиотеки TMRpcm.

music.play(«sound.wav»); // Воспроизвести файл на выходе 0 music.play(«sound.wav»,30,1); // Воспроизвести файл, начиная с 30-ой секунды, на выходе 1 music.play(«sound.wav»,0); // play(имя_файла, выход 0 или 1) определяется speakerpin или speakerpin2 music.stopPlayback(0); // Может принимать номер выхода 0 или 1 music.volume(0,1); // Уменьшить громкость на выходе 1

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

#include <SD.h> // необходимо включить SD библиотеку #include <TMRpcm.h> // также необходимо включить данную библиотеку… #include <SPI.h> // Измените это в соответствии с вашей платой расширения или модулем; const int chipSelect = 4; TMRpcm music; // создать объект для использования в данном скетче void setup() { // Открыть последовательное соединение и ждать открытия порта: Serial.begin(9600); Serial.println(«Initializing SD card…»); if (!SD.begin(chipSelect)) { Serial.println(«initialization failed!»); while (1); } Serial.println(«initialization done.»); music.speakerPin = 9; // 11 на Mega, 9 на Uno, Nano и т.д. music.setVolume(5); // от 0 до 7. Установка уровня громкости music.quality(1); // 1 для 2x передескритезации, 0 for для нормального режима } void loop() { music.play(«sounds/2.wav»); Serial.println(«Play 2.wav»); delay(30000); music.play(«sounds/1.wav»); Serial.println(«Play 1.wav»); delay(10000); music.play(«sounds/3.wav»); Serial.println(«Play 3.wav»); delay(10000); music.play(«sounds/4.wav»); Serial.println(«Play 4.wav»); delay(3000); music.play(«sounds/5.wav»); Serial.println(«Play 5.wav»); delay(3000); music.play(«sounds/6.wav»); Serial.println(«Play 6.wav»); delay(3000); }

Как видим наши уведомления и музыка воспроизводятся. В мониторе порта можно увидить какя мелодия сейчас воспроизводиться.

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

Управлять будем через Монитор порта.

Команды:

1 — воспроизводим трек

2 — воспроизвести трек, начиная с 30-ой секунды

3 — поставить воспроизведение на паузу / продолжить воспроизводить

4 — устанавливает уровень громкости 0 — выключаем.

5 — устанавливает уровень громкости 5 -включаем (макс. 7).

0 — выключаем воспроизведение трека.

#include <SD.h> // необходимо включить SD библиотеку #include <TMRpcm.h> // также необходимо включить данную библиотеку… #include <SPI.h> // Измените это в соответствии с вашей платой расширения или модулем; const int chipSelect = 4; int ser = 0; // значение из порта TMRpcm music; // создать объект для использования в данном скетче void setup() { // Открыть последовательное соединение и ждать открытия порта: Serial.begin(9600); Serial.println(«Initializing SD card…»); if (!SD.begin(chipSelect)) { Serial.println(«initialization failed!»); while (1); } Serial.println(«initialization done.»); music.speakerPin = 9; // 11 на Mega, 9 на Uno, Nano и т.д. music.setVolume(5); // от 0 до 7. Установка уровня громкости music.quality(1); // 1 для 2x передескритезации, 0 for для нормального режима } void loop() { if (Serial.available() > 0) // пришли данные { ser = Serial.read(); if (ser ==’1′) { music.play(«sounds/2.wav»); Serial.println(«Play 2.wav»); //delay(30000); } else if (ser ==’2′) { music.play(«sounds/2.wav»,30); // воспроизвести файл, начиная с 30-ой секунды Serial.println(«Play 2.wav starting at 30 sec.»); } else if (ser ==’3′) { music.pause(); // поставить воспроизведение на паузу / снять с паузы Serial.println(«Pause»); } else if (ser ==’4′) { music.setVolume(0); // от 0 до 7. Устанавливает уровень громкости. Serial.println(«Set volume 0»); } else if (ser ==’6′) { music.setVolume(5); // от 0 до 7. Устанавливает уровень громкости. Serial.println(«Set volume 5»); } else if (ser ==’0′) { music.disable(); // выключить таймер на выходном выводе и остановить воспроизведение Serial.println(«Stop»); } } }

В мониторе порта видим что у нас все работает отлично.

На основе данного урока можно сделать Arduino часы с будильникам. Или сделать нормальный звук серены для радио управляемой машины . Уведомления для умного дома и много другое.

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

О библиотеке

TMRpcm – Arduino библиотека для асинхронного воспроизведения PCM/WAV файлов напрямую с SD карты.

Использует стандартную библиотеку SD Arduino, SD карту и выходное устройство (громкоговоритель, наушники, усилитель и т.д.).

Поддерживаемые платы:

  • все платы на базе ATmega328: Arduino Uno, Nano, Duemilanove и т.д.;
  • платы Mega: 1280, 2560 и т.д..

Особенности

  • Воспроизведение PCM/WAV напрямую с SD карты.
  • Основные форматы: WAV файлы, 8-бит, частота дискретизации 8–32 кГц, моно.
  • Асинхронное воспроизведение: позволяет работать коду в основном цикле программы во время воспроизведения звука.
  • Работа на одном таймере: TIMER1 (Uno, Mega) или TIMER3, 4 или 5 (Mega).
  • Двухтактный выход или подключение двух динамиков.
  • Двойное увеличение частоты дискретизации.
  • Поддерживаемые устройства: Arduino Uno, Nano, Mega и т.д.

Подготовка аудиофайлов

Файлы конвертируются легко и просто:

  • с помощью iTunes:
    • кликнуть Edit > Preferences > Import Settings;
    • изменить значение в выпадающем списке на WAV Encoder и Setting: Custom > 16.000kHz to 32kHz, 8-bit, Mono;
    • правый клик на любом файле в in iTunes и выбрать «Create WAV Version»;
  • с помощью Audacity:
    • Tracks > Stereo Track to Mono;
    • Project Rate (HZ) > установить 32000, 22050, 16000 или 11025;
    • File > Export > Save as type: Other uncompressed files > Options…;
    • выбрать WAV, Unsigned 8 bit PCM.

Затем с помощью компьютера скопируйте файл на SD карту.

Известные ограничения

Данная библиотека сильно нагружает процессор, и выполнение кода во время воспроизведения будет медленнее, чем обычно. Нагрузка от обработки аудиофайлов может быть уменьшена за счет использования аудио более низкого качества, кодированного с меньшей частотой дискретизации (с минимальным значением 8 кГц).

Возможно влияние на другие библиотеки, которые используют прерывания. Функции isPlaying(), disable() или noInterrupts() могут использоваться для предотвращения параллельного выполнения кода.

Управление громкостью допускает хороший диапазон регулировки громкости, но при большой громкости возможно появление искажений.

Загрузка

Также проект можно найти на GitHub: .

Функции

TMRpcm audio; audio.play(«filename»); // воспроизвести файл audio.play(«filename»,30); // воспроизвести файл, начиная с 30-ой секунды audio.speakerPin = 11; // установить в значение 5, 6, 11 или 46 для Mega, 9 для Uno, Nano и т.д. audio.disable(); // выключить таймер на выходном выводе и остановить воспроизведение audio.stopPlayback(); // остановить воспроизведение, но таймер остается запущенным audio.isPlaying(); // возвращает 1, если идет воспроизведение, в противном случае — 0 audio.pause(); // поставить воспроизведение на паузу / снять с паузы audio.quality(1); // установить 1 для удвоения частоты дискретизации audio.volume(0); // 1 (включить) или 0 ( выключить) для управления громкостью audio.setVolume(0); // от 0 до 7. Устанавливает уровень громкости. audio.loop(1); // 0 или 1. Может быть изменено во время воспроизведения для полного управления зацикливанием.

Пример использования

Макет примера

Это простая схема для проигрывания wav файлов с помощью Arduino Nano v.3.0, она содержит 4 кнопки, при нажатии каждой из которых воспроизводится заданный wav файл, загруженный на SD карту.

Комплектующие

КомплектующиеArduino NanoArduino NanoАдаптер SD карты для ArduinoАдаптер SD карты для Arduino

  1. Arduino Nano v3.0 (я использовал китайскую версию под названием Funduino Nano);
  2. модуль SD карты;
  3. SD карта;
  4. макетная плата;
  5. четыре кнопки;
  6. четыре резистора 22 кОм;
  7. один резистор 4,7 кОм;
  8. NPN транзистор BC546B;
  9. динамик;
  10. перемычки.

Подготовка SD карты

Адаптер SD картыФорматирование SD картыКонвертирование аудиофайлов

  1. Отформатируйте SD карту (убедитесь, что настройки форматирования совпадают с приведенными на скриншоте выше).
  2. Конвертируйте ваши аудиофайлы в .WAV файлы (я использовал программу Wav Sample rate converter) со следующими параметрами:
    • частота дискретизации: 16000 Гц;
    • количество каналов: моно;
    • количество бит на отсчет: 8.
  3. Wav файлы для примера приведены ниже.

Схема

Схема макета wav плеера на Arduino Nano

Код

Перед написанием кода вам необходимо скачать (ссылка выше в разделе «Загрузка») и установить библиотеку TMRpcm.

#include <SD.h> // необходимо включить SD библиотеку #define SD_ChipSelectPin 4 // использование цифрового вывода 4 на arduino nano 328 #include <TMRpcm.h> // также необходимо включить данную библиотеку… TMRpcm tmrpcm; // создать объект для использования в данном скетче int SW1; int SW2; int SW3; int SW4; void setup() { pinMode(14,INPUT); // Определить A0 как цифровой вход. pinMode(15,INPUT); // Определить A1 как цифровой вход. pinMode(16,INPUT); // Определить A2 как цифровой вход. pinMode(17,INPUT); // Определить A3 как цифровой вход. tmrpcm.speakerPin = 9; // 11 на Mega, 9 на Uno, Nano и т.д. if (!SD.begin(SD_ChipSelectPin)) // проверить, есть ли карта, и может ли она быть инициализирована: { return; // если нет, то ничего не делать } tmrpcm.volume(1); tmrpcm.play(«1.wav»); // звуковой файл «1» будет проигрываться при каждом включении или перезагрузке arduino } void loop() { SW1=digitalRead(14); SW2=digitalRead(15); SW3=digitalRead(16); SW4=digitalRead(17); if (SW1 == LOW) { // если SW1 нажата, то воспроизвести файл «6.wav» tmrpcm.play(«6.wav»); } else if(SW2 == LOW) { // если SW2 нажата, то воспроизвести файл «4.wav» tmrpcm.play(«4.wav»); } else if(SW3 == LOW) { // если SW3 нажата, то воспроизвести файл «5.wav» tmrpcm.play(«5.wav»); } else if(SW4 == LOW) { // если SW4 нажата, то воспроизвести файл «3.wav» tmrpcm.play(«3.wav»); } }

Поиск неисправностей

Если у вас не получилось заставить эту схему работать, то ниже приведены два тестовых скетча для поиска неисправностей. Код был протестирован на 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

#include <SD.h> // необходимо включить SD библиотеку #define SD_ChipSelectPin 4 // использование цифрового вывода 4 на arduino nano 328 #include <TMRpcm.h> // также необходимо включить данную библиотеку… #include <SPI.h> TMRpcm tmrpcm; // создать объект для использования в данном скетче void setup() { tmrpcm.speakerPin = 9; // 11 на Mega, 9 на Uno, Nano и т.д. if (!SD.begin(SD_ChipSelectPin)) // проверить, есть ли карта, и может ли она быть инициализирована: { return; // если нет, то ничего не делать } tmrpcm.volume(1); } void loop() { tmrpcm.play(«6.wav»); delay(1000); tmrpcm.play(«4.wav»); delay(3000); tmrpcm.play(«5.wav»); delay(4000); tmrpcm.play(«3.wav»); delay(2000); }

Arduino Mega

Соединение выводов

Arduino Mega SD карта
50 MISO
51 MOSI
52 SCK
53 CS
11 динамик
GND GND
5V VCC

#include <SD.h> // необходимо включить SD библиотеку #define SD_ChipSelectPin 53 // использование цифрового вывода 4 на arduino nano 328 #include <TMRpcm.h> // также необходимо включить данную библиотеку… #include <SPI.h> TMRpcm tmrpcm; // создать объект для использования в данном скетче void setup() { tmrpcm.speakerPin = 11; //11 on Mega, 9 on Uno, Nano, etc if (!SD.begin(SD_ChipSelectPin)) // проверить, есть ли карта, и может ли она быть инициализирована: { return; // если нет, то ничего не делать } tmrpcm.volume(1); } void loop() { tmrpcm.play(«6.wav»); delay(1000); tmrpcm.play(«4.wav»); delay(3000); tmrpcm.play(«5.wav»); delay(4000); tmrpcm.play(«3.wav»); delay(2000); }

Если тестовый код работает, то добавьте строку #include <SPI.h> в программу с кнопками.

Если звука всё равно нет, то добавьте задержку между командами воспроизведения delay(1000);.

Дополнительные возможности

Данная библиотека предназначалась для простого и удобного пользователю использования в качестве проигрывателя wav аудиофайлов, использующего стандартные библиотеки Arduino и воспроизводящего файлы в простейшем wav формате. Многие дополнительные функции были добавлены по запросам пользователей и включены в pcmConfig.h, чтобы сохранить изначальную простоту.

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

Смотрите pcmConfig.h для настройки следующих параметров:

Пользовательские определения

В pcmConfig.h настраиваются следующие параметры:

Настройка параметров TMRpcm

Параметр Описание
#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+).

Второй громкоговоритель / двухтактный режим

Данная библиотека по умолчанию выводит данные на два вывода таймер, хотя по умолчанию полностью включен только один.

Для включения дополнительный вывод должен быть настроен на выход, например:

  • Arduino Uno (один выход): audio.speakerPin = 9;
  • Arduino Uno (двухтактный выход): audio.speakerPin = 9; pinMode(10,OUTPUT);

Чтобы полностью выключить второй выход, раскомментируйте в pcmConfig.h строку #define DISABLE_SPEAKER2.

Режим Multi

Режим Multi включает одновременное воспроизведение двух треков.

Функции множественного режима немного отличаются от функций стандартного режима:

audio.speakerPin2 = 5; // То же действие, что и в стандартном режиме, используется только с 4-выводным выходом audio.play(«sound.wav»); // Воспроизвести файл на выходе 0 audio.play(«sound.wav»,30,1); // Воспроизвести файл, начиная с 30-ой секунды, на выходе 1 audio.play(«sound.wav»,0); // play(имя_файла, выход 0 или 1) определяется speakerpin или speakerpin2 audio.stopPlayback(0); // Может принимать номер выхода 0 или 1 audio.isPlaying(0); // Может принимать номер выхода 0 или 1 audio.setVolume(4,0); // Установить громкость на выходе 0 audio.volume(0,1); // Уменьшить громкость на выходе 1

Режимы:

  • по умолчанию: использует тот же таймер и выводы, что и в обычном режиме с двухтактным выходом;
  • MODE2: использует два 16-разрядных таймера и до 4-х выводов.

Использование:

  • рекомендуемая частота дискретизации 16–20 кГц;
  • размер буфера может быть увеличен для улучшения производительности;
  • звуки, воспроизводимые одновременно, должны иметь одинаковые частоты дискретизации;
  • для включения режима multi раскомментируйте определение в pcmConfig.h;
  • переменная audio.speakerPin2 должна быть установлена в 4-выводном режиме для выбора дополнительного таймера / вывода, которые будут использоваться.

Упрощенные режимы:

Стандартный режим (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 В этом режиме стерео и 16-битные файлы обрабатываются одинаково, причем первый байт считывает на один выход, а второй байт – на другой. Это дает в результате стерео выход на двух динамиках, подключенных между выводом (выводами) динамика и корпусом, или один 16-разрядный выход, использующий резисторную матрицу. #define MODE2 В стандартном режиме MODE2 позволяет выводить стерео или 16-разрядный звук, используя два дополнительных вывода таймера. Таймер и выводы указываются переменой speakerPin2. Двухтактные выводы таймера должны быть настроены на выход вручную.

В режиме Multi:

#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.

Теги для запросов:

  1. 0 = название песни;
  2. 1 = имя артиста;
  3. 2 = название альбома.

Синтаксис:

byte length = audio.listInfo(<Song Name>,<buffer>,<tagToRequest>); byte length = audio.id3Info(<Song Name>,<buffer>,<tagToRequest>); byte length = audio.getInfo(<Song Name>,<buffer>,<tagToRequest>);

Примеры:

Использование TIMER2

Часто данная библиотека используется с платами Uno, Nano и т.д. только с одним 16-разрядным таймером. Когда TIMER1 необходим для других целей, для воспроизведения аудио может быть использован TIMER2.

Выводы динамика – на Uno, Nano и т.д. только вывод 3.

Для включения использования 8-разрядного TIMER2 раскомментируйте строку #define USE_TIMER2 в секции пользовательских определений.

Примечания:

  1. этот вариант, как правило, является не самым лучшим решением;
  2. скорость воспроизведения будет слегка отличаться от использования 16-разрядных таймеров;
  3. воспроизведение на TIMER2 поддерживает нестандартные частоты дискретизации: 31,4 кГц, 23,5 кГц и 15,7 кГц;
  4. увеличение частоты дискретизации включено по умолчанию и в этом режиме не может быть изменено;
  5. рекомендуются частоты дискретизации 24–32 кГц при размере буфера 128.

ШИМ и опция rampMega

В попытках уменьшить шумы треска, создаваемые ШИМ, было опеределено четыре основных источника проблемы:

  1. включение ШИМ/таймеров на Arduino;
  2. выключение ШИМ/таймеров на Arduino;
  3. разница в значениях между треками;
  4. парсинг незвуковых данных.

Решения:

  • 1 и 2. При тестировании на платах Arduino Duemianove и Mega я обнаружил необходимость в разных методах линейного изменения при включении и выключении. Надеюсь, это решит проблему на большинстве других плат.
  • 3. Код линейного изменения между треками не меняется. При воспроизведении треков с разными частотами дискретизации используйте функцию disable() для выключения таймеров между изменениями. Смотрите также #4.
  • 4. Опция HANDLE_TAGS включена в pcmConfig.h, чтобы обеспечить правильное воспроизведение wav-файлов с включенными метаданными (ID3 или LIST).

Простое цифровое создание WAV файлов

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

Примечание: в дальнейшем будут добавлены и другие форматы wav.

Синтаксис:

audio.createWavTemplate(<Song Name>,<Sample Rate>); audio.finalizeWavTemplate(<Song Name>);

Использование:

Смотрите пример, включенный в библиотеку. Создайте файл шаблона, затем запишите в него данные, начиная с 44 байта. Используйте команду finalizeWavTemplate, чтобы добавить данные о размере файла перед воспроизведением.

Примечания: Если указанный файл существует, он будет перезаписан при создании, но обновлен только при завершении. Эти функции при использовании функций записи вызываются автоматически.

Запись звука

Запись звука находится всё еще в тестировании и может работать не так, как ожидается.

Функции:

startRecording Начать запись с указанного аналогового вывода. stopRecording Остановить запись и финализировать wav файл.

Проходной режим – во время записи выдает звук на динамик.

Режимы: 0 – нормальный/нет; 1 – динамик включен; 2 – записи нет, вывод только на динамик.

Синтаксис:

audio.startRecording(<Song Name>,<Sample Rate>, <analog pin>); audio.startRecording(<Song Name>,<Sample Rate>, <analog pin>, <passthrough mode>); audio.stopRecording(<Song Name>);

Использование:

Примечания:

  • для записи рекомендуется библиотека SdFat;
  • рекомендуются SD карты минимум класса 4;
  • возможно, понадобится увеличение buffSize.

Теги

ArduinoSD картаWAVВоспроизведение аудиофайловЗапись звука в аудиофайлПрограммирование Сохранить или поделиться

admin

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Наверх