INHOUDSOPGAWE:

Klinkerspel met Arduino en YX5300 MP3 -module Catalex: 13 stappe
Klinkerspel met Arduino en YX5300 MP3 -module Catalex: 13 stappe

Video: Klinkerspel met Arduino en YX5300 MP3 -module Catalex: 13 stappe

Video: Klinkerspel met Arduino en YX5300 MP3 -module Catalex: 13 stappe
Video: OPEN-SMART Rich UNO R3 Lesson 18 Speak voice.mkv 2024, November
Anonim
Klinkerspel met Arduino en YX5300 MP3 -module Catalex
Klinkerspel met Arduino en YX5300 MP3 -module Catalex

Kan u hierdie vraag lees? Dis vreemd! Ek het hierdie vraag doelbewus gevra. As u hierdie teks kan lees, is dit omdat u die hele alfabet ken en natuurlik van al die vokale geleer het.

Klinkers kom in alle woorde voor. Dit is onmoontlik om van elkeen van hulle te ontsnap. Laat ek u nou 'n vraag stel. Was u kinderleer pret en het dit tegnologiese hulpbronne ingesluit?

Ek is seker dat die leerhulpbronne min was en dat u tradisionele metodes gebruik het om die vokale en die alfabet te leer.

Is dit tog moontlik om tegnologiese hulpbronne te gebruik om vokale te leer?

In hierdie artikel sal ek u leer hoe u u studente en kinders vokale kan leer deur middel van 'n speletjie.

Ek sal jou leer hoe om 'n stelsel met 'n stem te skep, waar jou kind/student die geluid van die letter sal hoor en op 'n knoppie moet druk om die korrekte letter aan te dui.

Hulle sal dus leer terwyl hulle speel en altyd gemotiveerd wees om te studeer.

Nou, ek gaan u die stap-vir-stap proses wys sodat u u eie speletjie kan skep en kinders die vokale kan leer.

Voorrade

JLCPCB -printplaat

Arduino Uno

Drukknopskakelaar

Weerstand van 10kR

Manlike kop 2, 54 mm 1x7

Stap 1: Ontwikkel die vokaalspel met Arduino

Die ontwikkeling van die klinkerspel met Arduino
Die ontwikkeling van die klinkerspel met Arduino

Die kern van die spel is die JLCPCB -printplaat van die Vowels. U kan toegang tot hierdie skakel kry en die projeklêers aflaai. Dit het 5 knoppies. U sal elke knoppie gebruik om 'n klinker voor te stel en dit aan u Arduino te koppel.

Die printplaat word in figuur 1 getoon.

Stap 2:

Beeld
Beeld

Met hierdie PCB -projek kan u dit verbind met die Arduino en u speletjie skep. Vervolgens bied ek u 'n elektroniese skema aan om die projek op u protobord te monteer of te bou.

Stap 3:

Uit hierdie skema stel ons die uitleg van die elektroniese bord op. Dit word in figuur 2 getoon, en u kan die lêers aflaai en 'n projek maak.

Kies 5 penne uit die Arduino en verbind die springers op die bord met die Arduino. Of anders kan u die volgende elektroniese diagram saamstel.

Stap 4: Die projekidee

Die projek idee
Die projek idee

Ek sal u leer hoe om 'n MP3 -klankstelsel met Arduino te monteer. Hierdie stelsel is verantwoordelik vir die weergawe van die stem wat die letter spreek. Die klank van elke letter word getrek met behulp van 'n waarde van 1 tot 5, waar 1 voor A en 5 vir U staan.

As die kind dus die geluid hoor, moet hy na die sleutelbord kyk, die spelling van die klinker herken en op die regte sleutel druk.

As dit misluk, flits die stelsel drie keer die rooi LED. Andersins aktiveer die stelsel 'n zoemer vir 5 sekondes en trek 'n nuwe klinker.

Om dit te kan doen, moet u die volgende stroombaan saamstel.

In hierdie kring verbind u die MP3 -module en die klinkerbord op die Arduino. Die Bluetooth -module is gebruik om die Catalex MP3 -module voor te stel.

Die Arduino is verantwoordelik vir die sorteer van die 5 getalle en stuur dan die opdrag om die getekende klinker te aktiveer

Stap 5:

Beeld
Beeld

Daarna wag ons totdat die kind 'n knoppie hoor en druk, soos in die figuur hierbo getoon.

Elke knoppie hierbo verteenwoordig 'n klinker van die alfabet. Vervolgens sal ek u wys hoe u die programmeringslogika vir hierdie projek sal bou.

Stap 6: Bou die spelprogrammeringslogika

Die bou van die spel se programmeringslogika
Die bou van die spel se programmeringslogika

Die vokaalspelstelsel is gebaseer op die werking van die YX5300 -module. Hierdie module het 'n paar funksies, maar ons fokus daarop om die werkstruktuur van die spel aan te bied deur middel van die belangrikste funksies van die YX5300 -module.

Hieronder gee ek u al die programmeringslogika van die projek.

Stap 7:

In die volgende sal ek stap vir stap verduidelik hoe om die logika van hierdie prettige speletjie vir kinders te bou.

#insluit

#define ARDUINO_RX 5 // moet koppel aan TX van die Serial MP3 Player -module #define ARDUINO_TX 6 // koppel aan RX van die module SoftwareSerial mp3 (ARDUINO_RX, ARDUINO_TX); statiese int8_t Send_buf [8] = {0}; // Buffer vir stuuropdragte. // BETER PLAASLIK staties uint8_t ansbuf [10] = {0}; // Buffer vir die antwoorde. // BETER PLAASLIK String mp3Answer; // Antwoord van die MP3. String -antwoord (leeg); String sbyte2hex (uint8_t b); / ************ Command byte *************************/ #define CMD_NEXT_SONG 0X01 // Speel volgende liedjie. #definieer CMD_PREV_SONG 0X02 // Speel vorige liedjie. #definieer CMD_PLAY_W_INDEX 0X03 #definieer CMD_VOLUME_UP 0X04 #definieer CMD_VOLUME_DOWN 0X05 #definieer CMD_SET_VOLUME 0X06 #definieer CMD_SNG_CYCL_PLAY 0X08 // Single Cycle Play. #define CMD_SEL_DEV 0X09 #definieer CMD_SLEEP_MODE 0X0A #definieer CMD_WAKE_UP 0X0B #definieer CMD_RESET 0X0C #definieer CMD_PLAY 0X0D #definieer CMD_PAUSE 0X0E #definieer CMD_PLAY_FOLD_FINE_DEX_STEL_DEX_STEL_DEX_STEL #FEEL_DEX_STEL_DEX_STEL_DEX_STEL_VOERDE_STEL_DE_VOERSTELLING #FEEL_DEXP_STEL_DEXP_STEL_DE_VOER_VIND_STEL_DE_VOERDE_STOP #definieer CMD_FOLDER_CYCLE 0X17 #definieer CMD_SHUFFLE_PLAY 0x18 // #definieer CMD_SET_SNGL_CYCL 0X19 // Stel enkele siklus in. # 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 gonser = 2; byte pen = 0; byte SortNumber = 0; bool knoppie = 0; ongeldige opstelling () {Serial.begin (9600); mp3.begin (9600); vertraging (500); vir (pen = 8; pen 13) {pen = 8; } Serial.println ("Varrendo …"); Serial.println (pen); // vertraging (1000); } terwyl (knoppie! = 1); Serial.println ("Saiu …"); if (knoppie == 1 && (pin-1)! = SortNumber) {sendCommand (0x03, 0, 6); vertraging (3000); } if (knoppie == 1 && (pin-1) == SortNumber) {sendCommand (0x03, 0, 7); vertraging (3000); } // Kyk vir die antwoord. as (mp3.available ()) {Serial.println (decodeMP3Answer ()); } vertraging (100); //Serial.println("Tocando musica … "); } /*********************************************** ****************************** / /*Funksie sendMP3Command: soek na 'n 'c' opdrag en stuur dit na MP3 * / /*Parameter: c. Kode vir die MP3 -opdrag, 'h' vir hulp. *// *Return: void */ void sendMP3Command (char c) {switch (c) {case '?': Case 'h': Serial.println ("HELP"); Serial.println ("p = Speel"); Serial.println ("P = Pouse"); Serial.println ("> = Volgende"); Serial.println ("': Serial.println (" Next "); sendCommand (CMD_NEXT_SONG); sendCommand (CMD_PLAYING_N); // vra vir die aantal lêers wat breek speel; case' Geheue kaart geplaas. '; Break; case 0x3D: decodedMP3Answer + = " -> Voltooide afspeel num" + String (ansbuf [6], DEC); // sendCommand (CMD_NEXT_SONG); // sendCommand (CMD_PLAYING_N); // vra vir die aantal lêers wat breek speel; saak 0x40: decodedMP3Answer += " -> Error"; break; case 0x41: decodedMP3Answer += " -> Data korrek ontvang."; break; case 0x42: decodedMP3Answer += " -> Status speel:" +String (ansbuf [6], DEC); break; case 0x48: decodedMP3Answer + = " -> File count:" + String (ansbuf [6], DEC); break; case 0x4C: decodedMP3Answer + = " -> Playing:" + String (ansbuf [6], DEC); break; case 0x4E: decodedMP3Answer + = " -> Folder file count:" + String (ansbuf [6], DEC); break; case 0x4F: decodedMP3Answer + = " -> Folder count:" + String (ansbuf [6], DEC); break;} return decodedMP3Answer;} /*********************************** ************* ******************************** / /*Funksie: Stuur opdrag na die MP3* / /*parameter: byte command *// *Parameter: byte dat1 parameter vir die command *// *Parameter: byte dat2 parameter vir die command */ void sendCommand (byte command) {sendCommand (command, 0, 0); } void sendCommand (byte command, byte dat1, byte dat2) {delay (20); Send_buf [0] = 0x7E; // Send_buf [1] = 0xFF; // Send_buf [2] = 0x06; // Len Send_buf [3] = opdrag; // Send_buf [4] = 0x01; // 0x00 NEE, 0x01 terugvoer Send_buf [5] = dat1; // datah Send_buf [6] = dat2; // data Send_buf [7] = 0xEF; // Serial.print ("Stuur:"); vir (uint8_t i = 0; i <8; i ++) {mp3.write (Send_buf ); Serial.print (sbyte2hex (Send_buf )); } Serial.println (); } /*********************************************** ******************************* / /*Funksie: sbyte2hex. Wys 'n greepdata in HEX -formaat. * / /*Parameter:- uint8_t b. Byte om te skakel na HEX. *// *Return: String */ String sbyte2hex (uint8_t b) {String shex; shex = "0X"; as (b <16) shex += "0"; shex += string (b, HEX); shex += ""; terugkeer sjeik; } /************************************************ ******************************* / /*Funksie: shex2int. Wys 'n int uit 'n HEX -string. */ /*Grense. char *s om te skakel na HEX. * / /*Parameter: n. char *s se lengte. *// *Return: int */ int shex2int (char *s, int n) {int r = 0; vir (int i = 0; i = '0' && s = 'A' && s <= 'F') {r *= 16; r + = (s - 'A') + 10; }} gee r terug; } /************************************************ ******************************* / /*Funksie: antwoord. Wys 'n snaarantwoord van die mp3 UART -module. * / /*Parameter:- uint8_t b. nietig. * / /*Terug: string. As die antwoord goed geformuleer is, antwoord. */ String -antwoord (leeg) {uint8_t i = 0; String mp3answer = ""; // Kry slegs 10 grepe terwyl (mp3.available () && (i <10)) {uint8_t b = mp3.read (); ansbuf = b; ek ++; mp3answer += sbyte2hex (b); } // as die antwoordformaat korrek is. if ((ansbuf [0] == 0x7E) && (ansbuf [9] == 0xEF)) {return mp3answer; } gee terug "???:" + mp3 -antwoord; }

Eerstens definieer ons al die programveranderlikes en die toegangsregisteradresse van die YX5300 -module.

#insluit

#define ARDUINO_RX 5 // moet koppel aan TX van die Serial MP3 Player -module #define ARDUINO_TX 6 // koppel aan RX van die module SoftwareSerial mp3 (ARDUINO_RX, ARDUINO_TX); statiese int8_t Send_buf [8] = {0}; // Buffer vir stuuropdragte. // BETER PLAASLIK staties uint8_t ansbuf [10] = {0}; // Buffer vir die antwoorde. // BETER PLAASLIK String mp3Answer; // Antwoord van die MP3. String -antwoord (leeg); String sbyte2hex (uint8_t b); / ************ Command byte *************************/ #define CMD_NEXT_SONG 0X01 // Speel volgende liedjie. #definieer CMD_PREV_SONG 0X02 // Speel vorige liedjie. #define CMD_PLAY_W_INDEX 0X03 #definieer CMD_VOLUME_UP 0X04 #definieer CMD_VOLUME_DOWN 0X05 #definieer CMD_SET_VOLUME 0X06 #definieer CMD_SNG_CYCL_PLAY 0X08 // Single Cycle Play. #define CMD_SEL_DEV 0X09 #definieer CMD_SLEEP_MODE 0X0A #definieer CMD_WAKE_UP 0X0B #definieer CMD_RESET 0X0C #definieer CMD_PLAY 0X0D #definieer CMD_PAUSE 0X0E #definieer CMD_PLAY_FOLD_FINE_DEX_STEL_DEX_STEL_DEX_STEL #FEEL_DEX_STEL_DEX_STEL_DEX_STEL_VOERDE_STEL_DE_VOERSTELLING #FEEL_DEXP_STEL_DEXP_STEL_DE_VOER_VIND_STEL_DE_VOERDE_STOP #definieer CMD_FOLDER_CYCLE 0X17 #definieer CMD_SHUFFLE_PLAY 0x18 // #definieer CMD_SET_SNGL_CYCL 0X19 // Stel enkele siklus in. # 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 gonser = 2; byte pen = 0; byte SortNumber = 0; bool knoppie = 0;

Stap 8:

Hierdie registeradresse word gebruik om die werking van die module op te stel. Sien byvoorbeeld hierdie registrasie -adres hieronder.

#definieer CMD_PLAY_W_INDEX 0X03

Adres 0x03 word gedefinieer met die naam CMD_PLAY_W_INDEX. Dit word gebruik om 'n liedjie uit sy nommer te aktiveer, dit wil sê, jy voer die nommer van die klank in en dit word gespeel.

Met hierdie waardes sal ons dit gebruik en die funksionering van ons projek instel.

Nadat u die verskillende adresse gedefinieer het, gaan ons na die opstellingsfunksie en stel ons die penne en seriële kommunikasie vir ons projek op.

Stap 9: Die funksie Void Setup ()

Sien vervolgens die leemte -opstelfunksie. Ek het al die instellings van die knoppies gemaak, die seriële kommunikasie van die MP3 -module en die inisialisering van die kaartmodule in die MP3.

leemte opstelling ()

{Serial.begin (9600); mp3.begin (9600); vertraging (500); vir (pin = 8; pin <13; pin ++) {pinMode (pin, INPUT); } stuur opdrag (CMD_SEL_DEV, 0, DEV_TF); vertraging (500); }

Ek het die seriële kommunikasie begin om data op die rekenaar se reeks af te druk, en toe begin ons met die seriële kommunikasie deur die mp3 -voorwerp.

Serial.begin (9600);

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

Die mp3 -module word beheer deur opdragte wat die Arduino -reeks ontvang het. In hierdie proses het ons die SoftwareSerial -biblioteek gebruik en 'n reeks op die Arduino digitale penne nageboots.

U kan dus die Arduino gebruik om die MP3 -module te beheer deur opdragte wat daarheen gestuur word.

Boonop het ons die konfigurasie van die digitale penne en die inisialisering van die MP3 -kaartmodule gemaak

vir (pin = 8; pin <13; pin ++) {pinMode (pin, INPUT); } stuur opdrag (CMD_SEL_DEV, 0, DEV_TF); vertraging (500);

Nadat ons die konfigurasie gemaak het, moet ons na die hooflogika in die leemte -lusfunksie gaan.

Stap 10: die hooffunksie leegloop ()

Die kode is baie eenvoudig en die hele logiese struktuur word hieronder aangebied. In die volgende sal ek u die volledige logika van die hooffunksie verduidelik.

leemte lus ()

{pen = 8; randomSeed (analogRead (A0)); numero = ewekansig (8, 12); SortNumber = getal; numero = numero - 7; Serial.println (numero); sendCommand (0x03, 0, getal); vertraging (1000); doen {button = digitalRead (pin); Serial.println (knoppie); pen ++; as (pen> 13) {pin = 8; } Serial.println ("Varrendo …"); Serial.println (pen); // vertraging (1000); } terwyl (knoppie! = 1); Serial.println ("Saiu …"); if (knoppie == 1 && (pin-1)! = SortNumber) {sendCommand (0x03, 0, 6); vertraging (3000); } if (knoppie == 1 && (pin-1) == SortNumber) {sendCommand (0x03, 0, 7); vertraging (3000); } // Kyk vir die antwoord. as (mp3.available ()) {Serial.println (decodeMP3Answer ()); } vertraging (100); //Serial.println("Tocando musica … "); }

By elke begin van die lusfunksiesiklus, sal ons 'n nuwe waarde tussen 8 en 12 genereer om die klank van 'n klinker te genereer. Die waarde van 8 tot 12 verwys na die digitale pen van die klinker.

Die kode vir die generering van die ewekansige waarde word hieronder getoon.

speld = 8;

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

Boonop trek ons 7 af van die bedrag wat tussen 8 en 12. getrek word. Dit sal ons toelaat om na die posisies van 1 tot 5 van die liedjies wat op die geheue kaart opgeneem is, te wys.

numero = numero - 7;

Daarna het ek die klank van die klinker op die onderstaande lyn weergegee.

sendCommand (0x03, 0, getal);

vertraging (1000);

Nou het die belangrike tyd aangebreek: die oomblik dat ons die knoppie deur die kind gaan lees. Die kode gedeelte word hieronder aangebied.

doen

{knoppie = digitalRead (pin); Serial.println (knoppie); pen ++; as (pen> 13) {pin = 8; } Serial.println ("Varrendo …"); Serial.println (pen); // vertraging (1000); } terwyl (knoppie! = 1);

Hierdie lus word uitgevoer totdat die gebruiker op die knoppies druk. Met die lus kan u die 5 digitale penne skandeer, en sodra die kind op een van die knoppies druk, kom dit uit die lus en kyk of die kind korrek gereageer het.

U sal die verifikasie doen met behulp van die onderstaande kode.

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

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

Die eerste voorwaarde word uitgevoer as die gebruiker 'n fout maak omdat 'n knoppie ingedruk is en die waarde van die pen anders was as die getekende pen (SortNumber).

Op hierdie punt moet u die opdrag hieronder uitvoer.

sendCommand (0x03, 0, 6);

vertraging (3000);

Hierdie opdrag word gebruik om die verkeerde reaksietoon te aktiveer. Laastens het ons die tweede voorwaarde wat gebruik sal word om te kyk of die kind reg is.

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

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

Stap 11:

Beeld
Beeld

As 'n knoppie ingedruk is en die digitale pen wat ingedruk is dieselfde is as die getekende pen, sal die stelsel 'n korrekte antwoordklank veroorsaak.

Soos ek u verduidelik, is hierdie kode baie eenvoudig en sal dit elke kind help om hul kennis van klinkers te ontwikkel deur 'n speletjie met Arduino.

In die figuur hierbo voer die klankbus die liedjie wat op die SD -kaart van die MP3 -module YX5300 gestoor is, uit.

Stap 12: Gevolgtrekking

Klasonderrig moet voortdurend verander word en die Arduino kan 'n goeie bondgenoot wees om prettige take te skep.

Deur middel van hierdie projek was dit moontlik om 'n eenvoudige aktiwiteit te ontwikkel wat kinders se vaardighede kan ontwikkel deur kennis van die klank en spelling van elke klinker.

Anders as met tradisionele onderrigmetodes, leer kinders deur pret in die klas deur middel van speletjies en elektronika.

Stap 13: Erkenning

Hierdie projek is ontwikkel danksy die ondersteuning en aanmoediging van die onderneming JLCPCB. Hulle het opvoeding aangemoedig en ons uitgenooi om die klinkerspel te ontwikkel vir die onderrig van kinders in die klaskamer.

As u die elektroniese plate van die Game of Vowels wil koop, kan u toegang kry tot hierdie skakel en 10 eenhede vir $ 2 by JLCPCB koop.

Aanbeveel: