Sisukord:
- Tarvikud
- Samm: täishäälikute mängu arendamine Arduinoga
- 2. samm:
- 3. samm:
- 4. samm: projekti idee
- 5. samm:
- 6. samm: mängu programmeerimisloogika loomine
- 7. samm:
- 8. samm:
- 9. toiming: tühimike seadistamise () funktsioon
- 10. samm: põhifunktsiooni tühimik ()
- 11. samm:
- 12. samm: järeldus
- 13. samm: kinnitamine
Video: Häälikute mäng Arduino ja YX5300 MP3 -mooduliga Catalex: 13 sammu
2024 Autor: John Day | [email protected]. Viimati modifitseeritud: 2024-01-30 08:47
Kas saate seda küsimust lugeda? See on imelik! Ma küsisin selle küsimuse meelega. Kui saate seda teksti lugeda, siis sellepärast, et teate kogu tähestikku ja muidugi õppisite kõiki täishäälikuid.
Vokaalid esinevad kõikides sõnades. Igaühe eest on võimatu põgeneda. Nüüd lubage mul esitada teile küsimus. Kas teie lapsepõlves õppimine oli lõbus ja hõlmas tehnoloogilisi ressursse?
Olen kindel, et õppevahendeid oli vähe ja kasutasite täishäälikute ja tähestiku õppimiseks traditsioonilisi meetodeid.
Lõppude lõpuks, kas on võimalik kasutada mõnda tehnoloogilist ressurssi vokaalide õppimiseks?
Selles artiklis õpetan teile, kuidas mängu kaudu oma õpilastele ja lastele täishäälikuid õpetada.
Ma õpetan teile, kuidas luua häälega süsteem, kus teie laps/õpilane kuuleb kirja häält ja peab õige tähe näitamiseks nuppu vajutama.
Seega õpivad nad mängides ja on alati motiveeritud õppima.
Nüüd näitan teile samm-sammult protsessi, et saaksite oma mängu luua ja lastele täishäälikuid õpetada.
Tarvikud
JLCPCB trükkplaat
Arduino Uno
Nuppude lüliti
10kR takisti
Isane päis 2, 54 mm 1x7
Samm: täishäälikute mängu arendamine Arduinoga
Mängu süda on vokaalide JLCPCB trükkplaat. Sellele lingile pääsete juurde ja saate projekti failid alla laadida. Sellel on 5 nuppu. Kasutate igat nuppu vokaali tähistamiseks ja selle ühendamiseks oma Arduinoga.
Trükkplaat on näidatud joonisel 1.
2. samm:
Selle PCB projekti abil saate selle ühendada Arduinoga ja luua oma mängu. Järgmisena pakun teile elektroonilist skeemi, et saaksite projekti oma protoboardil kokku panna või üles ehitada.
3. samm:
Selle skeemi põhjal seadistame elektroonilise tahvli paigutuse. See on näidatud joonisel 2 ja saate failid alla laadida ja oma projekti teha.
Valige Arduino seast 5 tihvti ja ühendage plaadil olevad hüppajad Arduinoga. Või muul viisil saate kokku panna järgmise elektroonilise skeemi.
4. samm: projekti idee
Ma õpetan teile, kuidas Arduino abil MP3 -helisüsteemi kokku panna. See süsteem vastutab kirja kõneleva hääle reprodutseerimise eest. Iga tähe heli joonistatakse väärtusega 1 kuni 5, kus 1 tähistab A ja 5 tähistab U.
Seega, kui laps heli kuuleb, peab ta vaatama klaviatuuri, tundma ära vokaali õigekirja ja vajutama õiget klahvi.
Kui see ei õnnestu, vilgub süsteem punast LED -i 3 korda. Vastasel korral aktiveerib süsteem 5 sekundiks helisignaali ja joonistab uue vokaali.
Selleks peate kokku panema järgmise ahela.
Selles vooluringis ühendate MP3 -mooduli ja Arduino vokaaliplaadi. Bluetooth -moodulit kasutati Catalex MP3 -mooduli tähistamiseks.
Arduino vastutab 5 numbri sortimise ja seejärel joonistatud vokaali aktiveerimise käsu saatmise eest
5. samm:
Pärast seda ootame, kuni laps kuuleb ja vajutab nuppu, nagu on näidatud ülaltoodud joonisel.
Iga ülaltoodud nupp tähistab tähestiku vokaali. Järgmisena näitan teile, kuidas selle projekti jaoks programmeerimisloogikat üles ehitada.
6. samm: mängu programmeerimisloogika loomine
Vokaalimängusüsteem põhineb YX5300 mooduli toimimisel. Sellel moodulil on mõned funktsioonid, kuid keskendume mängu tööstruktuuri tutvustamisele YX5300 mooduli põhifunktsioonide kaudu.
Allpool pakun teile kogu projekti programmeerimisloogikat.
7. samm:
Järgnevalt selgitan samm -sammult selle lastele mõeldud lõbusa mängu loogika loomist.
#kaasake
#define ARDUINO_RX 5 // peaks looma ühenduse MP3 -jadamängija TX -ga staatiline int8_t Send_buf [8] = {0}; // Puhvri saatmise käsud. // LOKALISELT PAREM staatiline uint8_t ansbuf [10] = {0}; // Puhver vastuste jaoks. // KOHALIKULT PAREM String mp3Answer; // Vastus MP3 -st. Stringide vastus (tühine); String sbyte2hex (uint8_t b); / ************ Käsubait *************************/ #define CMD_NEXT_SONG 0X01 // Esita järgmine laul. #define CMD_PREV_SONG 0X02 // Esita eelmine lugu. #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. #defineeri 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_FOLD0FILE_FILE_FIIL #define CMD_FOLDER_CYCLE 0X17 #define CMD_SHUFFLE_PLAY 0x18 // #define CMD_SET_SNGL_CYCL 0X19 // Määra üks tsükkel. #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 number; bait estado; baidi sumin = 2; bait -tihvt = 0; bait SortNumber = 0; bool nupp = 0; void setup () {Serial.begin (9600); mp3.algus (9600); viivitus (500); jaoks (tihvt = 8; tihvt 13) {tihvt = 8; } Serial.println ("Varrendo …"); Serial.println (tihvt); // viivitus (1000); } while (nupp! = 1); Serial.println ("Saiu …"); if (nupp == 1 && (pin-1)! = SortNumber) {sendCommand (0x03, 0, 6); viivitus (3000); } if (nupp == 1 && (pin-1) == SortNumber) {sendCommand (0x03, 0, 7); viivitus (3000); } // Kontrollige vastust. if (mp3.available ()) {Serial.println (decodeMP3Answer ()); } viivitus (100); //Serial.println("Tocando musica … "); } /*********************************************** ******************************** / / Funktsioon sendMP3Command: otsige c -käsk ja saatke see MP3 -le * / /*Parameeter: c. MP3 käsu kood, abi saamiseks "h". *// *Return: void */ void sendMP3Command (char c) {switch (c) {case '?': Case 'h': Serial.println ("HELP"); Serial.println ("p = Esita"); Serial.println ("P = Paus"); Serial.println ("> = Järgmine"); Serial.println ("': Serial.println (" Järgmine "); sendCommand (CMD_NEXT_SONG); sendCommand (CMD_PLAYING_N); // küsi esitatava faili arvu; juhtum' Mälukaart on sisestatud. '; Break; case 0x3D: dekodeeritudMP3Answer + = " -> Valmis esitusnumber" + String (ansbuf [6], DEC); // sendCommand (CMD_NEXT_SONG); // sendCommand (CMD_PLAYING_N); // küsi esitatava faili arvu; juhtum 0x40: dekodeeritudMP3Answer += " -> Viga"; break; case 0x41: decodedMP3Answer += " -> Andmed taastati õigesti."; break; case 0x42: decodedMP3Answer += " -> Olekut mängitakse:" +String (ansbuf [6], DEC); break; case 0x48: decodedMP3Answer + = " -> Failide arv:" + String (ansbuf [6], DEC); break; case 0x4C: decodedMP3Answer + = " -> Mängimine:" + String (ansbuf [6], DEC); break; case; 0x4E: dekodeeritudMP3Answer + = " -> Kaustade failide arv:" + String (ansbuf [6], DEC); break; case 0x4F: decodedMP3Answer + = " -> Kaustade arv:" + String (ansbuf [6], DEC); break;} return dekodeeritudMP3Answer;} /*********************************** ************ ********************************* / /*Funktsioon: käsu saatmine MP3 -le* / /*Parameeter: bait käsk *// *Parameeter: bait dat1 parameeter käsule *// *Parameeter: bait dat2 parameeter käsule */ void sendCommand (baitkäsk) {sendCommand (käsk, 0, 0); } void sendCommand (baitkäsk, bait dat1, bait dat2) {delay (20); Saada_buf [0] = 0x7E; // Saada_buf [1] = 0xFF; // Saada_buf [2] = 0x06; // Len Send_buf [3] = käsk; // Saada_buf [4] = 0x01; // 0x00 EI, 0x01 tagasiside Send_buf [5] = dat1; // datah Send_buf [6] = kuupäev2; // datal Send_buf [7] = 0xEF; // Serial.print ("Saadan:"); jaoks (uint8_t i = 0; i <8; i ++) {mp3.write (Send_buf ); Serial.print (sbyte2hex (Send_buf )); } Serial.println (); } /*********************************************** ******************************* / /*Funktsioon: sbyte2hex. Tagastab baidiandmed HEX -vormingus. * / /*Parameeter:- uint8_t b. Bait HEX -i teisendamiseks. *// *Tagasi: String */ String sbyte2hex (uint8_t b) {String Shex; kuuskant = "0X"; kui (b <16) kuuskant += "0"; kuuskant += string (b, HEX); kuuskant += ""; tagastama kuusk; } /*********************************************** ******************************* / /*Funktsioon: shex2int. Annab vastuseks HEX -stringi int. * / /*Parameeter: s. char *s, et teisendada HEX. * / /*Parameeter: n. char *s pikkus. *// *Tagastus: int */ int shex2int (char *s, int n) {int r = 0; jaoks (int i = 0; i = '0' && = 'A' && s <= 'F') {r *= 16; r + = (s - 'A') + 10; }} return r; } /*********************************************** ******************************* / /*Funktsioon: vastus. Annab vastuseks stringi vastuse mp3 UART moodulist. * / /*Parameeter:- uint8_t b. tühine. * / /*Tagastus: string. Kui vastus on hästi vormistatud, vastake. */ Stringide vastus (tühine) {uint8_t i = 0; String mp3 vastus = ""; // Hankige ainult 10 baiti, kui (mp3.available () && (i <10)) {uint8_t b = mp3.read (); ansbuf = b; i ++; mp3 vastus += sbyte2hex (b); } // kui vastuse vorming on õige. if ((ansbuf [0] == 0x7E) && (ansbuf [9] == 0xEF)) {tagasta mp3 vastus; } return "???:" + mp3answer; }
Esiteks määratleme kõik programmi muutujad ja YX5300 mooduli juurdepääsuregistri aadressid.
#kaasake
#define ARDUINO_RX 5 // peaks ühenduma MP3 -jadamooduli TX -ga staatiline int8_t Send_buf [8] = {0}; // Puhvri saatmise käsud. // LOKALISELT PAREM staatiline uint8_t ansbuf [10] = {0}; // Puhver vastuste jaoks. // KOHALIKULT PAREM String mp3Answer; // Vastus MP3 -st. Stringide vastus (tühine); String sbyte2hex (uint8_t b); / ************ Käsubait *************************/ #define CMD_NEXT_SONG 0X01 // Esita järgmine laul. #define CMD_PREV_SONG 0X02 // Esita eelmine lugu. #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. #defineeri 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_FOLD0FILE_FILE_FIIL #define CMD_FOLDER_CYCLE 0X17 #define CMD_SHUFFLE_PLAY 0x18 // #define CMD_SET_SNGL_CYCL 0X19 // Määra üks tsükkel. #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 number; bait estado; baidi sumin = 2; bait -tihvt = 0; bait SortNumber = 0; bool nupp = 0;
8. samm:
Neid registriaadresse kasutatakse mooduli töö konfigureerimiseks. Näiteks vaadake seda registreerimisaadressi allpool.
#define CMD_PLAY_W_INDEX 0X03
Aadress 0x03 on määratletud nimega CMD_PLAY_W_INDEX. Seda kasutatakse laulu käivitamiseks selle numbrist, see tähendab, et sisestate heli numbri ja see esitatakse.
Nende väärtuste abil me neid kasutame ja oma projekti toimimist konfigureerime.
Pärast erinevate kasutatavate aadresside määratlemist siseneme seadistusfunktsiooni ning konfigureerime oma projekti jaoks tihvtid ja jadakommunikatsiooni.
9. toiming: tühimike seadistamise () funktsioon
Järgmisena vaadake tühimike seadistamise funktsiooni. Tegin kõik nuppude seadistused, MP3 -mooduli jadaühenduse ja kaardimooduli vormindamise MP3 -s.
tühine seadistus ()
{Serial.begin (9600); mp3.algus (9600); viivitus (500); for (pin = 8; pin <13; pin ++) {pinMode (pin, INPUT); } sendCommand (CMD_SEL_DEV, 0, DEV_TF); viivitus (500); }
Alustasin jadaühendust, et printida andmed arvuti seeriasse ja seejärel alustasime jadaühendust mp3 -objekti kaudu.
Seriaalne algus (9600);
mp3.algus (9600); viivitus (500);
Mp3 -moodulit juhitakse Arduino jada poolt saadud käskude kaudu. Selles protsessis kasutasime SoftwareSerial raamatukogu ja emuleerisime Arduino digitaalsete tihvtide seeriat.
Seega saate Arduino abil juhtida MP3 -moodulit sellele saadetud käskude kaudu.
Lisaks seadistasime digitaalsed tihvtid ja vormindasime MP3 -kaardi mooduli
for (pin = 8; pin <13; pin ++) {pinMode (pin, INPUT); } sendCommand (CMD_SEL_DEV, 0, DEV_TF); viivitus (500);
Pärast konfiguratsiooni tegemist peame minema tühisilmusfunktsiooni põhiloogika juurde.
10. samm: põhifunktsiooni tühimik ()
Kood on väga lihtne ja kogu loogiline struktuur on esitatud allpool. Järgnevalt selgitan teile põhifunktsiooni täielikku loogikat.
tühine tsükkel ()
{pin = 8; randomSeed (analogRead (A0)); numero = juhuslik (8, 12); SortNumber = number; numero = numero - 7; Serial.println (number); sendCommand (0x03, 0, number); viivitus (1000); do {button = digitalRead (pin); Serial.println (nupp); tihvt ++; kui (tihvt> 13) {tihvt = 8; } Serial.println ("Varrendo …"); Serial.println (tihvt); // viivitus (1000); } while (nupp! = 1); Serial.println ("Saiu …"); if (nupp == 1 && (pin-1)! = SortNumber) {sendCommand (0x03, 0, 6); viivitus (3000); } if (nupp == 1 && (pin-1) == SortNumber) {sendCommand (0x03, 0, 7); viivitus (3000); } // Kontrollige vastust. if (mp3.available ()) {Serial.println (decodeMP3Answer ()); } viivitus (100); //Serial.println("Tocando musica … "); }
Tsükli funktsioonitsükli igal alguses genereerime täishääliku tekitamiseks uue väärtuse vahemikus 8 kuni 12. Väärtus 8 kuni 12 viitab vokaali digitaalsele tihvtile.
Juhusliku väärtuse genereerimise kood on näidatud allpool.
tihvt = 8;
randomSeed (analogRead (A0)); numero = juhuslik (8, 12); SortNumber = number;
Lisaks lahutame summast 8–12 maha 7. See võimaldab meil osutada mälukaardile salvestatud lugude positsioonidele 1–5.
numero = numero - 7;
Pärast seda taasesitasin allolevale joonele tõmmatud vokaali heli.
sendCommand (0x03, 0, number);
viivitus (1000);
Nüüd on kätte jõudnud tähtis aeg: hetk, mil hakkame lapse poolt vajutatavat nuppu lugema. Koodiosa on esitatud allpool.
teha
{nupp = digitalRead (pin); Serial.println (nupp); tihvt ++; kui (tihvt> 13) {tihvt = 8; } Serial.println ("Varrendo …"); Serial.println (tihvt); // viivitus (1000); } while (nupp! = 1);
Seda tsüklit täidetakse seni, kuni kasutaja nuppe vajutab. Silmus võimaldab skannida 5 digitaalset tihvti ja hetkel, kui laps vajutab ühte nuppu, väljub see silmusest ja kontrollib, kas laps on õigesti reageerinud.
Kinnitamise teete alloleva koodi abil.
if (nupp == 1 && (pin-1)! = SortNumber)
{sendCommand (0x03, 0, 6); viivitus (3000); } if (nupp == 1 && (pin-1) == SortNumber) {sendCommand (0x03, 0, 7); viivitus (3000); }
Esimene tingimus täidetakse siis, kui kasutaja teeb vea, kuna nuppu vajutati ja tihvti käivitatud väärtus erines joonistatud tihvtist (SortNumber).
Sel hetkel peate täitma alloleva käsu.
sendCommand (0x03, 0, 6);
viivitus (3000);
Seda käsku kasutatakse vale vastuse tooni käivitamiseks. Lõpuks on meil teine tingimus, mille abil kontrollitakse, kas lapsel on õigus.
if (nupp == 1 && (pin-1) == SortNumber)
{sendCommand (0x03, 0, 7); viivitus (3000); }
11. samm:
Kui vajutati nuppu ja vajutatud digitaalne tihvt on sama, mis joonistatud tihvt, käivitab süsteem õige vastuse heli.
Nagu ma teile selgitan, on see kood väga lihtne ja aitab igal lapsel arendada oma teadmisi vokaalide kohta Arduinoga mängides.
Ülaltoodud joonisel täidab helikast MP3 -mooduli YX5300 SD -kaardile salvestatud lugu.
12. samm: järeldus
Klassiruumi haridust tuleb pidevalt muuta ja Arduino võib olla suurepärane liitlane lõbusate ülesannete loomisel.
Selle projekti kaudu oli võimalik välja töötada lihtne tegevus, mis võib arendada laste oskusi läbi iga vokaali heli ja õigekirja tundmise.
Erinevalt traditsioonilistest õpetamismeetoditest õpivad lapsed mängude ja elektroonika kaudu klassiruumis lõbutsedes.
13. samm: kinnitamine
See projekt töötati välja tänu ettevõtte JLCPCB toele ja julgustusele. Nad julgustasid haridust ja kutsusid meid arendama täishäälikute mängu lastele klassiruumis õpetamiseks.
Kui soovite osta vokaalide mängu elektroonilisi plaate, pääsete sellele lingile juurde ja ostate JLCPCB -st 10 ühikut 2 dollari eest.
Soovitan:
DIY 37 LED Arduino ruleti mäng: 3 sammu (piltidega)
DIY 37 Leds Arduino rulett Mäng: Rulett on kasiinomäng, mis on nime saanud prantsuse sõna järgi, mis tähendab väikest ratast
Looge Arduino Simoni mäng 2 minutiga!: 3 sammu
Loo Arduino Simoni mäng 2 minutiga!: EI džemprid! EI Juhtmeid! MITTE jootmist! EI leivalaud! Mõtlemine väljaspool kasti. Nii et soovite näidata oma mikrokontrollerit koos mõne lisaseadmetega tõesti kiiresti, enne kui sõbrad või sugulane on teel … Pange kokku
Arduino Sorta Sudoku mäng: 3 sammu (piltidega)
Arduino Sorta Sudoku mäng: Paljudele inimestele meeldib Sudokut mängida ja lapselastele meeldib arvamismängud, nii et otsustasin teha kaasaskantava “Sorta Sudoku” mängu. Minu versioonis on mäng 4x4 ruudustik, kuid pakutakse ainult ühte numbrit. Idee on arvata ülejäänud numbrid
Vajuta nuppu); // Arduino LCD -mäng: 5 sammu (piltidega)
Vajuta nuppu); // Arduino LCD -mäng: hiljuti töötasin skautides Game Design'i teenetemärgi kallal. Ühe nõude jaoks ehitasin selle mängu Arduino abil, mis põhineb LED -kiikmängul. Mängu eesmärk on koguda võimalikult palju punkte. Alguses t
Simoni mäng - lõbus mäng!: 5 sammu
Simoni mäng - lõbus mäng !: Viide: siinPärast pikka nädalavahetust peate kindlasti kõvasti proovima, et täita kõik ülesanded ja töö, mille eest vastutate. Meil on aeg oma aju treenida, kas pole? Peale nende igavate ja mõttetute mängude on olemas ka mäng nimega Simon Game