Indholdsfortegnelse:

Vokalspil med Arduino og YX5300 MP3 -modul Catalex: 13 trin
Vokalspil med Arduino og YX5300 MP3 -modul Catalex: 13 trin

Video: Vokalspil med Arduino og YX5300 MP3 -modul Catalex: 13 trin

Video: Vokalspil med Arduino og YX5300 MP3 -modul Catalex: 13 trin
Video: How to play songs with arduino ? 2024, November
Anonim
Vokalspil med Arduino og YX5300 MP3 -modul Catalex
Vokalspil med Arduino og YX5300 MP3 -modul Catalex

Kan du læse dette spørgsmål? Det er mærkeligt! Jeg stillede dette spørgsmål med vilje. Hvis du kan læse denne tekst, er det fordi du kender hele alfabetet og selvfølgelig har lært om alle vokalerne.

Vokaler er til stede i alle ord. Det er umuligt at flygte fra hver af dem. Lad mig nu stille dig et spørgsmål. Var din barndomsindlæring sjov og involverede teknologiske ressourcer?

Jeg er sikker på, at læringsressourcerne var få, og du brugte traditionelle metoder til at lære vokalerne og alfabetet.

Er det trods alt muligt at bruge nogle teknologiske ressourcer til at lære vokaler?

I denne artikel vil jeg lære dig at lære dine elever og børn vokaler gennem et spil.

Jeg vil lære dig, hvordan du opretter et system med en stemme, hvor dit barn/elev vil høre lyden af bogstavet og skal trykke på en knap for at angive det korrekte bogstav.

Således vil de lære, mens de spiller, og vil altid være motiverede til at studere.

Nu vil jeg vise dig den trinvise proces, hvor du kan oprette dit eget spil og lære børnene vokaler.

Forbrugsvarer

JLCPCB printkort

Arduino Uno

Trykknapkontakt

10kR modstand

Hanehoved 2, 54 mm 1x7

Trin 1: Udvikle spillet af vokaler med Arduino

Udvikling af vokalspillet med Arduino
Udvikling af vokalspillet med Arduino

Hjertet i spillet er JLCPCB's printkort i vokalerne. Du kan få adgang til dette link og downloade projektfilerne. Den har 5 knapper. Du vil bruge hver knap til at repræsentere en vokal og forbinde den med din Arduino.

Printkortet er vist i figur 1.

Trin 2:

Billede
Billede

Med dette PCB -projekt kan du forbinde det med Arduino og oprette dit spil. Dernæst vil jeg tilbyde dig en elektronisk skematik, så du kan samle eller bygge projektet på dit protoboard.

Trin 3:

Fra denne skematiske opsætning opretter vi layoutet på det elektroniske kort. Det er vist i figur 2, og du kan downloade filerne og lave dit projekt.

Vælg 5 pins fra Arduino, og forbind jumperne på brættet med Arduino. Eller på anden måde kan du samle følgende elektroniske diagram.

Trin 4: Projektidéen

Projektidéen
Projektidéen

Jeg vil lære dig, hvordan du samler et MP3 -lydsystem med Arduino. Dette system er ansvarligt for at gengive stemmen, der taler brevet. Lyden af hvert bogstav vil blive tegnet ved hjælp af en værdi fra 1 til 5, hvor 1 repræsenterer A og 5 repræsenterer U.

Når barnet således hører lyden, skal det se på tastaturet, genkende stavningen af vokalen og trykke på den korrekte tast.

Hvis det ikke lykkes, blinker systemet den røde LED 3 gange. Ellers vil systemet aktivere en summer i 5 sekunder og tegne en ny vokal.

For at gøre dette skal du samle følgende kredsløb.

I dette kredsløb forbinder du MP3 -modulet og vokalbordet på Arduino. Bluetooth -modulet blev brugt til at repræsentere Catalex MP3 -modulet.

Arduino er ansvarlig for at sortere de 5 tal og derefter sende kommandoen for at aktivere den tegnede vokal

Trin 5:

Billede
Billede

Derefter venter vi, indtil barnet hører og trykker på en knap, som vist i figuren ovenfor.

Hver knap ovenfor repræsenterer en vokal i alfabetet. Dernæst viser jeg dig, hvordan du opbygger programmeringslogikken for dette projekt.

Trin 6: Opbygning af spillets programmeringslogik

Opbygning af spillets programmeringslogik
Opbygning af spillets programmeringslogik

Vokalspilsystemet er baseret på betjeningen af YX5300 -modulet. Dette modul har nogle funktioner, men vi vil fokusere på at præsentere spillets arbejdsstruktur gennem YX5300 -modulets hovedfunktioner.

Nedenfor giver jeg dig al projektets logik i projektet.

Trin 7:

I det følgende vil jeg forklare trin for trin for at opbygge logikken i dette sjove spil for børn.

#omfatte

#define ARDUINO_RX 5 // skal oprette forbindelse til TX i det serielle MP3 -afspillermodul #define ARDUINO_TX 6 // oprette forbindelse til RX på modulet SoftwareSerial mp3 (ARDUINO_RX, ARDUINO_TX); statisk int8_t Send_buf [8] = {0}; // Buffer til Send -kommandoer. // BEDRE LOKalt statisk uint8_t ansbuf [10] = {0}; // Buffer for svarene. // BEDRE LOKALT String mp3Answer; // Svar fra MP3. Stringsanswer (ugyldig); String sbyte2hex (uint8_t b); / ************ Kommandobyte *************************/ #define CMD_NEXT_SONG 0X01 // Spil næste sang. #define CMD_PREV_SONG 0X02 // Afspil tidligere sang. #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 // Single Cycle Play. #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_FOLD_FINE_DEX_STIL_FÆLL_FÆLL_FÆLL_FÆLL_FÆLL_FÆLL_FÆLL_FÆLL_FÆLL_FÆLL_FÆLL_STÆRKE #define CMD_FOLDER_CYCLE 0X17 #define CMD_SHUFFLE_PLAY 0x18 // #define CMD_SET_SNGL_CYCL 0X19 // Indstil enkelt cyklus. #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 / ********* *** Opinions ************************** / #define DEV_TF 0X02 / ************** ************************************************* *****/ int numero; byte estado; byte summer = 2; byte pin = 0; byte SortNumber = 0; bool -knap = 0; ugyldig opsætning () {Serial.begin (9600); mp3.begyndt (9600); forsinkelse (500); for (pin = 8; pin 13) {pin = 8; } Serial.println ("Varrendo …"); Serial.println (pin); // forsinkelse (1000); } mens (knap! = 1); Serial.println ("Saiu …"); hvis (knap == 1 && (pin-1)! = SortNumber) {sendCommand (0x03, 0, 6); forsinkelse (3000); } hvis (knap == 1 && (pin-1) == SortNumber) {sendCommand (0x03, 0, 7); forsinkelse (3000); } // Se efter svaret. hvis (mp3.available ()) {Serial.println (decodeMP3Answer ()); } forsinkelse (100); //Serial.println("Tocando musica … "); } /************************************************ ******************************* / /*Funktion sendMP3Command: søg efter en 'c' kommando og send den til MP3 * / /*Parameter: c. Kode til MP3 -kommandoen, 'h' for hjælp. *// *Return: void */ void sendMP3Command (tegn c) {switch (c) {case '?': Case 'h': Serial.println ("HJÆLP"); Serial.println ("p = Afspil"); Serial.println ("P = Pause"); Serial.println ("> = Næste"); Serial.println ("': Serial.println (" Next "); sendCommand (CMD_NEXT_SONG); sendCommand (CMD_PLAYING_N); // bede om antallet af filer, der afspilles pause; case' Hukommelseskort isat."; Break; case 0x3D: decodedMP3Answer + = " -> Afsluttet afspilning num" + String (ansbuf [6], DEC); // sendCommand (CMD_NEXT_SONG); // sendCommand (CMD_PLAYING_N); // bede om antallet af filer, der afspilles pause; sag 0x40: decodedMP3Answer += " -> Error"; break; case 0x41: decodedMP3Answer += " -> Data modtaget korrekt."; break; case 0x42: decodedMP3Answer += " -> Status afspiller:" +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;} /*********************************** ************* ******************************** / /*Funktion: Send kommando til MP3* / /*Parameter: byte kommando *// *Parameter: byte dat1 parameter for kommandoen *// *Parameter: byte dat2 parameter for kommandoen */ void sendCommand (byte kommando) {sendCommand (kommando, 0, 0); } void sendCommand (byte kommando, byte dat1, byte dat2) {forsinkelse (20); Send_buf [0] = 0x7E; // Send_buf [1] = 0xFF; // Send_buf [2] = 0x06; // Len Send_buf [3] = kommando; // Send_buf [4] = 0x01; // 0x00 NO, 0x01 feedback Send_buf [5] = dat1; // datah Send_buf [6] = dat2; // datal Send_buf [7] = 0xEF; // Serial.print ("Sender:"); for (uint8_t i = 0; i <8; i ++) {mp3.write (Send_buf ); Serial.print (sbyte2hex (Send_buf )); } Serial.println (); } /************************************************ ******************************* / /*Funktion: sbyte2hex. Returnerer en byte -data i HEX -format. * / /*Parameter:- uint8_t b. Byte til at konvertere til HEX. *// *Return: String */ String sbyte2hex (uint8_t b) {String shex; shex = "0X"; hvis (b <16) shex += "0"; shex += streng (b, HEX); shex += ""; return shex; } /************************************************ ******************************* / /*Funktion: shex2int. Returnerer en int fra en HEX -streng. * / /*Parameter: s. char *s for at konvertere til HEX. * / /*Parameter: n. char *s længde. *// *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; }} returner r; } /************************************************ ******************************* / /*Funktion: sanswer. Returnerer et strengsvar fra mp3 UART -modul. * / /*Parameter:- uint8_t b. ugyldig. * / /*Retur: String. Hvis svaret er velformuleret svar. */ String sanswer (void) {uint8_t i = 0; String mp3answer = ""; // Få kun 10 Bytes mens (mp3.available () && (i <10)) {uint8_t b = mp3.read (); ansbuf = b; i ++; mp3answer += sbyte2hex (b); } // hvis svarformatet er korrekt. hvis ((ansbuf [0] == 0x7E) && (ansbuf [9] == 0xEF)) {return mp3answer; } returner "???:" + mp3answer; }

Først definerer vi alle programvariabler og YX5300 -modulets adgangsregisteradresser.

#omfatte

#define ARDUINO_RX 5 // skal oprette forbindelse til TX i det serielle MP3 -afspillermodul #define ARDUINO_TX 6 // oprette forbindelse til RX på modulet SoftwareSerial mp3 (ARDUINO_RX, ARDUINO_TX); statisk int8_t Send_buf [8] = {0}; // Buffer til Send -kommandoer. // BEDRE LOKalt statisk uint8_t ansbuf [10] = {0}; // Buffer for svarene. // BEDRE LOKALT String mp3Answer; // Svar fra MP3. Stringsanswer (ugyldig); String sbyte2hex (uint8_t b); / ************ Kommandobyte *************************/ #define CMD_NEXT_SONG 0X01 // Spil næste sang. #define CMD_PREV_SONG 0X02 // Afspil tidligere sang. #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 // Single Cycle Play. #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_FOLD_FINE_DEX_STIL_FÆLL_FÆLL_FÆLL_FÆLL_FÆLL_FÆLL_FÆLL_FÆLL_FÆLL_FÆLL_FÆLL_STÆRKE #define CMD_FOLDER_CYCLE 0X17 #define CMD_SHUFFLE_PLAY 0x18 // #define CMD_SET_SNGL_CYCL 0X19 // Indstil enkelt cyklus. #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 / ********* *** Opinions ************************** / #define DEV_TF 0X02 / ************** ************************************************* *****/ int numero; byte estado; byte summer = 2; byte pin = 0; byte SortNumber = 0; bool -knap = 0;

Trin 8:

Disse registeradresser bruges til at konfigurere modulets drift. Se f.eks. Denne registreringsadresse herunder.

#definer CMD_PLAY_W_INDEX 0X03

Adresse 0x03 er defineret med navnet CMD_PLAY_W_INDEX. Den bruges til at udløse en sang fra dens nummer, det vil sige, at du indtaster lydens nummer, og den afspilles.

Det er med disse værdier, vi vil bruge dem og konfigurere vores projekts funktion.

Når du har defineret de forskellige adresser, der skal bruges, går vi ind i opsætningsfunktionen og konfigurerer benene og seriel kommunikation til vores projekt.

Trin 9: Funktionen Ugyldig opsætning ()

Se derefter hulrumsopsætningsfunktionen. Jeg foretog alle indstillingerne af knappestifterne, seriel kommunikation af MP3 -modulet og initialisering af kortmodulet i MP3.

ugyldig opsætning ()

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

Jeg startede den serielle kommunikation for at udskrive data på computerens serie, og derefter startede vi den serielle kommunikation gennem mp3 -objektet.

Serial.begin (9600);

mp3.begyndt (9600); forsinkelse (500);

Mp3 -modulet styres via kommandoer modtaget af Arduino -serien. I denne proces brugte vi SoftwareSerial -biblioteket og emulerede en føljeton på Arduino digitale ben.

Således vil du kunne bruge Arduino til at styre MP3 -modulet via kommandoer, der sendes til det.

Derudover lavede vi konfigurationen af de digitale ben og initialisering af MP3 -kortmodulet

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

Efter konfigurationen skal vi gå til hovedlogikken i void loop -funktionen.

Trin 10: Hovedfunktionen ugyldig loop ()

Koden er meget enkel, og hele den logiske struktur præsenteres nedenfor. I det følgende vil jeg forklare dig den komplette logik i hovedfunktionen.

hulrum ()

{pin = 8; randomSeed (analogRead (A0)); numero = tilfældig (8, 12); SortNumber = numero; numero = numero - 7; Serial.println (numero); sendCommand (0x03, 0, numero); forsinkelse (1000); gør {knap = digitalRead (pin); Serial.println (knap); pin ++; hvis (pin> 13) {pin = 8; } Serial.println ("Varrendo …"); Serial.println (pin); // forsinkelse (1000); } mens (knap! = 1); Serial.println ("Saiu …"); hvis (knap == 1 && (pin-1)! = SortNumber) {sendCommand (0x03, 0, 6); forsinkelse (3000); } hvis (knap == 1 && (pin-1) == SortNumber) {sendCommand (0x03, 0, 7); forsinkelse (3000); } // Se efter svaret. hvis (mp3.available ()) {Serial.println (decodeMP3Answer ()); } forsinkelse (100); //Serial.println("Tocando musica … "); }

Ved hver start af loop -funktionscyklussen genererer vi en ny værdi mellem 8 og 12 for at generere lyden af en vokal. Værdien fra 8 til 12 refererer til vokalens digitale pin.

Koden til generering af tilfældig værdi er vist nedenfor.

pin = 8;

randomSeed (analogRead (A0)); numero = tilfældig (8, 12); SortNumber = numero;

Derudover trækker vi 7 fra det beløb, der trækkes mellem 8 og 12. Dette giver os mulighed for at pege på positionerne for 1 til 5 af sangene, der er optaget på hukommelseskortet.

numero = numero - 7;

Derefter gengav jeg lyden af vokalen tegnet på linjen herunder.

sendCommand (0x03, 0, numero);

forsinkelse (1000);

Nu er den vigtige tid kommet: det øjeblik, hvor vi skal læse den knap, barnet har trykket på. Kodedelen præsenteres nedenfor.

gøre

{knap = digitalRead (pin); Serial.println (knap); pin ++; hvis (pin> 13) {pin = 8; } Serial.println ("Varrendo …"); Serial.println (pin); // forsinkelse (1000); } mens (knap! = 1);

Denne sløjfe udføres, indtil brugeren trykker på knapperne. Sløjfen giver dig mulighed for at scanne de 5 digitale stifter, og i det øjeblik barnet trykker på en af knapperne, kommer det ud af sløjfen og kontrollerer, om barnet har reageret korrekt.

Du foretager verifikationen ved hjælp af nedenstående kode.

hvis (knap == 1 && (pin-1)! = SortNumber)

{sendCommand (0x03, 0, 6); forsinkelse (3000); } hvis (knap == 1 && (pin-1) == SortNumber) {sendCommand (0x03, 0, 7); forsinkelse (3000); }

Den første betingelse vil blive udført, når brugeren begår en fejl, fordi der blev trykket på en knap, og den udløste værdi af stiften var forskellig fra den tegnede pin (SortNumber).

På dette tidspunkt skal du udføre kommandoen herunder.

sendCommand (0x03, 0, 6);

forsinkelse (3000);

Denne kommando bruges til at udløse den forkerte svartone. Endelig har vi den anden betingelse, der vil blive brugt til at kontrollere, om barnet har ret.

hvis (knap == 1 && (pin-1) == SortNumber)

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

Trin 11:

Billede
Billede

Hvis der blev trykket på en knap, og den digitale pin, der blev trykket på, er den samme som den tegnede pin, udløser systemet en korrekt svarlyd.

Som jeg forklarer dig, er denne kode meget enkel og vil hjælpe ethvert barn med at udvikle deres viden om vokaler gennem et spil med Arduino.

I figuren over udfører lydkassen sangen, der er gemt på SD -kortet på MP3 -modulet YX5300.

Trin 12: Konklusion

Klasseundervisning skal ændres konstant, og Arduino kan være en god allieret til at skabe sjove opgaver.

Gennem dette projekt var det muligt at udvikle en simpel aktivitet, der kan udvikle børns færdigheder gennem viden om lyden og stavningen af hver vokal.

I modsætning til traditionelle undervisningsmetoder lærer børn gennem klasseværelset sjov gennem spil og elektronik.

Trin 13: Anerkendelse

Dette projekt blev udviklet takket være støtten og opmuntringen fra virksomheden JLCPCB. De opmuntrede til uddannelse og inviterede os til at udvikle vokalspillet til undervisning af børn i klasseværelset.

Hvis du vil købe de elektroniske plader i Game of Vowels, kan du få adgang til dette link og købe 10 enheder for $ 2 på JLCPCB.

Anbefalede: