Kazalo:

Samoglasniki z Arduino in YX5300 MP3 modulom Catalex: 13 korakov
Samoglasniki z Arduino in YX5300 MP3 modulom Catalex: 13 korakov

Video: Samoglasniki z Arduino in YX5300 MP3 modulom Catalex: 13 korakov

Video: Samoglasniki z Arduino in YX5300 MP3 modulom Catalex: 13 korakov
Video: OPEN SMART Red Serial MP3 tutorial 2024, November
Anonim
Samoglasniki z Arduino in YX5300 MP3 modulom Catalex
Samoglasniki z Arduino in YX5300 MP3 modulom Catalex

Ali lahko preberete to vprašanje? To je čudno! To vprašanje sem postavil namenoma. Če lahko preberete to besedilo, je to zato, ker poznate celotno abecedo in seveda izvedeli za vse samoglasnike.

Samoglasniki so prisotni v vseh besedah. Nemogoče je pobegniti od vsakega od njih. Zdaj pa naj vas vprašam. Je bilo vaše otroško učenje zabavno in je vključevalo tehnološke vire?

Prepričan sem, da je bilo učnih virov malo in ste se pri učenju samoglasnikov in abecede posluževali tradicionalnih metod.

Navsezadnje je mogoče uporabiti nekaj tehnoloških virov za učenje samoglasnikov?

V tem članku vas bom naučil, kako učiti svoje učence in otroke samoglasnike skozi igro.

Naučil vas bom, kako ustvariti sistem z glasom, kjer bo vaš otrok/učenec slišal zvok črke in mora pritisniti gumb, da označi pravilno črko.

Tako se bodo učili med igranjem in bodo vedno motivirani za študij.

Zdaj vam bom pokazal postopek po korakih za ustvarjanje lastne igre in otroke naučil samoglasnikov.

Zaloge

Tiskano vezje JLCPCB

Arduino Uno

Stikalno stikalo

10kR upor

Moški vzglavnik 2, 54 mm 1x7

1. korak: Razvijanje igre samoglasnikov z Arduinom

Razvoj igre samoglasnikov z Arduinom
Razvoj igre samoglasnikov z Arduinom

Srce igre je tiskano vezje samoglasnikov JLCPCB. Dostopate lahko do te povezave in prenesete projektne datoteke. Ima 5 gumbov. Vsak gumb boste uporabili za predstavitev samoglasnika in ga povezali s svojim Arduinom.

Tiskano vezje je prikazano na sliki 1.

2. korak:

Slika
Slika

S tem projektom PCB ga lahko povežete z Arduinom in ustvarite svojo igro. Nato vam bom ponudil elektronsko shemo za sestavljanje ali izdelavo projekta na vaši protoboard.

3. korak:

Iz te sheme smo nastavili postavitev elektronske plošče. Prikazan je na sliki 2 in lahko prenesete datoteke in naredite svoj projekt.

Izberite 5 nožic iz Arduina in povežite skakalce na plošči z Arduinom. V nasprotnem primeru lahko sestavite naslednji elektronski diagram.

4. korak: Ideja projekta

Ideja projekta
Ideja projekta

Naučil vas bom, kako sestaviti zvočni sistem MP3 z Arduinom. Ta sistem bo odgovoren za reprodukcijo glasu, ki govori črko. Zvok vsake črke bo narisan z vrednostjo od 1 do 5, kjer 1 predstavlja A in 5 predstavlja U.

Ko mora otrok slišati zvok, mora pogledati v tipkovnico, prepoznati črkovanje samoglasnika in pritisniti pravilno tipko.

Če ne uspe, bo sistem trikrat utripal rdečo LED. V nasprotnem primeru bo sistem za 5 sekund aktiviral zvočni signal in narisal nov samoglasnik.

Če želite to narediti, morate sestaviti naslednje vezje.

V tem vezju boste na Arduino povezali modul MP3 in samoglasniško ploščo. Modul Bluetooth je bil uporabljen za predstavitev Catalex MP3 modula.

Arduino bo odgovoren za razvrščanje 5 številk in nato pošiljanje ukaza za aktiviranje vlečenega samoglasnika

5. korak:

Slika
Slika

Po tem bomo počakali, da otrok sliši in pritisne gumb, kot je prikazano na zgornji sliki.

Vsak zgornji gumb predstavlja samoglasnik abecede. Nato vam bom pokazal, kako boste zgradili programsko logiko za ta projekt.

Korak 6: Izdelava programske logike igre

Ustvarjanje programske logike igre
Ustvarjanje programske logike igre

Sistem samoglasnikov temelji na delovanju modula YX5300. Ta modul ima nekatere funkcije, vendar se bomo osredotočili na predstavitev delovne strukture igre skozi glavne funkcije modula YX5300.

Spodaj vam predstavljam vso programsko logiko projekta.

7. korak:

V nadaljevanju bom korak za korakom razložil gradnjo logike te zabavne igre za otroke.

#vključi

#define ARDUINO_RX 5 // naj se poveže s TX modula serijskega predvajalnika MP3 #define ARDUINO_TX 6 // poveže z RX modula SoftwareSerial mp3 (ARDUINO_RX, ARDUINO_TX); static int8_t Send_buf [8] = {0}; // Medpomnilnik za ukaze za pošiljanje. // BOLJŠE LOKALNO statično uint8_t ansbuf [10] = {0}; // Vmesnik za odgovore. // BOLJŠI LOKALNO String mp3Answer; // Odgovor iz MP3. Nizov sanswer (void); Niz sbyte2hex (uint8_t b); / ************ Ukazni bajt **************************/ #define CMD_NEXT_SONG 0X01 // Predvajaj naprej pesem. #define CMD_PREV_SONG 0X02 // Predvajaj prejšnjo pesem. #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 // Predvajanje v enem ciklu. #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_PREGLED CMP_PLAY #define CMD_FOLDER_CYCLE 0X17 #define CMD_SHUFFLE_PLAY 0x18 // #define CMD_SET_SNGL_CYCL 0X19 // Nastavi en cikel. #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; bajt estado; bajtni brenčalec = 2; bajt pin = 0; bajt SortNumber = 0; bool gumb = 0; void setup () {Serial.begin (9600); mp3.začetek (9600); zamuda (500); for (pin = 8; pin 13) {pin = 8; } Serial.println ("Varrendo …"); Serial.println (pin); // zakasnitev (1000); } while (gumb! = 1); Serial.println ("Saiu …"); if (button == 1 && (pin-1)! = SortNumber) {sendCommand (0x03, 0, 6); zamuda (3000); } if (button == 1 && (pin-1) == SortNumber) {sendCommand (0x03, 0, 7); zamuda (3000); } // Preveri odgovor. if (mp3.available ()) {Serial.println (decodeMP3Answer ()); } zamuda (100); //Serial.println("Tocando musica… "); } /********************************************** ****************************** / /*Funkcija sendMP3Command: poiščite ukaz 'c' in ga pošljite v MP3 * / /*Parameter: c. Koda za ukaz MP3, 'h' za pomoč. *// *Vrnitev: void */ void sendMP3Command (char c) {switch (c) {case '?': Case 'h': Serial.println ("HELP"); Serial.println ("p = Predvajaj"); Serial.println ("P = Premor"); Serial.println ("> = Naprej"); Serial.println ("': Serial.println (" Naprej "); sendCommand (CMD_NEXT_SONG); sendCommand (CMD_PLAYING_N); // vprašajte za število datotek, ki se predvajajo; primer" Pomnilniška kartica vstavljena. "; Prelom; velika 0x3D: decodedMP3Answer + = " -> Dokončano število predvajanja" + String (ansbuf [6], DEC); // sendCommand (CMD_NEXT_SONG); // sendCommand (CMD_PLAYING_N); // vprašajte za število datotek, ki se predvajajo; velika 0x40: decodedMP3Answer += " -> Napaka"; break; case 0x41: decodedMP3Answer += " -> Podatki so pravilno sprejeti."; break; case 0x42: decodedMP3Answer += " -> Predvajanje stanja:" +String (ansbuf [6], DEC); prelom; case 0x48: decodedMP3Answer + = " -> Število datotek:" + String (ansbuf [6], DEC); break; case 0x4C: decodedMP3Answer + = " -> Predvajanje:" + String (ansbuf [6], DEC); prelom; velika 0x4E: decodedMP3Answer + = " -> Število datotek mape:" + String (ansbuf [6], DEC); break; velika 0x4F: decodedMP3Answer + = " -> Število map:" + Niz (ansbuf [6], DEC); prelom;} vrni dekodiranoMP3Odgovor;} /********************************* ************ ********************************* / /*Funkcija: Pošlji ukaz v MP3* / /*Parameter: bajt ukaz *// *Parameter: parameter bajta dat1 za ukaz *// *Parameter: parameter bajta dat2 za ukaz */ void sendCommand (ukaz byte) {sendCommand (ukaz, 0, 0); } void sendCommand (ukaz byte, bajt dat1, bajt dat2) {zakasnitev (20); Send_buf [0] = 0x7E; // Pošlji_buf [1] = 0xFF; // Pošlji_buf [2] = 0x06; // Len Send_buf [3] = ukaz; // Pošlji_buf [4] = 0x01; // 0x00 NE, 0x01 povratne informacije Send_buf [5] = dat1; // datah Send_buf [6] = dat2; // datalni Send_buf [7] = 0xEF; // Serial.print ("Pošiljanje:"); for (uint8_t i = 0; i <8; i ++) {mp3.write (Send_buf ); Serial.print (sbyte2hex (Send_buf )); } Serial.println (); } /********************************************** ******************************** / /*Funkcija: sbyte2hex. Vrne bajtne podatke v obliki HEX. * / /*Parameter:- uint8_t b. Bajt za pretvorbo v HEX. *// *Vrnitev: String */ String sbyte2hex (uint8_t b) {String shex; shex = "0X"; če (b <16) shex += "0"; shex += niz (b, HEX); shex += ""; povratni šeks; } /********************************************** ******************************** / /*Funkcija: shex2int. Vrne int iz niza HEX. * / /*Parameter: s. char *s za pretvorbo v HEX. * / /*Parameter: n. dolžina char *s. *// *Vrnitev: int */ int shex2int (char *s, int n) {int r = 0; for (int i = 0; i = '0' && s = 'A' && s <= 'F') {r *= 16; r + = (s - 'A') + 10; }} return r; } /********************************************** ******************************** / /*Funkcija: sanswer. Vrne nizov odgovor iz mp3 UART modula. * / /*Parameter:- uint8_t b. nično. * / /*Vrnitev: niz. Če je odgovor dobro oblikovan, odgovor. */ Odzivni niz (void) {uint8_t i = 0; String mp3answer = ""; // Pridobite le 10 bajtov while (mp3.available () && (i <10)) {uint8_t b = mp3.read (); ansbuf = b; i ++; mp3answer += sbyte2hex (b); } // če je oblika odgovora pravilna. if ((ansbuf [0] == 0x7E) && (ansbuf [9] == 0xEF)) {vrni mp3answer; } return "???:" + mp3answer; }

Najprej določimo vse spremenljivke programa in naslove registra dostopa modula YX5300.

#vključi

#define ARDUINO_RX 5 // naj se poveže s TX modula serijskega predvajalnika MP3 #define ARDUINO_TX 6 // poveže z RX modula SoftwareSerial mp3 (ARDUINO_RX, ARDUINO_TX); static int8_t Send_buf [8] = {0}; // Medpomnilnik za ukaze za pošiljanje. // BOLJŠE LOKALNO statično uint8_t ansbuf [10] = {0}; // Vmesnik za odgovore. // BOLJŠI LOKALNO String mp3Answer; // Odgovor iz MP3. Nizni sanswer (void); Niz sbyte2hex (uint8_t b); / ************ Ukazni bajt **************************/ #define CMD_NEXT_SONG 0X01 // Predvajaj naprej pesem. #define CMD_PREV_SONG 0X02 // Predvajaj prejšnjo pesem. #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 // Predvajanje v enem ciklu. #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_PREGLED CMP_PLAY #define CMD_FOLDER_CYCLE 0X17 #define CMD_SHUFFLE_PLAY 0x18 // #define CMD_SET_SNGL_CYCL 0X19 // Nastavi en cikel. #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; bajt estado; bajtni brenčalec = 2; bajt pin = 0; bajt SortNumber = 0; bool gumb = 0;

8. korak:

Ti naslovi registra se uporabljajo za konfiguriranje delovanja modula. Na primer, spodaj si oglejte ta naslov za registracijo.

#define CMD_PLAY_W_INDEX 0X03

Naslov 0x03 je definiran z imenom CMD_PLAY_W_INDEX. Uporablja se za sprožitev skladbe iz njene številke, to pomeni, da vnesete številko zvoka in se bo predvajala.

S temi vrednostmi jih bomo uporabili in konfigurirali delovanje našega projekta.

Ko določite različne naslove, ki bodo uporabljeni, bomo vstopili v nastavitveno funkcijo in konfigurirali zatiče in serijsko komunikacijo za naš projekt.

9. korak: Funkcija nastavitve praznine ()

Nato si oglejte funkcijo nastavitve praznine. Izvedel sem vse nastavitve zatičev gumbov, serijsko komunikacijo modula MP3 in inicializacijo modula kartice v MP3.

void setup ()

{Serial.begin (9600); mp3.začetek (9600); zamuda (500); for (pin = 8; pin <13; pin ++) {pinMode (pin, INPUT); } sendCommand (CMD_SEL_DEV, 0, DEV_TF); zamuda (500); }

Začel sem serijsko komunikacijo za tiskanje podatkov na serijsko številko računalnika, nato pa smo začeli serijsko komunikacijo prek predmeta mp3.

Serial.begin (9600);

mp3.začetek (9600); zamuda (500);

Modul mp3 se upravlja z ukazi, ki jih sprejme serijska serija Arduino. V tem procesu smo uporabili knjižnico SoftwareSerial in posnemali serijo na digitalnih zatičih Arduino.

Tako boste lahko z Arduinom upravljali modul MP3 z ukazi, ki so mu poslani.

Poleg tega smo izvedli konfiguracijo digitalnih zatičev in inicializacijo modula MP3 kartice

for (pin = 8; pin <13; pin ++) {pinMode (pin, INPUT); } sendCommand (CMD_SEL_DEV, 0, DEV_TF); zamuda (500);

Po nastavitvi moramo iti na glavno logiko v funkciji void loop.

10. korak: Void Loop glavne funkcije ()

Koda je zelo preprosta in celotna logična struktura je predstavljena spodaj. V nadaljevanju vam bom razložil celotno logiko glavne funkcije.

void loop ()

{pin = 8; randomSeed (analogRead (A0)); numero = naključno (8, 12); SortNumber = numero; numero = numero - 7; Serial.println (numero); sendCommand (0x03, 0, numero); zamuda (1000); do {button = digitalRead (pin); Serial.println (gumb); pin ++; if (pin> 13) {pin = 8; } Serial.println ("Varrendo …"); Serial.println (pin); // zakasnitev (1000); } while (gumb! = 1); Serial.println ("Saiu …"); if (button == 1 && (pin-1)! = SortNumber) {sendCommand (0x03, 0, 6); zamuda (3000); } if (button == 1 && (pin-1) == SortNumber) {sendCommand (0x03, 0, 7); zamuda (3000); } // Preveri odgovor. if (mp3.available ()) {Serial.println (decodeMP3Answer ()); } zamuda (100); //Serial.println("Tocando musica… "); }

Na vsakem začetku cikla funkcijske zanke bomo ustvarili novo vrednost med 8 in 12 za ustvarjanje zvoka samoglasnika. Vrednost od 8 do 12 se nanaša na digitalni pin samoglasnika.

Koda za ustvarjanje naključne vrednosti je prikazana spodaj.

pin = 8;

randomSeed (analogRead (A0)); numero = naključno (8, 12); SortNumber = numero;

Poleg tega od zneska, zbranega med 8 in 12., odštejemo 7. Tako bomo lahko pokazali na položaje 1 do 5 skladb, posnetih na pomnilniški kartici.

numero = numero - 7;

Po tem sem reproduciral zvok samoglasnika, ki je narisan na spodnji črti.

sendCommand (0x03, 0, numero);

zamuda (1000);

Zdaj je prišel pomemben čas: trenutek, ko bomo prebrali gumb, ki ga je pritisnil otrok. Del kode je predstavljen spodaj.

naredi

{button = digitalRead (pin); Serial.println (gumb); pin ++; if (pin> 13) {pin = 8; } Serial.println ("Varrendo …"); Serial.println (pin); // zakasnitev (1000); } while (gumb! = 1);

Ta zanka se bo izvajala, dokler uporabnik ne pritisne gumbov. Zanka vam omogoča skeniranje 5 digitalnih zatičev in v trenutku, ko otrok pritisne enega od gumbov, bo prišel iz zanke in preveril, ali se je otrok pravilno odzval.

Preverjanje boste izvedli s spodnjo kodo.

if (button == 1 && (pin-1)! = SortNumber)

{sendCommand (0x03, 0, 6); zamuda (3000); } if (button == 1 && (pin-1) == SortNumber) {sendCommand (0x03, 0, 7); zamuda (3000); }

Prvi pogoj bo izveden, ko uporabnik naredi napako, ker je bil pritisnjen gumb in je sprožena vrednost zatiča drugačna od vlečenega zatiča (SortNumber).

Na tej točki morate izvesti spodnji ukaz.

sendCommand (0x03, 0, 6);

zamuda (3000);

Ta ukaz se uporablja za sprožitev napačnega odzivnega tona. Nazadnje imamo drugi pogoj, s katerim bomo preverili, ali ima otrok prav.

if (button == 1 && (pin-1) == SortNumber)

{sendCommand (0x03, 0, 7); zamuda (3000); }

11. korak:

Slika
Slika

Če je bil pritisnjen gumb in je pritisnjeni digitalni zatič enak vlečenemu zatiču, bo sistem sprožil zvok pravilnega odgovora.

Kot sem vam razložil, je ta koda zelo preprosta in bo vsakemu otroku pomagala razviti znanje o samoglasnikih z igro z Arduinom.

Na zgornji sliki zvočna skrinja izvaja skladbo, shranjeno na SD kartici MP3 modula YX5300.

12. korak: Zaključek

Izobraževanje v razredu je treba nenehno spreminjati in Arduino je lahko odličen zaveznik pri ustvarjanju zabavnih nalog.

S tem projektom je bilo mogoče razviti preprosto dejavnost, ki lahko razvije znanje otrok z poznavanjem zvoka in črkovanja vsakega samoglasnika.

Za razliko od tradicionalnih metod poučevanja se bodo otroci učili skozi zabavo v razredu z igrami in elektroniko.

13. korak: Potrditev

Ta projekt je bil razvit zahvaljujoč podpori in spodbudi podjetja JLCPCB. Spodbujali so izobraževanje in nas povabili k razvijanju igre samoglasnikov za poučevanje otrok v razredu.

Če želite kupiti elektronske plošče Igre samoglasnikov, lahko dostopate do te povezave in kupite 10 enot za 2 USD na JLCPCB.

Priporočena: