- Vaadittu laitteisto:
- Arduinon Tone () -toiminnon ymmärtäminen :
- Pitches.h header-tiedosto:
- Soittimien soittaminen Arduinolle:
- Kaavio ja laitteisto:
- Arduino-ohjelman selitys:
- Tämän Melody Player Arduino -piirin toiminta:
Arduino on erinomainen tapa yksinkertaistaa ja nopeuttaa mikrokontrolleriprojektejasi sen kehittäjäyhteisön ansiosta, jotka ovat saaneet melkein kaiken näyttämään yksinkertaiselta. Täällä on paljon Arduino-projekteja, joita voit kokeilla ja pitää hauskaa. Jotkut projektiisi saattavat tarvita joitain äänitoimintoja ilmoittaakseen jostakin tai vain saadakseen vaikutelman katsojiin. Entä jos sanoisin, että melkein kaikki pianolla soitettavat teemakappaleet voidaan jäljitellä Arduino-laitteellasi yksinkertaisen ohjelman ja halvan Piezo-kaiuttimen avulla?
Tässä opetusohjelmassa opit, kuinka helppoa ja helppoa on soittaa melodiaa Piezo-summerilla tai kaiuttimella Arduino tone () -toiminnon avulla. Tämän opetusohjelman lopussa voit soittaa joitain kuuluisia sävyjä Karibian merirosvot, Crazy Frog, Super Mario ja Titanic. Opit myös soittamaan mitä tahansa pianomusiikkia Arduinon kanssa. Tarkista video lopussa.
Vaadittu laitteisto:
- Arduino (mikä tahansa versio - tässä käytetään UNO: ta)
- Pietsokaiutin / summeri tai mikä tahansa muu 8ohmin kaiutin.
- Leipälauta
- Johtojen liittäminen
- Painikkeet
- 1k vastus (valinnainen)
Arduinon Tone () -toiminnon ymmärtäminen:
Ennen kuin voimme ymmärtää, miten ääni () toimii, meidän pitäisi tietää, miten Piezo-summeri toimii. Olemme voineet oppia Piezo-kiteistä koulussa, se ei ole muuta kuin kide, joka muuntaa mekaaniset värähtelyt sähköksi tai päinvastoin. Tässä käytetään muuttuvaa virtaa (taajuutta), jolle kide värisee ja tuottaa äänen. Siksi, jotta Piezo-summeri saadaan aikaan melua, meidän on saatava Piezo-sähkökide värisemään, melun äänenvoimakkuus ja sävy riippuvat siitä, kuinka nopeasti kristalli värisee. Siksi ääntä ja äänenvoimakkuutta voidaan säätää vaihtelemalla virran taajuutta.
Okei, niin miten saamme vaihtelevan taajuuden Arduinolta ? Tässä tulee ääni () -toiminto. Sävy () voi tuottaa tietyn taajuuden tietylle tappi. Ajan kesto voidaan myös mainita tarvittaessa. Äänen () syntaksia on
Syntaksiääni (nasta, taajuus) sävy (tappi, taajuus, kesto) Parametrit nasta: tappi, jolle äänitaajuus luodaan: äänen taajuus herttinä - allekirjoittamaton int kesto: äänen kesto millisekunteina (valinnainen) - allekirjoittamaton pitkä
Nastan arvot voivat olla mitä tahansa digitaalista nastaa. Olen käyttänyt tappi numero 8 täällä. Generoitava taajuus riippuu ajastimen koosta Arduino-kortillasi. UNO: n ja useimpien muiden yleisten piirilevyjen tuottama vähimmäistaajuus on 31 Hz ja suurin tuotettava taajuus on 65535 Hz. Kuitenkin me ihmiset kuulemme vain taajuuksia välillä 2000Hz - 5000 Hz.
Pitches.h header-tiedosto:
Nyt tiedämme kuinka tuottaa melua arduino tone () -toiminnolla . Mutta mistä tiedämme, millainen ääni syntyy kullekin taajuudelle?
Arduino on antanut meille nuotintaulukon, joka vertaa jokaista taajuutta tiettyyn nuotintyyppiin. Tämän muistiinpanotaulukon kirjoitti alun perin Brett Hagman, jonka työhön tone () -komento perustui. Käytämme tätä nuotitaulukkoa toistamaan teemojamme. Jos tiedät nuotteja, sinun pitäisi pystyä ymmärtämään tätä taulukkoa, muille kuin minä, nämä ovat vain yksi koodilohko.
#define NOTE_B0 31 #define NOTE_C1 33 #define NOTE_CS1 35 #define NOTE_D1 37 #define NOTE_DS1 39 #define NOTE_E1 41 #define NOTE_F1 44 #define NOTE_FS1 46 #define NOTE_G1 49 #define NOTE_GS1 52 #define Huomaa_A NOTE_B1 62 #define NOTE_C2 65 #define NOTE_CS2 69 #define NOTE_D2 73 #define NOTE_DS2 78 #define NOTE_E2 82 #define NOTE_F2 87 #define NOTE_FS2 93 #define NOTE_G2 98 #define NOTE_GS2 104 #define NOTE_An212d # #define NOTE_C3 131 #define NOTE_CS3 139 #define NOTE_D3 147 #define NOTE_DS3 156 #define NOTE_E3 165 #define NOTE_F3 175 #define NOTE_FS3 185 #define NOTE_G3 196 #define NOTE_GS3 208 #define NOTE__33 #define #_define NOTE_A3 220 #define NOTE_C4 262 #define NOTE_CS4 277 #define NOTE_D4 294 #define NOTE_DS4 311 #define NOTE_E4 330 #define NOTE_F4 349#define NOTE_FS4 370 #define NOTE_G4 392 #define NOTE_GS4 415 #define NOTE_A4 440 #define NOTE_AS4 466 #define NOTE_B4 494 #define NOTE_C5 523 #define NOTE_CS5 554 #define NOTE_D5 587 #define NOTE5_ #define NOTE_D5 NOTE_FS5 740 #define NOTE_G5 784 #define NOTE_GS5 831 #define NOTE_A5 880 #define NOTE_AS5 932 #define NOTE_B5 988 #define NOTE_C6 1047 #define NOTE_CS6 1109 #define NOTE_D6 1175 #define NOTE_define NOTE_DS6 12F # #define NOTE_G6 1568 #define NOTE_GS6 1661 #define NOTE_A6 1760 #define NOTE_AS6 1865 #define NOTE_B6 1976 #define NOTE_C7 2093 #define NOTE_CS7 2217 #define NOTE_D7 2349 #define NOTE_DS7 2489 #define NOTE_Define #define Note_Define #define NOTE_Define NOTE_G7 3136 #define NOTE_GS7 3322 #define NOTE_A7 3520 #define NOTE_AS73729 #define NOTE_B7 3951 #define NOTE_C8 4186 #define NOTE_CS8 4435 #define NOTE_D8 4699 #define NOTE_DS8 4978
Yllä oleva koodi on annettu pikes.h-otsikkotiedostossa tässä zip-tiedostossa , sinun tarvitsee vain ladata ja sisällyttää tämä tiedosto Arduino- koodiimme tämän opetusohjelman lopussa tai käyttää zip-tiedostossa annettua koodia.
Soittimien soittaminen Arduinolle:
Soittaaksemme kunnollisen melodian Arduinolla meidän pitäisi tietää, mitä nämä melodiat muodostavat. Teeman pelaamiseen vaaditaan kolme päätekijää
- Huomautusarvo
- Huomautus Kesto
- Tempo
Meillä on pitches.h- otsikkotiedosto minkä tahansa nuotin arvon toistamiseksi, nyt meidän pitäisi selvittää sen erityinen nuotin kesto sen toistamiseksi. Tempo ei ole muuta kuin kuinka nopeasti melodia tulisi soittaa. Kun tiedät muistiinpanon arvon ja muistiinpanon keston, voit käyttää niitä äänellä () kuten
sävy (pinName, muistiinpanon arvo, muistiinpanon kesto);
Tässä opetusohjelmassa soitetuista äänistä olen antanut sinulle muistiinpanon arvon ja muistiinpanon keston otsikkotiedostossa “themes.h”, jonka avulla voit toistaa niitä projekteissasi. Mutta jos kaivoksessasi on tietty sävy ja haluat pelata sitä projektissasi, lue seuraava… Jätä tämä aihe ohi ja laskeudu seuraavaan.
Minkä tahansa tietyn äänen toistamiseksi sinun on hankittava kyseisen musiikin nuotit ja muunnettava nuotit Arduino-luonnokseksi lukemalla nuotin arvo ja nuotin kesto. Jos olet musiikillinen opiskelija, se olisi pala kakkua sinulle, muuten vietti jonkin aikaa ja rikkoi pääsi kuten minä. Mutta päivän päätteeksi, kun äänesi soi Piezo-summerilla, löydät ponnistuksesi sen arvoista.
Kun sinulla on muistiinpanon arvo ja muistiinpanon kesto, lataa ne ohjelmaan ”themes.h” -otsikkotiedoston sisään alla olevan kuvan mukaisesti
// ############## ** "HE IS A PIRATE" Karibian merirosvojen tunnari… = {NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, Note_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE4 NOTE_A3, NOTE_C4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_E4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_G4, NOTE_E4, NOTE_E4, NOTE_D4, NOTE_C4, NOTE_C4, NOTE_D4, 0, NOTE_A3, NOTE_C4, NOTE4, NOTE4, Note4, NOTE_C4, NOTE_C4, NOTE_C4, NOTE_C4, NOTE_D4, NOTE_C4, NOTE_D4, 0, 0, NOTE_A3, NOTE_C4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_F4, NOTE_G4, NOTE_G4, NOTE_G4, NOTE_A4, NOTE_A4, NOTE_A4, NOTE_A4, NOTE_A4, NOTE_A4, NOTE_A4, NOTE_A4, NOTE_A4, NOTE_A4, NOTE_A4, NOTE_A4, NOTE_A4, NOTE4, NOTE4 0, NOTE_D4, NOTE_E3, NOTE_F4, NOTE_F4, NOTE_G4, NOTE_A4, NOTE_D4, 0, NOTE_D4, NOTE_F4,NOTE_E4, NOTE_E4, NOTE_F4, NOTE_D4}; int Pirates_duration = {4,8,4,8,4,8,8,8,8,4,8,4,8,4,8,4,8,8,8,4,8,4,8, 4, 8,8,8,8,4,4,8,8,4,4,8,8,4,4,8,8, 8,4,8,8,8,4,4,8,8, 4,4,8,8,4,4,8,4, 4,8,8,8,8,4,4,8,8,4,4,8,8,4,4,8,8, 8,4,8,8,8,4,4,4,8,4,8,8,8,4,4,8,8}; // ########### Hän on merirosvolaulu ############## //
Yllä oleva koodilohko näyttää "Hän on merirosvo" -teeman nuotin arvon ja keston elokuvasta Karibian merirosvot. Voit lisätä teeman samalla tavalla.
Kaavio ja laitteisto:
Tämän Arduino Tone Generator Project -projektin kaavio on esitetty alla olevassa kuvassa:
Yhteys on melko yksinkertainen, meillä on Piezo-kaiutin, joka on kytketty Arduinon napaan 8 ja maahan 1K-vastuksen kautta. Tämä 1k-vastus on virtaa rajoittava vastus, jota käytetään pitämään virta turvallisissa rajoissa. Meillä on myös neljä kytkintä halutun melodian valitsemiseksi. Kytkimen toinen pää on kytketty maahan ja toinen pää vastaavasti tapiin 2, 3, 4 ja 5. Kytkimissä on vetovastukset, jotka ovat sisäisesti käytössä ohjelmiston avulla. Koska piiri on melko yksinkertainen, se voidaan liittää leipätaulun avulla alla olevan kuvan mukaisesti:
Arduino-ohjelman selitys:
Kun olet ymmärtänyt käsitteen, Arduino-ohjelma on melko suoraviivainen. Koko koodi annetaan opetusohjelman lopussa. Jos et ole perehtynyt otsikkotiedostojen lisäämiseen, voit ladata koodin ZIP-tiedostona täältä ja ladata sen suoraan Arduinoon.
Kaksi yllä olevaa ovat ylätunnistetiedostot, jotka on lisättävä. "Pitches.h" käytetään tasaamaan jokainen nuotti tiettyyn taajuuteen ja "themes.h" sisältää kaikkien neljän äänen nuotin arvon ja keston.
#include "pitches.h" #include "themes.h"
Jokaisen äänen toistamiseksi luodaan toiminto tarvittaessa. Tässä, kun toimintoa Play_Pirates () kutsutaan ”Hän on merirosvo” -ääneksi . Tämä toiminto koostuu äänitoiminnosta, joka tuottaa taajuuden pin-numerolla 8. NoTone (8) kutsutaan pysäyttämään musiikki sen toiston jälkeen. Jos haluat soittaa oman äänesi, muuta Pirates_note ja Pirates_duration uusiksi muistiinpanoksi ja kestoarvoiksi, jotka olet tallentanut “themes.h” -arvoon.
void Play_Pirates () {for (int thisNote = 0; thisNote <(sizeof (Pirates_note) / sizeof (int)); thisNote ++) {int noteDuration = 1000 / Pirates_duration; // muuntaa keston aikaviiveeksi (8, Pirates_note, noteDuration); int pauseBetweenNotes = noteDuration * 1,05; // Tässä 1.05 on tempo, lisää, jotta se toistetaan hitaammin noTone (8); }}
Napoja 2, 3, 4 ja 5 käytetään toistettavan äänen valitsemiseen. Nämä nastat pidetään oletusarvoisesti korkeina käyttämällä sisäisiä vetovastuksia käyttämällä yllä olevaa koodiriviä. Kun painiketta painetaan, se vedetään maahan.
pinMode (2, INPUT_PULLUP); pinMode (3, INPUT_PULLUP); pinMode (4, INPUT_PULLUP); pinMode (5, INPUT_PULLUP);
Alla olevaa koodilohkoa käytetään kappaleen toistamiseen, kun painiketta painetaan. Se lukee kunkin painikkeen digitaalisen arvon ja kun se laskee alhaiseksi (nolla), se olettaa, että painiketta painetaan, ja toistaa vastaavan äänen kutsumalla vaaditun toiminnon.
if (digitalRead (2) == 0) {Sarja.println ("Valittu -> 'Hän on merirosvo'"); Play_Pirates (); } if (digitalRead (3) == 0) {Serial.println ("Valittu -> 'Hullu sammakko'"); Play_CrazyFrog (); } if (digitalRead (4) == 0) {Serial.println ("Valittu -> 'Mario UnderWorld'"); Play_MarioUW (); } if (digitalRead (5) == 0) {Serial.println ("Valittu -> 'Hän on merirosvo'"); Play_Pirates (); }
Tämän Melody Player Arduino -piirin toiminta:
Kun koodisi ja laitteistosi ovat valmiit, polta ohjelma yksinkertaisesti Arduinoon ja sinun pitäisi pystyä toistamaan ääni yksinkertaisesti painamalla painikkeita. Jos sinulla on ongelmia, tutustu virheenkorjaukseen sarjamonitorissasi tai ilmoita ongelmasta kommenttiosion avulla, autan mielelläni sinua.
Projektin täydellinen työskentely on esitetty alla olevassa videossa. Toivottavasti pidit projektista ja käytät sitä joissakin projektissasi tai luo projektillesi uuden sävyn. Jos kyllä, voit vapaasti jakaa työsi kommenttiosassa.