Table des matières:

Jeu de voyelles avec Arduino et module MP3 YX5300 Catalex : 13 étapes
Jeu de voyelles avec Arduino et module MP3 YX5300 Catalex : 13 étapes

Vidéo: Jeu de voyelles avec Arduino et module MP3 YX5300 Catalex : 13 étapes

Vidéo: Jeu de voyelles avec Arduino et module MP3 YX5300 Catalex : 13 étapes
Vidéo: ARDUINO #5 - Créer Du Son Avec Le DFPlayer Mini MP3 2024, Novembre
Anonim
Jeu de Voyelles Avec Arduino et Module MP3 YX5300 Catalex
Jeu de Voyelles Avec Arduino et Module MP3 YX5300 Catalex

Êtes-vous capable de lire cette question? C'est bizarre ! J'ai posé cette question exprès. Si vous pouvez lire ce texte, c'est parce que vous connaissez tout l'alphabet et, bien sûr, vous avez appris toutes les voyelles.

Les voyelles sont présentes dans tous les mots. Il est impossible d'échapper à chacun d'eux. Maintenant, permettez-moi de vous poser une question. Votre enfance était-elle amusante à apprendre et impliquait-elle des ressources technologiques ?

Je suis sûr que les ressources d'apprentissage étaient peu nombreuses et que vous utilisiez des méthodes traditionnelles pour apprendre les voyelles et l'alphabet.

Après tout, est-il possible d'utiliser certaines ressources technologiques pour apprendre les voyelles ?

Dans cet article, je vais vous apprendre comment enseigner les voyelles à vos élèves et enfants à travers un jeu.

Je vais vous apprendre à créer un système avec une voix, où votre enfant/élève entendra le son de la lettre et devra appuyer sur un bouton pour indiquer la bonne lettre.

Ainsi, ils apprendront en jouant et seront toujours motivés pour étudier.

Maintenant, je vais vous montrer le processus étape par étape pour créer votre propre jeu et enseigner les voyelles aux enfants.

Fournitures

Circuit imprimé JLCPCB

Arduino Uno

Interrupteur à bouton-poussoir

Résistance 10kR

Embase Mâle 2, 54mm 1x7

Étape 1: Développer le jeu des voyelles avec Arduino

Développer le jeu des voyelles avec Arduino
Développer le jeu des voyelles avec Arduino

Le cœur du jeu est le circuit imprimé JLCPCB des Voyelles. Vous pouvez accéder à ce lien et télécharger les fichiers du projet. Il a 5 boutons. Vous utiliserez chaque bouton pour représenter une voyelle et la connecter à votre Arduino.

Le circuit imprimé est illustré à la figure 1.

Étape 2:

Image
Image

Avec ce projet PCB, vous pouvez le connecter à l'Arduino et créer votre jeu. Ensuite, je vous proposerai un schéma électronique pour que vous puissiez assembler ou construire le projet sur votre protoboard.

Étape 3:

A partir de ce schéma, nous avons mis en place la disposition de la carte électronique. Il est illustré à la figure 2 et vous pouvez télécharger les fichiers et créer votre projet.

Choisissez 5 broches de l'Arduino et connectez les cavaliers de la carte avec l'Arduino. Ou sinon, vous pouvez assembler le schéma électronique suivant.

Étape 4: L'idée du projet

L'idée du projet
L'idée du projet

Je vais vous apprendre à assembler un système audio MP3 avec Arduino. Ce système sera chargé de reproduire la voix prononçant la lettre. Le son de chaque lettre sera dessiné en utilisant une valeur de 1 à 5, où 1 représente A et 5 représente U.

Ainsi, lorsque l'enfant entend le son, il doit regarder le clavier, reconnaître l'orthographe de la voyelle et appuyer sur la bonne touche.

En cas d'échec, le système fera clignoter la LED rouge 3 fois. Sinon, le système activera un buzzer pendant 5 secondes et dessinera une nouvelle voyelle.

Pour ce faire, vous devez assembler le circuit suivant.

Dans ce circuit, vous connecterez le module MP3 et la carte de voyelle sur l'Arduino. Le module Bluetooth a été utilisé pour représenter le module Catalex MP3.

L'Arduino se chargera de trier les 5 numéros puis d'envoyer la commande pour activer la voyelle tirée

Étape 5:

Image
Image

Après cela, nous attendrons que l'enfant entende et appuie sur un bouton, comme le montre la figure ci-dessus.

Chaque bouton ci-dessus représente une voyelle de l'alphabet. Ensuite, je vais vous montrer comment vous allez construire la logique de programmation pour ce projet.

Étape 6: Construire la logique de programmation du jeu

Construire la logique de programmation du jeu
Construire la logique de programmation du jeu

Le système de jeu de voyelles est basé sur le fonctionnement du module YX5300. Ce module a quelques fonctions, cependant, nous allons nous concentrer sur la présentation de la structure de travail du jeu à travers les principales fonctions du module YX5300.

Ci-dessous, je vous fournis toute la logique de programmation du projet.

Étape 7:

Dans ce qui suit, je vais expliquer pas à pas la construction de la logique de ce jeu amusant pour les enfants.

#comprendre

#define ARDUINO_RX 5 //devrait se connecter au TX du module Serial MP3 Player #define ARDUINO_TX 6 //connecter au RX du module SoftwareSerial mp3(ARDUINO_RX, ARDUINO_TX); statique int8_t Send_buf[8] = {0}; // Tampon pour les commandes d'envoi. // MIEUX LOCALEMENT statique uint8_t ansbuf[10] = {0}; // Tampon pour les réponses. // MIEUX LOCALEMENT String mp3Answer; // Réponse du MP3. String sanswer(void); Chaîne sbyte2hex(uint8_t b); /************ Octet de commande **************************/ #define CMD_NEXT_SONG 0X01 // Lecture suivante chanson. #define CMD_PREV_SONG 0X02 // Lecture de la chanson précédente. #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 // Lecture en un seul cycle. #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_FILE 0XMD0F #define CMD_PLAY_FOLDER_FILE en continu 0XMD0F #define #define CMD_FOLDER_CYCLE 0X17 #define CMD_SHUFFLE_PLAY 0x18 // #define CMD_SET_SNGL_CYCL 0X19 // Définir un cycle unique. #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 #RYdefine_MDRY_N 0x4C #define CMD_QUERY_STATUS 0x42 #define CMD_QUERY_VOLUME 0x43 #RYdefine_MDRY_VOLUME 0x43 #RYdefine CMD *** Opitons **************************/ #define DEV_TF 0X02 /****************** ******************************************************** *****/ nombre entier; octet estado; octet buzzer = 2; octet broche = 0; octet SortNumber = 0; bouton booléen = 0; void setup() { Serial.begin(9600); mp3.begin(9600); retard (500); for(broche = 8; broche 13) { broche = 8; } Serial.println("Varrendo…"); Serial.println(broche); //retard(1000); }while(bouton != 1); Serial.println("Saiu…"); if(bouton == 1 && (broche-1) != SortNumber) { sendCommand(0x03, 0, 6); retard(3000); } if(bouton == 1 && (broche-1) == SortNumber) { sendCommand (0x03, 0, 7); retard(3000); } // Vérifiez la réponse. if (mp3.available()) { Serial.println(decodeMP3Answer()); } retard (100); //Serial.println("Tocando musica…"); } /****************************************************** ********************************/ /*Fonction sendMP3Command: rechercher une commande 'c' et l'envoyer en MP3 */ /*Paramètre: c. Code pour la commande MP3, 'h' pour l'aide. */ /*Return: void */ void sendMP3Command(char c) { switch (c) { case '?': case 'h': Serial.println("HELP "); Serial.println(" p = Play "); Serial.println("P = Pause"); Serial.println(" > = Suivant"); Serial.println(" ': Serial.println("Next"); sendCommand(CMD_NEXT_SONG); sendCommand(CMD_PLAYING_N); // demande le numéro du fichier en cours de lecture break; case 'Carte mémoire insérée."; break; case 0x3D: decodedMP3Answer += " -> Completed play num " + String(ansbuf[6], DEC); //sendCommand(CMD_NEXT_SONG); //sendCommand(CMD_PLAYING_N); // demande le numéro du fichier en cours de lecture break; case 0x40: decodedMP3Answer += " -> Error"; break; case 0x41: decodedMP3Answer += " -> Data recived correctement. "; break; case 0x42: decodedMP3Answer += " -> Status playing: " + String(ansbuf[6], DEC); pause; cas 0x48: decodedMP3Answer += " -> Nombre de fichiers: " + String(ansbuf[6], DEC); pause; cas 0x4C: decodedMP3Answer += " -> Lecture: " + String(ansbuf[6], DEC); pause; cas 0x4E: decodedMP3Answer += " -> Nombre de fichiers du dossier: " + String(ansbuf[6], DEC); pause; cas 0x4F: decodedMP3Answer += " -> Nombre de dossiers: " + String(ansbuf [6], DEC); pause; } return decodedMP3Answer; } /****************************************** ************ *********************************/ /*Fonction: Envoi de commande vers le MP3 */ /*Paramètre: octet command */ /*Paramètre: octet dat1 paramètre pour la commande */ /*Paramètre: octet dat2 paramètre pour la commande */ void sendCommand(byte command){ sendCommand(command, 0, 0); } void sendCommand(commande d'octet, octet dat1, octet dat2){ délai(20); Send_buf[0] = 0x7E; // Envoi_buf[1] = 0xFF; // Envoi_buf[2] = 0x06; // Len Send_buf[3] = commande; // Envoi_buf[4] = 0x01; // 0x00 NON, 0x01 retour Send_buf[5] = dat1; // datah Send_buf[6] = dat2; // datal Send_buf[7] = 0xEF; // Serial.print("Envoi: "); for (uint8_t i = 0; i < 8; i++) { mp3.write(Send_buf); Serial.print(sbyte2hex(Send_buf)); } Serial.println(); } /****************************************************** ********************************/ /*Fonction: sbyte2hex. Renvoie des données d'octet au format HEX. */ /*Paramètre:- uint8_t b. Octet à convertir en HEX. */ /*Return: String */ String sbyte2hex(uint8_t b) { String shex; shex = "0X"; si (b < 16) shex += "0"; shex += Chaîne(b, HEX); shex += " "; retour shex; } /****************************************************** ********************************/ /*Fonction: shex2int. Renvoie un entier à partir d'une chaîne HEX. */ /*Paramètres. char *s pour convertir en HEX. */ /*Paramètre: n. longueur du caractère *s. */ /* Retour: int */ int shex2int(char *s, int n){ int r = 0; pour (int i=0; i='0' && s='A' && s<='F'){ r *= 16; r += (s - 'A') + 10; } } renvoie r; } /****************************************************** ********************************/ /*Fonction: réponse. Renvoie une réponse String du module UART mp3. */ /*Paramètre:- uint8_t b. annuler. */ /*Retour: chaîne. Si la réponse est bien formatée, répondez. */ String sanswer(void) { uint8_t i = 0; Chaîne mp3answer = ""; // Obtient seulement 10 octets while (mp3.available() && (i < 10)) { uint8_t b = mp3.read(); ansbuf = b; je++; mp3answer += sbyte2hex(b); } // si le format de réponse est correct. if ((ansbuf[0] == 0x7E) && (ansbuf[9] == 0xEF)) { return mp3answer; } return "???: " + mp3answer; }

Tout d'abord, nous définissons toutes les variables du programme et les adresses des registres d'accès du module YX5300.

#comprendre

#define ARDUINO_RX 5 //devrait se connecter au TX du module Serial MP3 Player #define ARDUINO_TX 6 //connecter au RX du module SoftwareSerial mp3(ARDUINO_RX, ARDUINO_TX); statique int8_t Send_buf[8] = {0}; // Buffer pour les commandes d'envoi. // MIEUX LOCALEMENT statique uint8_t ansbuf[10] = {0}; // Tampon pour les réponses. // MIEUX LOCALEMENT String mp3Answer; // Réponse du MP3. String sanswer(void); Chaîne sbyte2hex(uint8_t b); /************ Octet de commande **************************/ #define CMD_NEXT_SONG 0X01 // Lecture suivante chanson. #define CMD_PREV_SONG 0X02 // Lecture de la chanson précédente. #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 // Lecture en un seul cycle. #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_FILE 0XMD0F #define CMD_PAUSE 0X0E #define CMD_PLAY_FOLDER_FILE 0XMD0F #define #define CMD_FOLDER_CYCLE 0X17 #define CMD_SHUFFLE_PLAY 0x18 // #define CMD_SET_SNGL_CYCL 0X19 // Définir un cycle unique. #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 #RYdefine_MDRY_VOLUME 0x43 #RYdefine CMD_FL *** Opitons **************************/ #define DEV_TF 0X02 /****************** ************************************************** *****/ nombre entier; octet estado; octet buzzer = 2; octet broche = 0; octet SortNumber = 0; bouton booléen = 0;

Étape 8:

Ces adresses de registre sont utilisées pour configurer le fonctionnement du module. Par exemple, voir cette adresse d'inscription ci-dessous.

#define CMD_PLAY_W_INDEX 0X03

L'adresse 0x03 est définie avec le nom CMD_PLAY_W_INDEX. Il est utilisé pour déclencher une chanson à partir de son numéro, c'est-à-dire que vous entrez le numéro du son et il sera joué.

Ce sera avec ces valeurs que nous les utiliserons et configurerons le fonctionnement de notre projet.

Après avoir défini les différentes adresses qui seront utilisées, nous entrerons dans la fonction de configuration et configurerons les broches et la communication série pour notre projet.

Étape 9: La fonction Void Setup()

Ensuite, voir la fonction de configuration d'annulation. J'ai fait tous les réglages des broches des boutons, la communication série du module MP3, et l'initialisation du module de la carte dans le MP3.

void setup()

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

J'ai commencé la communication série pour imprimer des données sur la série de l'ordinateur, puis nous avons commencé la communication série via l'objet mp3.

Serial.begin(9600);

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

Le module mp3 est contrôlé par des commandes reçues par la série Arduino. Dans ce processus, nous avons utilisé la bibliothèque SoftwareSerial et émulé une série sur les broches numériques Arduino.

Ainsi, vous pourrez utiliser l'Arduino pour contrôler le module MP3 grâce aux commandes qui lui sont envoyées.

De plus, nous avons fait la configuration des pins numériques et l'initialisation du module Carte MP3

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

Après avoir fait la configuration, il faut passer à la logique principale dans la fonction void loop.

Étape 10: La fonction principale Void Loop()

Le code est très simple et toute la structure logique est présentée ci-dessous. Dans ce qui suit, je vais vous expliquer la logique complète de la fonction principale.

boucle vide()

{ broche = 8; randomSeed(analogRead(A0)); nombre = aléatoire (8, 12); Numéro de tri = numéro; numéro = numéro - 7; Serial.println(numéro); sendCommand (0x03, 0, numéro); retard(1000); do { bouton = digitalRead(pin); Serial.println(bouton); broche++; if(broche > 13) { broche = 8; } Serial.println("Varrendo…"); Serial.println(broche); //retard(1000); }while(bouton != 1); Serial.println("Saiu…"); if(bouton == 1 && (broche-1) != SortNumber) { sendCommand(0x03, 0, 6); retard(3000); } if(bouton == 1 && (broche-1) == SortNumber) { sendCommand (0x03, 0, 7); retard(3000); } // Vérifiez la réponse. if (mp3.available()) { Serial.println(decodeMP3Answer()); } retard (100); //Serial.println("Tocando musica…"); }

A chaque démarrage du cycle de la fonction de boucle, nous allons générer une nouvelle valeur entre 8 et 12 pour générer le son d'une voyelle. La valeur de 8 à 12 se réfère à la broche numérique de la voyelle.

Le code pour générer la valeur aléatoire est indiqué ci-dessous.

broche = 8;

randomSeed(analogRead(A0)); nombre = aléatoire (8, 12); Numéro de tri = numéro;

De plus, on soustrait 7 au montant tiré entre 8 et 12. Cela nous permettra de pointer les positions de 1 à 5 des chansons enregistrées sur la carte mémoire.

numéro = numéro - 7;

Après cela, j'ai reproduit le son de la voyelle tracée sur la ligne ci-dessous.

sendCommand (0x03, 0, numéro);

retard(1000);

Maintenant, le moment important est venu: le moment où nous allons lire le bouton pressé par l'enfant. La partie code est présentée ci-dessous.

faire

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

Cette boucle sera exécutée jusqu'à ce que l'utilisateur appuie sur les boutons. La boucle vous permet de scanner les 5 broches numériques et au moment où l'enfant appuie sur l'un des boutons, il sortira de la boucle et vérifiera si l'enfant a répondu correctement.

Vous ferez la vérification en utilisant le code ci-dessous.

if(bouton == 1 && (broche-1) != SortNumber)

{ envoyerCommande (0x03, 0, 6); retard(3000); } if(bouton == 1 && (broche-1) == SortNumber) { sendCommand (0x03, 0, 7); retard(3000); }

La première condition sera exécutée lorsque l'utilisateur commet une erreur parce qu'un bouton a été enfoncé et que la valeur déclenchée de la broche était différente de la broche dessinée (SortNumber).

À ce stade, vous devez exécuter la commande ci-dessous.

envoyerCommande (0x03, 0, 6);

retard(3000);

Cette commande est utilisée pour déclencher la mauvaise tonalité de réponse. Enfin, nous avons la deuxième condition qui servira à vérifier si l'enfant a raison.

if(bouton == 1 && (broche-1) == SortNumber)

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

Étape 11:

Image
Image

Si un bouton a été enfoncé et que la broche numérique qui a été enfoncée est la même que la broche dessinée, le système déclenchera un son de réponse correcte.

Comme je vous l'explique, ce code est très simple et aidera tout enfant à développer sa connaissance des voyelles à travers un jeu avec Arduino.

Dans la figure ci-dessus, la caisse de résonance exécute la chanson stockée sur la carte SD du module MP3 YX5300.

Étape 12: Conclusion

L'enseignement en classe doit être constamment modifié et l'Arduino peut être un excellent allié pour créer des tâches amusantes.

Grâce à ce projet, il a été possible de développer une activité simple qui peut développer les compétences des enfants grâce à la connaissance du son et de l'orthographe de chaque voyelle.

Contrairement aux méthodes d'enseignement traditionnelles, les enfants apprendront en s'amusant en classe grâce aux jeux et à l'électronique.

Étape 13: Reconnaissance

Ce projet a été développé grâce au soutien et aux encouragements de la société JLCPCB. Ils ont encouragé l'éducation et nous ont invités à développer le jeu des voyelles pour enseigner aux enfants en classe.

Si vous souhaitez acheter les plaques électroniques du Jeu des Voyelles, vous pouvez accéder à ce lien et acheter 10 unités pour 2$ chez JLCPCB.

Conseillé: