В этом проекте мы разработаем тон-генератор на Arduino Uno. У нас будут кнопки, связанные с UNO, и каждая из них генерирует различную интенсивность тона. Частота тонального сигнала, генерируемого UNO, одинакова во всех внутренних. Интенсивность звука меняется при каждом нажатии. Это один из самых простых способов сделать пианино с Arduino Uno. Также проверьте эту схему фортепиано.
Количество тонов можно увеличить до 20. Это дает наилучшие вариации тона и более плавные изменения. Интенсивность тона изменяется с помощью ШИМ (широтно-импульсной модуляции). Пример ШИМ показан на графике ниже.
В ШИМ частота сигнала или период времени сигнала (Ton + Toff) всегда постоянны. Меняется только соотношение времени ВКЛЮЧЕНИЯ и ВЫКЛЮЧЕНИЯ. Например, на втором графике на приведенном выше рисунке время ВКЛЮЧЕНИЯ составляет 80%, а время ВЫКЛЮЧЕНИЯ составляет 20% от полной продолжительности.
На третьем графике время ВКЛЮЧЕНИЯ составляет 50%, а время ВЫКЛЮЧЕНИЯ - 50% полной продолжительности. Таким образом, в первом случае у нас коэффициент заполнения 80%, а во втором случае коэффициент заполнения 20%.
С этим изменением продолжительности включения у нас есть изменение в Vrms (среднеквадратическое значение напряжения), когда это напряжение подается на зуммер, он издает другой шум при изменении продолжительности включения.
Мы собираемся запрограммировать UNO на подачу сигнала ШИМ разной продолжительности включения для каждой из кнопок. Итак, у нас есть тон-генератор, который генерирует разные звуки при каждом нажатии кнопки.
Необходимые компоненты
Аппаратное обеспечение: Arduino Uno, блок питания (5 В), конденсатор 1000 мкФ, конденсатор 100 нФ, зуммер, кнопки (8 шт.).
Программное обеспечение: AURDINO nightly или Atmel studio 6.2
Принципиальная схема и объяснение работы
Схема тонального генератора показана на схеме ниже.
Чтобы отфильтровать шум от напряжения питания, на клеммах помещают конденсаторы, как показано на схеме.
ШИМ Arduino Uno может быть реализован на любом из выводов, обозначенных на плате как «~». В UNO шесть каналов ШИМ. Однако мы не можем использовать контакты PWM, установленные поверх PINS 0-7, поскольку PINS предпочтительнее для интерфейса кнопок.
Есть причина для выбора PINS 0-7 в качестве входов, потому что PINS 0-7 представляют PORTD микроконтроллера. Таким образом, в последнем случае мы можем взять полный БАЙТ PORTD.
Теперь, чтобы получить ШИМ с другим коэффициентом заполнения, мы будем использовать следующую команду.
analogWrite (9, ЗНАЧЕНИЕ); |
Из вышеуказанного условия мы можем напрямую получить сигнал ШИМ на соответствующем выводе. Первый параметр в скобках предназначен для выбора номера вывода сигнала ШИМ. Второй параметр предназначен для записи коэффициента заполнения.
Значение PWM Arduino Uno может быть изменено от 0 до 255. При минимальном значении «0» на максимальное значение «255». При 255 в качестве коэффициента заполнения мы получим 5V на PIN9. Если коэффициент заполнения задан как 125, мы получим 2,5 В на PIN9. Мы собираемся разделить коэффициент заполнения от 0 до 250 между 8 кнопками, подключенными к PORTD UNO. Здесь я выбираю 25 шагов для каждой кнопки, но это ваш выбор.
При этом у нас будет ШИМ-сигнал, коэффициент заполнения которого изменяется с каждой кнопкой. Поскольку это сигнал зуммера, у нас есть тон-генератор. Работа этого тонального генератора на базе Arduino объясняется шаг за шагом в приведенном ниже коде C.