Isi kandungan:

Permainan Vokal Dengan Arduino dan Modul MP3 YX5300 Catalex: 13 Langkah
Permainan Vokal Dengan Arduino dan Modul MP3 YX5300 Catalex: 13 Langkah

Video: Permainan Vokal Dengan Arduino dan Modul MP3 YX5300 Catalex: 13 Langkah

Video: Permainan Vokal Dengan Arduino dan Modul MP3 YX5300 Catalex: 13 Langkah
Video: How to easily turn your Esp32 S3 into an MP3 player 2024, November
Anonim
Permainan Vokal Dengan Modul Arduino dan YX5300 MP3 Catalex
Permainan Vokal Dengan Modul Arduino dan YX5300 MP3 Catalex

Adakah anda dapat membaca soalan ini? Pelik sungguh! Saya mengemukakan soalan ini dengan sengaja. Sekiranya anda dapat membaca teks ini, ini kerana anda mengetahui keseluruhan abjad dan, tentu saja, mengetahui tentang semua huruf vokal.

Vokal terdapat dalam semua perkataan. Mustahil untuk melepaskan diri dari masing-masing. Sekarang, izinkan saya mengemukakan soalan kepada anda. Adakah pembelajaran masa kecil anda menyeronokkan dan melibatkan sumber teknologi?

Saya yakin bahawa sumber pembelajarannya sedikit dan anda menggunakan kaedah tradisional untuk mempelajari huruf vokal dan abjad.

Bagaimanapun, adakah mungkin menggunakan beberapa sumber teknologi untuk mempelajari vokal?

Dalam artikel ini, saya akan mengajar anda cara mengajar vokal murid dan anak anda melalui permainan.

Saya akan mengajar anda bagaimana membuat sistem dengan suara, di mana anak / pelajar anda akan mendengar bunyi huruf dan mesti menekan butang untuk menunjukkan huruf yang betul.

Oleh itu, mereka akan belajar sambil bermain dan akan sentiasa terdorong untuk belajar.

Sekarang, saya akan menunjukkan kepada anda proses langkah demi langkah untuk membuat permainan anda sendiri, dan mengajar vokal kepada anak-anak.

Bekalan

Papan Litar Bercetak JLCPCB

Arduino Uno

Suis butang tekan

Perintang 10kR

Header Lelaki 2, 54mm 1x7

Langkah 1: Mengembangkan Permainan Vokal Dengan Arduino

Mengembangkan Permainan Vokal Dengan Arduino
Mengembangkan Permainan Vokal Dengan Arduino

Inti permainan adalah papan litar bercetak JLCPCB dari Vokal. Anda boleh mengakses pautan ini dan memuat turun fail projek. Ia mempunyai 5 butang. Anda akan menggunakan setiap butang untuk mewakili vokal dan menghubungkannya ke Arduino anda.

Papan litar bercetak ditunjukkan dalam Rajah 1.

Langkah 2:

Imej
Imej

Dengan Projek PCB ini, anda boleh menghubungkannya dengan Arduino dan membuat permainan anda. Seterusnya, saya akan menawarkan skema elektronik untuk anda memasang atau membina projek di protoboard anda.

Langkah 3:

Dari skema ini, kami mengatur susun atur papan elektronik. Ini ditunjukkan dalam Rajah 2 dan anda boleh memuat turun fail dan membuat projek anda.

Pilih 5 pin dari Arduino dan sambungkan jumper di papan dengan Arduino. Atau jika tidak, anda boleh memasang rajah elektronik berikut.

Langkah 4: Idea Projek

Idea Projek
Idea Projek

Saya akan mengajar anda cara memasang sistem suara MP3 dengan Arduino. Sistem ini akan bertanggungjawab untuk menghasilkan semula suara yang menyebut huruf. Bunyi setiap huruf akan dilukis menggunakan nilai dari 1 hingga 5, di mana 1 mewakili A dan 5 mewakili U.

Oleh itu, apabila anak itu mendengar suaranya, dia mesti melihat papan kekunci, mengenali ejaan vokal, dan menekan kekunci yang betul.

Sekiranya gagal, sistem akan memancarkan LED Merah sebanyak 3 kali. Jika tidak, sistem akan mengaktifkan bel selama 5 saat dan menarik vokal baru.

Untuk melakukan ini, anda mesti memasang litar berikut.

Di litar ini, anda akan menyambungkan Modul MP3 dan papan vokal di Arduino. Modul Bluetooth digunakan untuk mewakili Modul MP3 Catalex.

Arduino akan bertanggungjawab untuk menyusun 5 nombor dan kemudian menghantar arahan untuk mengaktifkan vokal yang dilukis

Langkah 5:

Imej
Imej

Selepas itu, kami akan menunggu sehingga anak mendengar dan menekan butang, seperti yang ditunjukkan dalam Gambar di atas.

Setiap butang di atas mewakili vokal huruf. Seterusnya, saya akan menunjukkan kepada anda bagaimana anda akan membina logik pengaturcaraan untuk projek ini.

Langkah 6: Membina Logik Pengaturcaraan Permainan

Membina Logik Pengaturcaraan Permainan
Membina Logik Pengaturcaraan Permainan

Sistem permainan vokal berdasarkan operasi modul YX5300. Modul ini mempunyai beberapa fungsi, namun, kami akan fokus untuk mempersembahkan struktur kerja permainan melalui fungsi utama modul YX5300.

Di bawah ini saya memberikan anda logik pengaturcaraan projek ini.

Langkah 7:

Berikut ini, saya akan menerangkan langkah demi langkah untuk membina logik permainan yang menyeronokkan ini untuk kanak-kanak.

#sertakan

#define ARDUINO_RX 5 // harus menyambung ke TX modul Serial MP3 Player #define ARDUINO_TX 6 // sambungkan ke RX modul SoftwareSerial mp3 (ARDUINO_RX, ARDUINO_TX); stat8 int8_t Send_buf [8] = {0}; // Penyangga untuk arahan Hantar. // LEBIH BAIK secara statik uint8_t ansbuf [10] = {0}; // Penyangga jawapan. // TEMPATAN LEBIH BAIK Rentetan mp3Jawapan; // Jawapan dari MP3. String sanswer (tidak sah); Rentetan sbyte2hex (uint8_t b); / ************ Bait arahan ************************** / #tentukan CMD_NEXT_SONG 0X01 // Mainkan seterusnya lagu. #tentukan CMD_PREV_SONG 0X02 // Mainkan lagu sebelumnya. #tentukan CMD_PLAY_W_INDEX 0X03 # tentukan CMD_VOLUME_UP 0X04 # tentukan CMD_VOLUME_DOWN 0X05 #tentukan CMD_SET_VOLUME 0X06 #tentukan CMD_SNG_CYCL_PLAY 0X08 // Single #definisi CMD_SEL_DEV 0X09 #tentukan CMD_SLEEP_MODE 0X0A #tentukan CMD_WAKE_UP 0X0B #tentukan CMD_RESET 0X0C #tentukan CMD_PLAY 0X0D #tentukan CMD_PLUSE 0X0E #define CMD_Peringkat_Define CMD_Define CMD #tentukan CMD_FOLDER_CYCLE 0X17 #tentukan CMD_SHUFFLE_PLAY 0x18 // #tentukan CMD_SET_SNGL_CYCL 0X19 // Tetapkan satu kitaran. # menentukan CMD_SET_DAC 0X1A # menentukan DAC_ON 0X00 # menentukan DAC_OFF 0X01 # menentukan CMD_PLAY_W_VOL 0X22 # menentukan CMD_PLAYING_N 0x4C # menentukan CMD_QUERY_STATUS 0x42 # menentukan CMD_QUERY_VOLUME 0x43 # menentukan CMD_QUERY_FLDR_TRACKS 0x4e # menentukan CMD_QUERY_TOT_TRACKS 0x48 # menentukan CMD_QUERY_FLDR_COUNT 0x4f / ********* *** Opiton ************************** / #tentukan DEV_TF 0X02 / ************** ************************************************** ***** / int numero; bait estado; bait buzzer = 2; pin bait = 0; bait SortNumber = 0; butang bool = 0; batal persediaan () {Serial.begin (9600); mp3.begin (9600); kelewatan (500); untuk (pin = 8; pin 13) {pin = 8; } Serial.println ("Varrendo …"); Serial.println (pin); // kelewatan (1000); } sambil (butang! = 1); Serial.println ("Saiu …"); jika (butang == 1 && (pin-1)! = UrutkanNombor) {sendCommand (0x03, 0, 6); kelewatan (3000); } jika (butang == 1 && (pin-1) == SortNumber) {sendCommand (0x03, 0, 7); kelewatan (3000); } // Periksa jawapannya. jika (mp3.available ()) {Serial.println (decodeMP3Answer ()); } kelewatan (100); //Serial.println("Tocando musica… "); } / ************************************************ ******************************** / / * Fungsi sendMP3Command: cari perintah 'c' dan hantar ke MP3 * / / * Parameter: c. Kod untuk Perintah MP3, 'h' untuk pertolongan. * / / * Return: void * / void sendMP3Command (char c) {switch (c) {case '?': Case 'h': Serial.println ("BANTUAN"); Serial.println ("p = Main"); Serial.println ("P = Jeda"); Serial.println ("> = Seterusnya"); Serial.println ("': Serial.println (" Next "); sendCommand (CMD_NEXT_SONG); sendCommand (CMD_PLAYING_N); // minta bilangan fail yang sedang dimainkan; case' Memory card dimasukkan."; Break; case 0x3D: decodedMP3Answer + = "-> Num putar selesai" + String (ansbuf [6], DEC); // sendCommand (CMD_NEXT_SONG); // sendCommand (CMD_PLAYING_N); // minta bilangan fail sedang putus; kes 0x40: decodedMP3Answer + = "-> Ralat"; break; case 0x41: decodedMP3Answer + = "-> Data diterima dengan betul."; break; case 0x42: decodedMP3Answer + = "-> Status dimainkan:" + String (ansbuf [6], DEC); break; case 0x48: decodedMP3Answer + = "-> Bilangan fail:" + String (ansbuf [6], DEC); break; case 0x4C: decodedMP3Answer + = "-> Main:" + String (ansbuf [6], DEC); break; case 0x4E: decodedMP3Answer + = "-> Bilangan fail folder:" + String (ansbuf [6], DEC); break; case 0x4F: decodedMP3Answer + = "-> Bilangan folder:" + String (ansbuf [6], DEC); rehat;} kod semula MP3Answer;} / *********************************** ************ ********************************* / / * Fungsi: Hantar arahan ke MP3 * / / * Parameter: byte command * / / * Parameter: parameter byte dat1 untuk perintah * / / * Parameter: parameter byte dat2 untuk perintah * / batal sendCommand (perintah byte) {sendCommand (perintah, 0, 0); } batal sendCommand (perintah bait, bait dat1, bait dat2) {kelewatan (20); Send_buf [0] = 0x7E; // Send_buf [1] = 0xFF; // Send_buf [2] = 0x06; // Len Send_buf [3] = arahan; // Send_buf [4] = 0x01; // 0x00 TIDAK, 0x01 maklum balas Send_buf [5] = dat1; // datah Send_buf [6] = dat2; // datal Send_buf [7] = 0xEF; // Serial.print ("Menghantar:"); untuk (uint8_t i = 0; i <8; i ++) {mp3.write (Send_buf ); Serial.print (sbyte2hex (Send_buf )); } Bersiri.println (); } / ************************************************ ******************************** / / * Fungsi: sbyte2hex. Mengembalikan data bait dalam format HEX. * / / * Parameter: - uint8_t b. Byte untuk menukar ke HEX. * / / * Return: String * / String sbyte2hex (uint8_t b) {String hex; hex = "0X"; jika (b <16) hex + = "0"; hex + = Rentetan (b, HEX); hex + = ""; pulangkan hex; } / ************************************************ ******************************** / / * Fungsi: shex2int. Mengembalikan int dari rentetan HEX. */ /*Parameter. char * s untuk menukar ke HEX. * / / * Parameter: n. panjang char * s. * / / * Return: int * / int shex2int (char * s, int n) {int r = 0; untuk (int i = 0; i = '0' && s = 'A' && s <= 'F') {r * = 16; r + = (s - 'A') + 10; }} kembali r; } / ************************************************ ******************************** / / * Fungsi: sanswer. Mengembalikan jawapan Rentetan dari modul UART mp3. * / / * Parameter: - uint8_t b. batal. * / / * Kembali: Rentetan. Sekiranya jawapannya dibentuk dengan baik. * / String sanswer (tidak sah) {uint8_t i = 0; Rentetan mp3answer = ""; // Dapatkan hanya 10 Bytes sementara (mp3.available () && (i <10)) {uint8_t b = mp3.read (); ansbuf = b; saya ++; mp3answer + = sbyte2hex (b); } // jika format jawapan betul. if ((ansbuf [0] == 0x7E) && (ansbuf [9] == 0xEF)) {kembali mp3answer; } kembali "???:" + mp3answer; }

Pertama, kami menentukan semua pemboleh ubah program dan alamat daftar akses modul YX5300.

#sertakan

#define ARDUINO_RX 5 // harus menyambung ke TX modul Serial MP3 Player #define ARDUINO_TX 6 // sambungkan ke RX modul SoftwareSerial mp3 (ARDUINO_RX, ARDUINO_TX); stat8 int8_t Send_buf [8] = {0}; // Penyangga untuk arahan Hantar. // LEBIH BAIK secara statik uint8_t ansbuf [10] = {0}; // Penyangga jawapan. // TEMPATAN LEBIH BAIK Rentetan mp3Answer; // Jawapan dari MP3. String sanswer (tidak sah); Rentetan sbyte2hex (uint8_t b); / ************ Bait arahan ************************** / #tentukan CMD_NEXT_SONG 0X01 // Mainkan seterusnya lagu. #tentukan CMD_PREV_SONG 0X02 // Mainkan lagu sebelumnya. #definisi CMD_PLAY_W_INDEX 0X03 #tentukan CMD_VOLUME_UP 0X04 #tentukan CMD_VOLUME_DOWN 0X05 #tentukan CMD_SET_VOLUME 0X06 #tentukan CMD_SNG_CYCL_PLAY 0X08 // Single #definisi CMD_SEL_DEV 0X09 #tentukan CMD_SLEEP_MODE 0X0A #tentukan CMD_WAKE_UP 0X0B #tentukan CMD_RESET 0X0C #tentukan CMD_PLAY 0X0D #tentukan CMD_PLUSE 0X0E #define CMD_Pertahankan_Peringkat_Definisi CMD_Define CMD #tentukan CMD_FOLDER_CYCLE 0X17 #tentukan CMD_SHUFFLE_PLAY 0x18 // #tentukan CMD_SET_SNGL_CYCL 0X19 // Tetapkan satu kitaran. # menentukan CMD_SET_DAC 0X1A # menentukan DAC_ON 0X00 # menentukan DAC_OFF 0X01 # menentukan CMD_PLAY_W_VOL 0X22 # menentukan CMD_PLAYING_N 0x4C # menentukan CMD_QUERY_STATUS 0x42 # menentukan CMD_QUERY_VOLUME 0x43 # menentukan CMD_QUERY_FLDR_TRACKS 0x4e # menentukan CMD_QUERY_TOT_TRACKS 0x48 # menentukan CMD_QUERY_FLDR_COUNT 0x4f / ********* *** Opiton ************************** / #tentukan DEV_TF 0X02 / ************** ************************************************** ***** / int numero; bait estado; bait buzzer = 2; pin bait = 0; bait SortNumber = 0; butang bool = 0;

Langkah 8:

Alamat daftar ini digunakan untuk mengkonfigurasi operasi modul. Sebagai contoh, lihat alamat pendaftaran ini di bawah.

#tentukan CMD_PLAY_W_INDEX 0X03

Alamat 0x03 ditentukan dengan nama CMD_PLAY_W_INDEX. Ini digunakan untuk memicu lagu dari jumlahnya, yaitu, Anda memasukkan jumlah suaranya dan itu akan dimainkan.

Dengan nilai-nilai inilah kita akan menggunakannya dan mengkonfigurasi fungsi projek kita.

Setelah anda menentukan pelbagai alamat yang akan digunakan, kami akan memasuki fungsi persediaan dan mengkonfigurasi pin dan komunikasi bersiri untuk projek kami.

Langkah 9: Fungsi Persediaan Tidak Sah ()

Seterusnya, lihat fungsi penyediaan kekosongan. Saya melakukan semua tetapan pin butang, komunikasi bersiri modul MP3, dan inisialisasi modul kad dalam MP3.

persediaan tidak sah ()

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

Saya memulakan komunikasi bersiri untuk mencetak data pada siri komputer dan kemudian kami memulakan komunikasi bersiri tersebut melalui objek mp3.

Serial.begin (9600);

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

Modul mp3 dikendalikan melalui arahan yang diterima oleh siri Arduino. Dalam proses ini, kami menggunakan perpustakaan SoftwareSerial dan meniru siri pada pin digital Arduino.

Oleh itu, anda akan dapat menggunakan Arduino untuk mengendalikan modul MP3 melalui arahan yang dihantar kepadanya.

Sebagai tambahan, kami membuat konfigurasi pin digital dan inisialisasi modul Kad MP3

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

Setelah membuat konfigurasi, kita mesti pergi ke logik utama dalam fungsi gelung void.

Langkah 10: Gelung Kekosongan Fungsi Utama ()

Kodnya sangat mudah dan keseluruhan struktur logik disajikan di bawah. Berikut ini, saya akan menerangkan kepada anda logik lengkap fungsi utama.

gelung kosong ()

{pin = 8; randomSeed (analogRead (A0)); numero = rawak (8, 12); Isih Nombor = numero; numero = numero - 7; Serial.println (numero); sendCommand (0x03, 0, numero); kelewatan (1000); lakukan {butang = digitalRead (pin); Serial.println (butang); pin ++; jika (pin> 13) {pin = 8; } Serial.println ("Varrendo …"); Serial.println (pin); // kelewatan (1000); } sambil (butang! = 1); Serial.println ("Saiu …"); jika (butang == 1 && (pin-1)! = UrutkanNombor) {sendCommand (0x03, 0, 6); kelewatan (3000); } jika (butang == 1 && (pin-1) == SortNumber) {sendCommand (0x03, 0, 7); kelewatan (3000); } // Periksa jawapannya. jika (mp3.available ()) {Serial.println (decodeMP3Answer ()); } kelewatan (100); //Serial.println("Tocando musica… "); }

Pada setiap permulaan kitaran fungsi gelung, kita akan menghasilkan nilai baru antara 8 dan 12 untuk menghasilkan bunyi vokal. Nilai dari 8 hingga 12 merujuk kepada pin digital vokal.

Kod untuk menghasilkan nilai rawak ditunjukkan di bawah.

pin = 8;

randomSeed (analogRead (A0)); numero = rawak (8, 12); SusunNombor = numero;

Sebagai tambahan, kita mengurangkan 7 dari jumlah yang diambil antara 8 dan 12. Ini akan membolehkan kita menunjukkan kedudukan 1 hingga 5 lagu yang dirakam pada kad memori.

numero = numero - 7;

Selepas itu, saya mengeluarkan semula bunyi vokal yang dilukis pada garis di bawah.

sendCommand (0x03, 0, numero);

kelewatan (1000);

Sekarang masa penting telah tiba: saat ketika kita akan membaca butang yang ditekan oleh anak. Bahagian kod ditunjukkan di bawah.

buat

{butang = digitalRead (pin); Serial.println (butang); pin ++; jika (pin> 13) {pin = 8; } Serial.println ("Varrendo …"); Serial.println (pin); // kelewatan (1000); } sambil (butang! = 1);

Gelung ini akan dijalankan sehingga pengguna menekan butang. Gelung membolehkan anda mengimbas 5 pin digital dan ketika anak menekan salah satu butang, ia akan keluar dari gelung dan memeriksa apakah anak itu telah memberi respons dengan betul.

Anda akan melakukan pengesahan menggunakan kod di bawah.

jika (butang == 1 && (pin-1)! = Isih Nombor)

{sendCommand (0x03, 0, 6); kelewatan (3000); } jika (butang == 1 && (pin-1) == SortNumber) {sendCommand (0x03, 0, 7); kelewatan (3000); }

Syarat pertama akan dilaksanakan apabila pengguna melakukan kesalahan kerana butang ditekan dan nilai pin yang dipicu berbeza dari pin yang ditarik (SortNumber).

Pada ketika ini, anda mesti melaksanakan arahan di bawah.

sendCommand (0x03, 0, 6);

kelewatan (3000);

Perintah ini digunakan untuk mencetuskan nada respons yang salah. Akhirnya, kita mempunyai syarat kedua yang akan digunakan untuk memeriksa sama ada anak itu betul.

jika (butang == 1 && (pin-1) == UrutkanNombor)

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

Langkah 11:

Imej
Imej

Sekiranya butang ditekan dan pin digital yang ditekan sama dengan pin yang dilukis, sistem akan mencetuskan suara jawapan yang betul.

Seperti yang saya jelaskan kepada anda, kod ini sangat mudah dan akan membantu setiap kanak-kanak mengembangkan pengetahuan mereka tentang vokal melalui permainan dengan Arduino.

Pada gambar di atas kotak suara sedang menjalankan lagu yang disimpan dalam Kad SD Modul MP3 YX5300.

Langkah 12: Kesimpulannya

Pendidikan bilik darjah perlu diubah secara berterusan dan Arduino dapat menjadi sekutu besar dalam membuat tugas yang menyeronokkan.

Melalui projek ini, adalah mungkin untuk mengembangkan aktiviti sederhana yang dapat mengembangkan kemahiran anak-anak melalui pengetahuan tentang bunyi dan ejaan setiap vokal.

Tidak seperti kaedah pengajaran tradisional, kanak-kanak akan belajar melalui keseronokan kelas melalui permainan dan elektronik.

Langkah 13: Penghargaan

Projek ini dibangunkan berkat sokongan dan dorongan syarikat JLCPCB. Mereka mendorong pendidikan dan mengajak kami mengembangkan permainan vokal untuk mengajar anak-anak di kelas.

Sekiranya anda ingin membeli plat elektronik Game of Vowels, anda boleh mengakses pautan ini dan membeli 10 unit dengan harga $ 2 di JLCPCB.

Disyorkan: