В този проект ще разработим генератор на тонове, използвайки Arduino Uno. Ще имаме бутони, свързани с UNO и всеки от тях генерира различна интензивност на тона. Честотата на тона, генериран от ООН, е еднаква за всеки вътрешен. Интензивността на звука се променя с всяко натискане. Това е един от най-лесните начини да направите пиано с Arduino Uno. Също така проверете тази пиано схема.
Тоновете могат да бъдат увеличени до 20. Това дава най-добрата вариация на тона и много по-плавни промени. Интензивността на тона се променя чрез PWM (Pulse Width Modulation). Пример за ШИМ е показан на графиката по-долу.
При ШИМ честотата на сигнала или времевият период на сигнала (Ton + Toff) е винаги постоянна. Променя се само съотношението между времето за включване и изключване. Например във втората графика на горната фигура, времето за включване е 80%, а времето за изключване е 20% от пълната продължителност.
В третата графика времето за включване е 50%, а времето за изключване е 50% от пълната продължителност. Така че в първия случай имаме коефициент на мито 80%, а във втория случай има коефициент на мито 20%.
С тази промяна в коефициента на запълване имаме промяна в Vrms (средноквадратична стойност на напрежението), когато това напрежение се подава на зумера, той издава различен шум, когато има промяна в коефициента на запълване.
Ще програмираме ООН да предоставя ШИМ сигнал с различно съотношение на мито за всеки от бутоните. Така че имаме под ръка генератор на тонове, който генерира различен тон при всяко натискане на бутона.
Необходими компоненти
Хардуер: Arduino Uno, захранване (5v), кондензатор 1000 uF, кондензатор 100 nF, зумер, бутони (8 броя).
Софтуер: AURDINO вечер или Atmel studio 6.2
Електрическа схема и работно обяснение
Схемата за генератор на тонове е показана на диаграмата по-долу.
За филтриране на шума от захранващото напрежение кондензаторите се поставят през клемите, както е показано на диаграмата.
PWM на Arduino Uno може да се постигне на всеки от щифтовете, символизирани като „~“ на платката на печатната платка. В UNO има шест ШИМ канала. Не можем обаче да използваме PWM щифтове, установени над PINS 0-7, тъй като PINS са предпочитани за интерфейса на бутоните.
Има причина да изберете PINS 0-7 като входове, тъй като PINS 0-7 представляват PORTD на микроконтролера. Така че в последния случай можем да вземем пълния байт на PORTD.
Сега за получаване на различно ШИМ с коефициент на мито ще използваме следната команда.
analogWrite (9, VALUE); |
От горното условие можем директно да получим ШИМ сигнала на съответния щифт. Първият параметър в скоби е за избор на пинов номер на ШИМ сигнал. Вторият параметър е за писане на коефициент на мито.
Стойността на PWM на Arduino Uno може да бъде променена от 0 на 255. С „0“ като най-ниска до „255“ като най-висока. С 255 като коефициент на мито ще получим 5V при PIN9. Ако коефициентът на мито е даден като 125, ще получим 2.5V при PIN9. Ще разделим коефициента на мито 0-250 между 8 бутона, свързани с PORTD на UNO. Тук избирам по 25 стъпки за всеки бутон, но това е по ваш избор.
С това ще имаме ШИМ сигнал, чийто коефициент на запълване се променя с всеки бутон. Това се дава на зумера, имаме генератор на тонове. Работата на този базиран на Arduino генератор на тонове е обяснена стъпка по стъпка в C кода, даден по-долу.