Ebben a projektben kifejlesztünk egy hanggenerátort az Arduino Uno segítségével. Gombjaink kapcsolódnak az UNO-hoz, és mindegyikük különböző intenzitású hangot generál. Az UNO által generált hang frekvenciája minden belső térben azonos. Ez a hang intenzitása változik minden egyes megnyomáskor. Ez az egyik legegyszerűbb módszer zongora készítésére az Arduino Uno-val. Ellenőrizze ezt a Piano áramkört is.
A hangok 20-ig növelhetők. Ez adja a legjobb hangváltozást és sokkal simább változásokat. A hang intenzitását a PWM (Pulse Width Modulation) változtatja meg. A PWM példája az alábbi grafikonon látható.
PWM esetén a jel frekvenciája vagy a jel időtartama (Ton + Toff) mindig állandó. Csak a BEKAPCSOLÁS és KIKAPCSOLÁS időaránya változik. Például a fenti ábra második grafikonján a BEKAPCSOLÁSI idő 80%, a KIKAPCSOLÁSI idő pedig a teljes időtartam 20% -a.
A harmadik grafikonon a BEKAPCSOLÁSI idő 50%, a KIKAPCSOLÁSI idő pedig a teljes időtartam 50% -a. Tehát az első esetben a vámarányunk 80%, a második esetben pedig a 20% -os.
Ezzel a terhelési arányváltozással megváltozik a Vrms (a feszültség középértékének négyzetértéke), amikor ezt a feszültséget adják a hangjelzőnek, akkor más zajt ad ki, ha változik a terhelési arány.
Programozni fogjuk az UNO-t, hogy az egyes gombokhoz különböző teljesítményarányú PWM jelet adjon. Tehát kéznél van egy hanggenerátor, amely minden gombnyomással más hangot generál.
Szükséges alkatrészek
Hardver: Arduino Uno, Tápegység (5v), 1000 uF kondenzátor, 100 nF kondenzátor, Zümmögő, gombok (8 db).
Szoftver: AURDINO nightly vagy Atmel studio 6.2
Áramköri ábra és működési magyarázat
A hanggenerátor áramköre az alábbi ábrán látható.
A tápfeszültség kondenzátoraiból származó zaj kiszűrésére a kapocsra helyezzük, ahogy azt az ábra mutatja.
Az Arduino Uno PWM-je a NYÁK-kártyán „~” szimbólumként jelölt csapok bármelyikénél elérhető. Az UNO-ban hat PWM csatorna található. A 0-7 PINS fölött létrehozott PWM csapokat azonban nem használhatjuk, mivel a gombok kezelőfelületénél a PINS-t részesítik előnyben.
A 0-7 PINS bemenetként való kiválasztásának oka van, mert a 0-7 PINS a mikrovezérlő PORTD-ját képviseli. Tehát az utóbbi esetben a PORTD teljes BYTE-jét vehetjük fel.
Most, hogy más PWM-es arányt kapjunk, a következő parancsot fogjuk használni.
analogWrite (9, VALUE); |
A fenti feltételből közvetlenül megkapjuk a PWM jelet a megfelelő csapnál. A zárójelben található első paraméter a PWM jel pin számának kiválasztására szolgál. A második paraméter az írási terhelési arányra vonatkozik.
Az Arduino Uno PWM értéke 0-ról 255-re változtatható. A „0” legalacsonyabb a „255” a legmagasabb értékre. 255-ös terhelési aránnyal 5 V-ot kapunk a PIN9-nél. Ha az illetékarány 125-ként van megadva, akkor a PIN9-nél 2,5 V-ot kapunk. Megosztjuk a 0-250-es terhelési arányt az UNO PORTD-nál összekapcsolt 8 gomb között. Itt minden gombhoz 25 lépést választok, de ez az Ön választása.
Ezzel megkapjuk a PWM jelet, amelynek terhelési aránya minden gombnál változik. Ezt a hangjelzőnek adva van hanggenerátorunk. Ennek az Arduino alapú hanggenerátornak a működését lépésről lépésre ismertetjük az alább megadott C kódban.