Sisällysluettelo:
- Tarvikkeet
- Vaihe 1: Vokaalipelin kehittäminen Arduinon kanssa
- Vaihe 2:
- Vaihe 3:
- Vaihe 4: Hankeidea
- Vaihe 5:
- Vaihe 6: Rakenna pelin ohjelmointilogiikka
- Vaihe 7:
- Vaihe 8:
- Vaihe 9: Void Setup () -toiminto
- Vaihe 10: Päätoiminnon tyhjä silmukka ()
- Vaihe 11:
- Vaihe 12: Johtopäätös
- Vaihe 13: Kuittaus
Video: Vokaalipeli Arduinolla ja YX5300 MP3 -moduulilla Catalex: 13 vaihetta
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 09:00
Pystytkö lukemaan tämän kysymyksen? Tuo on outo! Kysyin tämän kysymyksen tarkoituksella. Jos voit lukea tämän tekstin, se johtuu siitä, että tunnet koko aakkoston ja tietysti opit kaikista vokaaleista.
Vokaalit ovat läsnä kaikissa sanoissa. On mahdotonta paeta heistä jokaista. Anna minun esittää sinulle kysymys. Oliko lapsuutesi oppiminen hauskaa ja vaati teknisiä resursseja?
Olen varma, että oppimisresursseja oli vähän ja käytit perinteisiä menetelmiä vokaalien ja aakkosten oppimiseen.
Onko loppujen lopuksi mahdollista käyttää joitain teknisiä resursseja vokaalien oppimiseen?
Tässä artikkelissa opetan sinulle, kuinka opettaa oppilaillesi ja lapsillesi vokaaleja pelin kautta.
Opetan sinulle, kuinka luoda järjestelmä äänellä, jossa lapsesi/oppilaasi kuulee kirjaimen äänen ja painaa painiketta osoittaakseen oikean kirjaimen.
Näin he oppivat pelaamisen aikana ja ovat aina motivoituneita opiskelemaan.
Nyt aion näyttää sinulle vaiheittaisen prosessin, jonka avulla voit luoda oman pelisi ja opettaa vokaalit lapsille.
Tarvikkeet
JLCPCB -piirilevy
Arduino Uno
Painokytkin
10kR vastus
Uros Otsikko 2, 54 mm 1x7
Vaihe 1: Vokaalipelin kehittäminen Arduinon kanssa
Pelin sydän on vokaalien JLCPCB -piirilevy. Voit käyttää tätä linkkiä ja ladata projektitiedostot. Siinä on 5 painiketta. Käytät jokaista painiketta vokaalin esittämiseen ja yhdistämisen Arduinoosi.
Piirilevy on esitetty kuvassa 1.
Vaihe 2:
Tämän PCB -projektin avulla voit yhdistää sen Arduinoon ja luoda pelisi. Seuraavaksi tarjoan sinulle sähköisen kaavion, jonka avulla voit koota tai rakentaa projektin protoboardillesi.
Vaihe 3:
Tämän kaavion perusteella asetamme elektronisen levyn asettelun. Se näkyy kuvassa 2 ja voit ladata tiedostot ja tehdä projektisi.
Valitse 5 nastaa Arduinosta ja yhdistä taululla olevat puserot Arduinoon. Tai muuten voit koota seuraavan sähköisen kaavion.
Vaihe 4: Hankeidea
Opetan sinulle MP3 -äänijärjestelmän kokoamisen Arduinon kanssa. Tämä järjestelmä vastaa kirjeen puhuvan äänen toistamisesta. Jokaisen kirjaimen ääni piirretään käyttämällä arvoa 1-5, jossa 1 on A ja 5 edustaa U.
Kun lapsi kuulee äänen, hänen on siis tarkasteltava näppäimistöä, tunnistettava vokaalin oikeinkirjoitus ja painettava oikeaa näppäintä.
Jos se epäonnistuu, järjestelmä vilkuttaa punaista LEDiä 3 kertaa. Muussa tapauksessa järjestelmä aktivoi summerin 5 sekunniksi ja piirtää uuden vokaalin.
Tätä varten sinun on koottava seuraava piiri.
Tässä piirissä yhdistät MP3 -moduulin ja Arduinon vokaalilevyn. Bluetooth -moduulia käytettiin edustamaan Catalex MP3 -moduulia.
Arduino vastaa 5 numeron lajittelusta ja lähettää sitten komennon aktivoida piirretty vokaali
Vaihe 5:
Sen jälkeen odotamme, kunnes lapsi kuulee ja painaa painiketta, kuten yllä olevassa kuvassa näkyy.
Jokainen yllä oleva painike edustaa aakkosten vokaalia. Seuraavaksi näytän sinulle, kuinka rakennat ohjelmointilogiikan tälle projektille.
Vaihe 6: Rakenna pelin ohjelmointilogiikka
Vokaalipelijärjestelmä perustuu YX5300 -moduulin toimintaan. Tällä moduulilla on joitain toimintoja, mutta keskitymme pelin toimintarakenteen esittelyyn YX5300 -moduulin päätoimintojen kautta.
Alla annan sinulle koko projektin ohjelmointilogiikan.
Vaihe 7:
Seuraavassa selitän askel askeleelta tämän hauskan pelin logiikan rakentamiseksi lapsille.
#sisältää
#define ARDUINO_RX 5 // pitäisi muodostaa yhteys sarja -MP3 -soitinmoduulin TX: ään staattinen int8_t Lähetä_buf [8] = {0}; // Puskuri lähetyskomennoille. // Parempi paikallisesti staattinen uint8_t ansbuf [10] = {0}; // Puskuri vastauksille. // Parempi Paikallisesti Jono mp3Answer; // Vastaus MP3: sta. Merkkijonovastaus (mitätön); Jono sbyte2hex (uint8_t b); / ************ Komento tavu **************************/ #define CMD_NEXT_SONG 0X01 // Toista seuraava laulu. #define CMD_PREV_SONG 0X02 // Toista edellinen kappale. #define CMD_PLAY_W_INDEX 0X03 #define CMD_VOLUME_UP 0X04 #define CMD_VOLUME_DOWN 0X05 #define CMD_SET_VOLUME 0X06 #define CMD_SNG_CYCL_PLAY 0X08 // Single Cycle Play. #define CMD_SEL_DEV 0X09 #define CMD_SLEEP_MODE 0X0A #define CMD_WAKE_UP 0X0B #define CMD_RESET 0X0C #define CMD_PLAY 0X0D #define CMD_PAUSE 0X0E #define CMD_PLAY_FOLD0FILE_FI #define CMD_FOLDER_CYCLE 0X17 #define CMD_SHUFFLE_PLAY 0x18 // #define CMD_SET_SNGL_CYCL 0X19 // Aseta yksi jakso. #define CMD_SET_DAC 0x1a #define DAC_ON 0x00 #define DAC_OFF 0x01 #define CMD_PLAY_W_VOL 0X22 #define CMD_PLAYING_N 0x4C #define CMD_QUERY_STATUS 0x42 #define CMD_QUERY_VOLUME 0x43 #define CMD_QUERY_FLDR_TRACKS 0x4e #define CMD_QUERY_TOT_TRACKS 0x48 #define CMD_QUERY_FLDR_COUNT 0x4f / ********* *** Opitons *************************** / #define DEV_TF 0X02 / ************** ************************************************** *****/ int numero; tavu estado; tavun summeri = 2; tavutappi = 0; tavu Lajittelunumero = 0; bool -painike = 0; void setup () {Serial.begin (9600); sp. alku (9600); viive (500); for (pin = 8; pin 13) {pin = 8; } Serial.println ("Varrendo…"); Serial.println (nasta); // viive (1000); } while (painike! = 1); Serial.println ("Saiu…"); if (button == 1 && (pin-1)! = SortNumber) {sendCommand (0x03, 0, 6); viive (3000); } if (painike == 1 && (pin-1) == Lajittelunumero) {sendCommand (0x03, 0, 7); viive (3000); } // Tarkista vastaus. jos (mp3.available ()) {Serial.println (decodeMP3Answer ()); } viive (100); //Serial.println ("Tocando musica… "); } /************************************************ ******************************** / /*Toiminto sendMP3Command: etsi c -komento ja lähetä se MP3 -tiedostoon * / /*Parametri: c. MP3 -komennon koodi, "h" avuksi. *// *Return: void */ void sendMP3Command (char c) {switch (c) {case '?': Case 'h': Serial.println ("HELP"); Serial.println ("p = Toista"); Serial.println ("P = Tauko"); Serial.println ("> = Seuraava"); Serial.println ("': Serial.println (" Seuraava "); sendCommand (CMD_NEXT_SONG); sendCommand (CMD_PLAYING_N); // pyydä toistettavan tiedoston määrää; kotelo' Muistikortti asetettu. '; Break; case 0x3D: decodedMP3Answer + = " -> Valmis toistonumero" + Merkkijono (ansbuf [6], DEC); // sendCommand (CMD_NEXT_SONG); // sendCommand (CMD_PLAYING_N); // kysy toistettavan tiedoston määrää; tapaus 0x40: decodedMP3Answer += " -> Error"; break; case 0x41: decodedMP3Answer += " -> Data vastaanotettu oikein."; break; case 0x42: decodedMP3Answer += " -> Toistotila:" +String (ansbuf [6], DEC); break; case 0x48: decodedMP3Answer + = " -> Tiedostojen lukumäärä:" + String (ansbuf [6], DEC); break; case 0x4C: decodedMP3Answer + = " -> Toistetaan:" + String (ansbuf [6], DEC); tauko; tapaus 0x4E: dekoodattuMP3Answer + = " -> Kansion tiedostojen määrä:" + Jono (ansbuf [6], DEC); tauko; tapaus 0x4F: decodedMP3Answer + = " -> Kansioiden määrä:" + String (ansbuf [6], DEC); break;} return decodedMP3Answer;} /*********************************** ************ ********************************* / /*Toiminto: Lähetä komento MP3: lle* / /*Parametri: tavu komento *// *Parametri: tavu dat1 -parametri komennolle *// *Parametri: tavu dat2 -parametri komennolle */ void sendCommand (tavukomento) {sendCommand (komento, 0, 0); } void sendCommand (tavukomento, tavu dat1, tavu dat2) {delay (20); Lähetä_buf [0] = 0x7E; // Lähetä_buf [1] = 0xFF; // Lähetä_buf [2] = 0x06; // Len Send_buf [3] = komento; // Lähetä_buf [4] = 0x01; // 0x00 EI, 0x01 palaute Send_buf [5] = dat1; // datah Send_buf [6] = dat2; // datal Send_buf [7] = 0xEF; // Serial.print ("Lähetetään:"); for (uint8_t i = 0; i <8; i ++) {mp3.write (Send_buf ); Serial.print (sbyte2hex (Lähetä_buf )); } Sarja.println (); } /*********************************************** ******************************* / /*Toiminto: sbyte2hex. Palauttaa tavutiedot HEX -muodossa. * / /*Parametri:- uint8_t b. Tavu muuntaa HEX. *// *Paluu: Merkkijono */ Jono sbyte2hex (uint8_t b) {Merkkijonokanta; shex = "0X"; jos (b <16) kuusiokanta += "0"; hex += Jono (b, HEX); kuusio += ""; paluu kuori; } /************************************************ ******************************* / /*Tehtävä: shex2int. Palauttaa int -arvon HEX -merkkijonosta. * / /*Parametri: s. char *s muuntaa HEX. * / /*Parametri: n. char *s: n pituus. *// *Paluu: int */ int shex2int (char *s, int n) {int r = 0; (int i = 0; i = '0' && s = 'A' && s <= 'F') {r *= 16; r + = (s - 'A') + 10; }} paluu r; } /*********************************************** ******************************* / /*Tehtävä: vastaus. Palauttaa merkkijonovastauksen UART -moduulista. * / /*Parametri:- uint8_t b. mitätön. * / /*Paluu: Jono. Jos vastaus on hyvin muotoiltu, vastaa. */ Merkkijonovastaus (mitätön) {uint8_t i = 0; Merkkijono mp3answer = ""; // Hanki vain 10 tavua, kun (mp3.available () && (i <10)) {uint8_t b = mp3.read (); ansbuf = b; i ++; mp3 vastaus += sbyte2hex (b); } // jos vastausmuoto on oikea. if ((ansbuf [0] == 0x7E) && (ansbuf [9] == 0xEF)) {return mp3answer; } return "???:" + mp3answer; }
Määritämme ensin kaikki YX5300 -moduulin ohjelmamuuttujat ja käyttörekisteriosoitteet.
#sisältää
#define ARDUINO_RX 5 // pitäisi muodostaa yhteys sarja -MP3 -soitinmoduulin TX: ään staattinen int8_t Lähetä_buf [8] = {0}; // Puskuri lähetyskomennoille. // Parempi paikallisesti staattinen uint8_t ansbuf [10] = {0}; // Puskuri vastauksille. // Parempi Paikallisesti Jono mp3Answer; // Vastaus MP3: sta. Merkkijonovastaus (mitätön); Jono sbyte2hex (uint8_t b); / ************ Komento tavu **************************/ #define CMD_NEXT_SONG 0X01 // Toista seuraava laulu. #define CMD_PREV_SONG 0X02 // Toista edellinen kappale. #define CMD_PLAY_W_INDEX 0X03 #define CMD_VOLUME_UP 0X04 #define CMD_VOLUME_DOWN 0X05 #define CMD_SET_VOLUME 0X06 #define CMD_SNG_CYCL_PLAY 0X08 // Single Cycle Play. #define CMD_SEL_DEV 0X09 #define CMD_SLEEP_MODE 0X0A #define CMD_WAKE_UP 0X0B #define CMD_RESET 0X0C #define CMD_PLAY 0X0D #define CMD_PAUSE 0X0E #define CMD_PLAY_FOLD0_FILE_FIILE #define CMD_FOLDER_CYCLE 0X17 #define CMD_SHUFFLE_PLAY 0x18 // #define CMD_SET_SNGL_CYCL 0X19 // Aseta yksi jakso. #define CMD_SET_DAC 0x1a #define DAC_ON 0x00 #define DAC_OFF 0x01 #define CMD_PLAY_W_VOL 0X22 #define CMD_PLAYING_N 0x4C #define CMD_QUERY_STATUS 0x42 #define CMD_QUERY_VOLUME 0x43 #define CMD_QUERY_FLDR_TRACKS 0x4e #define CMD_QUERY_TOT_TRACKS 0x48 #define CMD_QUERY_FLDR_COUNT 0x4f / ********* *** Optiot ************************** / #define DEV_TF 0X02 / ************** ************************************************** *****/ int numero; tavu estado; tavuäänimerkki = 2; tavutappi = 0; tavu Lajittelunumero = 0; bool -painike = 0;
Vaihe 8:
Näitä rekisteriosoitteita käytetään moduulin toiminnan määrittämiseen. Katso esimerkiksi tämä rekisteröintiosoite alla.
#define CMD_PLAY_W_INDEX 0X03
Osoite 0x03 on määritetty nimellä CMD_PLAY_W_INDEX. Sitä käytetään kappaleen käynnistämiseen sen numerosta, eli annat äänen numeron ja se toistetaan.
Näiden arvojen avulla käytämme niitä ja määritämme projektimme toiminnan.
Kun olet määrittänyt käytettävät eri osoitteet, siirrymme asetustoimintoon ja määritämme projektimme nastat ja sarjaliikenteen.
Vaihe 9: Void Setup () -toiminto
Katso seuraavaksi mitätöintiasetustoiminto. Tein kaikki painikkeiden asetukset, MP3 -moduulin sarjaliikenteen ja korttimoduulin alustamisen MP3: ssa.
mitätön asennus ()
{Serial.begin (9600); sp. alku (9600); viive (500); for (pin = 8; pin <13; pin ++) {pinMode (pin, INPUT); } sendCommand (CMD_SEL_DEV, 0, DEV_TF); viive (500); }
Aloitin sarjaliikenteen tulostamaan tietoja tietokoneen sarjaan ja sitten aloitimme sarjayhteyden mp3 -objektin kautta.
Sarja.alku (9600);
sp. alku (9600); viive (500);
MP3 -moduulia ohjataan Arduino -sarjan vastaanottamilla komennoilla. Tässä prosessissa käytimme SoftwareSerial -kirjastoa ja emuloimme sarjaa Arduinon digitaalisille nastoille.
Siten voit käyttää Arduinoa MP3 -moduulin ohjaamiseen sille lähetettyjen komentojen avulla.
Lisäksi konfiguroimme digitaaliset nastat ja alustamme MP3 -korttimoduulin
for (pin = 8; pin <13; pin ++) {pinMode (pin, INPUT); } sendCommand (CMD_SEL_DEV, 0, DEV_TF); viive (500);
Konfiguroinnin jälkeen meidän on siirryttävä void loop -toiminnon päälogiikkaan.
Vaihe 10: Päätoiminnon tyhjä silmukka ()
Koodi on hyvin yksinkertainen ja koko looginen rakenne esitetään alla. Seuraavassa selitän sinulle päätoiminnon täydellisen logiikan.
tyhjä silmukka ()
{nasta = 8; randomSeed (analoginenluku (A0)); numero = satunnainen (8, 12); Lajittelunumero = numero; numero = numero - 7; Serial.println (numero); sendCommand (0x03, 0, numero); viive (1000); do {button = digitalRead (pin); Serial.println (painike); nasta ++; jos (nasta> 13) {nasta = 8; } Serial.println ("Varrendo…"); Serial.println (nasta); // viive (1000); } while (painike! = 1); Serial.println ("Saiu…"); if (button == 1 && (pin-1)! = SortNumber) {sendCommand (0x03, 0, 6); viive (3000); } if (painike == 1 && (pin-1) == Lajittelunumero) {sendCommand (0x03, 0, 7); viive (3000); } // Tarkista vastaus. jos (mp3.available ()) {Serial.println (decodeMP3Answer ()); } viive (100); //Serial.println ("Tocando musica… "); }
Jokaisessa silmukan toimintojakson alussa luomme uuden arvon välillä 8 ja 12 vokaalin äänen tuottamiseksi. Arvo 8-12 viittaa vokaalin digitaaliseen nastaan.
Satunnaisarvon generointikoodi on esitetty alla.
nasta = 8;
randomSeed (analoginenluku (A0)); numero = satunnainen (8, 12); Lajittelunumero = numero;
Lisäksi vähennämme 7 arvosta 8-12. Näin voimme osoittaa muistikortille tallennettujen kappaleiden 1-5 sijainnin.
numero = numero - 7;
Tämän jälkeen toisin alla olevalle viivalle piirretyn vokaalin äänen.
sendCommand (0x03, 0, numero);
viive (1000);
Nyt on tullut tärkeä aika: hetki, jolloin aiomme lukea lapsen painaman painikkeen. Koodiosa esitetään alla.
tehdä
{painike = digitalRead (pin); Serial.println (painike); nasta ++; jos (nasta> 13) {nasta = 8; } Serial.println ("Varrendo…"); Serial.println (nasta); // viive (1000); } while (painike! = 1);
Tämä silmukka suoritetaan, kunnes käyttäjä painaa painikkeita. Silmukan avulla voit skannata viisi digitaalista nastaa ja heti kun lapsi painaa jotakin painiketta, se tulee ulos silmukasta ja tarkistaa, onko lapsi vastannut oikein.
Teet vahvistuksen alla olevan koodin avulla.
if (painike == 1 && (pin-1)! = Lajittelunumero)
{sendCommand (0x03, 0, 6); viive (3000); } if (painike == 1 && (pin-1) == Lajittelunumero) {sendCommand (0x03, 0, 7); viive (3000); }
Ensimmäinen ehto suoritetaan, kun käyttäjä tekee virheen, koska painiketta painettiin ja nastan laukaisuarvo oli eri kuin piirretty tappi (SortNumber).
Tässä vaiheessa sinun on suoritettava alla oleva komento.
sendCommand (0x03, 0, 6);
viive (3000);
Tätä komentoa käytetään laukaisemaan väärä vastausääni. Lopuksi meillä on toinen ehto, jota käytetään tarkistamaan, onko lapsi oikeassa.
if (painike == 1 && (pin-1) == Lajittelunumero)
{sendCommand (0x03, 0, 7); viive (3000); }
Vaihe 11:
Jos painiketta painettiin ja painettu digitaalinen tappi on sama kuin vedetty tappi, järjestelmä antaa oikean vastauksen äänen.
Kuten selitän sinulle, tämä koodi on hyvin yksinkertainen ja auttaa jokaista lasta kehittämään vokaalitietoaan Arduinon kanssa pelaamalla.
Yllä olevassa kuvassa äänikenttä suorittaa MP3 -moduulin YX5300 SD -kortille tallennettua kappaletta.
Vaihe 12: Johtopäätös
Luokkaopetusta on muutettava jatkuvasti, ja Arduino voi olla loistava liittolainen hauskojen tehtävien luomisessa.
Tämän projektin avulla oli mahdollista kehittää yksinkertainen toiminta, joka voi kehittää lasten taitoja tuntemalla kunkin vokaalin äänen ja oikeinkirjoituksen.
Toisin kuin perinteiset opetusmenetelmät, lapset oppivat luokkahuoneessa hauskanpidon kautta pelejä ja elektroniikkaa.
Vaihe 13: Kuittaus
Tämä projekti on kehitetty JLCPCB -yrityksen tuen ja kannustuksen ansiosta. He kannustivat koulutukseen ja kehottivat meitä kehittämään vokaalipelin lasten opettamiseen luokkahuoneessa.
Jos haluat ostaa vokaalipelin elektroniset levyt, voit käyttää tätä linkkiä ja ostaa 10 yksikköä hintaan 2 dollaria JLCPCB: ltä.
Suositeltava:
Moottorin nopeuden mittaus Arduinolla: 6 vaihetta
Moottorin nopeuden mittaus Arduinon avulla: Onko moottorin kierrosluvun mittaaminen vaikeaa? En usko. Tässä on yksi yksinkertainen ratkaisu: Vain yksi infrapuna -anturi ja Arduino sarjassasi voivat tehdä niin. Tässä viestissä annan yksinkertaisen opetusohjelman, jossa selitetään kuinka mitata minkä tahansa moottorin kierrosluku IR -anturia ja A
Kasvimonitorin rakentaminen Arduinolla: 7 vaihetta
Kasvimonitorin rakentaminen Arduinolla: Tässä opetusohjelmassa opimme tunnistamaan maaperän kosteuden kosteusanturin avulla ja vilkkumaan vihreän LED -valon, jos kaikki on kunnossa ja OLED -näyttö ja Visuino
Puhuva Arduino - MP3 -tiedoston toistaminen Arduinolla ilman moduulia - Mp3 -tiedoston toistaminen Arduinosta PCM: llä: 6 vaihetta
Puhuva Arduino | MP3 -tiedoston toistaminen Arduinolla ilman moduulia | Mp3 -tiedoston toistaminen Arduinolta PCM: n avulla: Tässä ohjeessa opimme MP3 -tiedoston toistamisen arduinolla ilman äänimoduulia, tässä käytämme PCM -kirjastoa Arduinolle, joka toistaa 16 -bittistä PCM: ää 8 kHz: n taajuudella, joten voit tehdä tämän
Toista kappaleita (MP3) Arduinolla PWM: n avulla kaiuttimessa tai Flyback -muuntajassa: 6 vaihetta (kuvien kanssa)
Toista kappaleita (MP3) Arduinolla PWM: n avulla kaiuttimessa tai Flyback -muuntajassa: Hei kaverit, tämä on ensimmäinen opastettava, toivon, että pidät siitä! Pohjimmiltaan tässä projektissa olen käyttänyt sarjaliikennettä Arduinon ja kannettavan tietokoneen välillä, siirtää musiikkitietoja kannettavalta tietokoneeltani Arduinolle. Ja käyttämällä Arduino TIMERS t
MP3 -soitin Arduinolla: 6 vaihetta
MP3-soitin Arduinolla: Tässä kokoonpanossa käytimme mp3-soitinta, jossa on Arduino Uno, mini-PAM8403-vahvistin, jossa on äänenvoimakkuuden säätö, mp3-moduuli DFPlayer Mini ja pari 3 watin kaiutinta. soittimelle, mutta myös äänipuhelun sallimiseksi