Innholdsfortegnelse:

Vokalspill med Arduino og YX5300 MP3 -modul Catalex: 13 trinn
Vokalspill med Arduino og YX5300 MP3 -modul Catalex: 13 trinn

Video: Vokalspill med Arduino og YX5300 MP3 -modul Catalex: 13 trinn

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

Kan du lese dette spørsmålet? Det er rart! Jeg stilte dette spørsmålet med vilje. Hvis du kan lese denne teksten, er det fordi du kjenner hele alfabetet og selvfølgelig har lært om alle vokalene.

Vokaler er tilstede i alle ord. Det er umulig å flykte fra hver av dem. La meg stille deg et spørsmål. Var læringen din morsom og involverte teknologiske ressurser?

Jeg er sikker på at læringsressursene var få, og at du brukte tradisjonelle metoder for å lære vokalene og alfabetet.

Tross alt, er det mulig å bruke noen teknologiske ressurser for å lære vokaler?

I denne artikkelen vil jeg lære deg hvordan du lærer elevene og barna vokaler gjennom et spill.

Jeg vil lære deg hvordan du lager et system med en stemme, der barnet ditt/eleven vil høre lyden av bokstaven og må trykke på en knapp for å angi riktig bokstav.

Dermed vil de lære mens de spiller og vil alltid være motiverte for å studere.

Nå skal jeg vise deg trinn-for-trinn-prosessen for å lage ditt eget spill, og lære vokalene til barn.

Rekvisita

JLCPCB kretskort

Arduino Uno

Trykknappbryter

10kR motstand

Hannoverskrift 2, 54 mm 1x7

Trinn 1: Utvikle vokalspillet med Arduino

Utvikle spillet av vokaler med Arduino
Utvikle spillet av vokaler med Arduino

Hjertet i spillet er JLCPCB -kretskortet til vokalene. Du kan få tilgang til denne lenken og laste ned prosjektfilene. Den har 5 knapper. Du vil bruke hver knapp til å representere en vokal og koble den til din Arduino.

Kretskortet er vist i figur 1.

Steg 2:

Bilde
Bilde

Med dette PCB -prosjektet kan du koble det til Arduino og lage spillet ditt. Deretter vil jeg tilby deg en elektronisk skjema der du kan montere eller bygge prosjektet på protoboardet ditt.

Trinn 3:

Fra denne skjematikken satte vi opp utformingen av det elektroniske kortet. Det er vist i figur 2, og du kan laste ned filene og lage prosjektet ditt.

Velg 5 pins fra Arduino og koble hopperne på brettet med Arduino. Eller på annen måte kan du sette sammen følgende elektroniske diagram.

Trinn 4: Prosjektidéen

Prosjektidéen
Prosjektidéen

Jeg vil lære deg hvordan du monterer et MP3 -lydsystem med Arduino. Dette systemet vil være ansvarlig for å gjengi stemmen som snakker bokstaven. Lyden til hver bokstav trekkes med en verdi fra 1 til 5, hvor 1 representerer A og 5 representerer U.

Når barnet hører lyden, må han se på tastaturet, gjenkjenne stavingen av vokalen og trykke på riktig tast.

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

For å gjøre dette må du sette sammen følgende krets.

I denne kretsen kobler du MP3 -modulen og vokalbordet på Arduino. Bluetooth -modulen ble brukt til å representere Catalex MP3 -modulen.

Arduino vil være ansvarlig for å sortere de 5 tallene og deretter sende kommandoen for å aktivere den tegnet vokalen

Trinn 5:

Bilde
Bilde

Etter det vil vi vente til barnet hører og trykker på en knapp, som vist på figuren ovenfor.

Hver knapp ovenfor representerer en vokal i alfabetet. Deretter viser jeg deg hvordan du skal bygge programmeringslogikken for dette prosjektet.

Trinn 6: Bygg spillets programmeringslogikk

Bygge spillets programmeringslogikk
Bygge spillets programmeringslogikk

Vokalspillsystemet er basert på driften av YX5300 -modulen. Denne modulen har noen funksjoner, men vi vil fokusere på å presentere spillets arbeidsstruktur gjennom hovedfunksjonene til YX5300 -modulen.

Nedenfor gir jeg deg all programmeringslogikk for prosjektet.

Trinn 7:

I det følgende vil jeg forklare trinn for trinn for å bygge logikken i dette morsomme spillet for barn.

#inkludere

#define ARDUINO_RX 5 // skal koble til TX i den serielle MP3 -spillermodulen #define ARDUINO_TX 6 // koble til RX på modulen SoftwareSerial mp3 (ARDUINO_RX, ARDUINO_TX); statisk int8_t Send_buf [8] = {0}; // Buffer for 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 // Spill neste sang. #define CMD_PREV_SONG 0X02 // Spill av forrige 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 #definere CMD_RESET 0X0C #definere CMD_PLAY 0X0D #definere CMD_PAUSE 0X0E #definere CMD_PLAY_FOLD_FINE_DEX_FEIL_FOLD_FIL_FOLD_FOLD_FOLD_FOLD_FOLD_FOLD_FIL_FOLD_FOLD_FOLD_FILLE_FOLD_FILLE_FOLDER #define CMD_FOLDER_CYCLE 0X17 #define CMD_SHUFFLE_PLAY 0x18 // #define CMD_SET_SNGL_CYCL 0X19 // Sett enkelt syklus. #define CMD_SET_DAC 0x1a #define DAC_ON 0x00 0x01 #define DAC_OFF #define CMD_PLAY_W_VOL 0X22 #define CMD_PLAYING_N 0x4C #define CMD_QUERY_STATUS 0x42 0x43 #define CMD_QUERY_VOLUME #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 summer = 2; byte pin = 0; byte SortNumber = 0; bool -knapp = 0; ugyldig oppsett () {Serial.begin (9600); mp3.begynner (9600); forsinkelse (500); for (pin = 8; pin 13) {pin = 8; } Serial.println ("Varrendo …"); Serial.println (pin); // forsinkelse (1000); } mens (knapp! = 1); Serial.println ("Saiu …"); if (button == 1 && (pin-1)! = SortNumber) {sendCommand (0x03, 0, 6); forsinkelse (3000); } if (button == 1 && (pin-1) == SortNumber) {sendCommand (0x03, 0, 7); forsinkelse (3000); } // Se etter svaret. if (mp3.available ()) {Serial.println (decodeMP3Answer ()); } forsinkelse (100); //Serial.println("Tocando musica … "); } /*********************************************** ****************************** / /*Funksjon sendMP3Command: søk etter en 'c' kommando og send den til MP3 * / /*Parameter: c. Kode for MP3 -kommandoen, 'h' for hjelp. *// *Return: void */ void sendMP3Command (char c) {switch (c) {case '?': Case 'h': Serial.println ("HELP"); Serial.println ("p = Spill"); Serial.println ("P = Pause"); Serial.println ("> = Neste"); Serial.println ("': Serial.println (" Next "); sendCommand (CMD_NEXT_SONG); sendCommand (CMD_PLAYING_N); // be om antall filer som spiller pause; case' Minnekort satt inn. '; Break; case 0x3D: decodedMP3Answer + = " -> Fullført avspilling num" + String (ansbuf [6], DEC); // sendCommand (CMD_NEXT_SONG); // sendCommand (CMD_PLAYING_N); // be om antall filer som spiller pause; sak 0x40: decodedMP3Answer += " -> Error"; break; case 0x41: decodedMP3Answer += " -> Data mottatt riktig."; break; case 0x42: decodedMP3Answer += " -> Status spiller:" +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;} /*********************************** ************* ******************************* / /*Funksjon: 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 tilbakemelding 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 (); } /*********************************************** ******************************* / /*Funksjon: sbyte2hex. Returnerer en byte -data i HEX -format. * / /*Parameter:- uint8_t b. Byte for å 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; } /*********************************************** ******************************* / /*Funksjon: shex2int. Returnerer en int fra en HEX -streng. * / /*Parameter: s. char *s for å konvertere til HEX. * / /*Parameter: n. char *s lengde. *// *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; } /*********************************************** ******************************* / /*Funksjon: sanswer. Returnerer et strengsvar fra mp3 UART -modulen. * / /*Parameter:- uint8_t b. tomrom. * / /*Retur: String. Hvis svaret er godt formulert svar. */ String sanswer (void) {uint8_t i = 0; String mp3answer = ""; // Få bare 10 Bytes mens (mp3.available () && (i <10)) {uint8_t b = mp3.read (); ansbuf = b; i ++; mp3answer += sbyte2hex (b); } // hvis svarformatet er riktig. if ((ansbuf [0] == 0x7E) && (ansbuf [9] == 0xEF)) {return mp3answer; } returner "???:" + mp3answer; }

Først definerer vi alle programvariablene og tilgangsregisteradressene til YX5300 -modulen.

#inkludere

#define ARDUINO_RX 5 // skal koble til TX i den serielle MP3 -spillermodulen #define ARDUINO_TX 6 // koble til RX på modulen SoftwareSerial mp3 (ARDUINO_RX, ARDUINO_TX); statisk int8_t Send_buf [8] = {0}; // Buffer for 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 // Spill neste sang. #define CMD_PREV_SONG 0X02 // Spill av forrige 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 #definere CMD_RESET 0X0C #definere CMD_PLAY 0X0D #definere CMD_PAUSE 0X0E #definere CMD_PLAY_FOLD_FINE_DEX_FEIL_FOLD_FIL_FOLD_FOLD_FOLD_FOLD_FOLD_FOLD_FIL_FOLD_FOLD_FOLD_FILLE_FOLD_FILLE_FOLDER #define CMD_FOLDER_CYCLE 0X17 #define CMD_SHUFFLE_PLAY 0x18 // #define CMD_SET_SNGL_CYCL 0X19 // Sett enkelt syklus. #define CMD_SET_DAC 0x1a #define DAC_ON 0x00 0x01 #define DAC_OFF #define CMD_PLAY_W_VOL 0X22 #define CMD_PLAYING_N 0x4C #define CMD_QUERY_STATUS 0x42 0x43 #define CMD_QUERY_VOLUME #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 summer = 2; byte pin = 0; byte SortNumber = 0; bool -knapp = 0;

Trinn 8:

Disse registeradressene brukes til å konfigurere modulens drift. Se for eksempel denne registreringsadressen nedenfor.

#definere CMD_PLAY_W_INDEX 0X03

Adressen 0x03 er definert med navnet CMD_PLAY_W_INDEX. Den brukes til å utløse en sang fra nummeret, det vil si at du angir nummeret på lyden og den spilles av.

Det er med disse verdiene vi skal bruke dem og konfigurere prosjektets funksjon.

Etter at du har definert de forskjellige adressene som skal brukes, går vi inn i oppsettfunksjonen og konfigurerer pinnene og seriell kommunikasjon for prosjektet vårt.

Trinn 9: Void Setup () -funksjonen

Se deretter funksjonen for oppsett av tomrom. Jeg gjorde alle innstillingene til knappestiftene, seriell kommunikasjon av MP3 -modulen og initialisering av kortmodulen i MP3.

ugyldig oppsett ()

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

Jeg startet seriekommunikasjonen for å skrive ut data på datamaskinens serie, og deretter startet vi seriell kommunikasjon gjennom mp3 -objektet.

Serial.begin (9600);

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

Mp3 -modulen styres gjennom kommandoer mottatt av Arduino -serien. I denne prosessen brukte vi SoftwareSerial -biblioteket og emulerte en serie på Arduino digitale pins.

Dermed vil du kunne bruke Arduino til å kontrollere MP3 -modulen gjennom kommandoer som sendes til den.

I tillegg har vi konfigurert de digitale pinnene og initialisert MP3 -kortmodulen

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

Etter at vi har gjort konfigurasjonen, må vi gå til hovedlogikken i void loop -funksjonen.

Trinn 10: Hovedfunksjonen ugyldig loop ()

Koden er veldig enkel og hele den logiske strukturen presenteres nedenfor. I det følgende vil jeg forklare deg hele logikken til hovedfunksjonen.

hulrom ()

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

Ved hver start av loop -funksjonssyklusen vil vi generere en ny verdi mellom 8 og 12 for å generere lyden av en vokal. Verdien fra 8 til 12 refererer til vokalens digitale pinne.

Koden for generering av tilfeldig verdi er vist nedenfor.

pin = 8;

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

I tillegg trekker vi 7 fra mengden trukket mellom 8 og 12. Dette vil tillate oss å peke på posisjonene til 1 til 5 av sangene som er spilt inn på minnekortet.

numero = numero - 7;

Etter det reproduserte jeg lyden av vokalen tegnet på linjen nedenfor.

sendCommand (0x03, 0, numero);

forsinkelse (1000);

Nå er den viktige tiden kommet: øyeblikket da vi skal lese knappen som barnet trykker på. Kodedelen presenteres nedenfor.

gjøre

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

Denne sløyfen vil bli utført til brukeren trykker på knappene. Sløyfen lar deg skanne de 5 digitale pinnene og i det øyeblikket barnet trykker på en av knappene, kommer den ut av løkken og sjekker om barnet har svart riktig.

Du vil gjøre bekreftelsen ved hjelp av koden nedenfor.

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

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

Den første betingelsen vil bli utført når brukeren gjør en feil fordi det ble trykket på en knapp og den utløste verdien av pinnen var forskjellig fra den tegnede pinnen (SortNumber).

På dette tidspunktet må du utføre kommandoen nedenfor.

sendCommand (0x03, 0, 6);

forsinkelse (3000);

Denne kommandoen brukes til å utløse feil responstone. Til slutt har vi den andre betingelsen som skal brukes for å sjekke om barnet har rett.

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

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

Trinn 11:

Bilde
Bilde

Hvis det ble trykket på en knapp og den digitale pinnen som ble trykket er den samme som den tegnede knappen, vil systemet utløse en korrekt svarlyd.

Som jeg forklarer deg, er denne koden veldig enkel og vil hjelpe ethvert barn med å utvikle sin kunnskap om vokaler gjennom et spill med Arduino.

I figuren over utfører lydboksen sangen som er lagret på SD -kortet på MP3 -modulen YX5300.

Trinn 12: Konklusjon

Utdanningen i klasserommet må endres hele tiden, og Arduino kan være en flott alliert når det gjelder å lage morsomme oppgaver.

Gjennom dette prosjektet var det mulig å utvikle en enkel aktivitet som kan utvikle barns ferdigheter gjennom kunnskap om lyden og stavemåten til hver vokal.

I motsetning til tradisjonelle undervisningsmetoder, vil barn lære gjennom moro i klasserommet gjennom spill og elektronikk.

Trinn 13: Bekreftelse

Dette prosjektet ble utviklet takket være støtte og oppmuntring fra selskapet JLCPCB. De oppmuntret til utdanning og inviterte oss til å utvikle vokalspillet for undervisning av barn i klasserommet.

Hvis du vil kjøpe de elektroniske platene til Game of Vowels, kan du få tilgang til denne lenken og kjøpe 10 enheter for $ 2 på JLCPCB.

Anbefalt: