Генерировать звук в Ардуино можно многими способами. Самый простой — это использовать функцию tone(). Поэтому, прежде всего, посмотрим как работает эта функция.



Также существуют дополнительные платы, которые можно подключить к Ардуино с помощью перемычек. Но о них мы поговорим в дугой раз.
Сейчас посмотрим, как можно запрограммировать Ардуино для вывода звука. Для этого просто используем небольшой динамик.
Содержание
В предыдущем уроке мы научились использовать последовательный порт для ввода информации и управления подключенным оборудованием. Сейчас попробуем использовать его для вывода звука. Так что, если вы забыли или пропустили предыдущий урок, пожалуйста, посмотрите его.
Для выполнения этого урока нам понадобятся
- Ардуино Uno
- Макетная плата
- Перемычки
- 1 резистор номиналом 150 Ом
- Потенциометр 10 кОм
- Динамик 8 Ом
- Кабель USB
Что такое звук
Во-первых, несколько слов о звуке. Что такое звук, какими свойствами он обладает, как люди воспринимают звук?
Прежде всего, мы знаем, что звук распространяется по воздуху в виде волны. Работа звуковых колонок, удар в барабан или колокол создают вибрацию воздуха. Таким образом, частицы воздуха за счет колебаний передают энергию все дальше и дальше. В результате волна давления передается от источника к вашей барабанной перепонке через реакцию вибрирующих частиц.
Звук в ардуино управляется двумя свойствами этих частиц. Частотой и амплитудой. Частота — это скорость вибрации, а амплитуда — это размах колебаний.
В физическом смысле звуки с большой амплитудой громче, чем с малой. Тон высокочастотных звуков выше, а низкочастотных, как видим на графике, — ниже.



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



Перед постоянным магнитом размещена звуковая катушка. Когда вы подаете на нее электрический сигнал, переменный ток создает магнитное поле, звуковая катушка перемещает диффузор вверх и вниз. Из-за вибрации диффузора из динамика раздается звук.
Функция tone()
Для работы со звуком в Ардуино предусмотрена функция tone(). Она создает меандр с заданной частотой и выводит его на выбранный контакт.
Функция tone() взаимодействует с одним из аппаратных таймеров контроллера ATmega, так что ее можно вызвать и продолжать работать с Ардуино, а звук будет играть в фоновом режиме.
Программа и схема
На этом теоретическая часть закончена. Так что, давайте соберем небольшую схему и попробуем запрограммировать воспроизведение звука.
Сегодня мы хотим передавать на динамик данные из последовательного порта. А также, играть уже готовую мелодию.



Подключим динамик к ардуино последовательно с резистором и с потенциометром, таким образом мы сможем регулировать громкость звука.
Проверить работоспособность схемы очень просто. Используем функцию tone() и напишем простую программу чтобы продемонстрировать ее работу.
void setup(){
tone(9, 104, 1000);
}
Поскольку функция tone() принимает несколько параметров, мы можем указать длительность сигнала. Поэтому будем использовать оператор setup() а не loop().
В результате выполнения этого кода, мы услышим высокий звук длительностью 1 секунду.



Теперь, если мы хотим использовать последовательный порт и принимать команды из него, используем функцию Serial.parseInt(). Для этого, будем считывать число из порта и передавать его как частоту в функцию tone().
void loop(){
if (Serial.available() > 0) {
tone(9, Serial.parseInt(), 1000);
}
}
Не забудем ограничить максимальные и минимальные значения, а так же включить последовательный порт в функции setup().
Полный текст программы
int freq;
void setup(){
Serial.begin(9600);
}
void loop(){
if (Serial.available() > 0) {
freq = constrain(Serial.parseInt(), 0, 5274);
tone(9, freq, 1000);
}
}
Заключение
Сегодня мы рассмотрели еще один аспект работы с Ардуино. А именно звук в Ардуино. Более того, в будущем мы будем улучшать схему и программу этого урока. А в следующий раз подключим к схеме несколько кнопок и попробуем сыграть настоящую мелодию.