V tomto projektu vyvineme generátor tónů pomocí Arduino Uno. Budeme mít tlačítka propojená s UNO a každé z nich generuje různou intenzitu tónu. Frekvence tónu generovaného UNO je stejná u každého interního. Je to intenzita zvuku, která se mění každým stisknutím. Toto je jeden z nejjednodušších způsobů výroby klavíru s Arduino Uno. Zkontrolujte také tento obvod klavíru.
Tóny lze zvýšit až na 20. To poskytuje nejlepší variaci tónů a mnohem plynulejší změny. Intenzita tónu se mění pomocí PWM (Pulse Width Modulation). Příklad PWM je uveden v následujícím grafu.
V PWM je frekvence signálu nebo časové období signálu (Ton + Toff) vždy konstantní. Mění se pouze poměr času ZAPNUTÍ a VYPNUTÍ. Například ve druhém grafu na výše uvedeném obrázku je doba ZAPNUTÍ 80% a doba VYPNUTÍ 20% celé doby trvání.
Ve třetím grafu je čas ZAPNUTÍ 50% a čas ZAPNUTÍ 50% z celkové doby trvání. Takže v prvním případě máme celní poměr 80% a ve druhém případě máme celní poměr 20%.
S touto změnou pracovního poměru máme změnu ve Vrms (Root Mean Square value of Voltage), když je toto napětí dáno bzučáku, vydává jiný šum, kdykoli dojde ke změně pracovního poměru.
Budeme programovat UNO tak, aby poskytovalo signál PWM s různým poměrem zátěže pro každé z tlačítek. Takže máme po ruce generátor tónů, který generuje jiný tón při každém stisknutí tlačítka.
Požadované komponenty
Hardware: Arduino Uno, napájecí zdroj (5 V), kondenzátor 1000 uF, kondenzátor 100 nF, bzučák, tlačítka (8 kusů).
Software: AURDINO nightly nebo Atmel studio 6.2
Schéma zapojení a pracovní vysvětlení
Obvod pro generátor tónů je uveden v následujícím diagramu.
K odfiltrování šumu z napájecího napětí jsou kondenzátory umístěny na svorkách, jak je znázorněno na obrázku.
PWM Arduino Uno lze dosáhnout na kterémkoli z pinů symbolizovaných jako „~“ na desce plošných spojů. V UNO je šest kanálů PWM. Nemůžeme však použít PWM piny vytvořené přes PINS 0-7, protože PINS jsou preferovány pro rozhraní tlačítek.
Existuje důvod pro výběr PINS 0-7 jako vstupů, protože PINS 0-7 představují PORTD mikrokontroléru. V druhém případě tedy můžeme vzít celý BYTE z PORTD.
Nyní pro získání odlišného pracovního poměru PWM použijeme následující příkaz.
analogWrite (9, VALUE); |
Z výše uvedené podmínky můžeme přímo získat signál PWM na odpovídajícím kolíku. První parametr v závorkách slouží k výběru počtu pinů signálu PWM. Druhý parametr je pro poměr zápisu.
Hodnotu PWM Arduino Uno lze změnit od 0 do 255. S „0“ jako nejnižší na „255“ jako nejvyšší. S poměrem cla 255 dostaneme 5V na PIN9. Pokud je poměr cla uveden jako 125, dostaneme 2,5V na PIN9. Chystáme se rozdělit pracovní poměr 0-250 mezi 8 tlačítek propojených na PORTD UNO. Zde zvolím 25 přírůstků pro každé tlačítko, ale je to podle vašeho výběru.
S tím budeme mít signál PWM, jehož poměr výkonu se mění s každým tlačítkem. To je dáno bzučákem, máme generátor tónů. Práce tohoto generátoru tónů založeného na Arduinu je vysvětlena krok za krokem v C kódu uvedeném níže.