Talaan ng mga Nilalaman:

Vowels Game With Arduino and YX5300 MP3 Module Catalex: 13 Hakbang
Vowels Game With Arduino and YX5300 MP3 Module Catalex: 13 Hakbang

Video: Vowels Game With Arduino and YX5300 MP3 Module Catalex: 13 Hakbang

Video: Vowels Game With Arduino and YX5300 MP3 Module Catalex: 13 Hakbang
Video: Coding a custom game controller with Arduino (Pt 2: Making it extensible with libraries and classes) 2024, Nobyembre
Anonim
Laro ng Vowels Sa Arduino at YX5300 MP3 Module Catalex
Laro ng Vowels Sa Arduino at YX5300 MP3 Module Catalex

Nabasa mo ba ang katanungang ito? Kakaiba iyan! Sinadya kong itanong ang katanungang ito. Kung mababasa mo ang teksto na ito, ito ay dahil alam mo ang buong alpabeto at, syempre, natutunan ang tungkol sa lahat ng mga patinig.

Ang mga patinig ay naroroon sa lahat ng mga salita. Imposibleng makatakas mula sa bawat isa sa kanila. Ngayon, hayaan mo akong magtanong sa iyo. Ang iyong pag-aaral sa pagkabata ay masaya at kasangkot sa mga mapagkukunang teknolohikal?

Sigurado ako na ang mga mapagkukunan sa pag-aaral ay kakaunti at gumamit ka ng mga tradisyunal na pamamaraan upang malaman ang mga patinig at alpabeto.

Pagkatapos ng lahat, posible bang gumamit ng ilang mapagkukunang panteknolohiya upang malaman ang mga patinig?

Sa artikulong ito, tuturuan kita kung paano magturo sa iyong mga mag-aaral at mga bata ng patinig sa pamamagitan ng isang laro.

Tuturuan kita kung paano lumikha ng isang system na may boses, kung saan maririnig ng iyong anak / mag-aaral ang tunog ng liham at dapat pindutin ang isang pindutan upang ipahiwatig ang tamang titik.

Sa gayon, matututunan sila habang naglalaro at palaging uudyok na mag-aral.

Ngayon, ipapakita ko sa iyo ang sunud-sunod na proseso para sa iyo upang lumikha ng iyong sariling laro, at turuan ang mga patinig sa mga bata.

Mga gamit

JLCPCB Printed Circuit Board

Arduino Uno

Lumipat ng Pushbutton

10kR Resistor

Lalake Header 2, 54mm 1x7

Hakbang 1: Pagbuo ng Laro ng Mga Vowel Sa Arduino

Pagbuo ng Game of Vowels With Arduino
Pagbuo ng Game of Vowels With Arduino

Ang puso ng laro ay ang JLCPCB naka-print na circuit board ng Vowels. Maaari mong ma-access ang link na ito at i-download ang mga file ng proyekto. Mayroon itong 5 mga pindutan. Gagamitin mo ang bawat pindutan upang kumatawan sa isang patinig at ikonekta ito sa iyong Arduino.

Ang naka-print na circuit board ay ipinapakita sa Larawan 1.

Hakbang 2:

Larawan
Larawan

Gamit ang PCB Project na ito, maaari mo itong ikonekta sa Arduino at likhain ang iyong laro. Susunod, mag-aalok ako sa iyo ng isang elektronikong eskematiko para sa iyo upang tipunin o buuin ang proyekto sa iyong protoboard.

Hakbang 3:

Mula sa eskematiko na ito, itinatakda namin ang layout ng electronic board. Ipinapakita ito sa Larawan 2 at maaari mong i-download ang mga file at gawin ang iyong proyekto.

Pumili ng 5 mga pin mula sa Arduino at ikonekta ang mga jumper sa board gamit ang Arduino. O kung hindi man, maaari mong tipunin ang sumusunod na electronic diagram.

Hakbang 4: Ang Ideya ng Proyekto

Ang Idey ng Proyekto
Ang Idey ng Proyekto

Tuturuan kita kung paano mag-ipon ng isang MP3 sound system kasama ang Arduino. Magiging responsable ang sistemang ito sa paggawa ng boses na nagsasalita ng liham. Ang tunog ng bawat titik ay iguguhit gamit ang isang halaga mula 1 hanggang 5, kung saan ang 1 ay kumakatawan sa A at 5 ay kumakatawan sa U.

Kaya, kapag narinig ng bata ang tunog, dapat siyang tumingin sa keyboard, kilalanin ang spelling ng patinig, at pindutin ang tamang key.

Kung nabigo ito, mai-flash ng system ang Red LED ng 3 beses. Kung hindi man, ang system ay magpapagana ng isang buzzer sa loob ng 5 segundo at gumuhit ng isang bagong patinig.

Upang magawa ito, dapat mong tipunin ang sumusunod na circuit.

Sa circuit na ito, ikokonekta mo ang MP3 Module at ang vocal board sa Arduino. Ginamit ang module ng Bluetooth upang kumatawan sa Catalex MP3 Module.

Magiging responsable ang Arduino para sa pag-uri-uriin ang 5 mga numero at pagkatapos ay ipadala ang utos upang buhayin ang iginuhit na patinig

Hakbang 5:

Larawan
Larawan

Pagkatapos nito, maghihintay kami hanggang sa marinig at pindutin ng bata ang isang pindutan, tulad ng ipinakita sa Larawan sa itaas.

Ang bawat pindutan sa itaas ay kumakatawan sa isang patinig ng alpabeto. Susunod, ipapakita ko sa iyo kung paano mo bubuuin ang lohika sa programa para sa proyektong ito.

Hakbang 6: Pagbuo ng Logic ng Programming ng Laro

Pagbuo ng Logic ng Programming ng Laro
Pagbuo ng Logic ng Programming ng Laro

Ang sistema ng laro ng patinig ay batay sa pagpapatakbo ng YX5300 module. Ang modyul na ito ay may ilang mga pag-andar, subalit, magtutuon kami sa paglalahad ng istrakturang gumaganang laro sa pamamagitan ng pangunahing mga pag-andar ng YX5300 module.

Sa ibaba binibigyan kita ng lahat ng lohika sa programa ng proyekto.

Hakbang 7:

Sa sumusunod, ipapaliwanag ko ang hakbang-hakbang sa pagbuo ng lohika ng nakakatuwang larong ito para sa mga bata.

# isama

#define ARDUINO_RX 5 // dapat kumonekta sa TX ng module ng Serial MP3 Player #define ARDUINO_TX 6 // kumonekta sa RX ng module na SoftwareSerial mp3 (ARDUINO_RX, ARDUINO_TX); static int8_t Send_buf [8] = {0}; // Buffer para sa Magpadala ng mga utos. // BETTER LOCALLY static uint8_t ansbuf [10] = {0}; // Buffer para sa mga sagot. // BETTER LOCALLY String mp3Answer; // Sagot mula sa MP3. String sanswer (walang bisa); String sbyte2hex (uint8_t b); / ************ Command byte ************************* / # tukuyin ang CMD_NEXT_SONG 0X01 // Susunod na Paglaro kanta # tukuyin ang CMD_PREV_SONG 0X02 // I-play ang nakaraang kanta. #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 #define CMD_RESET 0X0C #define CMD_PLAY 0X0D #define CMD_PAUSE 0X0E #define CMD_PLAY_FAYSTSTSTARTSTART 0STICKSTART //XT #define CMD_FOLDER_CYCLE 0X17 #define CMD_SHUFFLE_PLAY 0x18 // #define CMD_SET_SNGL_CYCL 0X19 // Itakda ang solong pag-ikot. #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 / ********* *** Mga Opitons ***** ***** ***** ***** ***** / int numero; byte estado; byte buzzer = 2; byte pin = 0; byte SortNumber = 0; pindutan ng bool = 0; void setup () {Serial.begin (9600); mp3.begin (9600); pagkaantala (500); para sa (pin = 8; pin 13) {pin = 8; } Serial.println ("Varrendo …"); Serial.println (pin); // pagkaantala (1000); } habang (pindutan! = 1); Serial.println ("Saiu…"); kung (button == 1 && (pin-1)! = SortNumber) {sendCommand (0x03, 0, 6); pagkaantala (3000); } kung (button == 1 && (pin-1) == SortNumber) {sendCommand (0x03, 0, 7); pagkaantala (3000); } // Suriin ang sagot. kung (mp3.available ()) {Serial.println (decodeMP3Answer ()); } pagkaantala (100); //Serial.println("Tocando musica… "); } / ***** ***** * / / * Parameter: c. Code para sa MP3 Command, 'h' para sa tulong. * / / * Return: void * / void sendMP3Command (char c) {switch (c) {case '?': Case 'h': Serial.println ("HELP"); Serial.println ("p = Play"); Serial.println ("P = I-pause"); Serial.println ("> = Susunod"); Serial.println ("': Serial.println (" Susunod "); sendCommand (CMD_NEXT_SONG); sendCommand (CMD_PLAYING_N); // hilingin ang bilang ng file na naglalaro ng break; kaso' Ipinasok ang memory card."; Break; case 0x3D: decodedMP3Answer + = "-> Nakumpleto ang play num" + String (ansbuf [6], DEC); // sendCommand (CMD_NEXT_SONG); // sendCommand (CMD_PLAYING_N); // hilingin ang bilang ng file na naglalaro ng break; case 0x40: decodedMP3Answer + = "-> Error"; break; case 0x41: decodedMP3Answer + = "-> Tama na muling natanggap ang data."; break; case 0x42: decodedMP3Answer + = "-> Status playing:" + String (ansbuf [6], DEC); break; case 0x48: decodedMP3Answer + = "-> Bilang ng file:" + 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); masira;} ibalik ang decodedMP3Answer;} / ********************************* ***** ***** utos * / / * Parameter: byte dat1 parameter para sa utos * / / * Parameter: byte dat2 parameter para sa utos * / void sendCommand (byte command) {sendCommand (command, 0, 0); } walang bisa ang sendCommand (byte command, byte dat1, byte dat2) {pagkaantala (20); Send_buf [0] = 0x7E; // Send_buf [1] = 0xFF; // Send_buf [2] = 0x06; // Len Send_buf [3] = utos; // Send_buf [4] = 0x01; // 0x00 NO, 0x01 feedback Send_buf [5] = dat1; // datah Send_buf [6] = dat2; // datal Send_buf [7] = 0xEF; // Serial.print ("Nagpapadala:"); para sa (uint8_t i = 0; i <8; i ++) {mp3.write (Send_buf ); Serial.print (sbyte2hex (Send_buf )); } Serial.println (); } / ***** ***** Nagbabalik ng isang byte data sa format na HEX. * / / * Parameter: - uint8_t b. Byte upang i-convert sa HEX. * / / * Bumalik: String * / String sbyte2hex (uint8_t b) {String shex; shex = "0X"; kung (b <16) shex + = "0"; shex + = String (b, HEX); shex + = ""; ibalik ang shex; } / ***** ***** Nagbabalik ng isang int mula sa isang HEX string. * / / * Parameter: s. char * s upang i-convert sa HEX. * / / * Parameter: n. haba ng char * * / / * Bumalik: int * / int shex2int (char * s, int n) {int r = 0; para sa (int i = 0; i = '0' && s = 'A' && s <= 'F') {r * = 16; r + = (s - 'A') + 10; }} ibalik ang r; } / ***** ***** Nagbabalik ng isang sagot sa String mula sa mp3 module na UART. * / / * Parameter: - uint8_t b. walang bisa * / / * Pagbabalik: String. Kung ang sagot ay maayos na nabuo na sagot. * / String sanswer (walang bisa) {uint8_t i = 0; String mp3answer = ""; // Kumuha lamang ng 10 Bytes habang (mp3.available () && (i <10)) {uint8_t b = mp3.read (); ansbuf = b; ako ++; mp3answer + = sbyte2hex (b); } // kung ang format ng sagot ay tama. kung ((ansbuf [0] == 0x7E) && (ansbuf [9] == 0xEF)) {return mp3answer; } ibalik "???:" + mp3answer; }

Una, tinukoy namin ang lahat ng mga variable ng programa at ang mga address ng pagrehistro ng pag-access ng module na YX5300.

# isama

#define ARDUINO_RX 5 // dapat kumonekta sa TX ng module ng Serial MP3 Player #define ARDUINO_TX 6 // kumonekta sa RX ng module na SoftwareSerial mp3 (ARDUINO_RX, ARDUINO_TX); static int8_t Send_buf [8] = {0}; // Buffer para sa Magpadala ng mga utos. // BETTER LOCALLY static uint8_t ansbuf [10] = {0}; // Buffer para sa mga sagot. // BETTER LOCALLY String mp3Answer; // Sagot mula sa MP3. String sanswer (walang bisa); String sbyte2hex (uint8_t b); / ************ Command byte ************************* / # tukuyin ang CMD_NEXT_SONG 0X01 // Susunod na Paglaro kanta # tukuyin ang CMD_PREV_SONG 0X02 // I-play ang nakaraang kanta. #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 #define CMD_RESET 0X0C #define CMD_PLAY 0X0D #define CMD_PAUSE 0X0E #define CMD_PLAY_FAYSTSTSTARTSTART 0STICKSTART //XT #define CMD_FOLDER_CYCLE 0X17 #define CMD_SHUFFLE_PLAY 0x18 // #define CMD_SET_SNGL_CYCL 0X19 // Itakda ang solong pag-ikot. #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 / ********* *** Mga Opitons ***** ***** ***** **** / # tukuyin ang DEV_TF 0X02 / ***** ***** ***** / int numero; byte estado; byte buzzer = 2; byte pin = 0; byte SortNumber = 0; pindutan ng bool = 0;

Hakbang 8:

Ang mga rehistro sa rehistro ay ginagamit upang mai-configure ang pagpapatakbo ng module. Halimbawa, tingnan ang address ng pagpaparehistro sa ibaba.

# tukuyin ang CMD_PLAY_W_INDEX 0X03

Ang address na 0x03 ay tinukoy sa pangalang CMD_PLAY_W_INDEX. Ginagamit ito upang magpalitaw ng isang kanta mula sa bilang nito, iyon ay, ipinasok mo ang bilang ng tunog at ito ay pinatugtog.

Sa mga halagang ito gagamitin namin ang mga ito at i-configure ang paggana ng aming proyekto.

Matapos mong tukuyin ang iba't ibang mga address na gagamitin, ipasok namin ang pag-andar ng pag-setup at i-configure ang mga pin at serial na komunikasyon para sa aming proyekto.

Hakbang 9: Ang Void Setup () Function

Susunod, tingnan ang walang bisa na pag-andar ng pag-setup. Ginawa ko ang lahat ng mga setting ng mga pindutan ng pindutan, serial komunikasyon ng MP3 module, at pagsisimula ng module ng card sa MP3.

walang bisa ang pag-setup ()

{Serial.begin (9600); mp3.begin (9600); pagkaantala (500); para sa (pin = 8; pin <13; pin ++) {pinMode (pin, INPUT); } sendCommand (CMD_SEL_DEV, 0, DEV_TF); pagkaantala (500); }

Sinimulan ko ang serial na komunikasyon upang mai-print ang data sa serial ng computer at pagkatapos ay sinimulan namin ang serial na komunikasyon sa pamamagitan ng mp3 object.

Serial.begin (9600);

mp3.begin (9600); pagkaantala (500);

Ang module ng mp3 ay kinokontrol sa pamamagitan ng mga utos na natanggap ng Arduino serial. Sa prosesong ito, ginamit namin ang library ng SoftwareSerial at ginaya ang isang serial sa mga digital pin na Arduino.

Sa gayon, magagamit mo ang Arduino upang makontrol ang MP3 module sa pamamagitan ng mga utos na ipinadala dito.

Bilang karagdagan, ginawa namin ang pagsasaayos ng mga digital na pin at pagpapasimula ng module ng MP3 Card

para sa (pin = 8; pin <13; pin ++) {pinMode (pin, INPUT); } sendCommand (CMD_SEL_DEV, 0, DEV_TF); pagkaantala (500);

Matapos gawin ang pagsasaayos, dapat kaming pumunta sa pangunahing lohika sa void loop function.

Hakbang 10: Ang Pangunahing Pag-andar Void Loop ()

Ang code ay napaka-simple at ang buong lohikal na istraktura ay ipinakita sa ibaba. Sa sumusunod, ipapaliwanag ko sa iyo ang kumpletong lohika ng pangunahing pag-andar.

walang bisa loop ()

{pin = 8; randomSeed (analogRead (A0)); numero = random (8, 12); SortNumber = numero; numero = numero - 7; Serial.println (numero); sendCommand (0x03, 0, numero); pagkaantala (1000); gawin ang {button = digitalRead (pin); Serial.println (pindutan); pin ++; kung (pin> 13) {pin = 8; } Serial.println ("Varrendo …"); Serial.println (pin); // pagkaantala (1000); } habang (pindutan! = 1); Serial.println ("Saiu…"); kung (button == 1 && (pin-1)! = SortNumber) {sendCommand (0x03, 0, 6); pagkaantala (3000); } kung (button == 1 && (pin-1) == SortNumber) {sendCommand (0x03, 0, 7); pagkaantala (3000); } // Suriin ang sagot. kung (mp3.available ()) {Serial.println (decodeMP3Answer ()); } pagkaantala (100); //Serial.println("Tocando musica… "); }

Sa bawat pagsisimula ng ikot ng pag-andar ng loop, makakabuo kami ng isang bagong halaga sa pagitan ng 8 at 12 upang makabuo ng tunog ng isang patinig. Ang halaga mula 8 hanggang 12 ay tumutukoy sa digital pin ng patinig.

Ang code para sa pagbuo ng random na halaga ay ipinapakita sa ibaba.

pin = 8;

randomSeed (analogRead (A0)); numero = random (8, 12); SortNumber = numero;

Bilang karagdagan, binabawas namin ang 7 mula sa halagang iginuhit sa pagitan ng 8 at 12. Papayagan kaming magturo sa mga posisyon ng 1 hanggang 5 ng mga awiting naitala sa memory card.

numero = numero - 7;

Pagkatapos nito, muling ginawa ang tunog ng patinig na iginuhit sa linya sa ibaba.

sendCommand (0x03, 0, numero);

pagkaantala (1000);

Ngayon ang mahalagang oras ay dumating: ang sandali na babasahin natin ang pindutan na pinindot ng bata. Ang bahagi ng code ay ipinakita sa ibaba.

gawin

{button = digitalRead (pin); Serial.println (pindutan); pin ++; kung (pin> 13) {pin = 8; } Serial.println ("Varrendo …"); Serial.println (pin); // pagkaantala (1000); } habang (pindutan! = 1);

Ang loop na ito ay papatayin hanggang sa pindutin ng gumagamit ang mga pindutan. Pinapayagan ka ng loop na i-scan ang 5 mga digital na pin at sa sandaling pinindot ng bata ang isa sa mga pindutan, lalabas ito mula sa loop at suriin kung ang bata ay tumugon nang tama.

Gagawin mo ang pag-verify gamit ang code sa ibaba.

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

{sendCommand (0x03, 0, 6); pagkaantala (3000); } kung (button == 1 && (pin-1) == SortNumber) {sendCommand (0x03, 0, 7); pagkaantala (3000); }

Ang unang kundisyon ay papatayin kapag nagkamali ang gumagamit dahil ang isang pindutan ay pinindot at ang na-trigger na halaga ng pin ay naiiba mula sa iginuhit na pin (SortNumber).

Sa puntong ito, dapat mong isagawa ang utos sa ibaba.

sendCommand (0x03, 0, 6);

pagkaantala (3000);

Ginagamit ang utos na ito upang ma-trigger ang maling tono ng pagtugon. Panghuli, mayroon kaming pangalawang kondisyon na gagamitin upang suriin kung tama ang bata.

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

{sendCommand (0x03, 0, 7); pagkaantala (3000); }

Hakbang 11:

Larawan
Larawan

Kung ang isang pindutan ay pinindot at ang digital pin na pinindot ay kapareho ng iginuhit na pin, ang system ay magpapalitaw ng isang tamang tunog ng sagot.

Habang ipinapaliwanag ko sa iyo, ang code na ito ay napaka-simple at makakatulong sa sinumang bata na paunlarin ang kanilang kaalaman sa mga patinig sa pamamagitan ng isang laro kasama ng Arduino.

Sa figure sa itaas ang soundbox ay isinasagawa ang kanta na nakaimbak sa SD Card ng MP3 Module YX5300.

Hakbang 12: Konklusyon

Ang edukasyon sa silid-aralan ay kailangang palaging palitan at ang Arduino ay maaaring maging isang mahusay na kapanalig sa paglikha ng mga nakakatuwang gawain.

Sa pamamagitan ng proyektong ito, posible na bumuo ng isang simpleng aktibidad na maaaring makabuo ng mga kasanayan sa mga bata sa pamamagitan ng kaalaman sa tunog at baybay ng bawat patinig.

Hindi tulad ng tradisyunal na pamamaraan ng pagtuturo, ang mga bata ay matututo sa pamamagitan ng kasiyahan sa silid aralan sa pamamagitan ng mga laro at electronics.

Hakbang 13: Pagkilala

Ang proyektong ito ay binuo salamat sa suporta at pampatibay-loob ng kumpanya JLCPCB. Hinimok nila ang edukasyon at inimbitahan kaming paunlarin ang laro ng mga patinig para sa pagtuturo sa mga bata sa silid aralan.

Kung nais mong bumili ng mga electronic plate ng Game of Vowels, maaari mong ma-access ang link na ito at bumili ng 10 mga yunit para sa $ 2 sa JLCPCB.

Inirerekumendang: