I dette projekt vil vi udvikle en tonegenerator ved hjælp af Arduino Uno. Vi har knapper, der er grænseflade til UNO, og hver enkelt af dem genererer forskellig toneintensitet. Frekvensen af tone genereret af UNO er den samme ved hver intern. Det er lydens intensitet, der ændres for hvert tryk. Dette er den af den nemmeste måde at lave et klaver på med Arduino Uno. Tjek også dette klaver kredsløb.
Toner kan øges op til 20. Dette giver den bedste tone variation og meget glattere ændringer. Intensiteten af tonen ændres af PWM (Pulse Width Modulation). Et eksempel på PWM er vist i nedenstående graf.
I PWM er signalfrekvensen eller signalperioden (Ton + Toff) altid konstant. Kun forholdet mellem TÆND og TÆND tid ændres. For eksempel i den anden graf i ovenstående figur er TÆNDING-tiden 80%, og SLUK-tiden er 20% af den samlede varighed.
I den tredje graf er TÆNDING-tiden 50% og TÆNDING-tiden er 50% af den samlede varighed. Så i det første tilfælde har vi et toldforhold på 80%, og i det andet tilfælde har vi et toldforhold på 20%.
Med denne ændring i driftsforhold har vi en ændring i Vrms (Root Mean Square-værdi af spænding), når denne spænding gives til summeren, laver den en anden lyd, når der er en ændring i driftsforholdet.
Vi vil programmere UNO til at give et PWM-signal med forskellig driftsforhold for hver af knapperne. Så vi har en tonegenerator ved hånden, der genererer en anden tone med hvert tryk på en knap.
Komponenter, der kræves
Hardware: Arduino Uno, Strømforsyning (5v), 1000 uF kondensator, 100 nF kondensator, Summer, knapper (8 stykker).
Software: AURDINO nightly eller Atmel studio 6.2
Kredsløbsdiagram og arbejdsforklaring
Kredsløbet for tonegenerator er vist i nedenstående diagram.
For at filtrere støj fra forsyningsspænding placeres kondensatorer på tværs af terminaler som vist i diagrammet.
PWM fra Arduino Uno kan opnås ved en hvilken som helst af benene, der er symboliseret som “~” på printkortet. Der er seks PWM-kanaler i UNO. Vi kan dog ikke bruge PWM-ben, der er oprettet over PINS 0-7, da PINS foretrækkes til knapper.
Der er en grund til at vælge PINS 0-7 som input, fordi PINS 0-7 repræsenterer PORTD for mikrokontroller. Så i sidstnævnte tilfælde kan vi tage hele BYTE af PORTD.
Nu for at få et andet pligtforhold PWM skal vi bruge følgende kommando.
analogWrite (9, VALUE); |
Fra ovenstående tilstand kan vi direkte få PWM-signalet ved den tilsvarende pin. Den første parameter i parentes er at vælge pin-nummeret på PWM-signalet. Anden parameter er til at skrive toldforhold.
PWM-værdien på Arduino Uno kan ændres fra 0 til 255. Med "0" som lavest til "255" som højest. Med 255 som duty ratio får vi 5V ved PIN9. Hvis toldforholdet er angivet som 125, får vi 2,5 V ved PIN9. Vi vil opdele toldforholdet på 0-250 mellem 8 knapper, der er grænseflader ved PORTD i UNO. Her vælger jeg 25 trin for hver knap, men det er efter eget valg.
Med det har vi et PWM-signal, hvis arbejdsforhold ændres med hver knap. Dette bliver givet til summer, vi har tonegenerator. Arbejdet med denne Arduino-baserede tonegenerator forklares trin for trin i C-koden angivet nedenfor.