Taula de continguts:

Joc de vocals amb el mòdul MP3 Arduino i YX5300 Catalex: 13 passos
Joc de vocals amb el mòdul MP3 Arduino i YX5300 Catalex: 13 passos

Vídeo: Joc de vocals amb el mòdul MP3 Arduino i YX5300 Catalex: 13 passos

Vídeo: Joc de vocals amb el mòdul MP3 Arduino i YX5300 Catalex: 13 passos
Vídeo: iPhone Introducing❓ Steve Jobs in 2007❕ #part6 (Full Subtitle) 2024, Desembre
Anonim
Joc de vocals amb el mòdul MP3 Arduino i YX5300 Catalex
Joc de vocals amb el mòdul MP3 Arduino i YX5300 Catalex

Podeu llegir aquesta pregunta? Això és estrany! Vaig fer aquesta pregunta a propòsit. Si podeu llegir aquest text, és perquè coneixeu tot l’alfabet i, per descomptat, heu après sobre totes les vocals.

Les vocals són presents en totes les paraules. És impossible escapar de cadascun d’ells. Ara, deixeu-me que us faci una pregunta. L’aprenentatge de la seva infància va ser divertit i va implicar recursos tecnològics?

Estic segur que els recursos d'aprenentatge eren pocs i que heu utilitzat mètodes tradicionals per aprendre les vocals i l'alfabet.

Al cap i a la fi, és possible utilitzar alguns recursos tecnològics per aprendre vocals?

En aquest article, us ensenyaré a ensenyar vocals als vostres alumnes i fills a través d’un joc.

T’ensenyaré a crear un sistema amb veu, on el teu fill / alumne sentirà el so de la lletra i haurà de prémer un botó per indicar la lletra correcta.

Així, aprendran mentre juguen i sempre estaran motivats per estudiar.

Ara us mostraré el procés pas a pas per crear el vostre propi joc i ensenyar les vocals als nens.

Subministraments

Tauler de circuits impresos JLCPCB

Arduino Uno

Interruptor de polsador

Resistència de 10kR

Capçalera masculí 2, 54 mm 1x7

Pas 1: desenvolupar el joc de vocals amb Arduino

Desenvolupament del joc de vocals amb Arduino
Desenvolupament del joc de vocals amb Arduino

El cor del joc és la placa de circuit imprès JLCPCB de les vocals. Podeu accedir a aquest enllaç i descarregar els fitxers del projecte. Té 5 botons. Utilitzarà cada botó per representar una vocal i connectar-la al vostre Arduino.

La placa de circuits impresos es mostra a la figura 1.

Pas 2:

Imatge
Imatge

Amb aquest Projecte PCB, el podeu connectar amb l’Arduino i crear el vostre joc. A continuació, us oferiré un esquema electrònic perquè pugueu muntar o construir el projecte al vostre protobordo.

Pas 3:

A partir d’aquest esquema, configurem el disseny del tauler electrònic. Es mostra a la figura 2 i podeu descarregar els fitxers i fer el vostre projecte.

Trieu 5 pins de l’Arduino i connecteu els ponts de la placa amb l’Arduino. O d’una altra manera, podeu muntar el següent esquema electrònic.

Pas 4: la idea del projecte

La idea del projecte
La idea del projecte

T’ensenyaré a muntar un sistema de so MP3 amb Arduino. Aquest sistema serà l’encarregat de reproduir la veu que parla la carta. El so de cada lletra es dibuixarà mitjançant un valor de 1 a 5, on 1 representa A i 5 representa U.

Així, quan el nen sent el so, ha de mirar el teclat, reconèixer l’ortografia de la vocal i prémer la tecla correcta.

Si falla, el sistema parpellejarà el LED vermell 3 vegades. En cas contrari, el sistema activarà un brunzidor durant 5 segons i dibuixarà una vocal nova.

Per fer-ho, heu de muntar el següent circuit.

En aquest circuit, connectareu el mòdul MP3 i la placa vocal a l’Arduino. El mòdul Bluetooth es va utilitzar per representar el mòdul MP3 de Catalex.

L'Arduino serà el responsable d'ordenar els 5 números i d'enviar l'ordre per activar la vocal dibuixada

Pas 5:

Imatge
Imatge

Després d'això, esperarem fins que el nen senti i prem un botó, tal com es mostra a la figura anterior.

Cada botó superior representa una vocal de l'alfabet. A continuació, us mostraré com construireu la lògica de programació per a aquest projecte.

Pas 6: Construir la lògica de programació del joc

Construint la lògica de programació del joc
Construint la lògica de programació del joc

El sistema de jocs vocals es basa en el funcionament del mòdul YX5300. Aquest mòdul té algunes funcions, però ens centrarem en presentar l'estructura de treball del joc a través de les funcions principals del mòdul YX5300.

A continuació us proporciono tota la lògica de programació del projecte.

Pas 7:

A continuació, explicaré el pas a pas per construir la lògica d’aquest divertit joc per a nens.

#incloure

#define ARDUINO_RX 5 // hauria de connectar-se a TX del mòdul Reproductor de sèrie MP3 #define ARDUINO_TX 6 // connectar-se a RX del mòdul SoftwareSerial mp3 (ARDUINO_RX, ARDUINO_TX); static int8_t Send_buf [8] = {0}; // Memòria intermèdia per a comandes d’enviament. // MILLOR LOCALMENT estàtic uint8_t ansbuf [10] = {0}; // Memòria intermèdia per a les respostes. // MILLOR LOCALMENT Cadena mp3Answer; // Resposta des del MP3. String sanswer (buit); String sbyte2hex (uint8_t b); / ************ Byte de comandament *************************** / #define CMD_NEXT_SONG 0X01 // Reprodueix a continuació cançó. #define CMD_PREV_SONG 0X02 // Reprodueix la cançó anterior. #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 // Reproducció d’un sol cicle. #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_PLLE_FOLDER. #define CMD_FOLDER_CYCLE 0X17 #define CMD_SHUFFLE_PLAY 0x18 // #define CMD_SET_SNGL_CYCL 0X19 // Estableix un cicle únic. #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; byte buzzer = 2; byte pin = 0; byte SortNumber = 0; botó bool = 0; configuració nul·la () {Serial.begin (9600); mp3.begin (9600); retard (500); per a (pin = 8; pin 13) {pin = 8; } Serial.println ("Varrendo …"); Serial.println (pin); // demora (1000); } while (botó! = 1); Serial.println ("Saiu …"); if (botó == 1 && (pin-1)! = SortNumber) {sendCommand (0x03, 0, 6); retard (3000); } if (botó == 1 && (pin-1) == SortNumber) {sendCommand (0x03, 0, 7); retard (3000); } // Comproveu la resposta. if (mp3.available ()) {Serial.println (decodeMP3Answer ()); } retard (100); //Serial.println("Tocando musica … "); } / ************************************************* ******************************** / / * Funció sendMP3Command: busqueu una ordre 'c' i envieu-la a MP3 * / / * Paràmetre: c. Codi de l'ordre MP3, "h" per obtenir ajuda. * / / * Return: void * / void sendMP3Command (char c) {switch (c) {case '?': Case 'h': Serial.println ("HELP"); Serial.println ("p = Reprodueix"); Serial.println ("P = Pausa"); Serial.println ("> = Següent"); Serial.println ("': Serial.println (" Següent "); sendCommand (CMD_NEXT_SONG); sendCommand (CMD_PLAYING_N); // demana el número de fitxer que s'està reproduint; cas' S'ha inserit la targeta de memòria."; Break; cas 0x3D: decodedMP3Answer + = "-> Número de reproducció completat" + String (ansbuf [6], DEC); // sendCommand (CMD_NEXT_SONG); // sendCommand (CMD_PLAYING_N); // demana el nombre de fitxers que s'està reproduint; cas 0x40: decodedMP3Answer + = "-> Error"; break; case 0x41: decodedMP3Answer + = "-> Dades rebudes correctament."; break; case 0x42: decodedMP3Answer + = "-> Status playing:" + String (ansbuf [6], DEC); break; case 0x48: decodedMP3Answer + = "-> Recompte de fitxers:" + String (ansbuf [6], DEC); break; case 0x4C: decodedMP3Answer + = "-> Reproducció:" + String (ansbuf [6], DEC); break; case 0x4E: decodedMP3Answer + = "-> Recompte de fitxers de carpetes:" + String (ansbuf [6], DEC); break; case 0x4F: decodedMP3Answer + = "-> Recompte de carpetes:" + String (ansbuf [6], DEC); break;} return decodedMP3Answer;} / *********************************** ************ ********************************* / / * Funció: Enviar l'ordre al paràmetre MP3 * / / *: byte ordre * / / * Paràmetre: paràmetre byte dat1 per a l'ordre * / / * Paràmetre: paràmetre byte dat2 per a l'ordre * / void sendCommand (ordre byte) {sendCommand (ordre, 0, 0); } void sendCommand (ordre de byte, byte dat1, byte dat2) {delay (20); Envia_buf [0] = 0x7E; // Envia_buf [1] = 0xFF; // Envia_buf [2] = 0x06; // Len Send_buf [3] = ordre; // Envia_buf [4] = 0x01; // 0x00 NO, 0x01 feedback Send_buf [5] = dat1; // datah Envia_buf [6] = dat2; // datal Send_buf [7] = 0xEF; // Serial.print ("Sending:"); per a (uint8_t i = 0; i <8; i ++) {mp3.write (Send_buf ); Serial.print (sbyte2hex (Send_buf )); } Serial.println (); } / ************************************************* ******************************** / / * Funció: sbyte2hex. Retorna dades de bytes en format HEX. * / / * Paràmetre: - uint8_t b. Byte per convertir a HEX. * / / * Return: String * / String sbyte2hex (uint8_t b) {String shex; shex = "0X"; if (b <16) shex + = "0"; shex + = String (b, HEX); shex + = ""; tornar xèx; } / ************************************************* ********************************* / / * Funció: shex2int. Retorna un int des d'una cadena HEX. * / / * Paràmetre: s. char * s per convertir a HEX. * / / * Paràmetre: n. longitud de * char. * / / * 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; }} retornar r; } / ************************************************* ******************************** / / * Funció: sense resposta. Retorna una resposta de cadena des del mòdul UART mp3. * / / * Paràmetre: - uint8_t b. buit. * / / * Retorn: cadena. Si la resposta està ben formada, responeu. * / String sanswer (void) {uint8_t i = 0; String mp3answer = ""; // Obteniu només 10 bytes mentre (mp3.available () && (i <10)) {uint8_t b = mp3.read (); ansbuf = b; i ++; mp3answer + = sbyte2hex (b); } // si el format de resposta és correcte. if ((ansbuf [0] == 0x7E) && (ansbuf [9] == 0xEF)) {return mp3answer; } tornar "???:" + mp3answer; }

En primer lloc, definim totes les variables del programa i les adreces del registre d’accés del mòdul YX5300.

#incloure

#define ARDUINO_RX 5 // hauria de connectar-se a TX del mòdul Reproductor de sèrie MP3 #define ARDUINO_TX 6 // connectar-se a RX del mòdul SoftwareSerial mp3 (ARDUINO_RX, ARDUINO_TX); static int8_t Send_buf [8] = {0}; // Memòria intermèdia per a comandes d’enviament. // MILLOR LOCALMENT estàtic uint8_t ansbuf [10] = {0}; // Memòria intermèdia per a les respostes. // MILLOR LOCALMENT Cadena mp3Answer; // Resposta des del MP3. String sanswer (buit); String sbyte2hex (uint8_t b); / ************ Byte de comandament *************************** / #define CMD_NEXT_SONG 0X01 // Reprodueix a continuació cançó. #define CMD_PREV_SONG 0X02 // Reprodueix la cançó anterior. #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 // Reproducció d’un sol cicle. #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_PLLE_FOLDER. #define CMD_FOLDER_CYCLE 0X17 #define CMD_SHUFFLE_PLAY 0x18 // #define CMD_SET_SNGL_CYCL 0X19 // Estableix un cicle únic. #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; byte buzzer = 2; byte pin = 0; byte SortNumber = 0; botó bool = 0;

Pas 8:

Aquestes adreces de registre s’utilitzen per configurar el funcionament del mòdul. Per exemple, consulteu aquesta adreça de registre a continuació.

#define CMD_PLAY_W_INDEX 0X03

L'adreça 0x03 es defineix amb el nom CMD_PLAY_W_INDEX. S'utilitza per activar una cançó a partir del seu número, és a dir, introduïu el número del so i es reproduirà.

Serà amb aquests valors que els utilitzarem i configurarem el funcionament del nostre projecte.

Després d'haver definit les diverses adreces que s'utilitzaran, entrarem a la funció de configuració i configurarem els pins i la comunicació en sèrie per al nostre projecte.

Pas 9: la funció Void Setup ()

A continuació, consulteu la funció de configuració del buit. Vaig fer tots els paràmetres dels pins dels botons, la comunicació en sèrie del mòdul MP3 i la inicialització del mòdul de la targeta al MP3.

configuració nul·la ()

{Serial.begin (9600); mp3.begin (9600); retard (500); per a (pin = 8; pin <13; pin ++) {pinMode (pin, INPUT); } sendCommand (CMD_SEL_DEV, 0, DEV_TF); retard (500); }

Vaig iniciar la comunicació en sèrie per imprimir dades en la sèrie de l'ordinador i després vam iniciar la comunicació en sèrie mitjançant l'objecte mp3.

Serial.begin (9600);

mp3.begin (9600); retard (500);

El mòdul mp3 es controla mitjançant ordres rebudes per la sèrie Arduino. En aquest procés, hem utilitzat la biblioteca SoftwareSerial i hem emulat una sèrie als pins digitals Arduino.

Així, podreu utilitzar l'Arduino per controlar el mòdul MP3 mitjançant les ordres que se li envien.

A més, hem realitzat la configuració dels pins digitals i la inicialització del mòdul de la targeta MP3

per a (pin = 8; pin <13; pin ++) {pinMode (pin, INPUT); } sendCommand (CMD_SEL_DEV, 0, DEV_TF); retard (500);

Després de fer la configuració, hem d’anar a la lògica principal de la funció de bucle buit.

Pas 10: la funció principal buit bucle ()

El codi és molt senzill i tota l'estructura lògica es presenta a continuació. A continuació, us explicaré la lògica completa de la funció principal.

bucle buit ()

{pin = 8; randomSeed (analogRead (A0)); numero = aleatori (8, 12); SortNumber = numero; numero = numero - 7; Serial.println (numero); sendCommand (0x03, 0, numero); retard (1000); fer {botó = DigitalRead (pin); Serial.println (botó); pin ++; si (pin> 13) {pin = 8; } Serial.println ("Varrendo …"); Serial.println (pin); // demora (1000); } while (botó! = 1); Serial.println ("Saiu …"); if (botó == 1 && (pin-1)! = SortNumber) {sendCommand (0x03, 0, 6); retard (3000); } if (botó == 1 && (pin-1) == SortNumber) {sendCommand (0x03, 0, 7); retard (3000); } // Comproveu la resposta. if (mp3.available ()) {Serial.println (decodeMP3Answer ()); } retard (100); //Serial.println("Tocando musica … "); }

A cada inici del cicle de funció de bucle, generarem un nou valor entre 8 i 12 per generar el so d’una vocal. El valor de 8 a 12 fa referència al pin digital de la vocal.

A continuació es mostra el codi per generar el valor aleatori.

pin = 8;

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

A més, restem 7 de la quantitat extreta entre 8 i 12. Això ens permetrà assenyalar les posicions de l'1 al 5 de les cançons gravades a la targeta de memòria.

numero = numero - 7;

Després d'això, vaig reproduir el so de la vocal dibuixat a la línia de sota.

sendCommand (0x03, 0, numero);

retard (1000);

Ara ha arribat el moment important: el moment en què llegirem el botó que prem el nen. A continuació es presenta la part del codi.

fer

{botó = DigitalRead (pin); Serial.println (botó); pin ++; si (pin> 13) {pin = 8; } Serial.println ("Varrendo …"); Serial.println (pin); // demora (1000); } while (botó! = 1);

Aquest bucle s'executarà fins que l'usuari prem els botons. El bucle permet escanejar els 5 pins digitals i en el moment que el nen prem un dels botons, sortirà del bucle i comprovarà si el nen ha respost correctament.

Feu la verificació mitjançant el codi següent.

if (botó == 1 && (pin-1)! = SortNumber)

{sendCommand (0x03, 0, 6); retard (3000); } if (botó == 1 && (pin-1) == Ordena el número) {sendCommand (0x03, 0, 7); retard (3000); }

La primera condició s'executarà quan l'usuari cometi un error perquè s'ha premut un botó i el valor activat del pin és diferent del pin dibuixat (SortNumber).

En aquest moment, heu d'executar l'ordre següent.

sendCommand (0x03, 0, 6);

retard (3000);

Aquesta ordre s'utilitza per activar un to de resposta incorrecte. Finalment, tenim la segona condició que s’utilitzarà per comprovar si el nen té raó.

if (botó == 1 && (pin-1) == Número d'ordenació)

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

Pas 11:

Imatge
Imatge

Si es va prémer un botó i el pin digital que es va prémer és el mateix que el pin dibuixat, el sistema activarà un so de resposta correcte.

Com us explico, aquest codi és molt senzill i ajudarà a qualsevol nen a desenvolupar el seu coneixement de les vocals mitjançant un joc amb Arduino.

A la figura superior, la caixa de ressonància està executant la cançó emmagatzemada a la targeta SD del mòdul MP3 YX5300.

Pas 12: Conclusió

Cal canviar constantment l’educació a l’aula i l’Arduino pot ser un gran aliat per crear tasques divertides.

A través d’aquest projecte, es va poder desenvolupar una activitat senzilla que pot desenvolupar les habilitats dels nens a través del coneixement del so i l’ortografia de cada vocal.

A diferència dels mètodes d’ensenyament tradicionals, els nens aprendran a través de la diversió a l’aula mitjançant jocs i electrònica.

Pas 13: reconeixement

Aquest projecte es va desenvolupar gràcies al suport i l’ànim de l’empresa JLCPCB. Van fomentar l'educació i ens van convidar a desenvolupar el joc de vocals per ensenyar als nens a l'aula.

Si voleu comprar les plaques electròniques del Joc de Vocals, podeu accedir a aquest enllaç i comprar 10 unitats per 2 dòlars a JLCPCB.

Recomanat: