Tabla de contenido:

Juego de vocales con Arduino y módulo MP3 YX5300 Catalex: 13 pasos
Juego de vocales con Arduino y módulo MP3 YX5300 Catalex: 13 pasos

Video: Juego de vocales con Arduino y módulo MP3 YX5300 Catalex: 13 pasos

Video: Juego de vocales con Arduino y módulo MP3 YX5300 Catalex: 13 pasos
Video: Como Grabar y Reproducir Musica mp3 usando el Arduino 2024, Noviembre
Anonim
Juego de vocales con Arduino y módulo MP3 YX5300 Catalex
Juego de vocales con Arduino y módulo MP3 YX5300 Catalex

¿Puedes leer esta pregunta? ¡Eso es raro! Hice esta pregunta a propósito. Si puedes leer este texto es porque conoces todo el alfabeto y, por supuesto, aprendiste todas las vocales.

Las vocales están presentes en todas las palabras. Es imposible escapar de cada uno de ellos. Ahora déjame hacerte una pregunta. ¿Fue divertido el aprendizaje de su niñez y la participación de recursos tecnológicos?

Estoy seguro de que los recursos de aprendizaje fueron pocos y usaste métodos tradicionales para aprender las vocales y el alfabeto.

Después de todo, ¿es posible utilizar algunos recursos tecnológicos para aprender vocales?

En este artículo, te enseñaré cómo enseñar vocales a tus alumnos y niños a través de un juego.

Te enseñaré cómo crear un sistema con una voz, donde tu hijo / alumno escuchará el sonido de la letra y deberá presionar un botón para indicar la letra correcta.

Así, aprenderán jugando y siempre estarán motivados para estudiar.

Ahora, voy a mostrarte el proceso paso a paso para que crees tu propio juego y enseñes las vocales a los niños.

Suministros

Placa de circuito impreso JLCPCB

Arduino Uno

Interruptor de botón

Resistencia 10kR

Cabezal macho 2, 54 mm 1x7

Paso 1: Desarrollar el juego de vocales con Arduino

Desarrollando el juego de vocales con Arduino
Desarrollando el juego de vocales con Arduino

El corazón del juego es la placa de circuito impreso JLCPCB de los Vowels. Puede acceder a este enlace y descargar los archivos del proyecto. Tiene 5 botones. Utilizará cada botón para representar una vocal y conectarlo a su Arduino.

La placa de circuito impreso se muestra en la Figura 1.

Paso 2:

Imagen
Imagen

Con este proyecto de PCB, puede conectarlo con Arduino y crear su juego. A continuación, te ofreceré un esquema electrónico para que montes o construyas el proyecto en tu protoboard.

Paso 3:

A partir de este esquema, configuramos el diseño de la placa electrónica. Se muestra en la Figura 2 y puede descargar los archivos y hacer su proyecto.

Elija 5 pines del Arduino y conecte los puentes en la placa con el Arduino. O de lo contrario, puede montar el siguiente diagrama electrónico.

Paso 4: la idea del proyecto

La idea del proyecto
La idea del proyecto

Te enseñaré cómo montar un sistema de sonido MP3 con Arduino. Este sistema se encargará de reproducir la voz pronunciando la letra. El sonido de cada letra se dibujará utilizando un valor de 1 a 5, donde 1 representa A y 5 representa U.

Por lo tanto, cuando el niño oye el sonido, debe mirar el teclado, reconocer la ortografía de la vocal y presionar la tecla correcta.

Si falla, el sistema hará parpadear el LED rojo 3 veces. De lo contrario, el sistema activará un timbre durante 5 segundos y dibujará una nueva vocal.

Para hacer esto, debes ensamblar el siguiente circuito.

En este circuito, conectará el módulo MP3 y la placa de vocales en el Arduino. El módulo Bluetooth se utilizó para representar el módulo MP3 Catalex.

El Arduino se encargará de ordenar los 5 números y luego enviar el comando para activar la vocal dibujada

Paso 5:

Imagen
Imagen

Después de eso, esperaremos hasta que el niño escuche y presione un botón, como se muestra en la Figura anterior.

Cada botón de arriba representa una vocal del alfabeto. A continuación, le mostraré cómo creará la lógica de programación para este proyecto.

Paso 6: construcción de la lógica de programación del juego

Construyendo la lógica de programación del juego
Construyendo la lógica de programación del juego

El sistema de juego de vocales se basa en el funcionamiento del módulo YX5300. Este módulo tiene algunas funciones, sin embargo, nos centraremos en presentar la estructura de trabajo del juego a través de las funciones principales del módulo YX5300.

A continuación les proporciono toda la lógica de programación del proyecto.

Paso 7:

A continuación, explicaré paso a paso la construcción de la lógica de este divertido juego para niños.

#incluir

#define ARDUINO_RX 5 // debe conectarse a TX del módulo Serial MP3 Player #define ARDUINO_TX 6 // conectarse a RX del módulo SoftwareSerial mp3 (ARDUINO_RX, ARDUINO_TX); static int8_t Send_buf [8] = {0}; // Búfer para comandos de envío. // MEJOR LOCALMENTE estático uint8_t ansbuf [10] = {0}; // Búfer para las respuestas. // MEJOR LOCALMENTE String mp3Answer; // Respuesta del MP3. String sanswer (vacío); String sbyte2hex (uint8_t b); / ************ Byte de comando ************************** / #define CMD_NEXT_SONG 0X01 // Reproducir siguiente canción. #define CMD_PREV_SONG 0X02 // Reproduce la canción 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ón de ciclo único. #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 #defineXPLAY_PLING continuamente #define CMD_FOLDER_CYCLE 0X17 #define CMD_SHUFFLE_PLAY 0x18 // #define CMD_SET_SNGL_CYCL 0X19 // Establecer ciclo único. #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 / ********* *** Opciones ************************** / #define DEV_TF 0X02 / ************** *********************************************** ***** / int numero; byte estado; zumbador de bytes = 2; byte pin = 0; byte SortNumber = 0; botón bool = 0; configuración vacía () {Serial.begin (9600); mp3.begin (9600); retraso (500); para (pin = 8; pin 13) {pin = 8; } Serial.println ("Varrendo…"); Serial.println (pin); // retraso (1000); } while (botón! = 1); Serial.println ("Saiu …"); if (button == 1 && (pin-1)! = SortNumber) {sendCommand (0x03, 0, 6); retraso (3000); } if (botón == 1 && (pin-1) == SortNumber) {sendCommand (0x03, 0, 7); retraso (3000); } // Busca la respuesta. if (mp3.available ()) {Serial.println (decodeMP3Answer ()); } retraso (100); //Serial.println("Tocando musica… "); } / ********************************************* ******************************** / / * Función sendMP3Command: buscar un comando 'c' y enviarlo a MP3 * / / * Parámetro: c. Código para el comando MP3, 'h' para ayuda. * / / * Retorno: void * / void sendMP3Command (char c) {switch (c) {case '?': Case 'h': Serial.println ("AYUDA"); Serial.println ("p = Reproducir"); Serial.println ("P = Pausa"); Serial.println ("> = Siguiente"); Serial.println ("': Serial.println (" Siguiente "); sendCommand (CMD_NEXT_SONG); sendCommand (CMD_PLAYING_N); // pregunta por el número de archivo que se está reproduciendo break; case' Tarjeta de memoria insertada."; Break; case 0x3D: decodedMP3Answer + = "-> Completed play num" + String (ansbuf [6], DEC); // sendCommand (CMD_NEXT_SONG); // sendCommand (CMD_PLAYING_N); // pregunta por el número de archivo que se está reproduciendo break; caso 0x40: decodedMP3Answer + = "-> Error"; break; case 0x41: decodedMP3Answer + = "-> Datos recibidos correctamente."; break; case 0x42: decodedMP3Answer + = "-> Estado de reproducción:" + String (ansbuf [6], DEC); break; case 0x48: decodedMP3Answer + = "-> Recuento de archivos:" + String (ansbuf [6], DEC); break; case 0x4C: decodedMP3Answer + = "-> Reproduciendo:" + String (ansbuf [6], DEC); break; case 0x4E: decodedMP3Answer + = "-> Recuento de archivos de carpeta:" + String (ansbuf [6], DEC); break; case 0x4F: decodedMP3Answer + = "-> Recuento de carpetas:" + String (ansbuf [6], DEC); break;} return decodedMP3Answer;} / ******************************** ************ ********************************* / / * Función: Enviar comando al MP3 * / / * Parámetro: byte comando * / / * Parámetro: parámetro byte dat1 para el comando * / / * Parámetro: parámetro byte dat2 para el comando * / void sendCommand (comando byte) {sendCommand (comando, 0, 0); } void sendCommand (comando byte, byte dat1, byte dat2) {delay (20); Send_buf [0] = 0x7E; // Send_buf [1] = 0xFF; // Send_buf [2] = 0x06; // Len Send_buf [3] = comando; // Send_buf [4] = 0x01; // 0x00 NO, 0x01 feedback Send_buf [5] = dat1; // datah Send_buf [6] = dat2; // datos Send_buf [7] = 0xEF; // Serial.print ("Enviando:"); para (uint8_t i = 0; i <8; i ++) {mp3.write (Send_buf ); Serial.print (sbyte2hex (Send_buf )); } Serial.println (); } / ********************************************* ******************************** / / * Función: sbyte2hex. Devuelve datos de un byte en formato HEX. * / / * Parámetro: - uint8_t b. Byte para convertir a HEX. * / / * Devuelve: String * / String sbyte2hex (uint8_t b) {String shex; shex = "0X"; si (b <16) shex + = "0"; shex + = Cadena (b, HEX); shex + = ""; volver shex; } / ********************************************* ******************************** / / * Función: shex2int. Devuelve un int de una cadena HEX. * / / * Parámetro: s. char * s para convertir a HEX. * / / * Parámetro: n. longitud de char * s. * / / * Devuelve: int * / int shex2int (char * s, int n) {int r = 0; para (int i = 0; i = '0' && s = 'A' && s <= 'F') {r * = 16; r + = (s - 'A') + 10; }} return r; } / ********************************************* ******************************* / / * Función: sanswer. Devuelve una respuesta de cadena del módulo mp3 UART. * / / * Parámetro: - uint8_t b. vacío. * / / * Retorno: Cadena. Si la respuesta está bien formateada, responde. * / String sanswer (vacío) {uint8_t i = 0; String mp3answer = ""; // Obtiene solo 10 bytes while (mp3.available () && (i <10)) {uint8_t b = mp3.read (); ansbuf = b; i ++; mp3answer + = sbyte2hex (b); } // si el formato de respuesta es correcto. if ((ansbuf [0] == 0x7E) && (ansbuf [9] == 0xEF)) {return mp3answer; } return "???:" + mp3answer; }

Primero, definimos todas las variables del programa y las direcciones de registro de acceso del módulo YX5300.

#incluir

#define ARDUINO_RX 5 // debe conectarse a TX del módulo Serial MP3 Player #define ARDUINO_TX 6 // conectarse a RX del módulo SoftwareSerial mp3 (ARDUINO_RX, ARDUINO_TX); static int8_t Send_buf [8] = {0}; // Búfer para comandos de envío. // MEJOR LOCALMENTE estático uint8_t ansbuf [10] = {0}; // Búfer para las respuestas. // MEJOR LOCALMENTE String mp3Answer; // Respuesta del MP3. String sanswer (vacío); String sbyte2hex (uint8_t b); / ************ Byte de comando ************************** / #define CMD_NEXT_SONG 0X01 // Reproducir siguiente canción. #define CMD_PREV_SONG 0X02 // Reproduce la canción 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ón de ciclo único. #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 #defineXPLAY_PLILE continuamente #define CMD_FOLDER_CYCLE 0X17 #define CMD_SHUFFLE_PLAY 0x18 // #define CMD_SET_SNGL_CYCL 0X19 // Establecer ciclo único. #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 / ********* *** Opciones ************************** / #define DEV_TF 0X02 / ************** *********************************************** ***** / int numero; byte estado; zumbador de bytes = 2; byte pin = 0; byte SortNumber = 0; botón bool = 0;

Paso 8:

Estas direcciones de registro se utilizan para configurar el funcionamiento del módulo. Por ejemplo, consulte esta dirección de registro a continuación.

#define CMD_PLAY_W_INDEX 0X03

La dirección 0x03 se define con el nombre CMD_PLAY_W_INDEX. Se utiliza para disparar una canción a partir de su número, es decir, se ingresa el número del sonido y se reproducirá.

Será con estos valores que los utilizaremos y configuraremos el funcionamiento de nuestro proyecto.

Una vez que haya definido las diversas direcciones que se utilizarán, ingresaremos a la función de configuración y configuraremos los pines y la comunicación en serie para nuestro proyecto.

Paso 9: La función de configuración de vacío ()

A continuación, consulte la función de configuración anulada. Hice todos los ajustes de los pines de los botones, la comunicación en serie del módulo MP3 y la inicialización del módulo de la tarjeta en el MP3.

configuración vacía ()

{Serial.begin (9600); mp3.begin (9600); retraso (500); para (pin = 8; pin <13; pin ++) {pinMode (pin, ENTRADA); } sendCommand (CMD_SEL_DEV, 0, DEV_TF); retraso (500); }

Comencé la comunicación en serie para imprimir datos en la serie de la computadora y luego comenzamos la comunicación en serie a través del objeto mp3.

Serial.begin (9600);

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

El módulo mp3 se controla a través de comandos recibidos por la serie Arduino. En este proceso, usamos la biblioteca SoftwareSerial y emulamos una serie en los pines digitales de Arduino.

Por lo tanto, podrá usar el Arduino para controlar el módulo MP3 a través de los comandos que se le envían.

Además, realizamos la configuración de los pines digitales e inicialización del módulo Tarjeta MP3

para (pin = 8; pin <13; pin ++) {pinMode (pin, ENTRADA); } sendCommand (CMD_SEL_DEV, 0, DEV_TF); retraso (500);

Después de realizar la configuración, debemos pasar a la lógica principal en la función de bucle vacío.

Paso 10: La función principal Void Loop ()

El código es muy simple y la estructura lógica completa se presenta a continuación. A continuación, te explicaré la lógica completa de la función principal.

bucle vacío ()

{pin = 8; randomSeed (analogRead (A0)); numero = aleatorio (8, 12); SortNumber = numero; numero = numero - 7; Serial.println (número); sendCommand (0x03, 0, numero); retraso (1000); hacer {button = digitalRead (pin); Serial.println (botón); pin ++; si (pin> 13) {pin = 8; } Serial.println ("Varrendo…"); Serial.println (pin); // retraso (1000); } while (botón! = 1); Serial.println ("Saiu …"); if (button == 1 && (pin-1)! = SortNumber) {sendCommand (0x03, 0, 6); retraso (3000); } if (botón == 1 && (pin-1) == SortNumber) {sendCommand (0x03, 0, 7); retraso (3000); } // Busca la respuesta. if (mp3.available ()) {Serial.println (decodeMP3Answer ()); } retraso (100); //Serial.println("Tocando musica… "); }

En cada inicio del ciclo de la función de bucle, generaremos un nuevo valor entre 8 y 12 para generar el sonido de una vocal. El valor de 8 a 12 se refiere al pin digital de la vocal.

El código para generar el valor aleatorio se muestra a continuación.

pin = 8;

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

Además, restamos 7 a la cantidad sorteada entre 8 y 12. Esto nos permitirá apuntar a las posiciones del 1 al 5 de las canciones grabadas en la tarjeta de memoria.

numero = numero - 7;

Después de eso, reproduje el sonido de la vocal dibujada en la línea de abajo.

sendCommand (0x03, 0, numero);

retraso (1000);

Ahora ha llegado el momento importante: el momento en que vamos a leer el botón pulsado por el niño. La parte del código se presenta a continuación.

hacer

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

Este bucle se ejecutará hasta que el usuario presione los botones. El bucle le permite escanear los 5 pines digitales y en el momento en que el niño presione uno de los botones, saldrá del bucle y verificará si el niño ha respondido correctamente.

Hará la verificación usando el código a continuación.

si (botón == 1 && (pin-1)! = SortNumber)

{sendCommand (0x03, 0, 6); retraso (3000); } if (botón == 1 && (pin-1) == SortNumber) {sendCommand (0x03, 0, 7); retraso (3000); }

La primera condición se ejecutará cuando el usuario cometa un error porque se presionó un botón y el valor activado del pin era diferente del pin dibujado (SortNumber).

En este punto, debe ejecutar el siguiente comando.

sendCommand (0x03, 0, 6);

retraso (3000);

Este comando se utiliza para activar el tono de respuesta incorrecto. Por último, tenemos la segunda condición que se utilizará para comprobar si el niño tiene razón.

si (botón == 1 && (pin-1) == SortNumber)

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

Paso 11:

Imagen
Imagen

Si se presionó un botón y el pin digital que se presionó es el mismo que el pin dibujado, el sistema activará un sonido de respuesta correcta.

Como te explico, este código es muy sencillo y ayudará a cualquier niño a desarrollar sus conocimientos de vocales a través de un juego con Arduino.

En la figura anterior, la caja de sonido está ejecutando la canción almacenada en la tarjeta SD del Módulo MP3 YX5300.

Paso 12: Conclusión

La educación en el aula debe cambiarse constantemente y Arduino puede ser un gran aliado para crear tareas divertidas.

A través de este proyecto, fue posible desarrollar una actividad sencilla que puede desarrollar las habilidades de los niños a través del conocimiento del sonido y la ortografía de cada vocal.

A diferencia de los métodos de enseñanza tradicionales, los niños aprenderán a través de la diversión en el aula mediante juegos y electrónica.

Paso 13: Reconocimiento

Este proyecto se desarrolló gracias al apoyo y aliento de la empresa JLCPCB. Fomentaron la educación y nos invitaron a desarrollar el juego de vocales para enseñar a los niños en el aula.

Si deseas adquirir las placas electrónicas del Juego de Vocales, puedes acceder a este enlace y adquirir 10 unidades por $ 2 en JLCPCB.

Recomendado: