Рубрики
Схемы на Arduino

Простой аудиоплеер и усилитель на Arduino Uno

Добавление звуков или музыки в какой-нибудь ваш проект (устройство) всегда выглядит хорошо. Особенно просто добавить музыку/звук в ваш радиоэлектронный проект если он построен на основе платы Arduino и у вас есть свободные контакты на этой плате. В этом случае вам нужно будет просто докупить модуль для SD карты и нормальный динамик.

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

Необходимые компоненты

Плата Arduino Uno
Модуль чтения SD карт
SD карта
Аудио усилитель LM386
Конденсатор 10 мкФ (2 шт.)
Конденсатор 100 мкФ (2 шт.)
Резистор 1 и 10 кОм
Кнопка (2 шт.)
Макетная плата
Соединительные провода

Основы работы с WAV аудиофайлами в Arduino

Для проигрывания звуков/музыки с SD карты с помощью платы Arduino необходимо чтобы они были в .wav формате потому что плата Arduino умеет работать только с аудиофайлами этого формата. Чтобы сделать mp3 плеер на основе платы Arduino можно воспользоваться большим количеством предлагаемых на рынке шилдов (плат расширения) для Arduino, позволяющих работать с mp3. Либо можно с помощью специальных сайтов в сети интернет конвертировать формат mp3 в формат wav (этот способ мы будем использовать в данной статье).

Таким образом, для конвертирования любых аудио файлов в wav формат необходимо выполнить следующую последовательность действий:

Шаг 1. Перейдите на сайт — Online Wav Converter.

Шаг 2. Установите параметры wav файла, указанные в следующей таблице. В дальнейшем вы можете экспериментировать с этими настройками, но указанные в таблице настройки обеспечивают наилучшее качество звучания.

Bit Resolution 8 Bit
Sampling Rate 16000 Hz
Audio Channel Mono
PCM format PCM unsigned 8-bit

Шаг 3. На указанном веб-сайте нажмите “choose file” и выберите файл который вы хотите конвертировать. Затем заполните необходимые настройки. Вы должны будете на экране компьютера получить примерно следующую картинку:

Шаг 4. Теперь нажмите “Convert File” и ваш файл будет конвертирован в wav формат, который можно будет скачать к себе на компьютер.

Шаг 5. Отформатируйте свою SD карту и сохраните ваш .wav аудио файл на нее. Запомните имя (наименование) своего файла. Можно загружать и несколько аудио файлов при необходимости. Мы в нашем проекте выбрали 4 файла с песнями и назвали их 1, 2, 3 и 4 (имена не должны изменяться). Соответственно, после конвертации мы получили файлы 1.wav, 2.wav, 3.wav and 4.wav как показано на следующей картинке.

Работа схемы

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

Поскольку наши аудио файлы хранятся на SD карте мы подключили модуль чтения SD карт к плате Arduino. Плата Arduino и модуль чтения SD карт взаимодействуют используя последовательный протокол связи SPI. Поэтому модуль чтения SD карт и подключен к контактам SPI платы Arduino как показано на схеме выше. Также необходимые соединения платы Arduino с модулем чтения SD карт дополнительно представлены в следующей таблице.

Плата Arduino Модуль чтения SD карт
+5V Vcc
Gnd Gnd
Pin 12 MISO (Master In Slave out)
Pin 11 MOSI (Master Out Slave In)
Pin 13 SCK (Synchronous Clock)
Pin 4 CS (Chip Select)

Теперь наша плата Arduino сможет считывать музыкальные файлы с SD и проигрывать их на своем контакте 9. Но аудио сигнал на выходе контакта 9 платы Arduino будет достаточно слабый, поэтому мы будем усиливать его с помощью микросхемы аудио усилителя LM386. Данная микросхема позволяет усиливать аудио сигнал до 200 раз и ее контакт Vdd (pin 6) запитывается от контакта 5V платы Arduino. Если вы хотите увеличить/уменьшить громкость звука вам необходимо увеличить/уменьшить напряжение подаваемое на этот контакт. Максимально на этот контакт можно подать 15 В. Более подробно о микросхеме LM386 можно прочитать по этой ссылке (на английском языке).

Также мы в схему добавили 2 кнопки, одна из которых используется для переключения на следующий трек (аудиофайл), а вторая – для проигрывания/паузы музыки.

Вы можете собрать представленную схему на макетной плате как показано на следующем рисунке:

Программирование Arduino для проигрывания музыки

Когда вся аппаратная часть рассматриваемого проекта у вас уже готова вставьте SD карту в модуль для их чтения и выполните следующую последовательность действий:

Шаг 1. Скачайте библиотеку для работы с аудиофайлами по следующей ссылке — TMRpcm library. На открывшемся сайте выберите “Clone or download” и выберите скачивание в формате ZIP архива.

Шаг 2. Добавьте этот Zip файл в вашу Arduino IDE при помощи выбора пункта меню Sketch->Include Library -> Add .ZIP Library как показано на рисунке ниже и выберите ZIP файл который вы только что скачали.

Шаг 3. Полный текст программы приведен в конце статьи, просто скопируйте и вставьте ее в вашу Arduino IDE, а потом загрузите ее в вашу плату Arduino. В этом разделе будут объяснены лишь наиболее значимые фрагменты программы.

Проигрывание аудио файла

Вы можете проигрывать аудио файл, хранящийся в Wav формате на SD карте, с помощью следующей команды:

music.play("3.wav");
//object name.play (“FileName.wav”);

Постановка на паузу аудиофайла

Для этого можно использовать команду вида:

music.pause();
//objectname.pause();

Перемотка вперед/назад аудио файла

В платформе Arduino нет прямых способов перемотки аудио файла вперед/назад, однако можно проигрывать аудиофайл с заданного фрагмента времени. При дополнительном программировании эту способность можно использовать для перемотки аудио файла.

music.play("2.wav",33); //проигрывание песни с 33-й секунды
//objectname.play(“Filename.wav”,time in second);

Установка качества аудио

Скачанная нами библиотека обеспечивает два возможных уровня качества проигрывания музыки: в нормальном режиме и с двухкратной частотой дискретизации (2X oversampling).

music.quality(0); //Normal Mode
music.quality(1); //2X over sampling mode

Установка уровня громкости

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

music.setVolume(5); //установка уровня громкости 5
//objectname.setVolume(Volume level);

Работа музыкального аудиоплеера на основе Arduino

После загрузки программы в плату Arduino просто нажмите кнопку, подсоединенную к контакту 2 платы Arduino, и начнется воспроизведение первой песни, записанной на SD карту (в нашем случае это 1.wav). Если нажмете кнопку еще один раз, то произойдет переключение на вторую песню — 2.wav и т.д.

Можно ставить песню на паузу и возобновлять ее проигрывание с помощью кнопки, подключенной к контакту 3 платы Arduino. Более подробно все эти процессы показаны на видео, приведенном в конце статьи.

Исходный код программы

Представленная программа показывает как можно проиграть три песни с SD карты при помощи нажатия соответствующей кнопки в схеме.

#include "SD.h" //библиотека чтобы считывать информацию с SD карты
#include "TMRpcm.h" //библиотека чтобы проигрывать аудио файлы
#include "SPI.h" //SPI библиотека для SD карты
#define SD_ChipSelectPin 4 //Chip select is pin number 4
TMRpcm music; //Lib object назовем "music"
int song_number=0;
boolean debounce1=true;
boolean debounce2=true;
boolean play_pause;
void setup(){
music.speakerPin = 9; //аудио выход на контакте 9
Serial.begin(9600); //задействуем последовательный порт для целей отладки
if (!SD.begin(SD_ChipSelectPin)) {
Serial.println("SD fail");
return;
}
pinMode(2, INPUT_PULLUP); //подключение кнопки 1 с внутренним подтягивающим резистором для переключения на следующий аудио файл
pinMode(3, INPUT_PULLUP); //подключение кнопки 2 с внутренним подтягивающим резистором для паузы/воспроизведения аудио файла
//pinMode(3, INPUT_PULLUP); //Button 2 with internal pull up to fast forward
music.setVolume(5); // установка уровня громкости (от 0 до 7)
music.quality(1); // установите 1 для 2x oversampling (удвоенной частоты дискретизации) и 0 для обычного режима воспроизведения аудио
//music.volume(0); // 1(up) or 0(down) to control volume
//music.play("filename",30); plays a file starting at 30 seconds into the track
}
void loop()
{
if (digitalRead(2)==LOW && debounce1 == true) //нажата кнопка 1
{
song_number++;
if (song_number==5)
{song_number=1;}
debounce1=false;
Serial.println("KEY PRESSED");
Serial.print("song_number=");
Serial.println(song_number);
if (song_number ==1)
{music.play("1.wav",10);} //проигрывание песни 1 с 10-й секунды
if (song_number ==2)
{music.play("2.wav",33);} // проигрывание песни 2 с 33-й секунды
if (song_number ==3)
{music.play("3.wav");} //проигрывание песни 3 с начала
if (song_number ==4)
{music.play("4.wav",25);} // проигрывание песни 4 с 25-й секунды
if (digitalRead(3)==LOW && debounce2 == true) //кнопка 2 нажата
music.pause(); Serial.println("PLAY / PAUSE");
debounce2=false;
}
if (digitalRead(2)==HIGH) // устранение дребезга контактов
debounce1=true;
if (digitalRead(3)==HIGH) // устранение дребезга контактов
debounce2=true;
}
}

Видео, демонстрирующее работу схемы

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

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