Sadržaj:

Igra samoglasnika s Arduino i YX5300 MP3 modulom Catalex: 13 koraka
Igra samoglasnika s Arduino i YX5300 MP3 modulom Catalex: 13 koraka

Video: Igra samoglasnika s Arduino i YX5300 MP3 modulom Catalex: 13 koraka

Video: Igra samoglasnika s Arduino i YX5300 MP3 modulom Catalex: 13 koraka
Video: Говорящие часы на Arduino 2024, Novembar
Anonim
Igra samoglasnika s Arduino i YX5300 MP3 modulom Catalex
Igra samoglasnika s Arduino i YX5300 MP3 modulom Catalex

Možete li pročitati ovo pitanje? To je čudno! Ovo pitanje sam namerno postavio. Ako možete pročitati ovaj tekst, to je zato što znate cijelu abecedu i, naravno, naučili ste sve samoglasnike.

Samoglasnici su prisutni u svim riječima. Nemoguće je pobjeći od svakog od njih. Dozvolite mi da vam postavim pitanje. Je li vaše učenje u djetinjstvu bilo zabavno i uključivalo je tehnološke resurse?

Siguran sam da je resursa za učenje bilo malo i da ste koristili tradicionalne metode za učenje samoglasnika i abecede.

Uostalom, je li moguće koristiti neke tehnološke resurse za učenje samoglasnika?

U ovom članku ću vas naučiti kako naučiti svoje učenike i djecu samoglasnicima kroz igru.

Naučiću vas kako da kreirate sistem sa glasom, gde će vaše dete/učenik čuti zvuk slova i mora pritisnuti dugme da označi ispravno slovo.

Tako će učiti dok se igraju i uvijek će biti motivirani za učenje.

Sada ću vam pokazati korak po korak proces stvaranja vlastite igre i djecu poučiti samoglasnicima.

Supplies

JLCPCB štampana ploča

Arduino Uno

Prekidač na dugme

10kR Resistor

Muški zaglavlje 2, 54 mm 1x7

Korak 1: Razvoj igre samoglasnika s Arduinom

Razvoj igre samoglasnika s Arduinom
Razvoj igre samoglasnika s Arduinom

Srce igre je JLCPCB štampana ploča Vowella. Možete pristupiti ovoj vezi i preuzeti datoteke projekta. Ima 5 tastera. Koristit ćete svako dugme za predstavljanje samoglasnika i njegovo povezivanje sa vašim Arduinom.

Štampana ploča je prikazana na slici 1.

Korak 2:

Image
Image

Pomoću ovog projekta PCB -a možete ga povezati s Arduinom i stvoriti svoju igru. Zatim ću vam ponuditi elektroničku shemu za sastavljanje ili izradu projekta na vašoj protoboard.

Korak 3:

Iz ove sheme postavili smo izgled elektroničke ploče. Prikazano je na slici 2 i možete preuzeti datoteke i napraviti svoj projekt.

Odaberite 5 pinova s Arduina i spojite kratkospojnike na ploči s Arduinom. U suprotnom, možete sastaviti sljedeći elektronički dijagram.

Korak 4: Ideja projekta

Ideja projekta
Ideja projekta

Naučit ću vas kako sastaviti MP3 zvučni sistem s Arduinom. Ovaj sistem će biti odgovoran za reprodukciju glasa koji izgovara slovo. Zvuk svakog slova bit će izvučen koristeći vrijednost od 1 do 5, gdje 1 predstavlja A, a 5 predstavlja U.

Stoga, kada dijete čuje zvuk, mora pogledati tastaturu, prepoznati pravopis samoglasnika i pritisnuti odgovarajući taster.

Ako ne uspije, sistem će 3 puta zasvijetliti crvenom LED diodom. U suprotnom će sistem aktivirati zujalicu na 5 sekundi i izvući novi samoglasnik.

Da biste to učinili, morate sastaviti sljedeći krug.

U ovom krugu ćete spojiti MP3 modul i ploču samoglasnika na Arduinu. Bluetooth modul je korišten za predstavljanje Catalex MP3 modula.

Arduino će biti odgovoran za sortiranje 5 brojeva i zatim slanje naredbe za aktiviranje izvučenog samoglasnika

Korak 5:

Image
Image

Nakon toga ćemo pričekati da dijete čuje i pritisne dugme, kao što je prikazano na gornjoj slici.

Svako dugme iznad predstavlja samoglasnik abecede. Zatim ću vam pokazati kako ćete izgraditi programsku logiku za ovaj projekt.

Korak 6: Izgradnja logike programiranja igre

Izgradnja logike programiranja igre
Izgradnja logike programiranja igre

Sistem glasovnih igara zasnovan je na radu modula YX5300. Ovaj modul ima neke funkcije, međutim, mi ćemo se fokusirati na predstavljanje radne strukture igre kroz glavne funkcije modula YX5300.

U nastavku vam donosim svu programsku logiku projekta.

Korak 7:

U nastavku ću objasniti korak po korak izgradnju logike ove zabavne igre za djecu.

#include

#define ARDUINO_RX 5 // treba se spojiti na TX modula serijskog MP3 playera #define ARDUINO_TX 6 // povezati se na RX modula SoftwareSerial mp3 (ARDUINO_RX, ARDUINO_TX); statički int8_t Pošalji_buf [8] = {0}; // Međuspremnik za naredbe za slanje. // BOLJE LOKALNO statički uint8_t ansbuf [10] = {0}; // Međuspremnik za odgovore. // BOLJE LOKALNO String mp3Answer; // Odgovor sa MP3 -a. Snizanje nizova (void); String sbyte2hex (uint8_t b); / ************ Komanda naredbe **************************/ #define CMD_NEXT_SONG 0X01 // Reproduciraj sljedeće pjesma. #define CMD_PREV_SONG 0X02 // Reproduciraj prethodnu pjesmu. #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 // Reprodukcija u jednom ciklusu. #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 CMP_PLAY #define CMD_FOLDER_CYCLE 0X17 #define CMD_SHUFFLE_PLAY 0x18 // #define CMD_SET_SNGL_CYCL 0X19 // Postavi pojedinačni ciklus. #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; bajt zujalica = 2; bajt pin = 0; bajt SortNumber = 0; bool dugme = 0; void setup () {Serial.begin (9600); mp3.begin (9600); kašnjenje (500); for (pin = 8; pin 13) {pin = 8; } Serial.println ("Varrendo …"); Serial.println (pin); // kašnjenje (1000); } while (dugme! = 1); Serial.println ("Saiu …"); if (button == 1 && (pin-1)! = SortNumber) {sendCommand (0x03, 0, 6); kašnjenje (3000); } if (button == 1 && (pin-1) == SortNumber) {sendCommand (0x03, 0, 7); kašnjenje (3000); } // Provjerite odgovor. if (mp3.available ()) {Serial.println (decodeMP3Answer ()); } kašnjenje (100); //Serial.println("Tocando musica… "); } /********************************************** ******************************** / /*Funkcija sendMP3Command: tražite 'c' naredbu i pošaljite je u MP3 * / /*Parametar: c. Kôd za MP3 naredbu, 'h' za pomoć. *// *Povratak: void */ void sendMP3Command (char c) {switch (c) {case '?': Case 'h': Serial.println ("HELP"); Serial.println ("p = Reproduciraj"); Serial.println ("P = Pauza"); Serial.println ("> = Dalje"); Serial.println ("': Serial.println (" Dalje "); sendCommand (CMD_NEXT_SONG); sendCommand (CMD_PLAYING_N); // zatražite broj datoteke koja se reproducira break; case' Memorijska kartica umetnuta."; Break; case 0x3D: decodedMP3Answer + = " -> Završena reprodukcija": decodedMP3Answer += " -> Greška"; break; case 0x41: decodedMP3Answer += " -> Podaci pravilno primljeni."; break; case 0x42: decodedMP3Answer += " -> Status se reproducira:" +String (ansbuf [6], DEC); break; case 0x48: decodedMP3Answer + = " -> Broj datoteka:" + String (ansbuf [6], DEC); break; case 0x4C: decodedMP3Answer + = " -> Reprodukcija:" + String (ansbuf [6], DEC); break; case 0x4E: decodedMP3Answer + = " -> Broj datoteka mape:" + String (ansbuf [6], DEC); break; case 0x4F: decodedMP3Answer + = " -> Broj mapa:" + String (ansbuf [6], DEC); break;} return decodedMP3Answer;} /*********************************** ************ ********************************* / /*Funkcija: Pošaljite naredbu na MP3* / /*Parametar: byte naredba *// *Parametar: bajt dat1 parametar za naredbu *// *Parametar: bajt dat2 parametar za naredbu */ void sendCommand (naredba byte) {sendCommand (naredba, 0, 0); } void sendCommand (naredba bajta, bajt dat1, bajt dat2) {odgoda (20); Pošalji_buf [0] = 0x7E; // Pošalji_buf [1] = 0xFF; // Pošalji_buf [2] = 0x06; // Len Send_buf [3] = naredba; // Pošalji_buf [4] = 0x01; // 0x00 NE, 0x01 povratna informacija Send_buf [5] = dat1; // datah Send_buf [6] = dat2; // datalni Send_buf [7] = 0xEF; // Serial.print ("Slanje:"); for (uint8_t i = 0; i <8; i ++) {mp3.write (Send_buf ); Serial.print (sbyte2hex (Send_buf )); } Serial.println (); } /********************************************** ******************************** / /*Funkcija: sbyte2hex. Vraća bajtne podatke u HEX formatu. * / /*Parametar:- uint8_t b. Bajt za pretvaranje u HEX. *// *Povratak: String */ String sbyte2hex (uint8_t b) {String shex; shex = "0X"; if (b <16) shex += "0"; shex += niz (b, HEX); shex += ""; return shex; } /********************************************** ******************************** / /*Funkcija: shex2int. Vraća int iz HEX niza. */ /*Parametri. char *s za pretvaranje u HEX. * / /*Parametar: n. char *s 'dužina. *// *Povratak: 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; }} return r; } /********************************************** ******************************** / /*Funkcija: sanswer. Vraća odgovor stringa iz mp3 UART modula. * / /*Parametar:- uint8_t b. void. * / /*Povratak: niz. Ako je odgovor dobro oblikovan, odgovorite. */ Sanswer sanswer (void) {uint8_t i = 0; String mp3answer = ""; // Dobijte samo 10 bajtova while (mp3.available () && (i <10)) {uint8_t b = mp3.read (); ansbuf = b; i ++; mp3answer += sbyte2hex (b); } // ako je format odgovora tačan. if ((ansbuf [0] == 0x7E) && (ansbuf [9] == 0xEF)) {vrati mp3answer; } return "???:" + mp3answer; }

Prvo definiramo sve programske varijable i adrese registra pristupa modula YX5300.

#include

#define ARDUINO_RX 5 // treba se spojiti na TX modula serijskog MP3 playera #define ARDUINO_TX 6 // povezati se na RX modula SoftwareSerial mp3 (ARDUINO_RX, ARDUINO_TX); statički int8_t Pošalji_buf [8] = {0}; // Međuspremnik za naredbe za slanje. // BOLJE LOKALNO statički uint8_t ansbuf [10] = {0}; // Međuspremnik za odgovore. // BOLJE LOKALNO String mp3Answer; // Odgovor sa MP3 -a. Snizanje nizova (void); String sbyte2hex (uint8_t b); / ************ Komanda naredbe **************************/ #define CMD_NEXT_SONG 0X01 // Reproduciraj sljedeće pjesma. #define CMD_PREV_SONG 0X02 // Reproduciraj prethodnu pjesmu. #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 // Reprodukcija u jednom ciklusu. #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 CMP_PLAY #define CMD_FOLDER_CYCLE 0X17 #define CMD_SHUFFLE_PLAY 0x18 // #define CMD_SET_SNGL_CYCL 0X19 // Postavi pojedinačni ciklus. #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; bajt zujalica = 2; bajt pin = 0; bajt SortNumber = 0; bool dugme = 0;

Korak 8:

Ove adrese registra se koriste za konfiguriranje rada modula. Na primjer, pogledajte ovu adresu za registraciju ispod.

#define CMD_PLAY_W_INDEX 0X03

Adresa 0x03 je definirana imenom CMD_PLAY_W_INDEX. Koristi se za pokretanje pjesme iz njenog broja, odnosno unosite broj zvuka i on će se reproducirati.

S tim vrijednostima ćemo ih koristiti i konfigurirati funkcioniranje našeg projekta.

Nakon što definirate različite adrese koje će se koristiti, ući ćemo u funkciju postavljanja i konfigurirati pinove i serijsku komunikaciju za naš projekt.

Korak 9: Funkcija postavljanja praznine ()

Zatim pogledajte funkciju postavljanja praznine. Uradio sam sve postavke pinova dugmadi, serijsku komunikaciju MP3 modula i inicijalizaciju modula kartice u MP3 -u.

void setup ()

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

Započeo sam serijsku komunikaciju za ispis podataka na serijskoj ploči računara, a zatim smo započeli serijsku komunikaciju putem mp3 objekta.

Serial.begin (9600);

mp3.begin (9600); kašnjenje (500);

MP3 modulom upravlja se putem naredbi koje prima Arduino serija. U ovom procesu koristili smo biblioteku SoftwareSerial i emulirali seriju na Arduino digitalnim pinovima.

Tako ćete moći koristiti Arduino za upravljanje MP3 modulom putem naredbi koje mu se šalju.

Osim toga, izvršili smo konfiguraciju digitalnih pinova i inicijalizaciju modula MP3 kartice

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

Nakon što izvršimo konfiguraciju, moramo prijeći na glavnu logiku u funkciji void loop.

Korak 10: Petlja praznine glavne funkcije ()

Kod je vrlo jednostavan, a cijela logička struktura prikazana je u nastavku. U nastavku ću vam objasniti kompletnu logiku glavne funkcije.

void loop ()

{pin = 8; randomSeed (analogRead (A0)); numero = slučajno (8, 12); SortNumber = numero; numero = numero - 7; Serial.println (numero); sendCommand (0x03, 0, numero); kašnjenje (1000); do {button = digitalRead (pin); Serial.println (dugme); pin ++; if (pin> 13) {pin = 8; } Serial.println ("Varrendo …"); Serial.println (pin); // kašnjenje (1000); } while (dugme! = 1); Serial.println ("Saiu …"); if (button == 1 && (pin-1)! = SortNumber) {sendCommand (0x03, 0, 6); kašnjenje (3000); } if (button == 1 && (pin-1) == SortNumber) {sendCommand (0x03, 0, 7); kašnjenje (3000); } // Provjerite odgovor. if (mp3.available ()) {Serial.println (decodeMP3Answer ()); } kašnjenje (100); //Serial.println("Tocando musica… "); }

Na svakom početku ciklusa funkcije petlje generirat ćemo novu vrijednost između 8 i 12 kako bismo generirali zvuk samoglasnika. Vrijednost od 8 do 12 odnosi se na digitalni pin samoglasnika.

Kôd za generiranje slučajne vrijednosti prikazan je dolje.

pin = 8;

randomSeed (analogRead (A0)); numero = slučajno (8, 12); SortNumber = numero;

Osim toga, oduzimamo 7 od iznosa izvučenog između 8 i 12. To će nam omogućiti da pokažemo na položaje 1 do 5 pjesama snimljenih na memorijskoj kartici.

numero = numero - 7;

Nakon toga sam reproducirao zvuk samoglasnika nacrtanog na donjoj liniji.

sendCommand (0x03, 0, numero);

kašnjenje (1000);

Sada je došlo važno vrijeme: trenutak kada ćemo čitati dugme koje je dijete pritisnulo. Dio koda prikazan je u nastavku.

do

{button = digitalRead (pin); Serial.println (dugme); pin ++; if (pin> 13) {pin = 8; } Serial.println ("Varrendo …"); Serial.println (pin); // kašnjenje (1000); } while (dugme! = 1);

Ova petlja će se izvršavati sve dok korisnik ne pritisne dugmad. Petlja vam omogućava skeniranje 5 digitalnih pinova i u trenutku kada dijete pritisne jedno od dugmadi, ono će izaći iz petlje i provjeriti je li dijete pravilno odgovorilo.

Verifikaciju ćete izvršiti pomoću koda u nastavku.

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

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

Prvi uvjet će se izvršiti kada korisnik pogriješi jer je pritisnuto dugme i aktivirana vrijednost pina se razlikuje od izvučene iglice (SortNumber).

U ovom trenutku morate izvršiti naredbu ispod.

sendCommand (0x03, 0, 6);

kašnjenje (3000);

Ova naredba se koristi za aktiviranje pogrešnog tona odgovora. Konačno, imamo drugi uvjet koji će se koristiti za provjeru je li dijete u pravu.

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

{sendCommand (0x03, 0, 7); kašnjenje (3000); }

Korak 11:

Image
Image

Ako je dugme pritisnuto, a digitalni pin koji je pritisnut isti kao izvučeni pin, sistem će aktivirati zvuk tačnog odgovora.

Kao što sam vam objasnio, ovaj kôd je vrlo jednostavan i pomoći će svakom djetetu da razvije svoje znanje o samoglasnicima kroz igru s Arduinom.

Na slici iznad zvučna kutija izvodi pjesmu pohranjenu na SD kartici MP3 modula YX5300.

Korak 12: Zaključak

Obrazovanje u učionici treba stalno mijenjati i Arduino može biti odličan saveznik u stvaranju zabavnih zadataka.

Kroz ovaj projekt bilo je moguće razviti jednostavnu aktivnost koja može razviti dječje vještine kroz poznavanje zvuka i pravopisa svakog samoglasnika.

Za razliku od tradicionalnih metoda poučavanja, djeca će učiti kroz zabavu u učionici kroz igre i elektroniku.

Korak 13: Potvrda

Ovaj projekat razvijen je zahvaljujući podršci i ohrabrenju kompanije JLCPCB. Potaknuli su obrazovanje i pozvali nas da razvijemo igru samoglasnika za poučavanje djece u razredu.

Ako želite kupiti elektroničke tablice Igre samoglasnika, možete pristupiti ovoj vezi i kupiti 10 jedinica za 2 USD na JLCPCB.

Preporučuje se: