Sadržaj:
- Pribor
- Korak 1: Razvoj igre samoglasnika s Arduinom
- Korak 2:
- 3. korak:
- Korak 4: Ideja projekta
- 5. korak:
- Korak 6: Izgradnja logike programiranja igre
- Korak 7:
- Korak 8:
- Korak 9: Funkcija postavljanja praznine ()
- Korak 10: Petlja praznine glavne funkcije ()
- 11. korak:
- Korak 12: Zaključak
- Korak 13: Priznanje
Video: Igra samoglasnika s Arduino i YX5300 MP3 modulom Catalex: 13 koraka
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:33
Možete li pročitati ovo pitanje? To je čudno! Ovo sam pitanje namjerno 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. Dopustite 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 naučit ću vas kako naučiti svoje učenike i djecu samoglasnicima kroz igru.
Naučit ću vas kako stvoriti sustav s glasom, gdje će vaše dijete/učenik čuti zvuk slova i mora pritisnuti gumb za označavanje ispravnog slova.
Tako će učiti tijekom igre i uvijek će biti motivirani za učenje.
Pokazat ću vam korak po korak postupak stvaranja vlastite igre i djecu naučiti samoglasnike.
Pribor
Tiskana ploča JLCPCB
Arduino Uno
Prekidač na gumb
10kR otpornik
Muški zaglavlje 2, 54 mm 1x7
Korak 1: Razvoj igre samoglasnika s Arduinom
Srce igre je JLCPCB tiskana ploča Vokala. Možete pristupiti ovoj vezi i preuzeti datoteke projekta. Ima 5 tipki. Upotrijebit ćete svaki gumb za predstavljanje samoglasnika i povezivanje s vašim Arduinom.
Tiskana ploča je prikazana na slici 1.
Korak 2:
S ovim PCB projektom 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.
3. korak:
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 skakače na ploči s Arduinom. Ili drugačije, možete sastaviti sljedeći elektronički dijagram.
Korak 4: Ideja projekta
Naučit ću vas kako sastaviti MP3 zvučni sustav s Arduinom. Ovaj sustav bit će odgovoran za reprodukciju glasa koji izgovara slovo. Zvuk svakog slova bit će izvučen pomoću vrijednosti od 1 do 5, gdje 1 predstavlja A, a 5 predstavlja U.
Stoga, kada dijete čuje zvuk, mora pogledati tipkovnicu, prepoznati pravopis samoglasnika i pritisnuti ispravnu tipku.
Ako ne uspije, sustav će 3 puta zasvijetliti crvenom LED diodom. U suprotnom će sustav aktivirati zujalicu na 5 sekundi i izvući novi samoglasnik.
Da biste to učinili, morate sastaviti sljedeći krug.
U ovom ćete krugu spojiti MP3 modul i ploču samoglasnika na Arduinu. Bluetooth modul korišten je za predstavljanje Catalex MP3 modula.
Arduino će biti odgovoran za sortiranje 5 brojeva i zatim slanje naredbe za aktiviranje izvučenog samoglasnika
5. korak:
Nakon toga ćemo pričekati da dijete čuje i pritisne gumb, kao što je prikazano na gornjoj slici.
Svaki gornji gumb predstavlja samoglasnik abecede. Zatim ću vam pokazati kako ćete izgraditi programsku logiku za ovaj projekt.
Korak 6: Izgradnja logike programiranja igre
Sustav glasovnih igara temelji se na radu modula YX5300. Ovaj modul ima neke funkcije, međutim, mi ćemo se usredotočiti 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.
#uključi
#define ARDUINO_RX 5 // treba se spojiti na TX modula serijskog MP3 playera #define ARDUINO_TX 6 // spojiti 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 s MP3 -a. Sanswer string (void); Niz sbyte2hex (uint8_t b); / ************ Naredbeni bajt **************************/ #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; bajt estado; bajt zujalica = 2; bajt pin = 0; bajt SortNumber = 0; bool gumb = 0; void setup () {Serial.begin (9600); mp3.početi (9600); kašnjenje (500); for (pin = 8; pin 13) {pin = 8; } Serial.println ("Varrendo …"); Serial.println (pin); // kašnjenje (1000); } while (gumb! = 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); } // Potražite odgovor. if (mp3.available ()) {Serial.println (decodeMP3Answer ()); } kašnjenje (100); //Serial.println("Tocando musica… "); } /********************************************** ****************************** / /*Funkcija sendMP3Command: tražite naredbu 'c' i pošaljite je u MP3 * / /*Parametar: c. Kôd za naredbu MP3, '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 + = " -> Broj reprodukcije dovršen" + String (ansbuf [6], DEC); // sendCommand (CMD_NEXT_SONG); // sendCommand (CMD_PLAYING_N); // zatražite broj datoteke koja se reproducira prekid; velika slova 0x40: 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: Slanje naredbe na MP3* / /*Parametar: byte naredba *// *Parametar: byte dat1 parametar za naredbu *// *Parametar: byte dat2 parametar za naredbu */ void sendCommand (naredba byte) {sendCommand (naredba, 0, 0); } void sendCommand (naredba byte, 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 += ""; povratni šeks; } /********************************************** ******************************** / /*Funkcija: shex2int. Vraća int iz HEX niza. * / /*Parametar: s. char *s za pretvaranje u HEX. * / /*Parametar: n. char *s 'duljina. *// *Povratak: int */ int shex2int (char *s, int n) {int r = 0; za (int i = 0; i = '0' && s = 'A' && s <= 'F') {r *= 16; r + = (s - 'A') + 10; }} return r; } /********************************************** ****************************** / /*Funkcija: sanswer. Vraća odgovor niza iz mp3 UART modula. * / /*Parametar:- uint8_t b. poništiti. * / /*Povratak: niz. Ako je odgovor dobro oblikovan odgovor. */ Odgovaranje nizova (void) {uint8_t i = 0; String mp3answer = ""; // Dobijte samo 10 bajtova while (mp3.available () && (i <10)) {uint8_t b = mp3.read (); ansbuf = b; i ++; mp3odgovor += sbyte2hex (b); } // ako je format odgovora točan. if ((ansbuf [0] == 0x7E) && (ansbuf [9] == 0xEF)) {vrati mp3answer; } return "???:" + mp3odgovor; }
Prvo definiramo sve programske varijable i adrese registra pristupa modula YX5300.
#uključi
#define ARDUINO_RX 5 // treba se spojiti na TX modula serijskog MP3 playera #define ARDUINO_TX 6 // spojiti 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 s MP3 -a. Sanswer string (void); Niz sbyte2hex (uint8_t b); / ************ Zapovjedni bajt **************************/ #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; bajt estado; bajt zujalica = 2; bajt pin = 0; bajt SortNumber = 0; bool gumb = 0;
Korak 8:
Ove se adrese registra koriste za konfiguriranje rada modula. Na primjer, dolje pogledajte ovu adresu za registraciju.
#define CMD_PLAY_W_INDEX 0X03
Adresa 0x03 definirana je imenom CMD_PLAY_W_INDEX. Koristi se za pokretanje pjesme s 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 ste definirali 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 tipki, serijsku komunikaciju MP3 modula i inicijalizaciju modula kartice u MP3 -u.
void setup ()
{Serial.begin (9600); mp3.početi (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čunala, a zatim smo započeli serijsku komunikaciju putem mp3 objekta.
Serial.begin (9600);
mp3.početi (9600); kašnjenje (500);
MP3 modulom upravlja se putem naredbi primljenih od Arduino serije. U tom smo procesu koristili 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 ()
Kôd je vrlo jednostavan, a cijela logička struktura prikazana je u nastavku. U nastavku ću vam objasniti potpunu 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 (gumb); pin ++; if (pin> 13) {pin = 8; } Serial.println ("Varrendo …"); Serial.println (pin); // kašnjenje (1000); } while (gumb! = 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); } // Potražite 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 u nastavku.
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 gumb koji je dijete pritisnulo. Dio koda prikazan je u nastavku.
čini
{button = digitalRead (pin); Serial.println (gumb); pin ++; if (pin> 13) {pin = 8; } Serial.println ("Varrendo …"); Serial.println (pin); // kašnjenje (1000); } while (gumb! = 1);
Ova petlja će se izvršavati sve dok korisnik ne pritisne gumbe. Petlja vam omogućuje skeniranje 5 digitalnih pinova i u trenutku kada dijete pritisne jedan od gumba, 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 će se uvjet izvršiti kada korisnik pogriješi jer je pritisnut gumb i aktivirana vrijednost iglice bila je drugačija od izvučene iglice (SortNumber).
U ovom trenutku morate izvršiti donju naredbu.
sendCommand (0x03, 0, 6);
kašnjenje (3000);
Ova se naredba 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); }
11. korak:
Ako je gumb pritisnut i digitalni pin koji je pritisnut isti je kao izvučeni pin, sustav će aktivirati zvuk ispravnog 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 razredu potrebno je stalno mijenjati i Arduino može biti veliki saveznik u stvaranju zabavnih zadataka.
Kroz ovaj projekt bilo je moguće razviti jednostavnu aktivnost koja može razviti dječje vještine poznavanjem zvuka i pravopisa svakog samoglasnika.
Za razliku od tradicionalnih metoda poučavanja, djeca će učiti kroz razrednu zabavu kroz igre i elektroniku.
Korak 13: Priznanje
Ovaj projekt razvijen je zahvaljujući podršci i poticaju tvrtke 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čeni:
Sučelje Arduino Mega s GPS modulom (Neo-6M): 8 koraka
Sučelje Arduino Mega s GPS modulom (Neo-6M): U ovom projektu sam pokazao kako spojiti GPS modul (Neo-6M) s Arduino Mega. Knjižnica TinyGPS koristi se za prikaz podataka o zemljopisnoj dužini i širini, a TinyGPS ++ za prikaz zemljopisne širine, dužine, nadmorske visine, brzine i broja satelita
Kako napraviti fazni okvir s MP3 glasovnim modulom: 4 koraka
Kako napraviti faznu kutiju s MP3 glasovnim modulom: Imam podsjetnik na kristalnu epoksidnu smolu iz mog zadnjeg DIY projekta, i ne želim ga potrošiti. Na načelima štedljivosti, odlučujem koristiti epoksid za DIY male stvari. Ponekad, kada ste depresivni, jednostavno ne želite govoriti. Ja samo
HiFive1 Arduino s HC-05 Bluetooth modulom Vodič: 7 koraka
HiFive1 Arduino s Vodičem za Bluetooth modul HC-05: HiFive1 je prva Arduino-kompatibilna ploča zasnovana na RISC-V izgrađena sa FE310 CPU-om iz SiFive-a. Ploča je oko 20 puta brža od Arduino UNO -a, a UNO -u nedostaje bilo kakva bežična veza. Srećom, postoji nekoliko jeftinih modula
Arduino upravljački LED s HC-06 Bluetooth modulom: 4 koraka
Arduino upravljanje LED-om s HC-06 Bluetooth modulom: Pozdrav svima, ovo je moj prvi službeni vodič na Instructable.com, jako sam uzbuđen zbog svog prvog projekta! Danas ću vam pokazati kako spojiti Arduino i Bluetooth modul. Arduino će komunicirati s HC-06 Bluetooth modularnom pločom pomoću
Interaktivna igra Tic-Tac Toe igra s Arduinom: 6 koraka
Interaktivna igra Tic-Tac Toe nogom kontrolirana s Arduinom: Cilj projekta Physical Tic-Tac-Toe je premjestiti dobro poznatu igru u fizičko područje. Izvorno, igru igraju dva igrača na komadu papira - stavljajući simbole "X" i "O" naizmjence. Naša ideja je bila ispitati ponašanje igrača