Урок 17. Подключение Mini MP3 плеера к Arduino
Наверное, часто в ваших проектах возникала необходимость воспроизводить определенный звук или мелодию. Например, по завершению какого-нибудь процесса, или просто звуковое сопровождение. В этом нам поможет Mini MP3 Проигрыватель, который обладает очень большим потенциалом.
В данный модуль вставляется microSD карточка, на которую предварительно мы можем записать Mp3 композиции, которые, в дальнейшем, сможем воспроизводить с помощью Mini MP3 Проигрывателя.
Нам понадобится:
Для реализации проекта нам необходимо установить библиотеки:
- DFPlayer Mini mp3 Arduino Library V2.0
Демонстрация:
Подготавливаем microSD карточку:
Mini MP3 Проигрыватель может распознавать карты объемом до 32G и файловой системой FAT16 , FAT32.
- Для начала нам необходимо подключить карту через катридер к компьютеру и отформатировать карточку.
- Теперь нам нужно создать папку с названием “mp3“.
- Записать ваши mp3 композиции в данную папку и дать им имена “0001.mp3” , “0002.mp3”, “0003.mp3” и тд. Так же файл можно называть “0001alla-tratata.mp3” главное, указать в самом начале номер трека в четырех символьном формате.
Описание контактов:
Pin Number | Pin Description | Description | Note |
1 | VCC | Питание | Питание постоянного тока от 3 до 5 Вольт |
2 | RX | UART serial input | |
3 | TX | UART serial output | |
4 | DAC_R | Audio output right channel | Выход на усилитель, правый канал |
5 | DAC_L | Audio output left channel | Выход на динамик, со встроенного усилителя до 3W |
9 | IO1 | Trigger port 1 | Короткое нажатие ||◄ (длительное нажатие – уменьшение громкости) |
10 | GND | Ground | Выход на динамик, со встроенного усилителя до 3W |
11 | IO2 | Trigger port 2 | Короткое нажатие ►|| (длительное нажатие – увеличение громкости) |
12 | ADKEY1 | AD port 1 | Trigger play first segment |
13 | ADKEY2 | AD port 2 | Trigger play fifth segment |
14 | USB | USB DP | USB Port |
15 | USB- | USB- DM | USB Port |
16 | Busy | Playing Status | Low means playingHigh means no |
Модуль имеет сразу два вида выходного сигнала: первый – со встроенным усилителем, а второй вариант – через внешний усилитель например УНЧ модуль 2*3 Вт класса D PAM8403. В наших примерах будет рассматриваться вариант со встроенным усилителем.
- Подключение к усилителю c помощью выходов DAC_R и DAC_L
- Подключение к динамику напрямую. динамик подключается одним контактом IO1, а вторым к IO2
Пример 1. Управление с помощью Arduino
Схема подключения:
Данный Mini MP3 Проигрыватель может быть подключен как обычному Serial порту, так и к виртуальному Serial порту. Это дает возможность arduino подключиться к компьютеру и к mp3 проигрывателю.
Подключать удобнее всего с помощью Breadboard mini и проводков папа-папа. Так же не забудьте подключать Mp3 плеер к Serial порту с через резисторы на 1 кОм.
В результате у вас должна получиться примерно следующая картина:
Не забудьте установить библиотеку Mini mp3 Arduino Library V2.0.
Скетч №1:
Данный пример запустит проигрывание треков и каждые 10 секунд будет переключать на следующий трек.
Между двумя командами необходимо делать задержку delay (100); 100 миллисекунд, в противном случае некоторые команды могут работать не стабильно.
#include
#include
void setup () { Serial.begin (9600); mp3_set_serial (Serial); mp3_set_volume (25); delay (100); mp3_play (); delay (100);
}
void loop () { mp3_next (); // Следующий трек delay (10000); // пуза 10 секунд
}
Скетч №2:
В этом примере мы запускаем плеер, он начинает проигрывать композиции целиком одна за другой в случайном порядке.
#include
#include
void setup () { Serial.begin (9600); mp3_set_serial (Serial); //set Serial for DFPlayer-mini mp3 module delay (100); mp3_set_volume (25); delay (100); mp3_play (); // запускаем трек delay (100); mp3_random_play (); // Даем команду проигрывать треки в случайной последовательности
}
void loop () { }
Скетч №3:
Для запуска определенной мелодии нужно обязательно задать правильные именна mp3 файлам, которые находятся на флешке как указано в пункте “Подготавливаем microSD карточку”.
Вы так же можете записывать файлы в любые папки и с любыми названиями, но их вы не сможете запустить выборочно по команде.<\p>#include
#include
void setup () { Serial.
begin (9600); mp3_set_serial (Serial); //set Serial for DFPlayer-mini mp3 module delay (100); mp3_set_volume (20);
}
void loop () { delay (100); mp3_play (2); // Произрываем “mp3/0002.mp3” delay (5000); mp3_play (5); // Произрываем “mp3/0005.
mp3″ delay (5000); mp3_play (1); // Произрываем “mp3/0001.mp3” delay (5000); mp3_play (4); // Произрываем “mp3/0004.mp3” delay (5000); mp3_play (3); // Произрываем “mp3/0003.mp3” delay (5000);
}
Полный список функций:
- mp3_play (); // Запуск воспроизведения
- mp3_play (5); // Воспроизвести файл “mp3/0005.mp3”
- mp3_next (); // Следующий трек
- mp3_prev (); // Предыдущий трек
- mp3_set_volume (uint16_t volume); // Уровень громкости 0~30
- mp3_set_EQ (); // Эквалайзер 0~5 (0 – Normal, 1 – Pop, 2 – Rock, 3 – Jazz, 4 – Classic, 5 – Bass)
- mp3_pause (); // пауза
- mp3_stop (); // остановить воспроизведение
- mp3_random_play (); // Воспроизвести в случайнВоспроизвести в случайном порядке.
- void mp3_get_state (); //send get state command
- void mp3_get_volume ();
- void mp3_get_u_sum ();
- void mp3_get_tf_sum ();
- void mp3_get_flash_sum ();
- void mp3_get_tf_current ();
- void mp3_get_u_current ();
- void mp3_get_flash_current ();
- void mp3_single_loop (boolean state); //set single loop
- void mp3_DAC (boolean state);
Пример 2. Автономное управление без Arduino, с помощью подключенных кнопок
Данный модуль может работать как под управлением микроконтроллера Arduino, так и автономно, как самостоятельный проигрыватель mp3.
Но модулем нужно как-то управлять, регулировать громкость, переключать треки и тд. Эти возможности мы можем реализовать очень просто, нам нужно подключить управляющие кнопки, и с помощью них мы сможем полноценно управлять mp3 проигрывателем.
Есть несколько вариантов подключения:
Простой способ (Минимум функций):
Расширенный способ (Максимальный функционал):
Источник: https://lesson.iarduino.ru/page/urok-17-podklyuchenie-mini-mp3-pleera-k-arduino/
Музыка на Arduino с модулем MP3 и WAV
Модули Ардуино позволяют создать множество различных электронных устройств, которые будут работать по несложным программам. Одним из таких устройств является компактный плеер. Ардуино плеер, проигрывающий WAV и МР3 файлы, может быть реализован на базе любого контроллера (Uno, Nano, Mega и т.п.) с помощью адаптера micro-SD, который позволяет записывать и считывать музыкальные файлы.
Формирование звука на Arduino
Несмотря на то, что платформа Arduino, в основном, предназначена для работы с цифровыми устройствами, в архитектуру микроконтроллеров входят аналого-цифровой и цифро-аналоговый преобразователи и несколько каналов широтно-импульсной модуляции. Это позволяет осуществлять захват звуковых сигналов и их воспроизведение.
Платформа Ардуино включает в себя как 8-битные AVR контроллеры, так и мощные 32 битные ARM процессоры. Принцип воспроизведения файлов Arduino MP3 не позволяет обеспечить высокое качество звука, поскольку с выхода контроллера снимаются импульсы прямоугольной формы (меандр), отличающиеся от идеального синусоидального сигнала.
Самым бюджетным модулем платформы Ардуино, является Arduino UNO с микроконтроллером ATmega 328, в котором интегрированы два 8-битных и один 16-битный счётчик, каждый из которых может быть использован для генерации ШИМ. Контроллеры получают сигналы от внешних источников и выдают свои собственные сигналы через порты ввода/вывода (GPIO).
Теоретически порты микроконтроллера предназначены для работы с уровнями логического нуля и логической единицы, тем не менее, выводы GPIO позволяют оцифровывать аналоговые сигналы с ограничением по уровню и генерировать сигналы различной формы с помощью ШИМ и фильтра низких частот.
Внешние данные могут поступать разными способами, но основным методом оцифровки звукового сигнала является использование АЦП.
Так же данные могут поступать на микроконтроллер через первый разряд порта ввода/вывода. Аналого-цифровой преобразователь позволяет точно оцифровывать входной сигнал с разрешением до 10 бит. Оцифровка может выполняться на более высокой скорости преобразования, но при этом уменьшается точность, так как два младших бита игнорируются.
После того как входной сигнал был оцифрован и прошёл необходимые преобразования он может быть конвертирован в аналоговую форму через блок ШИМ. Амплитуда сигнала кодируется через соотношение длительностей логического нуля и логической единицы. Важным этапом обработки выходного сигнала является фильтрация, удаляющая высокочастотные компоненты модуляции.
Так же фильтры ограничивают частотный диапазон звукового сигнала.
Для воспроизведения отдельных частот звукового диапазон можно использовать внутренний генератор Arduino. Для этого достаточно подключить к плате пьезоэлектрический динамик и задать простую функцию. Динамик подключается между контактами GND и «2» разъема Digital. Динамик нужно подключать через резистор 100 Ом. Далее задаётся конкретная функция.
Выбирается контакт const byte dinPin = 2; Контакт настраивается как выходной pinMode (dinPin, output); //. Затем командой tone можно включить генератор с заданной частотой. Команда выглядит следующим образом: tone ( dinPin, 440 ) ; // Получился электронный камертон генерирующий ноту Ля первой октавы.
Нота будет звучать до тех пор, пока генерация не прекратится командой noTone ( dinPin ); //
Плеер для Ардуино
Простейший плеер можно собрать буквально за 20 минут. Для этого потребуются следующие элементы:
- Адаптер для карт памяти.
- Соединительные провода.
- Динамик 8 Ом.
- Транзистор BC 546 B.
На транзисторе собран усилитель низкой частоты. Без него можно обойтись, подключив к плате Ардуино высокоомный пьезоэлектрический динамик, но он имеет ограниченный частотный диапазон и не обеспечит нормального качества звучания.
Arduino wav-файлы воспроизводит нормально, а вот для чтения файлов в формате МР3 он не предназначен, поэтому все звуковые файлы нужно конвертировать в формат wav, используя программу Online-convert.com. Файлы записываются в формате wav pcm Mono 8 kHz 8 bit. SD-карту памяти нужно отформатировать и затем перенести на неё wav файлы с простыми идентификаторами типа “001.wav.
Адаптер для чтения SD-карт имеет встроенный стабилизатор напряжения, поэтому обе платы можно питать от одного источника +5 В. Адаптер подключается к плате Ардуино следующим образом:
- CS – 10 контакт.
- MOSI –11 – “ – “.
- MISO –12 – “ – “.
- CLK – 13 – “ – “.
- GND – земля.
- 5 V – питание + 5 В.
Для работы устройства следует загрузить библиотеку TMRpcm-Arduino, которая предназначена для чтения файлов в формате wav непосредственно с карты памяти. Библиотека поддерживает все модули, выполненные на микроконтроллере ATmega328.
Модуль МР3 для ардуино
Более сложной модификацией плеера является вариант с использованием отдельного устройства, где датчик МР3 позволяет воспроизводить файлы именно в этом формате.
Обычным носителем информации в мини плейерах является твердотельный накопитель информации или карата памяти micro-SD. На ней располагаются звуковые файлы определённого формата. Чаще всего используются карты с ёмкостью, не превышающей 32 Гб.
Для подключения к Arduino удобно использовать DF Player Mini MP3. Он представляет собой компактную плату, на которой находятся следующие компоненты:
- Слот для установки карты.
- Усилитель звуковой частоты.
- Дискретные элементы.
Питание модуля осуществляется от источника постоянного тока с напряжением 3,5-5,0 В. Плейер поддерживает форматы MP3, WAV, WMA и TF карты с системами FAT16 и FAT32. В устройстве имеется возможность управлять уровнями громкости от 0 до 30 и включать одну из 6 предустановленных настроек эквалайзера. Подключение плеера к ардуино выполняется следующим образом:
- VCC – + 5 V
- RX – RX
- TX – TX
- SPK 1 – динамик
- SPK 2 – динамик
- GND – GND
Линии RX и TX подключаются через резисторы 1 кОм. Для того чтобы устройство заработало нужно загрузить библиотеку Mini mp3 Arduino Library V2.0. Основной набор команд, выполняемых плеером:
- Mp3_play (0002) – воспроизведение файла с указанным номером.
- Mp3_stop – остановка воспроизведения.
- Mp3_next – следующий файл.
- Mp3_prev – предыдущий файл.
- Mp3_set_volume – выбор уровня громкости.
- Mp3_set_EQ (0-5) – выбор предустановки эквалайзера.
Если подключить к плееру USB порт через контакты USB «+» и «–», то можно воспроизводить звуковые файлы, записанные на флэш-карте.
Источник: https://ArduinoMaster.ru/datchiki-arduino/arduino-mp3-wav-modul/
Arduino для начинающих. Часть 1
Доброго времени суток, Хабр. Запускаю цикл статей, которые помогут Вам в знакомстве с Arduino. Но это не значит, что, если Вы не новичок в этом деле – Вы не найдёте ничего для себя интересного.
Введение
Было бы не плохо начать со знакомства с Arduino. Arduino – аппаратно-программные средства для построения систем автоматики и робототехники. Главным достоинством есть то, что платформа ориентирована на непрофессиональных пользователей. То есть любой может создать своего робота вне зависимости от знаний программирования и собственных навыков.
Начало
Создание проекта на Arduino состоит из 3 главных этапов: написание кода, прототипирование (макетирование) и прошивка. Для того, чтоб написать код а потом прошить плату нам необходима среда разработки.
На самом деле их есть немало, но мы будем программировать в оригинальной среде – Arduino IDE. Сам код будем писать на С++, адаптированным под Arduino. Скачать можно на официальном сайте. Скетч (набросок) – программа, написанная на Arduino.
Давайте посмотрим на структуру кода:
main(){ void setup(){ } void loop(){ }
}
Важно заметить, что обязательную в С++ функцию main() процессор Arduino создаёт сам. И результатом того, что видит программист есть:
void setup(){
}
void loop(){
}
Давайте разберёмся с двумя обязательными функциями. Функция setup() вызывается только один раз при старте микроконтроллера. Именно она выставляет все базовые настройки. Функция loop() — циклическая. Она вызывается в бесконечном цикле на протяжении всего времени работы микроконтроллера.
Первая программа
Для того, чтоб лучше понять принцип работы платформы, давайте напишем первую программу. Эту простейшую программу (Blink) мы выполним в двух вариантах. Разница между ними только в сборке.
int Led = 13; // объявляем переменную Led на 13 пин (выход)
void setup(){ pinMode(Led, OUTPUT); // определяем переменную
}
void loop(){ digitalWrite(Led, HIGH); // подаём напряжение на 13 пин delay(1000); // ожидаем 1 секунду digitalWrite(Led, LOW); // не подаём напряжение на 13 пин delay(1000); // ожидаем 1 секунду
}
Принцип работы этой программы достаточно простой: светодиод загорается на 1 секунду и тухнет на 1 секунду. Для первого варианта нам не понадобиться собирать макет. Так как в платформе Arduino к 13 пину подключён встроенный светодиод.
Прошивка Arduino
Для того, чтоб залить скетч на Arduino нам необходимо сначала просто сохранить его. Далее, во избежание проблем при загрузке, необходимо проверить настройки программатора. Для этого на верхней панели выбираем вкладку «Инструменты». В разделе «Плата», выберете Вашу плату.
Это может быть Arduino Uno, Arduino Nano, Arduino Mega, Arduino Leonardo или другие. Также в разделе «Порт» необходимо выбрать Ваш порт подключения (тот порт, к которому вы подключили Вашу платформу). После этих действий, можете загружать скетч.
Для этого нажмите на стрелочку или во вкладке «Скетч» выберете «Загрузка» (также можно воспользоваться сочетанием клавиш “Ctrl + U”). Прошивка платы завершена успешно.
Прототипирование/макетирование
Для сборки макета нам необходимы следующие элементы: светодиод, резистор, проводки (перемычки), макетная плата(Breadboard). Для того, чтоб ничего не спалить, и для того, чтоб всё успешно работало, надо разобраться со светодиодом. У него есть две «лапки». Короткая – минус, длинная – плюс.
На короткую мы будем подключать «землю» (GND) и резистор (для того, чтоб уменьшить силу тока, которая поступает на светодиод, чтоб не спалить его), а на длинную мы будем подавать питание (подключим к 13 пину). После подключения, загрузите на плату скетч, если вы ранее этого не сделали.
Код остаётся тот же самый.
На этом у нас конец первой части. Спасибо за внимание.
Источник: https://habr.com/post/352806/
Музыкальная шкатулка на Arduino
Наш следующий проект на контроллере Arduino – музыкальная шкатулка. Программный скетч для Ардуино прилагается, так что вы легко сможете добавить свои мелодии, даже не имея больших познаний в программировании Ардуино.
Принцип работы устройства очень прост – при открытии шкатулка будет играть приятную мелодию, при закрытии шкатулки воспроизведение мелодии прекращается.
Для данного проект потребуется сама плата Arduino и минимум деталей: динамик, потенциометр (переменный резистор), сопротивление на 10кОм, батарейки АА, кнопка и транзистор КТ503А или любой другой маломощный n-p-n транзистор, например КТ315.
Звук – колебательное движение частиц упругой среды, распространяющееся в виде волн в газообразной, жидкой или твёрдой средах. Если сказать просто – это колебания волн. В динамике колеблется мембрана. В зависимости от частоты колебания мы слышим звук разной тональности. От глубины хода мембраны зависит громкость.
Управляют мембраной за счёт подаваемого напряжения. В платах Arduino для вывода звука на динамик используются цифровые или аналоговые выходы. Для воспроизведения мелодии необходимо подавать последовательно звуки определенной частоты и длительности.
Для генерации звуков определенной частоты и длительности в Arduino используется функция tone():
tone(pin,frequency,duration);
Функция tone() генерирует на выводе pin прямоугольный сигнал частоты frequency с коэффициентом заполнения 50%. Третий (необязательный) параметр функции duration позволяет задавать длительность сигнала.
Если длительность сигнала не указана, звук будет генерироваться до вызова функция noTone().
Обычно в примерах по генерации звуков на Arduino для воспроизведения звука используется пьезоэлектрический излучатель, но к сожалению громкость звука при этом недостаточна.
Поэтому Мы для воспроизведения звука мы будем использовать маленький динамик.
В качестве контроллера Arduino я использовал Arduino Pro Mini, которая отличается малым размером и очень удобна при использовании на плате. Можно использовать любую плату Ардуино, например, подойдет наиболее популярная Arduino Uno. Соберем схему, показанную на рисунке 1 (схема соединений на рисунке 2).
Рис. 1. Принципиальная схема музыкальной шкатулкиРис. 2. Схема подключения компонентов к Arduino
Для написания скетча нам понадобятся значения частот для нот 1 и 2 октавы и обозначения для каждой ноты (см. таблицу 1).
Таблица 1. Таблица нот
Теперь подберем мелодию, которую будет воспроизводить музыкальная шкатулка. Желательно найти мелодию, записанную на нотном стане. Я выбрал простую мелодию – “В траве сидел кузнечик” (ноты на рисунке 3).
Рисунок 3. Мелодия “В траве сидел кузнечик” на нотном стане.
Теперь приступим к написанию скетча. Потенциометр в схеме (рисунок 1) присутствует для подбора нужного темпа мелодии.
Темп может принимать значения от MIN_TEMPO до MAX_TEMPO. Для вычисления подобранного темпа используем функцию map(), которая преобразует значение на аналоговом входе A0 в значение подобранного темпа.
tempo=map(analogRead(PIN_POT),0,1024,MIN_TEMPO,MAX_TEMPO);
Занесем в массив melody[] последовательность воспроизводимых нот, список длительностей нот занесем в массив duration[], при этом длительность целой ноты равна 32, половинной 16, и т.д. до 1/32 – длительность1. Данные с обозначением нот занесем в массив notes[], а данные с частотами для соответствующих нот занесем в массив frequency[]. Паузу обозначим символом '*'.
// МЕЛОДИЯ – массив нот и массив длительностей
char melody[]={'A', 'E','A','E','A', 'U','G','G','G',
'E','U','E','G', 'A','A','A','A',
'E','A','E','A', 'U','G','G','G',
'E','U','E','G', 'A','A', 'H','H','H','H','H', 'c','c','c','c','c',
'c','H','A','U', 'A','A','A','A',
'H','H','H','H','H', 'c','c','c','c','c',
'c','H','A','U', 'A', '*'
};
int bb[]={4, 4,4,4,4, 4,4,4,4,
4,4,4,4, 4,4,4,4,
4,4,4,4, 4,4,4,4,
4,4,4,4, 8,8, 4,2,2,4,4, 4,2,2,4,4,
4,4,4,4, 4,4,4,4,
4,2,2,4,4, 4,2,2,4,4,
4,4,4,4, 4,64
};
// массив для наименований нот в пределах двух октав
char names[]={'c','r','d','s','e','f','t','g','u','a','b',
'h','C','R','D','S','E','F','T','G','U','A','B', 'H','F'};
// массив частот нот
int tones[]={261,277,293,311,329,349,370,392,415,440,466,
494, 523,554,587,622,659,698,740,784,830,880,932,988};
В цикле loop() мы проверяем отжатие кнопки (открытие шкатулки). По отжатию кнопки начинается проигрывание мелодии понотно, вызывая процедуру playNote(), в которую передает обозначение текущей ноты и продолжительность.
Процедура playNote() находит по обозначению ноты значение соответствующей частоты и вызывает для проигрывания ноты функцию tone(). Продолжительность звучания ноты – это базовая нотная длительность (32 – для целой, 16 – для полуноты, 8 – для четвертной и т.д.) умноженная на значение темпа произведения – temp.
Значение temp устанавливается по значению потенциометра, и подбирается при отладке, в работе не меняется. Для лучшего звучания музыкального отрезка после воспроизведения каждой ноты делаем небольшую паузу delay(beats*tempo+tempo). По нажатии кнопки при воспроизведении мелодии, воспроизведение прекращается.
При нажатии клавиш обязательно использовать процедуру проверки на дребезг debounce(boolean last).
Запустим Arduino IDE. Создадим новый скетч и внесем в него содержимое листинга 1.
// МЕЛОДИЯ – массив нот и массив длительностей
char melody[]={'A', 'E','A','E','A', 'U','G','G','G',
'E','U','E','G', 'A','A','A','A',
'E','A','E','A', 'U','G','G','G',
'E','U','E','G', 'A','A', 'H','H','H','H','H', 'c','c','c','c','c',
'c','H','A','U', 'A','A','A','A',
'H','H','H','H','H', 'c','c','c','c','c',
'c','H','A','U', 'A', '*'
};
int bb[]={4, 4,4,4,4, 4,4,4,4,
4,4,4,4, 4,4,4,4,
4,4,4,4, 4,4,4,4,
4,4,4,4, 8,8, 4,2,2,4,4, 4,2,2,4,4,
4,4,4,4, 4,4,4,4,
4,2,2,4,4, 4,2,2,4,4,
4,4,4,4, 4,64
};
// подключить динамик к pin 8
#define PIN_SPEAKER 8
// переменные – темп воспроизведения, ноты, длительности
int tempo,notes,beats;
#define MIN_TEMPO 20
#define MAX_TEMPO 100
// пин подключения потенциометра
#define PIN_POT A0
// пин подключения кнопки
// при отжатии – включить проигрывание мелодии
// при нажатии прекратить
// пин подключения потенциометра
#define PIN_BUTTON 5
// Переменная для сохранения текущего состояния кнопки
int tekButton = LOW;
// Переменная для сохранения предыдущего состояния
int prevButton = LOW; // Переменная для сохранения количества проигрываний
int countPlay = 0; void setup() {
// Сконфигурировать контакт динамика как выход
pinMode(PIN_SPEAKER, OUTPUT);
// Сконфигурировать контакт кнопки как вход
pinMode (PIN_BUTTON, INPUT);
}
void loop() {
tekButton = debounce(prevButton);
if (prevButton == HIGH && tekButton == LOW) // если отжатие…
{
// получить темп воспроизведения
tempo=map(analogRead(PIN_POT),0,1024,MIN_TEMPO,MAX_TEMPO);
for(int i=0;i
Источник: https://radioded.ru/proekty-na-arduino/muzykalnaya-shkatulka-na-arduino
Устройство вокальных звуковых эффектов на Arduino
Эта основанная на Arduino коробка вокальных звуковых эффектов сдвигает и искажает входящие звуковые сигналы для получения разнообразных звуковых эффектов. Данный проект – мой первый опыт цифровой обработки сигнала в реальном времени при помощи Arduino.
Входящий сигнал с микрофона с частотой около 40 кГц проходит цифровую обработку и выводиться в виде 8 битного аудио с частотой 40кГц. Чтобы минимизировать объем необходимых Arduino вычислений, для обработки входящего звукового сигнала я использовал метод называемый гранулярный синтез.
По сути, входящий в Arduino звук режется и храниться в виде маленьких частей (длиной в миллисекунду или микросекунду), называемых «гранулами». Затем они индивидуально меняются и воспроизводятся.
Они могут быть удлинены или укорочены, растянуты или сжаты, воспроизведены в обратном порядке, повторены несколько раз или смешаны с другими гранулами. Вы можете прослушать образец аудио сигнала после коробки эффектов ниже:
Гранулярный синтез дает уникальный тип искажений, вызванных разрывами между отдельными гранулами в выходном сигнале. Иногда это искажение дает эффект, который я могу опасть как “разрыв” звука, в других случаях оно добавляет новые частоты, которых раньше не было в аудио сигнал. Например, в произведении Aphex Twin, гранулярный синтез особенно заметен примерно на 3 минуте.
Другой пример гранулярного синтеза, с питч-шифтером и эффектом наложения на произведении Paul Lansky. Моя любимая вещь, которую делает эта коробка эффектов – это использование питч-шифтера для получения андрогинного звука.
Эта идея появилась у меня после прослушивания большого количества произведений Fever Ray прошлой зимой, в которых слышно питч-шифтер, и время от времени её голос звучит как мужской.
Список элементов 1x Arduino Uno REV 3 7x резистор 10кОм 0.25Вт 9x резистор 20кОм 0.25Вт 1x резистор 1кОм 0.25Вт 1x потенциометр 50кОм 1x аудио потенциометр 10кОм со встроенным тумблером.
(Он будет использоваться для регулировки громкости и вкл/выкл устройства) 5x рифленая ручка 0,25″ 2x щелочная батарея 9В 2x разъем для 9В батарей 1x макетная плата 1х тумблер 2x BLS штырьки 3х панель под микросхемы 8 выводов 1x двойной ОУ TL082 3x резистор 100кОм 0.25Вт 1x электролитический конденсатор 10мкФ 1x конденсатор47нФ 3x конденсатор 0.
1uF 2x потенциометр 1мОм 1x логарифмический потенциометр 1мОм 1x BLS штырьки 1x потенциометр 10кОм 1x DPDT тумблер 2x 1/4″ стерео джек 2х яркий 5мм светодиод 2x резистор 100Ом 0.25Вт
2x двойной ОУ TS922IN (одиночный ОУ TS924 также будет работать, но его нет в наличии)
Дополнительные материалы: Провода №22 Припой Наждак Фанера Столярный клей Термоклей
Шурупы
Схема
Для облегчения понимания схемы, я разбил её на три части.
На первой схеме показан аудио выход. В этом проекте звук выводиться через 8 битный R2R ЦАП с цифровых контактов 0-7 Arduino. Этот сигнал проходит через усилитель, ФНЧ и потенциометр регулировки громкости, прежде чем попасть на динамик.
На второй схеме показан микрофонный вход. Сигнал с микрофона проходит через усилитель и отсекатель постоянной составляющей перед отправкой его на аналоговый вывод A0 Arduino.
На третьей схеме показана связь элементов управления с Arduino. В этом проекте есть два светодиодных индикатора: один индикатор отсечения и один выходной индикатора. Три потенциометра управляют величиной дробления, pitch (смещением) и wet/dry mix, а переключатель управляет направлением воспроизведения (вперед или назад).
BLS штырьки
Припаяйте BLS штырьки на макетную плату, и вы сможете установить Arduino прямо на неё.
К сожалению, расстояние между цифровыми контактами 7 и 8 Arduino не стандартное 2,54 мм, поэтому старайтесь избегать их использования(аналоговые контакты тоже можно использовать для цифрового ввода/вывода).
Если вам надо использовать их, попробуйте найти длинные BLS штырьки, которые можно подогнуть (рис. 4 – из другого проекта).
ЦАП
Припаяйте восемь 20кОм резисторов на контакты D0-D7 Arduino, как показано на фотографии.
Припаяйте семь 10кОм резисторов между ранее припаянными резисторами 20кОм. Добавьте дополнительный резистор 20кОм, у резистору 20кОм, подключенному к D0Arduino (основа лестницы).
Подсоедините другой конец резистора 20кОм к GND Arduino.
Тестирование ЦАП
Подключите выход ЦАП к осциллографу, также необходимо подключить GND. Прошейте Arduino предоставленным ниже кодом. ЦАП должен выдавать синусоиду колеблющуюся от 0 до 5В с частотой ~63 Гц (см. фото). Если вы не знаете, как пользоваться/читать показания осциллографа посмотрите эту статью.
Немного информации о коде: Я использовал прерывания от таймера для увеличения переменной t с частотой 40 кГц. Когда t достигает 627, оно сбрасывается в ноль (это происходит с частотой 40000/628=63 Гц).
При этом, в основном цикле Arduino посылает значения от 0 (00000000 в двоичной системе) до 255 (11111111 в двоичной системе) на цифровые выводы 0-7 (PORTD). Значение вычисляется по следующей формуле:
PORTD=byte(127+127*sin(2*t/100));
Пока t увеличивается от 0 до 627, синус проходит один полный цикл. Значение отправляемое в PORTD представляет собой синусоиду с частотой 63Гц и амплитудой 127, колеблющейся вокруг 127. ЦАП преобразует это в напряжение от 0 до 5В, если в PORTD отправлен 0, напряжение равно 0В, а если 255, то 5В.
8 контактная панелька и буфер
Припаяйте 8 контактную панельку на плату. Подключите GND к контакту 4, 5В к контакту 8, и выход ЦАП к 3. Спаяйте контакты 1 и 2 вместе. Это заставляет сигнал идти через повторитель напряжения. Повторитель напряжения действует как буфер, защищая выход с ЦАП от любых нагрузок, которые позже появляются в цепи.
Подключение потенциометра
Припаяйте три провода к экспоненциальному потенциометру 10кОм (с маркировкой «А»), как показано на рисунке 3.
Припаяйте красный провод к контакту 1, зеленый провод к контакту 5, и черный провод к GND/ контакту 4. Соедините контакты 6 и 7 вместе (рис. 2).
Этот потенциометр будет регулировать амплитуду сигнала – это регулятор громкости. Он делает это, работая как переменный делитель напряжения.
Вторая 8 контактная панелька
Припаяйте вторую 8 контактную панельку и подключите GND к контакту 4 и 5В к контакту 8.
Делитель напряжения
Припаяйте резистор 10кОм к контакту 7 первого TS922IN. Припаяйте резистор 2кОм к резистору 10кОм и припаяйте второй вывод резистора 2кОм к GND.
Это еще один делитель напряжения, и его цель – это масштабирование сигнала на 2000/(10000+2000)=1/6 его амплитуды. Это сделано для того, чтобы при включении максимальной громкости, устройство не оглушало меня.
В отличие от делителя напряжения сделанного ранее, это постоянный, не регулируемый делитель. Масштабированный сигнал выходит из соединения двух резисторов.
Если вы планируете подключать это устройство к другому модулю эффектов или усилителю, то не добавляйте этот делитель напряжения.
RC фильтр нижних частот
Задача ФНЧ в этой части схемы заключается в удалении цифровых артефактов с выхода ЦАП, при этом не теряя детали более высоких частот.
Теория Найквиста утверждает, что для частоты дискретизации х Гц, максимальная частота, которая может быть получена, равна х/2Гц.
Так что если у вас частота дискретизации 40 кГц (стандарт большинства аудио), то максимальная частота, которую вы можете воспроизвести это 20 кГц (верхняя граница звукового спектра).
При использовании ФНЧ с сигналом с частотой среза 20 кГц, вы можете сгладить “ступеньки” сигнала, сохраняя при этом общую его форму нетронутой.
Я использовал простой RC фильтр для достижения этой цели: последовательно соединённые резистор и конденсатор подключенные к GND. Подключите резистор к входному сигналу, а конденсатор к GND, и в месте соединения этих двух элементов будет отфильтрованным. Рассчитать значения конденсатора и резистора, необходимые для ФНЧ можно по следующему уравнению:
Частота среза = 1/ (2*pi*R*C)
Для частоты среза 20.000 Гц и резистора 1кОм:
20000=1/(2*3.14*1000*C)
C =~ 8nF
Конденсатор 8 nF я округлил до 0.01uF. При этом частота среза около 16 кГц. Вы можете по перебирать разные значения и посмотреть, что вам больше всего нравиться. Мне обычно нравится глубокая фильтрация, так как она убирает больше шумов.
Припаяйте 1кОм резистор на выход делителя напряжения сделанного в предыдущем шаге (если вы не делали его, то припаяйте резистор прямо к контакту 7). Припаяйте конденсатор 0.01uF последовательно с этим резистором GND. Припаяйте провод от места соединения конденсатора и резистора к контакту 5 второй панельки.
Ещё буфер
Я сделаю второй повторитель напряжения на ОУ, соединённых параллельно, чтобы они могли давать в два раза больший ток. Как и прежде, повторитель напряжения действует как буфер, защищая входящий сигнал от нагрузки на наушники, которые в конечном итоге будут присоединены к выходу буфера.
Припаяйте провод между двумя не инвертирующими входами ОУ(контакты 5 и 3 второй панельки). Припаяйте другой провод двумя выходами (контакты 1 и 7 второй панельки). На нижней стороне платы спаяйте инвертирующие входы и выходы
Отсекатель постоянной составляющей
После всех делителей напряжения, сигнал на выходе ОУ колеблется от 0 до 1В (или от 0 до 5, если вы не использовали делитель напряжения). Перед отправкой сигнала на колонки/наушники, колебание должно быть компенсировано. Это достигается путем пропускания сигнала через конденсатор.
Припаяйте GND конденсатора 100uF (или больше) к выходу второго операционного усилителя. Сигнала с его + будет колебаться вокруг 0В.
Аудио разъем
Отвинтите пластиковый корпус аудио разъема. Припаяйте черный провод (GND) к более крупному контакту, и зеленый провод (выходной сигнала) к двум более коротким контактам. Это стерео разъем, но из Arduino выходит моно сигнал, поэтому просто подаем моно сигнал на стерео выход.
Используйте термоклей для фиксации соединений и предотвращения короткого замыкания. Припаяйте зеленый провод к + конденсатора 100uF и черный провод к GND.
Схема микрофона
На рис. 1 показан сигнал, идущий прямо из микрофона на осциллограф. Сигнал относительно слаб, амплитуда всего 200 мВ. Обратите внимание, что сигнал колеблется около 0 вольт – это типично для аудио сигнала.
В идеале, нужен сигнал с амплитудой 2,5В колеблющийся вокруг 2,5. Таким образом, сигнал находится в пределах 0-5В; Arduino будет в состоянии измерить его с максимальным разрешением и без деления.
Для того, чтобы сделать это, необходимо отсекать постоянную составляющую сигнала и усиливать его. Отсечение постоянной составляющей значит изменение уровня, вокруг которого будут колебания.
Усиление означает увеличение амплитуды (расстояние между центром и максимальной или минимальной точкой) сигнала. Усиление также защищает микрофон от нагрузок, которые могут возникнуть позже как буфер, что предотвращает искажение.
На рис. 2 показан тот же сигнал после усиления, и вы можете увидеть, что высота импульсов возросла так, что сигнал колеблется между -2,5 и 2,5В (амплитуда 2,5В). На рис.
4 показан сигнал после отсечения постоянной составляющей; Амплитуда 2,5 В, но центр сигнала 2.5В вместо 0В, поэтому сигнал никогда не опускается ниже 0В.
(Примечание: небольшие изменения формы сигнала на рисунке 3 и 4 обусловлены моим голосом и не имеет отношения к схеме). Сигнал на рис. 3 можно подавать на аналоговый контакт Arduino.
Батареи
Две 9В батареи необходимы для питания TL082. Двухполюсный тумблер (DPDT) используется как выключатель питания на обе батареи.
На самом деле в DPDT тумблере два отдельных тумблера, но они управляются одним и тем же механизмом. Припаяйте красные провода от разъемов для батарей на каждый переключатель(на одну сторону).
Припаяйте красные провода к среднему контакту каждого переключателя. При необходимости используйте термоклей для фиксации.
Панелька для усилителя и питание
Припаяйте 8-контактную панельку на плату. Как показано на рисунке цоколевки TL082, + V подключается к контакту 8 и -V подключается к контакту 4. Подключите на красной провод с середины DPDT тумблера к контакту 8.
Давайте дадим разъему этой батареи №1. Припаяйте черный провод от разъема №2 к 4 контакту панельки. Припаяйте черный провод от разъема №1 и оставшийся красный провод вместе на плату, это средняя точка(0В) в питании +9В/-9В.
Припаяйте её к GND Arduino.
Микрофонный вход
Отвинтите пластиковый корпус разъёма 1/4″. Если у вас есть моно микрофон, отсоедините правый контакт. Я также немного уменьшил большой контакт GND. Припаяйте черный провод к GND и зеленый провод к другому контакту. Используйте термоклей для предотвращения короткого замыкания.
Не инвертирующий усилитель
Припаяйте провода от 1/4″ гнезда к плате. Припаяйте черный провод к GND Arduino и зеленый провод к контакту 5 8 контактной панельки.
Припаяйте 100кОм резистор между контактами 6 и 7 8 контактной панельки.
Припаяйте два провода к потенциометру, так чтобы он работал как переменный резистор. Припаяйте один провод (неважно какой) к GND, а второй к 6 контакту панельки. Он будет контролировать амплитуду входного сигнала микрофона.
Отсекатель постоянной составляющей
Схема отсекателя постоянной составляющей состоит из двух конденсаторов и делителя напряжения. Припаяйте электролитический конденсатор 10мкФ, так что бы его + подключался к 7 контакту панельки.
Припаяйте конденсатор 47нФ к GND конденсатора 10мкФ. Другой контакт конденсатора 47нФ припаяйте к GND.
Сделайте делитель напряжения Arduino +5 В и GND путем подключения двух резисторов 100кОм резисторов между 5В и землей. Подключите место соединения резисторов к месту соединения конденсаторов. Это позволит добавить 2,5В к усиленному сигналу с микрофона.
Подключите аналоговый вход 0 к соединению двух конденсаторов.
Простой аудио выход
Загрузите код в Arduino. Этот код считывает сигнал, поступающий в A0, преобразовывает его в число от 0 до 255, и выводит его на ЦАП. На осциллографе на фотографии, синий сигнал с микрофона и желтый сигнал прямо после ЦАП.
Обратите внимание, что каждая ступенька на выходе ЦАП длиться около 125us. Соответственно, частота дискретизации 1/125us или 8 кГц.
Далее я буду вручную устанавливать счетчик АЦП и снижать разрешение ЦАП Arduino с 10 бит (0-1023) до 8 бит (0-255), чтобы увеличить скорость и поднять частоту дискретизации.
int incomingAudio; void setup(){ for (byte i=0;i
Источник: http://cxem.net/sound/music/music29.php
Урок 11. arduino и buzzer (пищалка)
Главная/Arduino/Arduino уроки/Урок 11. arduino и buzzer (пищалка)
В этом опыте, мы снова будем преодолевать разрыв между миром цифровым и аналоговым.
Мы будем использовать BUZZER, пищалку или зуммер, кому как нравится, который делает небольшой «щелчок», если кратковременно дотронуться его контактами до питания +5 вольт и «-» GND, попробуйте! Само по себе это не очень интересно, но если вы подадите на него напряжение и тут же отключите, и так со скоростью 100 раз в секунду
зуммер начнет пищать. И если собрать сотни строк тонов вместе, у вас появится музыка!
В этом опыте ардуино будет играть мелодию, во всяком случае мы на это надеемся!
Схема, очень простая, собрать сможет почти любой, специальных знаний и опыта совсем не требуется.
Принципиальная схема Arduino и Buzzer. Урок 11
Выше, вы видите принципиальную схему к этому уроку, сложностей, повторяю еще раз, во время сборки возникнуть не должно.
Для этого опыта вам понадобится:
1. Arduino UNO — 1 шт.
2. Buzzer (пищалка) — 1 шт.
6. Соединительные провода.
7. Макетная плата.
Далее идет схема соединений.
Если зуммер на вписывается в отверстия на плате, попробуйте его немного повернуть, так чтобы его выводы вошли в соседние отверстия, как бы по диагонали.
Схема соединений к уроку 11. Ардуино и пищалка
Скачать код к опыту 11. Скетч и подробное описание (Обязательно прочтите весь скетч!):
Набор для экспериментов ArduinoKit
Код программы для опыта №11: sketch 11
Вид созданного урока на макетной схеме:
Arduino и Пищалка (buzzer). Урок 11
В результате проделанного опыта Вы должны увидеть, а что вы должны увидеть, — да нечего. Вы должны услышать!!!
Вы должны услышать электронную мелодию «Twinkle, Twinkle Little Star», или подобную, это не столь важно, главное чтобы услышали.
Код написан так, что вы легко можете добавить свои собственные мелодии.
Возможные трудности:
Нет звука Учитывая размер и форму пищалки легко промахнуться мимо нужного отверстия в плате. Попробуйте еще раз проверить его размещение.
Все равно не работает, не пойму почему
Попробуйте вытянуть пищалку из платы и снова воткнуть ее на свое место, а потом загрузите код программы в плату Arduino.
Всем удачи! Ждём ваши комментарии к ARDUINO УРОК 11 — BUZZER.
Источник: http://arduinokit.ru/arduino/lessons-arduino/lesson-11-arduino-buzzer.html