Продолжаем работу с SD картой в среде Ardino IDE. И сегодня мы будем воспроизводить мелодии и уведомления с карты памяти .
Качество воспроизводимой музыки не очень хорошее . Смотрите пример в виде. Звук тихий так как мелодии и оповещения воспроизводятся без какого либо усиления. Так звук воспроизводит Arduino. Не забудьте добавить звук при просмотре видео.
Это связанно с вычислительными способностями Arduino. Поэтому требования к аудио файлам будут напрямую зависеть от возможности микроконтроллера данной отладочной платы:
Давайте подготовим файлы для нашего проекта. Скачаем нужные нам треки или уведомления и конвертируем их. Для этого я использую онлайн конвектором аудио файлов.
Выбираем файл настраиваем параметры и конвертируем. По моему опыту можно использовать достаточно большие файлы в несколько десятков Мб.
После чего скачиваем полученный трек и загружаем его на флешку.
Я подготовил 6 различных файлов. Скачать их можно внизу страницы урока. В разделе файлы для скачивания.
Для урока нам понадобиться:
1. Arduino UNO или Arduino NANO
2. Модуль SD карты .
3. Беспаечная макетная плата .
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 часы с будильникам. Или сделать нормальный звук серены для радио управляемой машины . Уведомления для умного дома и много другое.
Понравилась статья? Поделитесь ею с друзьями:
Файлы для скачивания
![]() |
sounds.zip | 2645 Kb | 1745 | Скачать |
Вернуться в раздел: Уроки Arduino: Подключение датчиков и модулей к Arduino Дата публикации 14 октября , 2019
Читайте также
ничего не работает, одни шумы на колонке
Можно создать усилитель на транзисторе
Комментарии
Войдите или Зарегистрируйтесь И Вы сможете общаться на форуме и оставлять комментарии без капчи.