Cuprins:

Joc de vocale cu modulul Arduino și YX5300 MP3 Catalex: 13 pași
Joc de vocale cu modulul Arduino și YX5300 MP3 Catalex: 13 pași

Video: Joc de vocale cu modulul Arduino și YX5300 MP3 Catalex: 13 pași

Video: Joc de vocale cu modulul Arduino și YX5300 MP3 Catalex: 13 pași
Video: Bati din palme si controlezi lumina in casa // proiect arduino cu senzor de sunet // 4K 2024, Noiembrie
Anonim
Joc de vocale cu modulul Arduino și YX5300 MP3 Catalex
Joc de vocale cu modulul Arduino și YX5300 MP3 Catalex

Ești capabil să citești această întrebare? Este ciudat! Am pus această întrebare intenționat. Dacă puteți citi acest text, este pentru că cunoașteți tot alfabetul și, bineînțeles, ați aflat despre toate vocalele.

Vocalele sunt prezente în toate cuvintele. Este imposibil să scapi de fiecare dintre ele. Acum, permiteți-mi să vă pun o întrebare. Învățarea copilăriei a fost distractivă și a implicat resurse tehnologice?

Sunt sigur că resursele de învățare au fost puține și ați folosit metode tradiționale pentru a învăța vocalele și alfabetul.

La urma urmei, este posibil să folosiți unele resurse tehnologice pentru a învăța vocale?

În acest articol, vă voi învăța cum să vă învățați elevii și copii vocale printr-un joc.

Vă voi învăța cum să creați un sistem cu o voce, unde copilul / elevul dvs. va auzi sunetul literei și trebuie să apăsați un buton pentru a indica litera corectă.

Astfel, vor învăța în timp ce se joacă și vor fi întotdeauna motivați să studieze.

Acum, îți voi arăta procesul pas cu pas pentru a-ți crea propriul joc și pentru a învăța vocalele copiilor.

Provizii

Placă de circuit imprimat JLCPCB

Arduino Uno

Apasă întrerupătorul

Rezistor 10kR

Antet 2 masculin, 54mm 1x7

Pasul 1: Dezvoltarea jocului de vocale cu Arduino

Dezvoltarea jocului de vocale cu Arduino
Dezvoltarea jocului de vocale cu Arduino

Inima jocului este placa de circuit imprimat JLCPCB a Vowels. Puteți accesa acest link și puteți descărca fișierele proiectului. Are 5 butoane. Veți utiliza fiecare buton pentru a reprezenta o vocală și a-l conecta la Arduino.

Placa cu circuite imprimate este prezentată în Figura 1.

Pasul 2:

Imagine
Imagine

Cu acest proiect PCB, îl puteți conecta la Arduino și vă puteți crea jocul. Apoi, vă voi oferi o schemă electronică pentru a vă asambla sau a construi proiectul pe protoboard.

Pasul 3:

Din această schemă, am configurat aspectul plăcii electronice. Este prezentat în Figura 2 și puteți descărca fișierele și vă puteți crea proiectul.

Alegeți 5 pini din Arduino și conectați jumperii de pe placă cu Arduino. Sau altfel, puteți asambla următoarea diagramă electronică.

Pasul 4: Ideea de proiect

Ideea de proiect
Ideea de proiect

Vă voi învăța cum să asamblați un sistem de sunet MP3 cu Arduino. Acest sistem va fi responsabil pentru reproducerea vocii care vorbește scrisoarea. Sunetul fiecărei litere va fi desenat folosind o valoare de la 1 la 5, unde 1 reprezintă A și 5 reprezintă U.

Astfel, atunci când copilul aude sunetul, trebuie să se uite la tastatură, să recunoască ortografia vocalei și să apese tasta corectă.

Dacă nu reușește, sistemul va clipi LED-ul roșu de 3 ori. În caz contrar, sistemul va activa un buzzer timp de 5 secunde și va desena o nouă vocală.

Pentru a face acest lucru, trebuie să asamblați următorul circuit.

În acest circuit, veți conecta modulul MP3 și placa vocală de pe Arduino. Modulul Bluetooth a fost utilizat pentru a reprezenta modulul Catalex MP3.

Arduino va fi responsabil pentru sortarea celor 5 numere și apoi trimiterea comenzii pentru a activa vocala desenată

Pasul 5:

Imagine
Imagine

După aceea, vom aștepta până când copilul va auzi și va apăsa un buton, așa cum se arată în figura de mai sus.

Fiecare buton de mai sus reprezintă o vocală a alfabetului. În continuare, vă voi arăta cum veți construi logica de programare pentru acest proiect.

Pasul 6: Construirea logicii de programare a jocului

Construirea logicii de programare a jocului
Construirea logicii de programare a jocului

Sistemul de jocuri vocale se bazează pe funcționarea modulului YX5300. Acest modul are unele funcții, cu toate acestea, ne vom concentra pe prezentarea structurii de lucru a jocului prin principalele funcții ale modulului YX5300.

Mai jos vă ofer toată logica de programare a proiectului.

Pasul 7:

În cele ce urmează, voi explica pas cu pas construirea logicii acestui joc distractiv pentru copii.

#include

#define ARDUINO_RX 5 // ar trebui să se conecteze la TX al modulului Serial MP3 Player #define ARDUINO_TX 6 // se conectează la RX al modulului SoftwareSerial mp3 (ARDUINO_RX, ARDUINO_TX); static int8_t Send_buf [8] = {0}; // Buffer pentru comenzile de trimitere. // MAI BUN LOCAL static uint8_t ansbuf [10] = {0}; // Tampon pentru răspunsuri. // BEST LOCALLY String mp3Answer; // Răspuns din MP3. Șir fără răspuns (nul); String sbyte2hex (uint8_t b); / ************ Byte de comandă *************************** / #define CMD_NEXT_SONG 0X01 // Redă următorul cântec. #define CMD_PREV_SONG 0X02 // Redați melodia anterioară. #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 // Redare cu un singur ciclu. #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_FOLDER. #define CMD_FOLDER_CYCLE 0X17 #define CMD_SHUFFLE_PLAY 0x18 // #define CMD_SET_SNGL_CYCL 0X19 // Setați un singur ciclu. #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; byte estado; octet buzzer = 2; pin de octeți = 0; octet SortNumber = 0; buton bool = 0; void setup () {Serial.begin (9600); mp3.begin (9600); întârziere (500); pentru (pin = 8; pin 13) {pin = 8; } Serial.println ("Varrendo …"); Serial.println (pin); // întârziere (1000); } while (buton! = 1); Serial.println ("Saiu …"); if (buton == 1 && (pin-1)! = SortNumber) {sendCommand (0x03, 0, 6); întârziere (3000); } if (buton == 1 && (pin-1) == SortNumber) {sendCommand (0x03, 0, 7); întârziere (3000); } // Verifică răspunsul. if (mp3.available ()) {Serial.println (decodeMP3Answer ()); } întârziere (100); //Serial.println("Tocando musica … "); } / ************************************************ *********************************************************************************************************************************/ * / / * Parametru: c. Cod pentru comanda MP3, „h” pentru ajutor. * / / * Return: void * / void sendMP3Command (char c) {switch (c) {case '?': Case 'h': Serial.println ("HELP"); Serial.println ("p = Play"); Serial.println ("P = Pauză"); Serial.println ("> = Next"); Serial.println ("': Serial.println (" Next "); sendCommand (CMD_NEXT_SONG); sendCommand (CMD_PLAYING_N); // cere numărul fișierului care se joacă break; case' Card de memorie introdus."; Break; case 0x3D: decodedMP3Answer + = "-> Număr de redare finalizat" + Șir (ansbuf [6], DEC); // sendCommand (CMD_NEXT_SONG); // sendCommand (CMD_PLAYING_N); // cere numărul fișierului care se joacă; caz 0x40: decodedMP3Answer + = "-> Error"; break; case 0x41: decodedMP3Answer + = "-> Date primite corect."; break; case 0x42: decodedMP3Answer + = "-> Status playing:" + String (ansbuf [6], DEC); break; case 0x48: decodedMP3Answer + = "-> Număr de fișiere:" + String (ansbuf [6], DEC); break; case 0x4C: decodedMP3Answer + = "-> Redare:" + String (ansbuf [6]; [6], DEC); break;} return decodedMP3Answer;} / *********************************** ************ ********************************* / / * Funcție: Trimiteți comanda către MP3 * / / * Parametru: octet comanda * / / * Parametru: parametru octet dat1 pentru comanda * / / * Parametru: parametru octet dat2 pentru comanda * / void sendCommand (comandă octet) {sendCommand (comandă, 0, 0); } void sendCommand (comandă octet, octet dat1, octet dat2) {întârziere (20); Send_buf [0] = 0x7E; // Trimite_buf [1] = 0xFF; // Trimite_buf [2] = 0x06; // Len Send_buf [3] = comandă; // Trimite_buf [4] = 0x01; // 0x00 NU, 0x01 feedback Send_buf [5] = dat1; // datah Send_buf [6] = dat2; // Datal Send_buf [7] = 0xEF; // Serial.print ("Trimiterea:"); for (uint8_t i = 0; i <8; i ++) {mp3.write (Send_buf ); Serial.print (sbyte2hex (Send_buf )); } Serial.println (); } / ************************************************ ******************************** / / * Funcție: sbyte2hex. Returnează un octet de date în format HEX. * / / * Parametru: - uint8_t b. Octet pentru a converti în HEX. * / / * Return: String * / String sbyte2hex (uint8_t b) {String shex; shex = "0X"; if (b <16) shex + = "0"; shex + = String (b, HEX); shex + = ""; întoarce shex; } / ************************************************ ******************************** / / * Funcție: shex2int. Returnează un int dintr-un șir HEX. * / / * Parametru: s. char * s pentru a converti în HEX. * / / * Parametru: n. lungimea char * s. * / / * Return: 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; }} returnează r; } / ************************************************ ******************************** / / * Funcție: fără răspuns. Returnează un răspuns String din modulul UART mp3. * / / * Parametru: - uint8_t b. nul. * / / * Return: String. Dacă răspunsul este bine formatat, răspundeți. * / String sanswer (nul) {uint8_t i = 0; String mp3answer = ""; // Obțineți doar 10 octeți în timp ce (mp3.available () && (i <10)) {uint8_t b = mp3.read (); ansbuf = b; i ++; mp3answer + = sbyte2hex (b); } // dacă formatul răspunsului este corect. if ((ansbuf [0] == 0x7E) && (ansbuf [9] == 0xEF)) {return mp3answer; } return "???:" + mp3answer; }

În primul rând, definim toate variabilele programului și adresele de registru de acces ale modulului YX5300.

#include

#define ARDUINO_RX 5 // ar trebui să se conecteze la TX al modulului Serial MP3 Player #define ARDUINO_TX 6 // se conectează la RX al modulului SoftwareSerial mp3 (ARDUINO_RX, ARDUINO_TX); static int8_t Send_buf [8] = {0}; // Buffer pentru comenzile de trimitere. // BEST LOCAL static uint8_t ansbuf [10] = {0}; // Tampon pentru răspunsuri. // BEST LOCALLY String mp3Answer; // Răspuns din MP3. Șir fără răspuns (nul); String sbyte2hex (uint8_t b); / ************ Byte de comandă *************************** / #define CMD_NEXT_SONG 0X01 // Redă următorul cântec. #define CMD_PREV_SONG 0X02 // Redați melodia anterioară. #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 // Redare cu un singur ciclu. #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 #Definite CMD_PLLE_FOLDER. #define CMD_FOLDER_CYCLE 0X17 #define CMD_SHUFFLE_PLAY 0x18 // #define CMD_SET_SNGL_CYCL 0X19 // Setați un singur ciclu. #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; byte estado; octet buzzer = 2; pin de octeți = 0; octet Număr Sortare = 0; buton bool = 0;

Pasul 8:

Aceste adrese de registru sunt utilizate pentru a configura funcționarea modulului. De exemplu, consultați această adresă de înregistrare de mai jos.

#define CMD_PLAY_W_INDEX 0X03

Adresa 0x03 este definită cu numele CMD_PLAY_W_INDEX. Este folosit pentru a declanșa o melodie din numărul său, adică introduceți numărul sunetului și acesta va fi redat.

Cu aceste valori le vom folosi și vom configura funcționarea proiectului nostru.

După ce ați definit diferitele adrese care vor fi utilizate, vom intra în funcția de configurare și vom configura pinii și comunicarea serială pentru proiectul nostru.

Pasul 9: Funcția Void Setup ()

Apoi, consultați funcția de configurare nulă. Am făcut toate setările pinilor butonului, comunicarea serială a modulului MP3 și inițializarea modulului cardului în MP3.

configurare nulă ()

{Serial.begin (9600); mp3.begin (9600); întârziere (500); for (pin = 8; pin <13; pin ++) {pinMode (pin, INPUT); } sendCommand (CMD_SEL_DEV, 0, DEV_TF); întârziere (500); }

Am început comunicarea serială pentru a imprima date pe seria computerului și apoi am început comunicarea serială prin obiectul mp3.

Serial.begin (9600);

mp3.begin (9600); întârziere (500);

Modulul mp3 este controlat prin comenzi primite de seria Arduino. În acest proces, am folosit biblioteca SoftwareSerial și am emulat un serial pe pinii digitali Arduino.

Astfel, veți putea utiliza Arduino pentru a controla modulul MP3 prin comenzile trimise acestuia.

În plus, am realizat configurația pinilor digitali și inițializarea modulului MP3 Card

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

După efectuarea configurației, trebuie să mergem la logica principală în funcția de buclă de gol.

Pasul 10: Funcția principală Bucla de vid ()

Codul este foarte simplu și întreaga structură logică este prezentată mai jos. În cele ce urmează, vă voi explica logica completă a funcției principale.

bucla nulă ()

{pin = 8; randomSeed (analogRead (A0)); numero = random (8, 12); SortNumber = numero; numero = numero - 7; Serial.println (numero); sendCommand (0x03, 0, numero); întârziere (1000); faceți {buton = digitalRead (pin); Serial.println (buton); pin ++; if (pin> 13) {pin = 8; } Serial.println ("Varrendo …"); Serial.println (pin); // întârziere (1000); } while (buton! = 1); Serial.println ("Saiu …"); if (buton == 1 && (pin-1)! = SortNumber) {sendCommand (0x03, 0, 6); întârziere (3000); } if (buton == 1 && (pin-1) == SortNumber) {sendCommand (0x03, 0, 7); întârziere (3000); } // Verifică răspunsul. if (mp3.available ()) {Serial.println (decodeMP3Answer ()); } întârziere (100); //Serial.println("Tocando musica … "); }

La fiecare început al ciclului funcției buclei, vom genera o nouă valoare între 8 și 12 pentru a genera sunetul unei vocale. Valoarea de la 8 la 12 se referă la pinul digital al vocalei.

Codul pentru generarea valorii aleatorii este prezentat mai jos.

pin = 8;

randomSeed (analogRead (A0)); numero = random (8, 12); SortNumber = numero;

În plus, scădem 7 din suma extrasă între 8 și 12. Acest lucru ne va permite să indicăm pozițiile de la 1 la 5 din melodiile înregistrate pe cardul de memorie.

numero = numero - 7;

După aceea, am reprodus sunetul vocalei desenat pe linia de mai jos.

sendCommand (0x03, 0, numero);

întârziere (1000);

Acum a sosit momentul important: momentul în care urmează să citim butonul apăsat de copil. Porțiunea de cod este prezentată mai jos.

do

{buton = digitalRead (pin); Serial.println (buton); pin ++; if (pin> 13) {pin = 8; } Serial.println ("Varrendo …"); Serial.println (pin); // întârziere (1000); } while (buton! = 1);

Această buclă va fi executată până când utilizatorul apasă butoanele. Bucla vă permite să scanați cei 5 pini digitali și în momentul în care copilul apasă unul dintre butoane, acesta va ieși din buclă și va verifica dacă copilul a răspuns corect.

Vei face verificarea folosind codul de mai jos.

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

{sendCommand (0x03, 0, 6); întârziere (3000); } if (buton == 1 && (pin-1) == SortNumber) {sendCommand (0x03, 0, 7); întârziere (3000); }

Prima condiție va fi executată atunci când utilizatorul face o greșeală deoarece un buton a fost apăsat și valoarea declanșată a pinului a fost diferită de pinul desenat (SortNumber).

În acest moment, trebuie să executați comanda de mai jos.

sendCommand (0x03, 0, 6);

întârziere (3000);

Această comandă este utilizată pentru a declanșa tonul de răspuns greșit. În cele din urmă, avem a doua condiție care va fi utilizată pentru a verifica dacă copilul are dreptate.

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

{sendCommand (0x03, 0, 7); întârziere (3000); }

Pasul 11:

Imagine
Imagine

Dacă a fost apăsat un buton și pinul digital care a fost apăsat este același cu pinul desenat, sistemul va declanșa un sunet de răspuns corect.

După cum vă explic, acest cod este foarte simplu și va ajuta orice copil să își dezvolte cunoștințele despre vocale printr-un joc cu Arduino.

În figura de mai sus, caseta de sunet execută melodia stocată pe cardul SD al modulului MP3 YX5300.

Pasul 12: Concluzie

Educația în clasă trebuie schimbată în mod constant, iar Arduino poate fi un mare aliat în crearea de sarcini distractive.

Prin acest proiect, a fost posibil să se dezvolte o activitate simplă care poate dezvolta abilitățile copiilor prin cunoașterea sunetului și ortografiei fiecărei vocale.

Spre deosebire de metodele tradiționale de predare, copiii vor învăța prin distracție în clasă prin jocuri și electronice.

Pasul 13: Recunoaștere

Acest proiect a fost dezvoltat datorită sprijinului și încurajării companiei JLCPCB. Au încurajat educația și ne-au invitat să dezvoltăm jocul de vocale pentru învățarea copiilor în clasă.

Dacă doriți să achiziționați plăcile electronice ale Game of Vowels, puteți accesa acest link și puteți achiziționa 10 unități pentru 2 USD la JLCPCB.

Recomandat: