Innehållsförteckning:

Vokalspel med Arduino och YX5300 MP3 -modul Catalex: 13 steg
Vokalspel med Arduino och YX5300 MP3 -modul Catalex: 13 steg

Video: Vokalspel med Arduino och YX5300 MP3 -modul Catalex: 13 steg

Video: Vokalspel med Arduino och YX5300 MP3 -modul Catalex: 13 steg
Video: Reproductor Musica Arduino 2024, November
Anonim
Vokalspel med Arduino och YX5300 MP3 -modul Catalex
Vokalspel med Arduino och YX5300 MP3 -modul Catalex

Kan du läsa denna fråga? Det var konstigt! Jag ställde denna fråga avsiktligt. Om du kan läsa den här texten beror det på att du kan hela alfabetet och naturligtvis lärt dig om alla vokaler.

Vokaler finns i alla ord. Det är omöjligt att fly från var och en av dem. Låt mig ställa en fråga. Var din barndomsinlärning rolig och involverade tekniska resurser?

Jag är säker på att inlärningsresurserna var få och du använde traditionella metoder för att lära dig vokalerna och alfabetet.

Är det trots allt möjligt att använda vissa tekniska resurser för att lära sig vokaler?

I den här artikeln kommer jag att lära dig hur du lär dina elever och barn vokaler genom ett spel.

Jag kommer att lära dig hur du skapar ett system med en röst, där ditt barn/elev kommer att höra ljudet av bokstaven och måste trycka på en knapp för att indikera rätt bokstav.

Således kommer de att lära sig medan de spelar och kommer alltid att vara motiverade att studera.

Nu ska jag visa dig steg-för-steg-processen för dig att skapa ditt eget spel och lära barn vokalerna.

Tillbehör

JLCPCB kretskort

Arduino Uno

Tryckknappsbrytare

10kR motstånd

Hanehuvud 2, 54 mm 1x7

Steg 1: Utveckla spelet med vokaler med Arduino

Utveckla spelet med vokaler med Arduino
Utveckla spelet med vokaler med Arduino

Hjärtat i spelet är JLCPCB: s kretskort för vokalerna. Du kan komma åt den här länken och ladda ner projektfilerna. Den har 5 knappar. Du kommer att använda varje knapp för att representera en vokal och ansluta den till din Arduino.

Kretskortet visas i figur 1.

Steg 2:

Bild
Bild

Med detta PCB -projekt kan du ansluta det till Arduino och skapa ditt spel. Därefter kommer jag att erbjuda dig en elektronisk schema för dig att montera eller bygga projektet på ditt protoboard.

Steg 3:

Från denna schematisk bild har vi lagt upp det elektroniska kortets layout. Det visas i figur 2 och du kan ladda ner filerna och göra ditt projekt.

Välj 5 stift från Arduino och anslut hopparna på brädet med Arduino. Eller annars kan du montera följande elektroniska diagram.

Steg 4: Projektidén

Projektidén
Projektidén

Jag kommer att lära dig hur du monterar ett MP3 -ljudsystem med Arduino. Detta system kommer att ansvara för att återge rösten som talar bokstaven. Ljudet från varje bokstav dras med ett värde från 1 till 5, där 1 representerar A och 5 representerar U.

Således, när barnet hör ljudet, måste han titta på tangentbordet, känna igen stavningen av vokalen och trycka på rätt tangent.

Om det misslyckas blinkar systemet den röda lysdioden 3 gånger. Annars kommer systemet att aktivera en summer i 5 sekunder och dra en ny vokal.

För att göra detta måste du montera följande krets.

I denna krets ansluter du MP3 -modulen och vokalkortet på Arduino. Bluetooth -modulen användes för att representera Catalex MP3 -modul.

Arduino kommer att ansvara för att sortera de 5 siffrorna och sedan skicka kommandot för att aktivera den ritade vokalen

Steg 5:

Bild
Bild

Efter det väntar vi tills barnet hör och trycker på en knapp, som visas i figuren ovan.

Varje knapp ovan representerar en vokal i alfabetet. Därefter visar jag dig hur du kommer att bygga programmeringslogiken för detta projekt.

Steg 6: Bygga spelets programmeringslogik

Bygga spelets programmeringslogik
Bygga spelets programmeringslogik

Vokalspelsystemet är baserat på driften av YX5300 -modulen. Denna modul har några funktioner, men vi kommer att fokusera på att presentera spelets arbetsstruktur genom YX5300 -modulens huvudfunktioner.

Nedan ger jag dig all programmeringslogik för projektet.

Steg 7:

I det följande kommer jag att förklara steg för steg för att bygga logiken i detta roliga spel för barn.

#omfatta

#define ARDUINO_RX 5 // ska ansluta till TX för den seriella MP3 -spelarmodulen #define ARDUINO_TX 6 // ansluta till RX för modulen SoftwareSerial mp3 (ARDUINO_RX, ARDUINO_TX); statisk int8_t Send_buf [8] = {0}; // Buffert för Skicka kommandon. // BÄTTRE LOKALT statisk uint8_t ansbuf [10] = {0}; // Buffert för svaren. // BÄTTRE LOKALT String mp3Answer; // Svar från MP3. Strängsansvar (tomrum); Sträng sbyte2hex (uint8_t b); / ************ Kommandobyte *************************/ #define CMD_NEXT_SONG 0X01 // Spela nästa låt. #define CMD_PREV_SONG 0X02 // Spela föregående låt. #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 #definiera CMD_RESET 0X0C #definiera CMD_PLAY 0X0D #definiera CMD_PAUSE 0X0E #definera CMD_PLAY_FOLD_FINE_FINE_FINE_FINE_FOLD_FIL_FOLD_FIL_FOLD_FIL_FOLD_FOLD_FIL_FOLD_FOLD_FOLD_FIL_FIL_FOLD_FIL_FIL_FIL_FOLD #define CMD_FOLDER_CYCLE 0X17 #define CMD_SHUFFLE_PLAY 0x18 // #define CMD_SET_SNGL_CYCL 0X19 // Ställ in en cykel. #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 summer = 2; byte stift = 0; byte SortNumber = 0; bool -knapp = 0; void setup () {Serial.begin (9600); mp3.start (9600); fördröjning (500); för (pin = 8; pin 13) {pin = 8; } Serial.println ("Varrendo …"); Serial.println (pin); // fördröjning (1000); } medan (knapp! = 1); Serial.println ("Saiu …"); if (button == 1 && (pin-1)! = SortNumber) {sendCommand (0x03, 0, 6); fördröjning (3000); } if (button == 1 && (pin-1) == SortNumber) {sendCommand (0x03, 0, 7); fördröjning (3000); } // Sök efter svaret. if (mp3.available ()) {Serial.println (decodeMP3Answer ()); } fördröjning (100); //Serial.println("Tocando musica … "); } /************************************************ ******************************* / /*Funktion sendMP3Command: sök efter ett 'c' -kommando och skicka det till MP3 * / /*Parameter: c. Kod för MP3 -kommandot, 'h' för hjälp. *// *Return: void */ void sendMP3Command (char c) {switch (c) {case '?': Case 'h': Serial.println ("HJÄLP"); Serial.println ("p = Play"); Serial.println ("P = Paus"); Serial.println ("> = Nästa"); Serial.println ("': Serial.println (" Next "); sendCommand (CMD_NEXT_SONG); sendCommand (CMD_PLAYING_N); // be om antalet filer som spelas upp break; case' Minneskort isatt. '; Break; case 0x3D: decodedMP3Answer + = " -> Completed play num" + String (ansbuf [6], DEC); // sendCommand (CMD_NEXT_SONG); // sendCommand (CMD_PLAYING_N); // be om antalet filer som spelas upp paus; fall 0x40: decodedMP3Answer += " -> Error"; break; case 0x41: decodedMP3Answer += " -> Data mottogs korrekt."; break; case 0x42: decodedMP3Answer += " -> Status spelar:" +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: Skicka kommando till MP3* / /*Parameter: byte kommando *// *Parameter: byte dat1 parameter för kommandot *// *Parameter: byte dat2 parameter för kommandot */ void sendCommand (byte kommando) {sendCommand (kommando, 0, 0); } void sendCommand (byte -kommando, byte dat1, byte dat2) {fördröjning (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 ("Skickar:"); för (uint8_t i = 0; i <8; i ++) {mp3.write (Send_buf ); Serial.print (sbyte2hex (Send_buf )); } Serial.println (); } /************************************************ ******************************* / /*Funktion: sbyte2hex. Returnerar en byte -data i HEX -format. * / /*Parameter:- uint8_t b. Byte för att konvertera till HEX. *// *Return: String */ String sbyte2hex (uint8_t b) {String shex; shex = "0X"; om (b <16) shex += "0"; shex += String (b, HEX); shex += ""; returnera shex; } /************************************************ ******************************* / /*Funktion: shex2int. Returnerar en int från en HEX -sträng. * / /*Parameter: s. char *s för att konvertera till HEX. * / /*Parameter: n. char *s längd. *// *Return: int */ int shex2int (char *s, int n) {int r = 0; för (int i = 0; i = '0' && s = 'A' && s <= 'F') {r *= 16; r + = (s - 'A') + 10; }} returnera r; } /************************************************ ******************************* / /*Funktion: sanswer. Returnerar ett strängsvar från mp3 UART -modulen. * / /*Parameter:- uint8_t b. tomhet. * / /*Retur: Sträng. Om svaret är välformulerat svar. */ String sanswer (void) {uint8_t i = 0; String mp3answer = ""; // Få bara 10 byte medan (mp3.available () && (i <10)) {uint8_t b = mp3.read (); ansbuf = b; i ++; mp3answer += sbyte2hex (b); } // om svarsformatet är korrekt. if ((ansbuf [0] == 0x7E) && (ansbuf [9] == 0xEF)) {return mp3answer; } returnera "???:" + mp3ansvar; }

Först definierar vi alla programvariabler och åtkomstregisteradresser för YX5300 -modulen.

#omfatta

#define ARDUINO_RX 5 // ska ansluta till TX för den seriella MP3 -spelarmodulen #define ARDUINO_TX 6 // ansluta till RX för modulen SoftwareSerial mp3 (ARDUINO_RX, ARDUINO_TX); statisk int8_t Send_buf [8] = {0}; // Buffert för Skicka kommandon. // BÄTTRE LOKALT statisk uint8_t ansbuf [10] = {0}; // Buffert för svaren. // BÄTTRE LOKALT String mp3Answer; // Svar från MP3. Strängsansvar (tomrum); Sträng sbyte2hex (uint8_t b); / ************ Kommandobyte *************************/ #define CMD_NEXT_SONG 0X01 // Spela nästa låt. #define CMD_PREV_SONG 0X02 // Spela föregående låt. #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 #definiera CMD_WAKE_UP 0X0B #definiera CMD_RESET 0X0C #definiera CMD_PLAY 0X0D #definiera CMD_PAUSE 0X0E #definera CMD_PLAY_FOLD_FINE_FINE_DEX_STÄLLA_FÄLLA_FÄLDA_STÄLL_FÄLDA_STÄLLA_FÄLDA_FÄLDA_FÄLDA_FÄLDA_FÄLDA_FÄLDA_FÄLDA_FILLA #define CMD_FOLDER_CYCLE 0X17 #define CMD_SHUFFLE_PLAY 0x18 // #define CMD_SET_SNGL_CYCL 0X19 // Ställ in en cykel. #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 summer = 2; byte stift = 0; byte SortNumber = 0; bool -knapp = 0;

Steg 8:

Dessa registeradresser används för att konfigurera modulens drift. Se till exempel den här registreringsadressen nedan.

#definiera CMD_PLAY_W_INDEX 0X03

Adressen 0x03 definieras med namnet CMD_PLAY_W_INDEX. Den används för att utlösa en låt från dess nummer, det vill säga att du anger ljudets nummer och det kommer att spelas.

Det är med dessa värden som vi kommer att använda dem och konfigurera hur vårt projekt fungerar.

När du har definierat de olika adresserna som kommer att användas kommer vi att gå in i installationsfunktionen och konfigurera stiften och seriell kommunikation för vårt projekt.

Steg 9: Funktionen för ogiltig installation ()

Se därefter inställningen för tomrumsinställning. Jag gjorde alla inställningar för knappstiften, seriell kommunikation av MP3 -modulen och initialisering av kortmodulen i MP3.

void setup ()

{Serial.begin (9600); mp3.start (9600); fördröjning (500); för (pin = 8; pin <13; pin ++) {pinMode (pin, INPUT); } sendCommand (CMD_SEL_DEV, 0, DEV_TF); fördröjning (500); }

Jag startade seriekommunikationen för att skriva ut data på datorns serie och sedan startade vi den seriella kommunikationen genom mp3 -objektet.

Serial.begin (9600);

mp3.start (9600); fördröjning (500);

Mp3 -modulen styrs genom kommandon som tas emot av Arduino -serien. I denna process använde vi SoftwareSerial -biblioteket och emulerade en följetong på Arduino digitala stift.

Således kommer du att kunna använda Arduino för att styra MP3 -modulen genom kommandon som skickas till den.

Dessutom gjorde vi konfigurationen av de digitala stiften och initialiseringen av MP3 -kortmodulen

för (pin = 8; pin <13; pin ++) {pinMode (pin, INPUT); } sendCommand (CMD_SEL_DEV, 0, DEV_TF); fördröjning (500);

Efter konfigurationen måste vi gå till huvudlogiken i void loop -funktionen.

Steg 10: Huvudfunktionen ogiltig loop ()

Koden är mycket enkel och hela den logiska strukturen presenteras nedan. I det följande kommer jag att förklara för dig den fullständiga logiken för huvudfunktionen.

void loop ()

{pin = 8; randomSeed (analogRead (A0)); numero = slumpmässigt (8, 12); SortNumber = numero; numero = numero - 7; Serial.println (numero); sendCommand (0x03, 0, numero); fördröjning (1000); gör {knapp = digitalRead (pin); Serial.println (knapp); pin ++; om (pin> 13) {pin = 8; } Serial.println ("Varrendo …"); Serial.println (pin); // fördröjning (1000); } medan (knapp! = 1); Serial.println ("Saiu …"); if (button == 1 && (pin-1)! = SortNumber) {sendCommand (0x03, 0, 6); fördröjning (3000); } if (button == 1 && (pin-1) == SortNumber) {sendCommand (0x03, 0, 7); fördröjning (3000); } // Sök efter svaret. if (mp3.available ()) {Serial.println (decodeMP3Answer ()); } fördröjning (100); //Serial.println("Tocando musica … "); }

Vid varje start av loopfunktionscykeln kommer vi att generera ett nytt värde mellan 8 och 12 för att generera ljudet av en vokal. Värdet från 8 till 12 hänvisar till vokalens digitala stift.

Koden för att generera slumpmässigt värde visas nedan.

stift = 8;

randomSeed (analogRead (A0)); numero = slumpmässigt (8, 12); SortNumber = numero;

Dessutom subtraherar vi 7 från beloppet som dras mellan 8 och 12. Detta gör att vi kan peka på positionerna för 1 till 5 av låtarna som spelats in på minneskortet.

numero = numero - 7;

Efter det återgav jag ljudet av vokalen ritad på linjen nedan.

sendCommand (0x03, 0, numero);

fördröjning (1000);

Nu har den viktiga tiden kommit: det ögonblick då vi ska läsa knappen som tryckts av barnet. Koddelen presenteras nedan.

do

{knapp = digitalRead (pin); Serial.println (knapp); pin ++; om (pin> 13) {pin = 8; } Serial.println ("Varrendo …"); Serial.println (pin); // fördröjning (1000); } medan (knapp! = 1);

Denna loop kommer att köras tills användaren trycker på knapparna. Med slingan kan du skanna de 5 digitala stiften och i det ögonblick som barnet trycker på en av knapparna kommer det ut ur öglan och kontrollerar om barnet har svarat korrekt.

Du kommer att göra verifieringen med hjälp av koden nedan.

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

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

Det första villkoret kommer att utföras när användaren gör ett misstag eftersom en knapp trycktes in och det utlösta värdet på stiftet var annorlunda än det dragna stiftet (SortNumber).

Vid denna tidpunkt måste du utföra kommandot nedan.

sendCommand (0x03, 0, 6);

fördröjning (3000);

Detta kommando används för att utlösa fel svarston. Slutligen har vi det andra villkoret som kommer att användas för att kontrollera om barnet har rätt.

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

{sendCommand (0x03, 0, 7); fördröjning (3000); }

Steg 11:

Bild
Bild

Om du trycker på en knapp och den digitala pinnen som trycks in är densamma som den dragna stiftet, utlöser systemet ett korrekt svarsljud.

Som jag förklarar för dig är den här koden väldigt enkel och hjälper alla barn att utveckla sina kunskaper om vokaler genom ett spel med Arduino.

I figuren ovan utför ljudlådan låten som lagrats på SD -kortet på MP3 -modulen YX5300.

Steg 12: Slutsats

Klassrumsutbildningen måste ändras hela tiden och Arduino kan vara en bra allierad när det gäller att skapa roliga uppgifter.

Genom detta projekt var det möjligt att utveckla en enkel aktivitet som kan utveckla barns färdigheter genom kunskap om ljud och stavning av varje vokal.

Till skillnad från traditionella undervisningsmetoder kommer barn att lära sig genom klassrumslek genom spel och elektronik.

Steg 13: Erkännande

Detta projekt utvecklades tack vare stöd och uppmuntran från företaget JLCPCB. De uppmuntrade till utbildning och uppmanade oss att utveckla vokalspelet för att lära barn i klassrummet.

Om du vill köpa de elektroniska plattorna i Game of Vowels kan du komma åt den här länken och köpa 10 enheter för $ 2 på JLCPCB.

Rekommenderad: