- Arduino и микрофон
- Описание
- Подключение
- Библиотеки
- Примеры
- Простой аудиоплеер и усилитель на Arduino Uno
- Необходимые компоненты
- Основы работы с WAV аудиофайлами в Arduino
- Работа схемы
- Программирование Arduino для проигрывания музыки
- Проигрывание аудио файла
- Постановка на паузу аудиофайла
- Перемотка вперед/назад аудио файла
- Установка качества аудио
- Установка уровня громкости
- Работа музыкального аудиоплеера на основе Arduino
- Исходный код программы
- Видео, демонстрирующее работу схемы
Arduino и микрофон
Описание
Arduino весьма неплохо измеряет напряжение, почему бы не подключить к ней микрофон? Просто голый микрофонный капсюль подключать нет смысла, для работы с ним понадобятся ещё некоторые электронные компоненты. У китайцев есть несколько вариантов микрофонных модулей, но самый хороший из них – на базе микросхемы MAX9812 (вынесен на картинке справа), такой и идёт в наборе GyverKIT:
Данный модуль обеспечивает:
- Усиление сигнала с микрофона до амплитуды 1.25V (выходной диапазон 0.. 2.5V)
- Встроенный АРУ – автоматическая регулировка усиления, выравнивает громкость тихих и громких звуков
- Подавление шума – сигнал с микрофона довольно чистый даже при не очень хорошем питании. Его очень приятно обрабатывать, да и рацию можно сделать
Пины и настройки модуля:
- GND и Vdd (V+): питание, 3.. 5V
- Out: выход сигнала для подключения к МК
- Gain (G): настройка усиления
- Никуда не подключен: 60dB
- На GND: 50dB
- На VCC: 40dB
- AR: настройка компрессии звука (время восстановления)
- Никуда не подключен: 1:4000 мс
- На VCC: 1:2000 мс
- На GND: 1:500 мс
Подключение
К питанию и на аналоговый пин: Примечание:
- На схеме с Arduino (слева) можно переключить опорное напряжение (пин REF) на встроенный источник 3.3V, желательно через резистор на 10к. Соответственно в программе вызвать analogReference(EXTERNAL) . Это нужно для того, чтобы расширить диапазон чтения сигнала микрофона и обрабатывать его более точно (он выдаёт 0.. 2.5V)
- На схеме с Wemos (справа) мы подключаем микрофон на питание 3.3V. Сигнал он всё равно выдаёт 0.. 2.5V, что очень хорошо: у Wemos как раз 3.3V – верхняя граница напряжения на аналоговый пин A0
Библиотеки
Модуль выдаёт аналоговый сигнал, то есть его достаточно опрашивать стандартными средствами Arduino для получения сырого сигнала. Но полезные библиотеки всё таки есть:
- Если микрофон используется для измерения громкости звука, то можно воспользоваться библиотекой амплитудного анализа VolAnalyzer, которая обработает звук и преобразует громкость в нужный диапазон, а также будет автоматически подстраивать чувствительность при изменении среднего уровня громкости
- Clap – библиотека для распознавания хлопков в ладоши, удобно использовать совместно с VolAnalyzer
- Для частотного анализа звука можно использовать библиотеку FHT (только для AVR)
Примеры
Откроем монитор порта и скажем что-нибудь в микрофон
Отлично! Но это сырой сигнал, с ним работать неудобно – он не отражает усреднённую громкость, а всего лишь показывает форму звукового сигнала
Заведём похожий пример, но с библиотекой VolAnalyzer: выведем приведённую “громкость” звука и построим график:
И получим гораздо более применимые для проектов значения:
Такой сигнал достаточно подать на светодиод – и уже получится светомузыка!
Источник
Простой аудиоплеер и усилитель на 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”);
Постановка на паузу аудиофайла
Для этого можно использовать команду вида:
Перемотка вперед/назад аудио файла
В платформе 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)
debounce1=false;
Serial.println(«KEY PRESSED»);
Serial.print(«song_number=»);
Serial.println(song_number);
if (song_number ==1)
if (song_number ==2)
if (song_number ==3)
if (song_number ==4)
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;
>
>
Видео, демонстрирующее работу схемы
Источник