Turinys:

Balsių žaidimas su „Arduino“ir „YX5300“MP3 moduliu „Catalex“: 13 žingsnių
Balsių žaidimas su „Arduino“ir „YX5300“MP3 moduliu „Catalex“: 13 žingsnių

Video: Balsių žaidimas su „Arduino“ir „YX5300“MP3 moduliu „Catalex“: 13 žingsnių

Video: Balsių žaidimas su „Arduino“ir „YX5300“MP3 moduliu „Catalex“: 13 žingsnių
Video: PROGRAMAVIMO VALANDOS SU PRADINUKAIS 2024, Lapkritis
Anonim
Balsių žaidimas su „Arduino“ir „YX5300“MP3 moduliu „Catalex“
Balsių žaidimas su „Arduino“ir „YX5300“MP3 moduliu „Catalex“

Ar galite perskaityti šį klausimą? Tai keista! Aš tyčia uždaviau šį klausimą. Jei galite perskaityti šį tekstą, tai yra todėl, kad žinote visą abėcėlę ir, žinoma, sužinojote apie visas balses.

Balsiai yra visuose žodžiuose. Nuo kiekvieno jų pabėgti neįmanoma. Dabar leiskite man užduoti jums klausimą. Ar vaikystėje buvo smagu mokytis ir prireikė technologinių išteklių?

Esu tikras, kad mokymosi išteklių buvo nedaug, o jūs naudojote tradicinius metodus balsiams ir abėcėlei išmokti.

Galų gale, ar galima panaudoti kai kuriuos technologinius išteklius balsiams išmokti?

Šiame straipsnyje aš išmokysiu jus, kaip išmokyti savo mokinius ir vaikus balsių per žaidimą.

Aš išmokysiu jus sukurti sistemą su balsu, kur jūsų vaikas/mokinys išgirs raidės garsą ir turės paspausti mygtuką, kad nurodytų teisingą raidę.

Taigi jie mokysis žaisdami ir visada bus motyvuoti mokytis.

Dabar aš jums parodysiu žingsnis po žingsnio procesą, kaip sukurti savo žaidimą ir išmokyti balsių vaikams.

Prekės

JLCPCB spausdintinė plokštė

Arduino Uno

Mygtuko jungiklis

10kR rezistorius

Vyriška antraštė 2, 54 mm 1x7

1 žingsnis: balsių žaidimo su „Arduino“kūrimas

Balsių žaidimo su „Arduino“kūrimas
Balsių žaidimo su „Arduino“kūrimas

Žaidimo esmė yra balsių JLCPCB spausdintinė plokštė. Galite pasiekti šią nuorodą ir atsisiųsti projekto failus. Jame yra 5 mygtukai. Kiekvieną mygtuką naudosite balsiui ir prijungsite jį prie „Arduino“.

Spausdintinė plokštė parodyta 1 paveiksle.

2 žingsnis:

Vaizdas
Vaizdas

Naudodami šį PCB projektą galite prijungti jį prie „Arduino“ir sukurti savo žaidimą. Toliau aš jums pasiūlysiu elektroninę schemą, kad galėtumėte surinkti ar sukurti projektą savo protoboate.

3 žingsnis:

Remdamiesi šia schema, mes nustatėme elektroninės plokštės išdėstymą. Tai parodyta 2 paveiksle ir galite atsisiųsti failus ir sukurti savo projektą.

Pasirinkite 5 kaiščius iš „Arduino“ir prijunkite džemperius ant lentos prie „Arduino“. Arba kitaip galite surinkti šią elektroninę schemą.

4 žingsnis: projekto idėja

Projekto idėja
Projekto idėja

Aš išmokysiu jus surinkti MP3 garso sistemą su „Arduino“. Ši sistema bus atsakinga už raidės kalbėjimo balso atkūrimą. Kiekvienos raidės garsas bus nupieštas naudojant reikšmę nuo 1 iki 5, kur 1 reiškia A, o 5 - U.

Taigi, išgirdęs garsą vaikas turi pažvelgti į klaviatūrą, atpažinti balsės rašybą ir paspausti teisingą klavišą.

Jei nepavyksta, sistema 3 kartus sumirksės raudonu šviesos diodu. Priešingu atveju sistema 5 sekundėms įjungs garso signalą ir nubrėžs naują balsį.

Norėdami tai padaryti, turite surinkti šią grandinę.

Šioje grandinėje prijungsite MP3 modulį ir balsių lentą „Arduino“. „Bluetooth“modulis buvo naudojamas „Catalex MP3“moduliui pavaizduoti.

„Arduino“bus atsakingas už 5 numerių rūšiavimą ir tada komandą, kad suaktyvintų nupieštą balsį

5 veiksmas:

Vaizdas
Vaizdas

Po to lauksime, kol vaikas išgirs ir paspaus mygtuką, kaip parodyta paveikslėlyje aukščiau.

Kiekvienas aukščiau esantis mygtukas reiškia abėcėlės balsį. Toliau parodysiu, kaip sukursite šio projekto programavimo logiką.

6 veiksmas: kurkite žaidimo programavimo logiką

Žaidimo programavimo logikos kūrimas
Žaidimo programavimo logikos kūrimas

Balsių žaidimo sistema yra pagrįsta YX5300 modulio veikimu. Šis modulis turi tam tikrų funkcijų, tačiau daugiausia dėmesio skirsime žaidimo darbo struktūros pristatymui per pagrindines YX5300 modulio funkcijas.

Žemiau pateikiu jums visą projekto programavimo logiką.

7 žingsnis:

Toliau žingsnis po žingsnio paaiškinsiu, kaip sukurti šio linksmo žaidimo vaikams logiką.

#įtraukti

#define ARDUINO_RX 5 // turėtų prisijungti prie serijinio MP3 grotuvo modulio TX #define ARDUINO_TX 6 // prisijungti prie modulio SoftwareSerial mp3 (ARDUINO_RX, ARDUINO_TX) RX; static int8_t Send_buf [8] = {0}; // Buferis komandoms siųsti. // LOKALIAI GERIAU statinis uint8_t ansbuf [10] = {0}; // Buferis atsakymams. // LOKALIAI GERIAU Styga mp3Answer; // Atsakymas iš MP3. Styginių atsakymas (negalioja); Styga sbyte2hex (uint8_t b); / ************ Komandinis baitas *************************/ #define CMD_NEXT_SONG 0X01 // Paleisti kitą daina. #define CMD_PREV_SONG 0X02 // Paleisti ankstesnę dainą. #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 // Vieno ciklo atkūrimas. #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_FOLD0FILT_FILE_FILE_FILE #define CMD_FOLDER_CYCLE 0X17 #define CMD_SHUFFLE_PLAY 0x18 // #define CMD_SET_SNGL_CYCL 0X19 // Nustatyti vieną ciklą. # 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 numeris; baitų estado; baitų garsinis signalas = 2; baitų smeigtukas = 0; baitas RūšiuotiSkaičius = 0; bool mygtukas = 0; void setup () {Serial.begin (9600); mp3.pradis (9600); vėlavimas (500); už (kaištis = 8; kaištis 13) {kaištis = 8; } Serial.println ("Varrendo …"); Serial.println (kaištis); // uždelsimas (1000); } while (mygtukas! = 1); Serial.println ("Saiu …"); if (mygtukas == 1 && (kaištis-1)! = RūšiuotiSkaičius) {sendCommand (0x03, 0, 6); vėlavimas (3000); } if (mygtukas == 1 && (pin-1) == SortNumber) {sendCommand (0x03, 0, 7); vėlavimas (3000); } // Patikrinkite atsakymą. if (mp3.available ()) {Serial.println (decodeMP3Answer ()); } uždelsimas (100); //Serial.println ("Tocando musica … "); } /*********************************************** ******************************** / / Funkcija sendMP3Command: ieškokite „c“komandos ir nusiųskite ją į MP3 * / /*Parametras: c. MP3 komandos kodas, „h“- pagalbos. *// *Return: void */ void sendMP3Command (char c) {switch (c) {case '?': Case 'h': Serial.println ("PAGALBA"); Serial.println ("p = Play"); Serial.println ("P = Pauzė"); Serial.println ("> = Kitas"); Serial.println ("': Serial.println (" Kitas "); sendCommand (CMD_NEXT_SONG); sendCommand (CMD_PLAYING_N); // prašyti failo, kuris groja, pertraukos; dėklas„ Įdėta atminties kortelė “; pertrauka; atvejis 0x3D: decodedMP3Answer + = " -> Užbaigto grojimo numeris" + Styga (ansbuf [6], DEC); // sendCommand (CMD_NEXT_SONG); // sendCommand (CMD_PLAYING_N); // klausti failo, kuris groja, pertraukos; atvejis 0x40: decodedMP3Answer += " -> Klaida"; break; case 0x41: decodedMP3Answer += " -> Duomenys atkurti teisingai."; break; case 0x42: decodedMP3Answer += " -> Būsena leidžiama:" +String (ansbuf [6], DEC); break; case 0x48: decodedMP3Answer + = " -> Failų skaičius:" + String (ansbuf [6], DEC); break; case 0x4C: decodedMP3Answer + = " -> Groja:" + String (ansbuf [6], DEC); break; case 0x4E: decodedMP3Answer + = " -> Aplanko failų skaičius:" + String (ansbuf [6], DEC); break; case 0x4F: decodedMP3Answer + = " -> Aplankų skaičius:" + String (ansbuf [6], DEC); break;} return dekoduotasMP3Answer;} /********************************** ************ ********************************* / / Funkcija: Siųsti komandą į MP3* / /*Parametras: baitas komanda *// *Parametras: baitas dat1 parametras komandai *// *Parametras: baitas dat2 parametras komandai */ void sendCommand (baitų komanda) {sendCommand (komanda, 0, 0); } void sendCommand (baitų komanda, baitas dat1, baitas dat2) {delay (20); Send_buf [0] = 0x7E; // Siųsti_buf [1] = 0xFF; // Siųsti_buf [2] = 0x06; // Len Send_buf [3] = komanda; // Siųsti_buf [4] = 0x01; // 0x00 NE, 0x01 atsiliepimas Send_buf [5] = dat1; // datah Send_buf [6] = dat2; // datal Send_buf [7] = 0xEF; // Serial.print ("Siunčiamas:"); for (uint8_t i = 0; i <8; i ++) {mp3.write (Send_buf ); Serial.print (sbyte2hex (Send_buf )); } Serial.println (); } /*********************************************** ******************************* / /*Funkcija: sbyte2hex. Grąžina baitų duomenis HEX formatu. * / /*Parametras:- uint8_t b. Baitų konvertuoti į HEX. *// *Grįžti: eilutė */ eilutė sbyte2hex (uint8_t b) {Eilutės šeši; šeši = "0X"; jei (b <16) šešioliktainis += "0"; šešioliktainė = = eilutė (b, HEX); šešiolika += ""; grąžinti šešioliktainį; } /*********************************************** ******************************* / /*Funkcija: shex2int. Grąžina int iš HEX eilutės. * / /*Parametras: s. char *s konvertuoti į HEX. * / /*Parametras: n. char *s ilgis. *// *Grįžti: int */ int shex2int (char *s, int n) {int r = 0; už (int i = 0; i = '0' && s = 'A' && s <= 'F') {r *= 16; r + = (s - 'A') + 10; }} return r; } /*********************************************** ******************************* / /*Funkcija: atsakymas. Pateikia eilutės atsakymą iš mp3 UART modulio. * / /*Parametras:- uint8_t b. tuštuma. * / /*Grįžti: eilutė. Jei atsakymas yra gerai suformuluotas, atsakykite. */ Styginių atsakymas (negalioja) {uint8_t i = 0; Eilutė mp3answer = ""; // Gaukite tik 10 baitų, kol (mp3.available () && (i <10)) {uint8_t b = mp3.read (); ansbuf = b; i ++; mp3 atsakymas += sbyte2hex (b); } // jei atsakymo formatas teisingas. if ((ansbuf [0] == 0x7E) && (ansbuf [9] == 0xEF)) {return mp3answer; } return "???:" + mp3answer; }

Pirmiausia mes apibrėžiame visus programos kintamuosius ir YX5300 modulio prieigos registro adresus.

#įtraukti

#define ARDUINO_RX 5 // turėtų prisijungti prie serijinio MP3 grotuvo modulio TX #define ARDUINO_TX 6 // prisijungti prie modulio SoftwareSerial mp3 (ARDUINO_RX, ARDUINO_TX) RX; static int8_t Send_buf [8] = {0}; // Buferis komandoms siųsti. // LOKALIAI GERIAU statinis uint8_t ansbuf [10] = {0}; // Buferis atsakymams. // LOKALIAI GERIAU Styga mp3Answer; // Atsakymas iš MP3. Styginių atsakymas (negalioja); Styga sbyte2hex (uint8_t b); / ************ Komandinis baitas *************************/ #define CMD_NEXT_SONG 0X01 // Paleisti kitą daina. #define CMD_PREV_SONG 0X02 // Paleisti ankstesnę dainą. #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 // Vieno ciklo atkūrimas. #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_FOLD0FILT_FILE_FILE_FILE #define CMD_FOLDER_CYCLE 0X17 #define CMD_SHUFFLE_PLAY 0x18 // #define CMD_SET_SNGL_CYCL 0X19 // Nustatyti vieną ciklą. # 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 numeris; baitų estado; baitų garsinis signalas = 2; baitų smeigtukas = 0; baitas RūšiuotiSkaičius = 0; bool mygtukas = 0;

8 žingsnis:

Šie registro adresai naudojami modulio veikimui konfigūruoti. Pavyzdžiui, žiūrėkite šį registracijos adresą žemiau.

#define CMD_PLAY_W_INDEX 0X03

Adresas 0x03 apibrėžtas pavadinimu CMD_PLAY_W_INDEX. Jis naudojamas dainai suaktyvinti iš jos numerio, tai yra, įvedate garso numerį ir jis bus paleistas.

Būtent su šiomis vertybėmis mes jas naudosime ir sukonfigūruosime savo projekto veikimą.

Nustačius įvairius adresus, kurie bus naudojami, įvesime sąrankos funkciją ir sukonfigūruosime savo projekto kaiščius ir nuoseklųjį ryšį.

9 veiksmas: funkcija „Tuštumos nustatymas“()

Toliau žr. Tuštumos nustatymo funkciją. Aš padariau visus mygtukų kaiščių nustatymus, MP3 modulio nuoseklųjį ryšį ir kortelės modulio inicijavimą MP3.

negaliojanti sąranka ()

{Serial.begin (9600); mp3.pradis (9600); vėlavimas (500); for (kaištis = 8; kaištis <13; kaištis ++) {pinMode (kaištis, ĮVESTIS); } sendCommand (CMD_SEL_DEV, 0, DEV_TF); vėlavimas (500); }

Pradėjau nuoseklųjį ryšį, kad galėčiau spausdinti duomenis į kompiuterio seriją, o tada pradėjome nuoseklųjį ryšį per mp3 objektą.

Serial.begin (9600);

mp3.pradis (9600); vėlavimas (500);

MP3 modulis yra valdomas naudojant komandas, gautas „Arduino“serijos. Šiame procese mes panaudojome „SoftwareSerial“biblioteką ir emuliavome „Arduino“skaitmeninių kaiščių seriją.

Taigi, naudodami „Arduino“galėsite valdyti MP3 modulį per jam atsiųstas komandas.

Be to, mes sukūrėme skaitmeninių kaiščių konfigūraciją ir inicijavome MP3 kortelės modulį

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

Atlikę konfigūraciją, turime pereiti prie pagrindinės tuštumos ciklo funkcijos logikos.

10 veiksmas: pagrindinės funkcijos tuštumos kilpa ()

Kodas yra labai paprastas, o visa loginė struktūra pateikiama žemiau. Toliau paaiškinsiu jums visą pagrindinės funkcijos logiką.

tuštumos kilpa ()

{smeigtukas = 8; randomSeed (analogRead (A0)); numero = atsitiktinis (8, 12); RūšiuotiSkaičius = skaičius; numero = numero - 7; Serial.println (skaičius); sendCommand (0x03, 0, skaičius); vėlavimas (1000); do {button = digitalRead (pin); Serial.println (mygtukas); smeigtukas ++; jei (kaištis> 13) {kaištis = 8; } Serial.println ("Varrendo …"); Serial.println (kaištis); // uždelsimas (1000); } while (mygtukas! = 1); Serial.println ("Saiu …"); if (mygtukas == 1 && (kaištis-1)! = RūšiuotiSkaičius) {sendCommand (0x03, 0, 6); vėlavimas (3000); } if (mygtukas == 1 && (pin-1) == SortNumber) {sendCommand (0x03, 0, 7); vėlavimas (3000); } // Patikrinkite atsakymą. if (mp3.available ()) {Serial.println (decodeMP3Answer ()); } uždelsimas (100); //Serial.println ("Tocando musica … "); }

Kiekvieną ciklo funkcijos ciklo pradžią sugeneruosime naują reikšmę tarp 8 ir 12, kad sugeneruotume balsio garsą. Reikšmė nuo 8 iki 12 nurodo skaitmeninį balsio kaištį.

Atsitiktinės vertės generavimo kodas pateiktas žemiau.

smeigtukas = 8;

randomSeed (analogRead (A0)); numero = atsitiktinis (8, 12); RūšiuotiSkaičius = skaičius;

Be to, iš sumos, ištrauktos nuo 8 iki 12., atimame 7. Tai leis mums nurodyti 1–5 atminties kortelėje įrašytų dainų pozicijas.

numero = numero - 7;

Po to atkūriau balsą, nubrėžtą ant žemiau esančios linijos.

sendCommand (0x03, 0, skaičius);

vėlavimas (1000);

Dabar atėjo svarbus laikas: momentas, kai ketiname skaityti vaiko paspaustą mygtuką. Kodo dalis pateikiama žemiau.

daryti

{mygtukas = digitalRead (smeigtukas); Serial.println (mygtukas); smeigtukas ++; jei (kaištis> 13) {kaištis = 8; } Serial.println ("Varrendo …"); Serial.println (kaištis); // uždelsimas (1000); } while (mygtukas! = 1);

Ši kilpa bus vykdoma tol, kol vartotojas nepaspaus mygtukų. Ciklas leidžia nuskaityti 5 skaitmeninius kaiščius ir kai vaikas paspaus vieną iš mygtukų, jis išeis iš kilpos ir patikrins, ar vaikas teisingai atsakė.

Patvirtinimą atliksite naudodami žemiau esantį kodą.

if (mygtukas == 1 && (smeigtukas-1)! = RūšiuotiSkaičius)

{sendCommand (0x03, 0, 6); vėlavimas (3000); } if (mygtukas == 1 && (pin-1) == SortNumber) {sendCommand (0x03, 0, 7); vėlavimas (3000); }

Pirmoji sąlyga bus įvykdyta, kai vartotojas padarys klaidą, nes buvo paspaustas mygtukas ir suaktyvinta smeigtuko vertė skyrėsi nuo nupiešto kaiščio (SortNumber).

Šiuo metu turite vykdyti žemiau pateiktą komandą.

sendCommand (0x03, 0, 6);

vėlavimas (3000);

Ši komanda naudojama netinkamam atsako tonui suaktyvinti. Galiausiai turime antrąją sąlygą, kuri bus naudojama tikrinant, ar vaikas teisus.

if (mygtukas == 1 && (pin-1) == Rūšiuoti numerį)

{sendCommand (0x03, 0, 7); vėlavimas (3000); }

11 veiksmas:

Vaizdas
Vaizdas

Jei buvo paspaustas mygtukas ir nuspaustas skaitmeninis kaištis yra tas pats, kaip ir nupieštas kaištis, sistema sukurs teisingo atsakymo garsą.

Kaip jums paaiškinu, šis kodas yra labai paprastas ir padės bet kuriam vaikui tobulinti žinias apie balses per žaidimą su „Arduino“.

Aukščiau esančiame paveikslėlyje garso dėžutė vykdo dainą, saugomą MP3 modulio YX5300 SD kortelėje.

12 žingsnis: Išvada

Mokymąsi klasėje reikia nuolat keisti, o „Arduino“gali būti puikus sąjungininkas kuriant įdomias užduotis.

Vykdant šį projektą buvo galima sukurti paprastą veiklą, kuri gali lavinti vaikų įgūdžius, žinant kiekvieno balsio skambesį ir rašybą.

Skirtingai nuo tradicinių mokymo metodų, vaikai mokysis linksmybių klasėje per žaidimus ir elektroniką.

13 žingsnis: patvirtinimas

Šis projektas buvo sukurtas bendrovės JLCPCB paramos ir paskatinimo dėka. Jie skatino švietimą ir pakvietė mus sukurti balsių žaidimą, skirtą mokyti vaikus klasėje.

Jei norite įsigyti balsių žaidimo elektronines plokšteles, galite pasiekti šią nuorodą ir įsigyti 10 vienetų už 2 USD JLCPCB.

Rekomenduojamas: