Мазмұны:

Arduino және YX5300 MP3 модульімен дауысты дыбыстар ойыны Catalex: 13 қадам
Arduino және YX5300 MP3 модульімен дауысты дыбыстар ойыны Catalex: 13 қадам

Бейне: Arduino және YX5300 MP3 модульімен дауысты дыбыстар ойыны Catalex: 13 қадам

Бейне: Arduino және YX5300 MP3 модульімен дауысты дыбыстар ойыны Catalex: 13 қадам
Бейне: Arduino ҚАЗАҚША [2] Ардуино және Макеталық тақта 2024, Қараша
Anonim
Arduino және YX5300 MP3 модулімен Catalex бар дауысты ойын
Arduino және YX5300 MP3 модулімен Catalex бар дауысты ойын

Сіз бұл сұрақты оқи аласыз ба? Бұл бір түрлі! Мен бұл сұрақты әдейі қойдым. Егер сіз бұл мәтінді оқи алатын болсаңыз, бұл сіздің барлық алфавитті білгеніңіз және әрине барлық дауысты дыбыстар туралы білгеніңіз үшін.

Дауысты дыбыстар барлық сөздерде кездеседі. Олардың әрқайсысынан қашып құтылу мүмкін емес. Енді, мен сізге сұрақ қойайын. Сіздің балалық шағыңыз қызықты және технологиялық ресурстарға байланысты болды ма?

Оқу ресурстары аз болатынына сенімдімін және сіз дауысты дыбыстар мен әліпбиді үйренудің дәстүрлі әдістерін қолдандыңыз.

Дауысты дыбыстарды үйрену үшін кейбір технологиялық ресурстарды қолдануға бола ма?

Бұл мақалада мен сізге ойын арқылы студенттер мен балаларға дауысты дыбыстарды қалай үйрету керектігін үйретемін.

Мен сізге дауыспен жүйені құруды үйретемін, онда сіздің балаңыз/оқушы әріп дыбысын естиді және дұрыс әріпті көрсету үшін түймені басуы керек.

Осылайша олар ойын кезінде үйренеді және әрқашан оқуға ынталы болады.

Енді мен сізге өз ойын құрудың қадамдық процесін көрсетемін және балаларға дауысты дыбыстарды үйретемін.

Жабдықтар

JLCPCB баспа схемасы

Ардуино Уно

Түймешік қосқышы

10кР резистор

Ерлер тақырыбы 2, 54мм 1х7

1 -қадам: Arduino көмегімен дауысты дыбыстар ойынын дамыту

Дауысты дыбыстар ойынын Arduino көмегімен дамыту
Дауысты дыбыстар ойынын Arduino көмегімен дамыту

Ойынның жүрегі - дауысты дыбыстардың JLCPCB баспа тақтасы. Сіз бұл сілтемеге кіріп, жоба файлдарын жүктей аласыз. Оның 5 түймесі бар. Сіз әр түймені дауысты дыбысты білдіру үшін қолданып, оны Arduino -ға қосасыз.

Баспа схемасы 1 -суретте көрсетілген.

2 -қадам:

Кескін
Кескін

Бұл PCB жобасының көмегімен сіз оны Arduino -мен байланыстырып, өз ойын жасай аласыз. Әрі қарай, мен сізге сізге сіздің электронды схемаңызды ұсынамын, ол сіздің жобаңызды өз тақтаңызға құрастырады.

3 -қадам:

Осы схемадан біз электронды тақтаның орналасуын орнаттық. Ол 2 -суретте көрсетілген және сіз файлдарды жүктеп, жобаңызды жасай аласыз.

Arduino -дан 5 түйреуішті таңдап, тақтадағы секіргіштерді Arduino -мен қосыңыз. Әйтпесе, келесі электрондық диаграмманы жинауға болады.

4 -қадам: Жобаның идеясы

Жобаның идеясы
Жобаның идеясы

Мен сізге MP3 дыбыстық жүйесін Arduino көмегімен қалай жинау керектігін үйретемін. Бұл жүйе хатта айтылатын дауысты шығаруға жауап береді. Әр әріптің дыбысы 1 -ден 5 -ке дейінгі мәнді пайдаланып шығарылады, мұнда 1 - А, 5 - У әріптерін білдіреді.

Осылайша, бала дыбысты естігенде пернетақтаға қарап, дауысты дыбыстың емлесін танып, дұрыс пернені басуы керек.

Егер ол сәтсіз болса, жүйе қызыл жарықдиодты 3 рет жыпылықтайды. Әйтпесе, жүйе дыбыстық сигналды 5 секундқа қосады және жаңа дауысты дыбыс шығарады.

Ол үшін келесі схеманы жинау керек.

Бұл тізбекте сіз MP3 модулін және Arduino дыбыстық тақтасын қосасыз. Bluetooth модулі Catalex MP3 модулін көрсету үшін пайдаланылды.

Arduino 5 санын сұрыптауға, содан кейін салынған дауысты дыбысты белсендіру үшін пәрменді жіберуге жауапты болады

5 -қадам:

Кескін
Кескін

Осыдан кейін біз бала жоғарыдағы суретте көрсетілгендей түймені естіп, басқанша күтеміз.

Жоғарыдағы әр түйме алфавиттің дауысты дыбысын білдіреді. Әрі қарай, мен сізге осы жобаның логикалық логикасын қалай құруға болатынын көрсетемін.

6 -қадам: Ойынның бағдарламалау логикасын құру

Ойынның бағдарламалау логикасын құру
Ойынның бағдарламалау логикасын құру

Дауысты дыбыс жүйесі YX5300 модулінің жұмысына негізделген. Бұл модульде кейбір функциялар бар, алайда біз YX5300 модулінің негізгі функциялары арқылы ойынның жұмыс құрылымын ұсынуға назар аударамыз.

Төменде мен сізге жобаның барлық бағдарламалау логикасын ұсынамын.

7 -қадам:

Келесіде мен балаларға арналған қызықты ойынның логикасын құрудың біртіндеп түсіндіремін.

#қосу

#define ARDUINO_RX 5 // сериялық MP3 ойнатқыш модулінің TX -ке қосылу керек #define ARDUINO_TX 6 // SoftwareSerial mp3 модулінің RX -ке қосылу (ARDUINO_RX, ARDUINO_TX); тұрақты int8_t Send_buf [8] = {0}; // Жіберу командаларына арналған буфер. // ЖАҚСЫ ЖАҚСЫ статикалық uint8_t ansbuf [10] = {0}; // Жауаптар үшін буфер. // ЖАҚСЫ ЖАҚСЫ String mp3Answer; // MP3 форматындағы жауап. Жолды жою (жарамсыз); Жол sbyte2hex (uint8_t b); / ************ Командалық байт ************************/ #define CMD_NEXT_SONG 0X01 // Келесі ойнату өлең. #анықтау CMD_PREV_SONG 0X02 // Алдыңғы әнді ойнату. #CMD_PLAY_W_INDEX 0X03 анықтаңыз #CMD_VOLUME_UP 0X04 анықтаңыз #CMD_VOLUME_DOWN 0X05 #CMD_SET_VOLUME 0X06 анықтаңыз #CMD_SNG_CYCL_PLAY 0X08 анықтаңыз. #CMD_SEL_DEV 0X09 анықтаңыз #CMD_SLEEP_MODE 0X0A #CMD_WAKE_UP 0X0B анықтаңыз #CMD_RESET 0X0C #анықтаңыз CMD_PLAY 0X0D #CMD_PAUSE 0F0FFEF_FOF_FFF_FFF #CMD_FOLDER_CYCLE 0X17 анықтаңыз #CMD_SHUFFLE_PLAY 0x18 анықтаңыз // #CMD_SET_SNGL_CYCL 0X19 анықтаңыз // Бір циклды орнатыңыз. #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 / ********* *** Опитондар ************************** / #define DEV_TF 0X02 / ************** ************************************************ *****/ int numero; байт эстадо; байт дыбысы = 2; байт түйреуі = 0; байт SortNumber = 0; bool түймесі = 0; void setup () {Serial.begin (9600); mp3.begin (9600); кешіктіру (500); үшін (түйреуіш = 8; түйреуіш 13) {түйреуіш = 8; } Serial.println («Varrendo…»); Serial.println (түйреуіш); // кешіктіру (1000); } while (түйме! = 1); Serial.println («Сайу…»); if (button == 1 && (pin-1)! = SortNumber) {sendCommand (0x03, 0, 6); кешіктіру (3000); } if (button == 1 && (pin-1) == SortNumber) {sendCommand (0x03, 0, 7); кешіктіру (3000); } // Жауапты тексеріңіз. if (mp3.available ()) {Serial.println (decodeMP3Answer ()); } кешіктіру (100); //Serial.println("Tocando musica… «); } /************************************************ ******************************** / /*SendMP3Command функциясы: 'c' пәрменін іздеңіз және оны MP3 -ге жіберіңіз * / /*Параметр: c. MP3 командасының коды, көмек үшін 'h'. *// *Қайтару: void */ void sendMP3Command (char c) {switch (c) {case '?': Case 'h': Serial.println («HELP»); Serial.println («p = Play»); Serial.println («P = Үзіліс»); Serial.println («> = Келесі»); Serial.println («': Serial.println (» Келесі «); sendCommand (CMD_NEXT_SONG); sendCommand (CMD_PLAYING_N); // ойнатылып жатқан файлдың санын сұрау; үзіліс' Жад картасы салынған.»; Үзіліс; 0x3D жағдайы: decodedMP3Answer + = « -> Аяқталды ойнату нөмірі» + Жолы (ansbuf [6], DEC); // sendCommand (CMD_NEXT_SONG); // sendCommand (CMD_PLAYING_N); // үзіліс ойнап жатқан файлдың санын сұрау; 0x40 жағдай: decodedMP3Answer += « -> Қате»; үзіліс; 0x41 жағдай: decodedMP3Answer += « -> Деректер дұрыс қабылданды.»; break; 0x42 case: decodedMP3Answer += « -> Күйді ойнату:» +Жол (ansbuf [6], DEC); үзіліс; жағдай 0x48: декодталғанMP3Answer + = « -> Файл саны:» + Жол (ansbuf [6], DEC); үзіліс; жағдай 0x4C: decodedMP3Answer + = « -> Ойнату:» + Жол (ansbuf [6], DEC); break; case 0x4E: decodedMP3Answer + = « -> Қалта файлдарының саны:» + Жол (ansbuf [6], DEC); үзіліс; 0x4F жағдай: decodedMP3Answer + = « -> Қалталар саны:» + Жол (ansbuf [6], DEC); break;} decodedMP3Answer қайтару;} /********************************* ************ ******************************* / /*Функция: MP3 -ге пәрмен жіберу* / /*Параметр: байт команда *// *Параметр: пәрмен үшін байт dat1 параметрі *// *Параметр: */ void sendCommand (байт пәрмені) {sendCommand (команда, 0, 0) пәрмені үшін байт dat2 параметрі; } void sendCommand (байт пәрмені, байт dat1, байт dat2) {кешіктіру (20); Send_buf [0] = 0x7E; // Send_buf [1] = 0xFF; // Send_buf [2] = 0x06; // Len Send_buf [3] = команда; // Send_buf [4] = 0x01; // 0x00 ЖОҚ, 0x01 кері байланыс Send_buf [5] = dat1; // datah Send_buf [6] = dat2; // даталық Send_buf [7] = 0xEF; // Serial.print («Жіберіледі:»); for (uint8_t i = 0; i <8; i ++) {mp3.write (Send_buf ); Serial.print (sbyte2hex (Send_buf )); } Serial.println (); } /************************************************ ****************************** / /*Функциясы: sbyte2hex. HEX форматындағы байтты деректерді қайтарады. * / /*Параметр:- uint8_t b. HEX -ке айналдыру үшін байт. *// *Қайтару: Жол */ String sbyte2hex (uint8_t b) {String shex; shex = «0X»; егер (b <16) shex += «0»; shex += Жол (b, HEX); шекс += «»; қайтару гексі; } /************************************************ ****************************** / /*Функциясы: shex2int. HEX жолынан int қайтарады. * / /*Параметр: с. HEX -ке айналдыру үшін char *s. * / /*Параметр: n. char *s ұзындығы. *// *Қайтару: 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; }} r; } /************************************************ ****************************** / /*Функциясы: жауап. Mp3 UART модулінен String жауап қайтарады. * / /*Параметр:- uint8_t b. жарамсыз * / /*Қайтару: Жол. Егер жауап дұрыс құрастырылған болса. */ String sanswer (жарамсыз) {uint8_t i = 0; Жолдық mp3answer = «»; // (mp3.available () && (i <10)) {uint8_t b = mp3.read (); ansbuf = b; i ++; mp3answer += sbyte2hex (b); } // егер жауап форматы дұрыс болса. if ((ansbuf [0] == 0x7E) && (ansbuf [9] == 0xEF)) {қайтару mp3answer; } қайтару «???:» + mp3answer; }

Алдымен біз барлық бағдарламалық айнымалыларды және YX5300 модулінің қатынас регистрінің адрестерін анықтаймыз.

#қосу

#define ARDUINO_RX 5 // сериялық MP3 ойнатқыш модулінің TX қосылуы керек #define ARDUINO_TX 6 // SoftwareSerial mp3 модулінің RX -ке қосылу (ARDUINO_RX, ARDUINO_TX); тұрақты int8_t Send_buf [8] = {0}; // Жіберу командаларына арналған буфер. // ЖАҚСЫ ЖАҚСЫ статикалық uint8_t ansbuf [10] = {0}; // Жауаптар үшін буфер. // ЖАҚСЫ ЖАҚСЫ String mp3Answer; // MP3 форматындағы жауап. Жолды жою (жарамсыз); Жол sbyte2hex (uint8_t b); / ************ Командалық байт ************************/ #define CMD_NEXT_SONG 0X01 // Келесі ойнату өлең. #анықтау CMD_PREV_SONG 0X02 // Алдыңғы әнді ойнату. #CMD_PLAY_W_INDEX 0X03 анықтаңыз #CMD_VOLUME_UP 0X04 анықтаңыз #CMD_VOLUME_DOWN 0X05 #CMD_SET_VOLUME 0X06 анықтаңыз #CMD_SNG_CYCL_PLAY 0X08 анықтаңыз. #CMD_SEL_DEV 0X09 анықтаңыз #CMD_SLEEP_MODE 0X0A #CMD_WAKE_UP 0X0B анықтаңыз #CMD_RESET 0X0C #анықтаңыз CMD_PLAY 0X0D #CMD_PAUSE 0F0FOFF_FOF_FFF_FFF #CMD_FOLDER_CYCLE 0X17 анықтаңыз #CMD_SHUFFLE_PLAY 0x18 анықтаңыз // #CMD_SET_SNGL_CYCL 0X19 анықтаңыз // Бір циклды орнатыңыз. #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; байт эстадо; байт дыбысы = 2; байт түйрегіші = 0; байт SortNumber = 0; bool түймесі = 0;

8 -қадам:

Бұл регистр адрестері модуль жұмысын конфигурациялау үшін қолданылады. Мысалы, төмендегі тіркеу мекен -жайын қараңыз.

#CMD_PLAY_W_INDEX 0X03 анықтаңыз

0x03 мекенжайы CMD_PLAY_W_INDEX атауымен анықталады. Ол әнді нөмірінен бастау үшін қолданылады, яғни сіз дыбыстың санын енгізесіз және ол ойнатылады.

Дәл осы құндылықтар арқылы біз оларды қолданамыз және жобамыздың жұмысын реттейміз.

Сіз қолданылатын әр түрлі адрестерді анықтағаннан кейін, біз орнату функциясына кіреміз және түйреуіштер мен жобамыздың сериялық байланысын конфигурациялаймыз.

9 -қадам: Void Setup () функциясы

Әрі қарай, бос орынды орнату функциясын қараңыз. Мен түйме түйреуіштердің барлық параметрлерін, MP3 модулінің сериялық байланысын және MP3 -де карта модулінің инициализациясын жасадым.

жарамсыз орнату ()

{Serial.begin (9600); mp3.begin (9600); кешіктіру (500); for (pin = 8; pin <13; pin ++) {pinMode (pin, INPUT); } sendCommand (CMD_SEL_DEV, 0, DEV_TF); кешіктіру (500); }

Мен компьютерлік серияға деректерді басып шығару үшін сериялық байланысты бастадым, содан кейін mp3 объектісі арқылы сериялық байланысты бастадық.

Serial.begin (9600);

mp3.begin (9600); кешіктіру (500);

Mp3 модулі Arduino сериясына алынған командалар арқылы басқарылады. Бұл процесте біз SoftwareSerial кітапханасын қолдандық және Arduino цифрлық түйреуіштерінің сериясын эмуляцияладық.

Осылайша сіз Arduino көмегімен MP3 модулін оған жіберілген командалар арқылы басқара аласыз.

Сонымен қатар, біз цифрлық түйреуіштердің конфигурациясын жасадық және MP3 картасы модулін инициализацияладық

for (pin = 8; pin <13; pin ++) {pinMode (pin, INPUT); } sendCommand (CMD_SEL_DEV, 0, DEV_TF); кешіктіру (500);

Конфигурация жасағаннан кейін біз void loop функциясының негізгі логикасына өтуіміз керек.

10 -қадам: Негізгі функцияның бос циклы ()

Код өте қарапайым және барлық логикалық құрылым төменде ұсынылған. Келесіде мен сізге негізгі функцияның толық логикасын түсіндіремін.

бос цикл ()

{пин = 8; randomSeed (analogRead (A0)); numero = кездейсоқ (8, 12); SortNumber = сан; цифр = сан - 7; Serial.println (нөмір); sendCommand (0x03, 0, numero); кешіктіру (1000); do {button = digitalRead (түйреуіш); Serial.println (түйме); түйреуіш ++; if (pin> 13) {pin = 8; } Serial.println («Varrendo…»); Serial.println (түйреуіш); // кешіктіру (1000); } while (түйме! = 1); Serial.println («Сайу…»); if (button == 1 && (pin-1)! = SortNumber) {sendCommand (0x03, 0, 6); кешіктіру (3000); } if (button == 1 && (pin-1) == SortNumber) {sendCommand (0x03, 0, 7); кешіктіру (3000); } // Жауапты тексеріңіз. if (mp3.available ()) {Serial.println (decodeMP3Answer ()); } кешіктіру (100); //Serial.println("Tocando musica… «); }

Цикл функциясының циклінің әр басталуында біз дауысты дыбысты шығару үшін 8 мен 12 арасындағы жаңа мәнді шығарамыз. 8 -ден 12 -ге дейінгі мән дауысты дыбыстың цифрлық түйреуішін білдіреді.

Кездейсоқ мәнді жасау коды төменде көрсетілген.

түйреуіш = 8;

randomSeed (analogRead (A0)); numero = кездейсоқ (8, 12); SortNumber = сан;

Сонымен қатар, біз 8 мен 12 арасындағы сомадан 7 -ні алып тастаймыз. Бұл жад картасына жазылған әндердің 1 -ден 5 -ке дейінгі позицияларын көрсетуге мүмкіндік береді.

цифр = сан - 7;

Осыдан кейін мен төмендегі жолға салынған дауысты дыбысты шығардым.

sendCommand (0x03, 0, numero);

кешіктіру (1000);

Енді маңызды уақыт келді: біз бала басатын түймені оқитын сәт. Код бөлігі төменде көрсетілген.

істеу

{button = digitalRead (түйреуіш); Serial.println (түйме); түйреуіш ++; if (pin> 13) {pin = 8; } Serial.println («Varrendo…»); Serial.println (түйреуіш); // кешіктіру (1000); } while (түйме! = 1);

Бұл цикл пайдаланушы түймелерді басқанша орындалады. Цикл 5 цифрлық түйреуішті сканерлеуге мүмкіндік береді және бала түйменің бірін басқан сәтте ол циклден шығып, баланың дұрыс жауап бергенін тексереді.

Сіз төмендегі кодты пайдаланып тексеруді жүргізесіз.

егер (түйме == 1 && (пин-1)! = Сұрыптау саны)

{sendCommand (0x03, 0, 6); кешіктіру (3000); } if (button == 1 && (pin-1) == SortNumber) {sendCommand (0x03, 0, 7); кешіктіру (3000); }

Бірінші шарт пайдаланушы қате жіберген кезде орындалады, себебі түйме басылды және түйреуіштің іске қосылған мәні сызылған істіктен өзгеше болды (SortNumber).

Бұл кезде төмендегі пәрменді орындау керек.

sendCommand (0x03, 0, 6);

кешіктіру (3000);

Бұл пәрмен дұрыс емес жауап үнін іске қосу үшін қолданылады. Ақырында, бізде баланың дұрыс екенін тексеру үшін қолданылатын екінші шарт бар.

егер (түйме == 1 && (пин-1) == Сұрыптау саны)

{sendCommand (0x03, 0, 7); кешіктіру (3000); }

11 -қадам:

Кескін
Кескін

Егер түйме басылса және басылған сандық түйреуіш түйреуішпен бірдей болса, жүйе дұрыс жауап дыбысын шығарады.

Мен сізге түсіндіргендей, бұл код өте қарапайым және кез келген баланың дауысты дыбыстар туралы білімін Arduino -мен ойын арқылы дамытуға көмектеседі.

Жоғарыдағы суретте YX5300 MP3 модулінің SD картасында сақталған ән орындалады.

12 -қадам: Қорытынды

Сыныптағы білім беруді үнемі өзгерту қажет, ал Arduino қызықты тапсырмалар құруда тамаша одақтас бола алады.

Бұл жоба арқылы әр дауысты дыбыстың дыбысы мен емлесін білу арқылы балалардың дағдыларын дамытатын қарапайым әрекетті дамытуға мүмкіндік туды.

Оқытудың дәстүрлі әдістерінен айырмашылығы, балалар ойындар мен электроника арқылы сыныптағы қызықты уақытты үйренеді.

13 -қадам: растау

Бұл жоба JLCPCB компаниясының қолдауы мен қолдауының арқасында жасалды. Олар білім алуға ынталандырды және бізді балаларға сабақ үстінде дауысты дыбыстар ойынын дамытуға шақырды.

Егер сіз Дауысты дыбыстар ойынының электронды тақтайшаларын сатып алғыңыз келсе, сіз осы сілтемеге кіріп, JLCPCB -ден $ 2 -ге 10 бірлік сатып ала аласыз.

Ұсынылған: