Mundarija:

Arduino va YX5300 MP3 moduli bilan ovozli o'yin Catalex: 13 qadam
Arduino va YX5300 MP3 moduli bilan ovozli o'yin Catalex: 13 qadam

Video: Arduino va YX5300 MP3 moduli bilan ovozli o'yin Catalex: 13 qadam

Video: Arduino va YX5300 MP3 moduli bilan ovozli o'yin Catalex: 13 qadam
Video: Arduino Start #6. Модуль MP3 и ARDUINO 2024, Noyabr
Anonim
Arduino va YX5300 MP3 moduli Catalex bilan ovozli o'yin
Arduino va YX5300 MP3 moduli Catalex bilan ovozli o'yin

Siz bu savolni o'qiy olasizmi? Bu g'alati! Men bu savolni ataylab berdim. Agar siz bu matnni o'qiy olsangiz, buning sababi shundaki, siz butun alifboni bilasiz va, albatta, barcha unli tovushlarni bilib olasiz.

Unli tovushlar barcha so'zlarda mavjud. Ularning har biridan qochib qutulishning iloji yo'q. Endi sizga bir savol beray. Sizning bolaligingiz o'rganish qiziqarli va texnologik manbalarga boy bo'lganmi?

Ishonchim komilki, o'quv resurslari kam edi va siz unli va alifboni o'rganishda an'anaviy usullardan foydalangansiz.

Axir, unli tovushlarni o'rganish uchun ba'zi texnologik manbalardan foydalanish mumkinmi?

Ushbu maqolada men sizga o'yin orqali o'quvchilaringizga va bolalaringizga unli tovushlarni qanday o'rgatishni o'rgataman.

Men sizga ovozli tizimni qanday yaratishni o'rgataman, u erda sizning bolangiz/o'quvchingiz harf tovushini eshitadi va to'g'ri harfni ko'rsatish uchun tugmani bosishi kerak.

Shunday qilib, ular o'ynash paytida o'rganadilar va doimo o'qishga rag'batlantiradilar.

Endi men sizga o'z o'yiningizni yaratish va bolalarga unli tovushlarni o'rgatish bo'yicha bosqichma-bosqich jarayonni ko'rsataman.

Ta'minotlar

JLCPCB bosilgan elektron platasi

Arduino Uno

Tugma tugmasi

10 kR qarshilik

Erkak sarlavhasi 2, 54 mm 1x7

1 -qadam: Arduino bilan unli tovushlar o'yinini ishlab chiqish

Arduino bilan unli tovushlar o'yinini ishlab chiqish
Arduino bilan unli tovushlar o'yinini ishlab chiqish

O'yinning yuragi - unli tovushlarning JLCPCB bosilgan elektron kartasi. Siz ushbu havolaga kirishingiz va loyiha fayllarini yuklab olishingiz mumkin. Unda 5 ta tugma mavjud. Siz har bir tugmani unli harfni ifodalash va uni Arduino -ga ulash uchun ishlatasiz.

Bosilgan elektron karta 1 -rasmda ko'rsatilgan.

2 -qadam:

Rasm
Rasm

Ushbu PCB loyihasi yordamida siz uni Arduino bilan ulashingiz va o'z o'yiningizni yaratishingiz mumkin. Keyinchalik, men sizga elektron sxemani taklif qilaman, buning uchun siz o'zingizning protobardingizda loyihani yig'ishingiz yoki qurishingiz mumkin.

3 -qadam:

Ushbu sxemadan biz elektron taxtaning tartibini o'rnatdik. U 2 -rasmda ko'rsatilgan va siz fayllarni yuklab olishingiz va loyihangizni qilishingiz mumkin.

Arduino -dan 5 ta pinni tanlang va taxtadagi o'tish moslamalarini Arduino -ga ulang. Aks holda, siz quyidagi elektron sxemani yig'ishingiz mumkin.

4 -qadam: Loyihaning g'oyasi

Loyihaning g'oyasi
Loyihaning g'oyasi

Men sizga MP3 tovush tizimini Arduino bilan qanday yig'ishni o'rgataman. Bu tizim maktubda gapiradigan ovozni qayta ishlab chiqarish uchun javobgardir. Har bir harfning ovozi 1 dan 5 gacha bo'lgan qiymat yordamida chiziladi, bu erda 1 A va 5 U ifodalaydi.

Shunday qilib, bola tovushni eshitganda, u klaviaturaga qarashi, unli harflarning imlosini tan olishi va to'g'ri tugmani bosishi kerak.

Agar u ishlamasa, tizim qizil LEDni 3 marta yonadi. Aks holda, tizim ovozli signalni 5 soniya davomida faollashtiradi va yangi unli tovushni chiqaradi.

Buning uchun siz quyidagi sxemani yig'ishingiz kerak.

Ushbu sxemada siz MP3 modulini va Arduino -dagi ovozli kartani ulaysiz. Bluetooth moduli Catalex MP3 modulini ko'rsatish uchun ishlatilgan.

Arduino 5 ta raqamni saralash, so'ngra chizilgan unli tovushni faollashtirish buyrug'ini yuborish uchun javobgardir

5 -qadam:

Rasm
Rasm

Shundan so'ng, biz bola yuqoridagi rasmda ko'rsatilgandek tugmani eshitib, bosguncha kutamiz.

Yuqoridagi har bir tugma alifbo tovushini bildiradi. Keyin, men sizga ushbu loyihaning dasturlash mantig'ini qanday yaratishni ko'rsataman.

6 -qadam: O'yin dasturlash mantig'ini yaratish

O'yin dasturlash mantig'ini yaratish
O'yin dasturlash mantig'ini yaratish

Ovozli o'yin tizimi YX5300 modulining ishlashiga asoslangan. Bu modul ba'zi funktsiyalarni bajaradi, lekin biz YX5300 modulining asosiy funktsiyalari orqali o'yinning ish tuzilishini taqdim etishga e'tibor qaratamiz.

Quyida men sizga loyihaning barcha dasturlash mantig'ini taqdim etaman.

7 -qadam:

Quyida men bolalar uchun bu qiziqarli o'yinning mantig'ini yaratish uchun bosqichma -bosqich tushuntirib beraman.

#qo'shing

#define ARDUINO_RX 5 // Serial MP3 pleer moduli TX ga ulanishi kerak #define ARDUINO_TX 6 // SoftwareSerial mp3 modulining RX -ga ulanish (ARDUINO_RX, ARDUINO_TX); statik int8_t Send_buf [8] = {0}; // Yuborish buyruqlari uchun bufer. // BATTER LOCALLY statik uint8_t ansbuf [10] = {0}; // Javoblar uchun bufer. // YAXSHI LOCALLY String mp3Answer; // MP3 dan javob. String sanswer (bekor); String sbyte2hex (uint8_t b); / ************ Buyruq buyrug'i ************************/ #define CMD_NEXT_SONG 0X01 // Keyingi Qo'shiq. #define CMD_PREV_SONG 0X02 // Oldingi qo'shiqni ijro etish. #CMD_PLAY_W_INDEX 0X03 ni belgilang #CMD_VOLUME_UP 0X04 belgilang #CMD_VOLUME_DOWN 0X05 #CMD_SET_VOLUME 0X06 #define CMD_SNG_CYCL_PLAY 0X08 // Yagona tsiklni belgilang. #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 0X0PFEF_FOF_FOF #define CMD_FOLDER_CYCLE 0X17 #define CMD_SHUFFLE_PLAY 0x18 // #define CMD_SET_SNGL_CYCL 0X19 // Bitta tsiklni belgilang. #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 / ********* *** Opitonlar ************************** / #define DEV_TF 0X02 / ************** ************************************************ *****/ int raqami; bayt estado; bayt ovozi = 2; bayt pin = 0; bayt SortNumber = 0; bool tugmasi = 0; void setup () {Serial.begin (9600); mp3.begin (9600); kechikish (500); uchun (pin = 8; pin 13) {pin = 8; } Serial.println ("Varrendo…"); Serial.println (pin); // kechikish (1000); } while (tugma! = 1); Serial.println ("Saiu …"); agar (tugma == 1 && (pin-1)! = SortNumber) {sendCommand (0x03, 0, 6); kechikish (3000); } if (tugma == 1 && (pin-1) == SortNumber) {sendCommand (0x03, 0, 7); kechikish (3000); } // Javobni tekshiring. agar (mp3.available ()) {Serial.println (decodeMP3Answer ()); } kechikish (100); //Serial.println("Tocando musica… "); } /********************************************** ****************************** / /*SendMP3Command funktsiyasi: "c" buyrug'ini qidiring va uni MP3 ga yuboring. * / /*Parametr: c. MP3 buyrug'i uchun kod, yordam uchun 'h'. *// *Qaytish: void */ void sendMP3Command (char c) {switch (c) {case '?': Case 'h': Serial.println ("HELP"); Serial.println ("p = Play"); Serial.println ("P = To'xtatish"); Serial.println ("> = Keyingi"); Serial.println ("': Serial.println (" Keyingi "); sendCommand (CMD_NEXT_SONG); sendCommand (CMD_PLAYING_N); // o'ynayotgan fayllar sonini so'rang;" Xotira kartasi joylashtirilgan. "; Tanaffus; 0x3D holatlari: decodedMP3Answer + = " -> To'ldirilgan ijro raqami" + String (ansbuf [6], DEC); // sendCommand (CMD_NEXT_SONG); // sendCommand (CMD_PLAYING_N); // tanaffusda o'ynayotgan fayllar sonini so'rash; 0x40 holat: decodedMP3Answer += " -> Xato"; tanaffus; 0x41 holat: decodedMP3Answer += " -> Ma'lumot to'g'ri qabul qilingan."; break; 0x42 holat: decodedMP3Answer += " -> Holat ijro etilmoqda:" +String (ansbuf [6], DEC); tanaffus; 0x48 holat: decodedMP3Answer + = " -> Fayllar soni:" + String (ansbuf [6], DEC); break; case 0x4C: decodedMP3Answer + = " -> Ijro:" + String (ansbuf [6], DEC); break; case 0x4E: decodedMP3Answer + = " -> Papka fayllari soni:" + String (ansbuf [6], DEC); break; case 0x4F: decodedMP3Answer + = " -> Papkalar soni:" + String (ansbuf [6], DEC); break;} decodedMP3Answer qaytarish;} /********************************* ************ ******************************* / /*Vazifa: MP3ga buyruq yuborish* / /*Parametr: bayt buyruq *// *Parametr: buyruq uchun bayt dat1 parametri *// *Parametr: */ void sendCommand buyrug'i uchun bayt dat2 parametri (bayt buyrug'i) {sendCommand (buyruq, 0, 0); } void sendCommand (bayt buyrug'i, bayt dat1, bayt dat2) {kechiktirish (20); Send_buf [0] = 0x7E; // Send_buf [1] = 0xFF; // Send_buf [2] = 0x06; // Len Send_buf [3] = buyruq; // Send_buf [4] = 0x01; // 0x00 YO'Q, 0x01 mulohaza Send_buf [5] = dat1; // ma'lumotlar Send_buf [6] = dat2; // ma'lumotlar Send_buf [7] = 0xEF; // Serial.print ("Yuborilmoqda:"); uchun (uint8_t i = 0; i <8; i ++) {mp3.write (Send_buf ); Serial.print (sbyte2hex (Send_buf )); } Serial.println (); } /********************************************** ****************************** / /*Vazifasi: sbyte2hex. HEX formatidagi bayt ma'lumotlarini qaytaradi. * / /*Parametr:- uint8_t b. HEX ga aylantirish uchun bayt. *// *Qaytish: String */ String sbyte2hex (uint8_t b) {String shex; shex = "0X"; agar (b <16) shex += "0"; shex += String (b, HEX); shex += ""; qaytish shex; } /********************************************** ****************************** / /*Vazifasi: shex2int. HEX satridan int qaytaradi. * / /*Parametr: s. HEX ga aylantirish uchun char *s. * / /*Parametr: n. char *s uzunligi. *// *Qaytish: int */ int shex2int (char *s, int n) {int r = 0; uchun (int i = 0; i = '0' && s = 'A' && <= 'F') {r *= 16; r + = (s - 'A') + 10; }} r; } /********************************************** ******************************** / /*Vazifasi: javob. Mp3 UART modulidan String javobini qaytaradi. * / /*Parametr:- uint8_t b. bo'sh * / /*Qaytish: satr. Agar javob yaxshi shakllangan bo'lsa. */ String sanswer (bekor) {uint8_t i = 0; String mp3answer = ""; // (mp3.available () && (i <10)) {uint8_t b = mp3.read (); ansbuf = b; i ++; mp3answer += sbyte2hex (b); } // agar javob shakli to'g'ri bo'lsa. if ((ansbuf [0] == 0x7E) && (ansbuf [9] == 0xEF)) {qaytish mp3answer; } qaytish "???:" + mp3answer; }

Birinchidan, biz dasturning barcha o'zgaruvchilari va YX5300 modulining kirish registrlari manzillarini aniqlaymiz.

#qo'shing

#define ARDUINO_RX 5 // ketma -ket MP3 pleer moduli TX ga ulanishi kerak #define ARDUINO_TX 6 // modulining RX -ga ulanishi SoftwareSerial mp3 (ARDUINO_RX, ARDUINO_TX); statik int8_t Send_buf [8] = {0}; // Yuborish buyruqlari uchun bufer. // BATTER LOCALLY statik uint8_t ansbuf [10] = {0}; // Javoblar uchun bufer. // YAXSHI LOCALLY String mp3Answer; // MP3 dan javob. String sanswer (bekor); String sbyte2hex (uint8_t b); / ************ Buyruq bayti **************************/ #define CMD_NEXT_SONG 0X01 // Keyingi oynash Qo'shiq. #define CMD_PREV_SONG 0X02 // Oldingi qo'shiqni ijro etish. #CMD_PLAY_W_INDEX 0X03 ni belgilang #CMD_VOLUME_UP 0X04 belgilang #CMD_VOLUME_DOWN 0X05 #CMD_SET_VOLUME 0X06 #define CMD_SNG_CYCL_PLAY 0X08 // Yagona tsiklni belgilang. #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 0X0PFEF_FOF_FOF #define CMD_FOLDER_CYCLE 0X17 #define CMD_SHUFFLE_PLAY 0x18 // #define CMD_SET_SNGL_CYCL 0X19 // Bitta tsiklni belgilang. #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 / ********* *** Opitonlar ************************** / #define DEV_TF 0X02 / ************** ************************************************ *****/ int raqami; bayt estado; bayt ovozi = 2; bayt pin = 0; bayt SortNumber = 0; bool tugmasi = 0;

8 -qadam:

Bu registr manzillari modul ishini sozlash uchun ishlatiladi. Masalan, quyida ushbu ro'yxatdan o'tish manzilini ko'ring.

#CMD_PLAY_W_INDEX 0X03 ni aniqlang

0x03 manzili CMD_PLAY_W_INDEX nomi bilan belgilanadi. Bu qo'shiqni uning raqamidan boshlash uchun ishlatiladi, ya'ni siz ovoz sonini kiritasiz va u ijro etiladi.

Aynan mana shu qadriyatlar yordamida biz ulardan foydalanamiz va loyihamizning ishlashini sozlaymiz.

Ishlatiladigan turli manzillarni aniqlagandan so'ng, biz sozlash funktsiyasini kiritamiz va loyihamiz uchun pin va ketma -ket aloqani sozlaymiz.

9 -qadam: Void Setup () funktsiyasi

Keyin bo'sh joyni sozlash funktsiyasini ko'ring. Men tugma pimlarining barcha sozlamalarini, MP3 modulining ketma -ket aloqasini va MP3 -da karta modulini ishga tushirishni qildim.

bo'sh o'rnatish ()

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

Men ketma -ket muloqotni kompyuterning ketma -ketligini chop etish uchun boshladim, keyin biz mp3 obyekti orqali ketma -ket aloqani boshladik.

Serial.begin (9600);

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

Mp3 moduli Arduino seriali tomonidan qabul qilingan buyruqlar orqali boshqariladi. Bu jarayonda biz SoftwareSerial kutubxonasidan foydalandik va Arduino raqamli pinlaridagi ketma -ketlikni taqlid qildik.

Shunday qilib, siz Arduino -dan MP3 -modulni unga yuborilgan buyruqlar yordamida boshqarishingiz mumkin bo'ladi.

Bundan tashqari, biz raqamli pinlarning konfiguratsiyasini va MP3 karta modulini ishga tushirishni amalga oshirdik

uchun (pin = 8; pin <13; pin ++) {pinMode (pin, INPUT); } sendCommand (CMD_SEL_DEV, 0, DEV_TF); kechikish (500);

Konfiguratsiyani o'rnatgandan so'ng, void loop funktsiyasidagi asosiy mantiqqa o'tishimiz kerak.

10 -qadam: Void Loopning asosiy funktsiyasi

Kod juda sodda va butun mantiqiy tuzilish quyida keltirilgan. Quyida men sizga asosiy funktsiyaning to'liq mantig'ini tushuntirib beraman.

bo'sh halqa ()

{pin = 8; randomSeed (analogRead (A0)); raqamli = tasodifiy (8, 12); SortNumber = raqam; raqamli = raqamli - 7; Serial.println (raqam); sendCommand (0x03, 0, raqam); kechikish (1000); do {tugma = digitalRead (pin); Serial.println (tugma); pin ++; agar (pin> 13) {pin = 8; } Serial.println ("Varrendo…"); Serial.println (pin); // kechikish (1000); } while (tugma! = 1); Serial.println ("Saiu …"); agar (tugma == 1 && (pin-1)! = SortNumber) {sendCommand (0x03, 0, 6); kechikish (3000); } if (tugma == 1 && (pin-1) == SortNumber) {sendCommand (0x03, 0, 7); kechikish (3000); } // Javobni tekshiring. agar (mp3.available ()) {Serial.println (decodeMP3Answer ()); } kechikish (100); //Serial.println("Tocando musica… "); }

Loop funktsiyasi tsiklining har bir boshlanishida biz unli tovushni chiqarish uchun 8 dan 12 gacha yangi qiymat hosil qilamiz. 8 dan 12 gacha bo'lgan qiymat unli raqamli pinni bildiradi.

Tasodifiy qiymatni yaratish kodi quyida ko'rsatilgan.

pin = 8;

randomSeed (analogRead (A0)); raqamli = tasodifiy (8, 12); SortNumber = raqam;

Bundan tashqari, biz 8 dan 12 gacha chizilgan miqdordan 7 ni olib tashlaymiz. Bu bizga xotira kartasida yozilgan qo'shiqlarning 1 dan 5 gacha pozitsiyalarini ko'rsatishga imkon beradi.

raqamli = raqamli - 7;

Shundan so'ng, men quyidagi satrda chizilgan unli tovushni takrorladim.

sendCommand (0x03, 0, raqam);

kechikish (1000);

Endi muhim vaqt keldi: biz bola bosgan tugmani o'qiymiz. Kod qismi quyida keltirilgan.

qilmoq

{tugma = digitalRead (pin); Serial.println (tugma); pin ++; agar (pin> 13) {pin = 8; } Serial.println ("Varrendo…"); Serial.println (pin); // kechikish (1000); } while (tugma! = 1);

Bu tugma foydalanuvchi tugmachalarni bosmaguncha bajariladi. Loop sizga 5 ta raqamli pinni skanerlash imkonini beradi va bola tugmachalardan birini bosganida, u pastadirdan chiqadi va bolaning to'g'ri javob berganligini tekshiradi.

Siz quyidagi kod yordamida tekshirishni amalga oshirasiz.

agar (tugma == 1 && (pin-1)! = SortNumber)

{sendCommand (0x03, 0, 6); kechikish (3000); } if (tugma == 1 && (pin-1) == SortNumber) {sendCommand (0x03, 0, 7); kechikish (3000); }

Birinchi shart, foydalanuvchi xato qilganida bajariladi, chunki tugma bosilgan va pinning ishga tushirilgan qiymati chizilgan pindan farq qilgan (SortNumber).

Bu vaqtda siz quyidagi buyruqni bajarishingiz kerak.

sendCommand (0x03, 0, 6);

kechikish (3000);

Bu buyruq noto'g'ri javob ohangini ishga tushirish uchun ishlatiladi. Nihoyat, bizda bolaning to'g'ri yoki yo'qligini tekshirish uchun ishlatiladigan ikkinchi shart bor.

agar (tugma == 1 && (pin-1) == SortNumber)

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

11 -qadam:

Rasm
Rasm

Agar tugma bosilsa va bosilgan raqamli pin chizilgan pin bilan bir xil bo'lsa, tizim to'g'ri javob ovozini chiqaradi.

Sizga tushuntirganimdek, bu kod juda sodda va har qanday bolaga Arduino bilan o'yin orqali unli tovushlar haqidagi bilimlarini rivojlantirishga yordam beradi.

Yuqoridagi rasmda ovoz qutisi YX5300 MP3 modulining SD -kartasida saqlangan qo'shiq ijro etilmoqda.

12 -qadam: Xulosa

Sinfdagi ta'limni doimiy ravishda o'zgartirish kerak va Arduino qiziqarli vazifalarni yaratishda eng yaxshi ittifoqchi bo'lishi mumkin.

Bu loyiha orqali har bir unli tovushning ovozi va imlosini bilish orqali bolalarning ko'nikmalarini rivojlantira oladigan oddiy faoliyatni rivojlantirish mumkin bo'ldi.

O'qitishning an'anaviy usullaridan farqli o'laroq, bolalar o'yin -kulgi va elektronika orqali dars mashg'ulotlarini o'rganadilar.

13 -qadam: tan olish

Ushbu loyiha JLCPCB kompaniyasining qo'llab -quvvatlashi va rag'batlantirilishi tufayli ishlab chiqilgan. Ular ta'lim olishni rag'batlantirishdi va bizni bolalarga sinfda o'qitish uchun unli tovushlar o'yinini rivojlantirishga taklif qilishdi.

Agar siz unli tovushlar o'yinining elektron plitalarini sotib olmoqchi bo'lsangiz, ushbu havolaga kirishingiz va JLCPCB -dan $ 2 evaziga 10 donani sotib olishingiz mumkin.

Tavsiya: