У цьому проекті ми розробимо генератор тонів за допомогою Arduino Uno. У нас будуть кнопки, пов’язані з ООН, і кожна з них генерує різну інтенсивність тону. Частота сигналу, що генерується ООН, однакова для кожного внутрішнього органу. Інтенсивність звуку змінюється при кожному натисканні. Це один з найпростіших способів зробити піаніно за допомогою Arduino Uno. Також перевірте цю схему фортепіано.
Тони можна збільшити до 20. Це дає найкращі варіації тонів і набагато плавніші зміни. Інтенсивність тону змінюється ШІМ (модуляція ширини імпульсу). Приклад ШІМ показаний на графіку нижче.
У ШІМ частота сигналу або часовий період сигналу (Тон + Тофф) завжди є постійною. Змінюється лише співвідношення часу УВІМКНЕННЯ та ВИМКНЕННЯ. Наприклад, на другому графіку на малюнку вище, час УВІМКНЕННЯ становить 80%, а час ВИМКНЕННЯ - 20% від повної тривалості.
На третьому графіку час УВІМКНЕННЯ становить 50%, а час ВИМКНЕННЯ - 50% від повної тривалості. Отже, у першому випадку ми маємо коефіцієнт мита 80%, а в другому - коефіцієнт мита 20%.
З цією зміною коефіцієнта завантаження ми маємо зміну в середньоквадратичному значенні (середньоквадратичне значення напруги), коли ця напруга подається на зумер, він видає інший шум, коли відбувається зміна коефіцієнта опору.
Ми збираємося запрограмувати UNO для подачі ШІМ-сигналу з різним коефіцієнтом коефіцієнта завантаження для кожної кнопки. Отже, під рукою є генератор тонів, який генерує різний тон при кожному натисканні кнопки.
Потрібні компоненти
Апаратне забезпечення: Arduino Uno, блок живлення (5 В), конденсатор 1000 мкФ, конденсатор 100 нФ, зумер, кнопки (8 штук).
Програмне забезпечення: AURDINO nightly або Atmel studio 6.2
Принципова схема та робоче пояснення
Схема генератора тону показана на схемі нижче.
Для фільтрації шуму від напруги живлення конденсатори розміщують на клемах, як показано на схемі.
ШІМ Arduino Uno може бути досягнутий на будь-якому з контактів, символізованих як «~» на платі друкованої плати. В ООН є шість каналів ШІМ. Однак ми не можемо використовувати ШІМ-шпильки, встановлені над PINS 0-7, оскільки PINS є кращим для інтерфейсу кнопок.
Існує причина для вибору PINS 0-7 як вхідних даних, оскільки PINS 0-7 представляють ПОРТ мікроконтролера. Отже, в останньому випадку ми можемо взяти повний байт PORTD.
Тепер для отримання іншого ШІМ коефіцієнта використання ми будемо використовувати наступну команду.
analogWrite (9, VALUE); |
З вищевикладеної умови ми можемо безпосередньо отримати сигнал ШІМ на відповідному штифті. Першим параметром у дужках є вибір пін-номера ШІМ-сигналу. Другий параметр - для написання коефіцієнта мита.
Значення ШІМ для Arduino Uno можна змінити від 0 до 255. З “0” якнайнижче до “255” як найвище. З коефіцієнтом мита 255 ми отримаємо 5 В на PIN9. Якщо коефіцієнт мита подано як 125, ми отримаємо 2,5 В на PIN9. Ми збираємось розподілити коефіцієнт мита 0-250 між 8 кнопками, пов'язаними в PORTD UNO. Тут я вибираю по 25 кроків для кожної кнопки, але це на ваш вибір.
При цьому ми матимемо ШІМ-сигнал, коефіцієнт завантаження якого змінюється з кожною кнопкою. Це передається зуммеру, і ми маємо генератор тону. Робота цього генератора тонів на базі Arduino пояснюється покроково в коді наведеному нижче.