Innehållsförteckning:
- Tillbehör
- Steg 1: Utveckla spelet med vokaler med Arduino
- Steg 2:
- Steg 3:
- Steg 4: Projektidén
- Steg 5:
- Steg 6: Bygga spelets programmeringslogik
- Steg 7:
- Steg 8:
- Steg 9: Funktionen för ogiltig installation ()
- Steg 10: Huvudfunktionen ogiltig loop ()
- Steg 11:
- Steg 12: Slutsats
- Steg 13: Erkännande
Video: Vokalspel med Arduino och YX5300 MP3 -modul Catalex: 13 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:40
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
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:
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
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:
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
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:
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:
Hur man gör en MP3 -spelare med LCD med hjälp av Arduino och DFPlayer Mini MP3 -spelarmodul: 6 steg
Hur man gör en MP3 -spelare med LCD med Arduino och DFPlayer Mini MP3 -spelarmodul: Idag kommer vi att göra en MP3 -spelare med LCD med Arduino och DFPlayer mini MP3 -spelare. Projektet kan läsa MP3 -filer på SD -kortet och kan pausa och spela samma som enheten för 10 år sedan. Och den har också tidigare låt och nästa låt kul
Ansluter bearbetning och Arduino och gör 7 segment och servo GUI -kontroller: 4 steg
Ansluta bearbetning och Arduino och göra 7 segment och servo GUI -kontroller: För vissa projekt måste du använda Arduino eftersom det ger en enkel prototypplattform men visning av grafik i seriell bildskärm av Arduino kan ta ganska lång tid och är till och med svårt att göra. Du kan visa grafer på Arduino Serial Monitor
8 Reläkontroll med NodeMCU och IR -mottagare med WiFi och IR -fjärrkontroll och Android -app: 5 steg (med bilder)
8 Reläkontroll med NodeMCU och IR -mottagare med WiFi och IR -fjärrkontroll och Android -app: Styrning av 8 reläväxlar med nodemcu och IR -mottagare via wifi och IR -fjärrkontroll och Android -app. Fjärrkontrollen fungerar oberoende av wifi -anslutning. HÄR ÄR EN UPPDATERAD VERSIONKLICK HÄR
Temperatur och fuktighet Display och datainsamling med Arduino och bearbetning: 13 steg (med bilder)
Temperatur- och luftfuktighetsvisning och datainsamling med Arduino och bearbetning: Intro: Detta är ett projekt som använder ett Arduino -kort, en sensor (DHT11), en Windows -dator och ett bearbetningsprogram (ett gratis nedladdningsbart) för att visa temperatur, luftfuktighetsdata i digital och stapeldiagramform, visa tid och datum och kör en räkningstid
Mitt rör! Stereo subwooferhögtalare för I-pod och Mp3 andra versionen (med batterier och USB-laddare): 12 steg
Mitt rör! Stereo Sub Woofer-högtalare för I-pod och Mp3 andra versionen (med batterier och USB-laddare): Min insikt i kvartalet är ett komplicerat mer prejudikat, men det är inte svårt att inse. Utkast till två självdrivna fodral stereo till batterier som kan laddas om med möjlighet att ladda i-podden via en USB som matas från samma batteri