Звук в ардуино. Урок 7. Ардуино

Звук в ардуино

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

Генерируем звук на ардуино
Генерируем звук на ардуино

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

Сейчас посмотрим, как можно запрограммировать Ардуино для вывода звука. Для этого просто используем небольшой динамик.

В предыдущем уроке мы научились использовать последовательный порт для ввода информации и управления подключенным оборудованием. Сейчас попробуем использовать его для вывода звука. Так что, если вы забыли или пропустили предыдущий урок, пожалуйста, посмотрите его.

Чтение данных из последовательного порта. Урок 6. Ардуино

Для выполнения этого урока нам понадобятся

  • Ардуино 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);
    }
}

Заключение

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

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

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