Daftar Isi:

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

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

Video: Permainan Vokal Dengan Modul Arduino dan YX5300 MP3 Catalex: 13 Langkah
Video: Tonton Sampai Habis !!! Belajar Arduino Di Jamin Bisa 2024, November
Anonim
Permainan Vokal Dengan Modul Arduino dan YX5300 MP3 Catalex
Permainan Vokal Dengan Modul Arduino dan YX5300 MP3 Catalex

Apakah Anda bisa membaca pertanyaan ini? Itu aneh! Saya sengaja menanyakan pertanyaan ini. Jika Anda dapat membaca teks ini, itu karena Anda mengetahui seluruh alfabet dan, tentu saja, mempelajari semua vokal.

Vokal hadir dalam semua kata. Tidak mungkin untuk melarikan diri dari mereka masing-masing. Sekarang, izinkan saya mengajukan pertanyaan. Apakah pembelajaran masa kecil Anda menyenangkan dan melibatkan sumber daya teknologi?

Saya yakin sumber belajarnya sedikit dan Anda menggunakan metode tradisional untuk mempelajari vokal dan alfabet.

Lagi pula, apakah mungkin menggunakan beberapa sumber teknologi untuk mempelajari vokal?

Dalam artikel ini, saya akan mengajari Anda cara mengajari siswa dan anak-anak Anda vokal melalui permainan.

Saya akan mengajari Anda cara membuat sistem dengan suara, di mana anak/siswa Anda akan mendengar suara huruf dan harus menekan tombol untuk menunjukkan huruf yang benar.

Dengan demikian, mereka akan belajar sambil bermain dan akan selalu termotivasi untuk belajar.

Sekarang, saya akan menunjukkan proses langkah demi langkah bagi Anda untuk membuat permainan Anda sendiri, dan mengajarkan vokal kepada anak-anak.

Perlengkapan

Papan Sirkuit Cetak JLCPCB

Arduino Uno

Sakelar Tombol Tekan

Resistor 10kR

Header Pria 2, 54mm 1x7

Langkah 1: Mengembangkan Permainan Vokal Dengan Arduino

Mengembangkan Permainan Vokal Dengan Arduino
Mengembangkan Permainan Vokal Dengan Arduino

Inti dari permainan ini adalah papan sirkuit cetak Vokal JLCPCB. Anda dapat mengakses tautan ini dan mengunduh file proyek. Ini memiliki 5 tombol. Anda akan menggunakan setiap tombol untuk mewakili vokal dan menghubungkannya ke Arduino Anda.

Papan sirkuit tercetak ditunjukkan pada Gambar 1.

Langkah 2:

Gambar
Gambar

Dengan Proyek PCB ini, Anda dapat menghubungkannya dengan Arduino dan membuat game Anda. Selanjutnya, saya akan menawarkan skema elektronik bagi Anda untuk merakit atau membangun proyek di protoboard Anda.

Langkah 3:

Dari skema ini, kami mengatur tata letak papan elektronik. Itu ditunjukkan pada Gambar 2 dan Anda dapat mengunduh file dan membuat proyek Anda.

Pilih 5 pin dari Arduino dan hubungkan jumper di papan dengan Arduino. Atau jika tidak, Anda dapat merakit diagram elektronik berikut.

Langkah 4: Ide Proyek

Ide Proyek
Ide Proyek

Saya akan mengajari Anda cara merakit sistem suara MP3 dengan Arduino. Sistem ini akan bertanggung jawab untuk mereproduksi suara yang mengucapkan surat itu. Bunyi setiap huruf akan digambar menggunakan nilai dari 1 sampai 5, dimana 1 mewakili A dan 5 mewakili U.

Jadi, ketika anak mendengar suara, ia harus melihat keyboard, mengenali ejaan vokal, dan menekan tombol yang benar.

Jika gagal, sistem akan mem-flash LED Merah 3 kali. Jika tidak, sistem akan mengaktifkan buzzer selama 5 detik dan menggambar vokal baru.

Untuk melakukan ini, Anda harus merakit sirkuit berikut.

Di sirkuit ini, Anda akan menghubungkan Modul MP3 dan papan vokal di Arduino. Modul Bluetooth digunakan untuk mewakili Modul Catalex MP3.

Arduino akan bertanggung jawab untuk mengurutkan 5 angka dan kemudian mengirimkan perintah untuk mengaktifkan vokal yang ditarik

Langkah 5:

Gambar
Gambar

Setelah itu, kita akan menunggu sampai anak mendengar dan menekan tombol, seperti yang ditunjukkan pada Gambar di atas.

Setiap tombol di atas mewakili vokal alfabet. Selanjutnya, saya akan menunjukkan kepada Anda bagaimana Anda akan membangun logika pemrograman untuk proyek ini.

Langkah 6: Membangun Logika Pemrograman Game

Membangun Logika Pemrograman Game
Membangun Logika Pemrograman Game

Sistem permainan vokal didasarkan pada pengoperasian modul YX5300. Modul ini memiliki beberapa fungsi, namun kami akan fokus pada penyajian struktur kerja game melalui fungsi utama modul YX5300.

Di bawah ini saya memberi Anda semua logika pemrograman proyek.

Langkah 7:

Berikut ini saya akan menjelaskan langkah demi langkah untuk membangun logika permainan menyenangkan untuk anak-anak ini.

#termasuk

#define ARDUINO_RX 5 //harus terhubung ke TX dari modul Serial MP3 Player #define ARDUINO_TX 6 //menghubungkan ke RX dari modul SoftwareSerial mp3(ARDUINO_RX, ARDUINO_TX); static int8_t Send_buf[8] = {0}; // Buffer untuk perintah Kirim. // BETTER LOCALLY static uint8_t ansbuf[10] = {0}; // Buffer untuk jawaban. // LEBIH BAIK LOKAL String mp3Answer; // Jawaban dari MP3. String jawaban(kosong); String sbyte2hex(uint8_t b); /************ Byte perintah **************************/ #define CMD_NEXT_SONG 0X01 // Mainkan selanjutnya lagu. #define CMD_PREV_SONG 0X02 // Putar lagu sebelumnya. #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 // Putar Satu Siklus. #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_STOPLAY_FOL_#16PLAY_FOL_define Hentikan pemutaran terus menerus. #define CMD_FOLDER_CYCLE 0X17 #define CMD_SHUFFLE_PLAY 0x18 // #define CMD_SET_SNGL_CYCL 0X19 // Tetapkan satu siklus. #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 / ********* *** Opini **************************/ #define DEV_TF 0X02 /*************** ************************************************** *****/ int angka; byte estado; byte buzzer = 2; byte pin = 0; byte SortNumber = 0; tombol bool = 0; void setup() { Serial.begin(9600); mp3.begin(9600); penundaan (500); untuk(pin = 8; pin 13) { pin = 8; } Serial.println("Varrendo…"); Serial.println(pin); //tunda(1000); }sementara(tombol != 1); Serial.println("Saiu…"); if(button == 1 && (pin-1) != SortNumber) { sendCommand(0x03, 0, 6); penundaan(3000); } if(button == 1 && (pin-1) == SortNumber) { sendCommand(0x03, 0, 7); penundaan(3000); } // Periksa jawabannya. if (mp3.available()) { Serial.println(decodeMP3Answer()); } penundaan(100); //Serial.println("Menampilkan musik…"); } /************************************************ ********************************/ /*Fungsi sendMP3Command: cari perintah 'c' dan kirimkan ke MP3 */ /*Parameter: c. Kode untuk Perintah MP3, 'h' untuk bantuan. */ /*Return: void */ void sendMP3Command(char c) { switch (c) { case '?': case 'h': Serial.println("HELP "); Serial.println("p = Main"); Serial.println("P = Jeda"); Serial.println(" > = Selanjutnya"); Serial.println(" ': Serial.println("Next"); sendCommand(CMD_NEXT_SONG); sendCommand(CMD_PLAYING_N); // menanyakan jumlah file yang sedang diputar break; case ' Kartu memori dimasukkan."; break; case 0x3D: decodeMP3Answer += " -> Selesai bermain num " + String(ansbuf[6], DEC); //sendCommand(CMD_NEXT_SONG); //sendCommand(CMD_PLAYING_N); // menanyakan jumlah file yang sedang diputar break; case 0x40: decodeMP3Answer += " -> Error"; break; case 0x41: decodeMP3Answer += " -> Data diterima dengan benar. "; break; case 0x42: decodeMP3Answer += " -> Status bermain: " + String(ansbuf[6], DEC); break; case 0x48: decodeMP3Answer += " -> Jumlah file: " + String(ansbuf[6], DEC); break; case 0x4C: decodeMP3Answer += " -> Memutar: " + String(ansbuf[6], DEC); break; case 0x4E: decodeMP3Answer += " -> Jumlah file folder: " + String(ansbuf[6], DEC); break; case 0x4F: decodeMP3Answer += " -> Jumlah folder: " + String(ansbuf [6], DEC); break; } kembalikan decodeMP3Answer; } /********************************* ************ ********************************/ /*Fungsi: Mengirim perintah ke MP3 */ /*Parameter: byte command */ /*Parameter: byte dat1 parameter untuk perintah */ /*Parameter: byte dat2 parameter untuk perintah */ void sendCommand(byte command){ sendCommand(command, 0, 0); } void sendCommand(perintah byte, byte dat1, byte dat2){ delay(20); Kirim_buf[0] = 0x7E; // Kirim_buf[1] = 0xFF; // Kirim_buf[2] = 0x06; // Len Send_buf[3] = perintah; // Kirim_buf[4] = 0x01; // 0x00 TIDAK, 0x01 umpan balik Send_buf[5] = dat1; // datah Send_buf[6] = dat2; // datal Send_buf[7] = 0xEF; // Serial.print("Mengirim: "); for (uint8_t i = 0; i < 8; i++) { mp3.write(Send_buf); Serial.print(sbyte2hex(Kirim_buf)); } Serial.println(); } /************************************************ ********************************/ /*Fungsi: sbyte2hex. Mengembalikan data byte dalam format HEX. */ /*Parameter:- uint8_t b. Byte untuk dikonversi ke HEX. */ /*Kembali: String */ String sbyte2hex(uint8_t b) { String shex; shex = "0X"; if (b < 16) shex += "0"; shex += String(b, HEX); shex += " "; kembalikan shex; } /************************************************ ********************************/ /*Fungsi: shex2int. Mengembalikan int dari string HEX. */ /*Parameter: s. char *s untuk dikonversi ke HEX. */ /*Parameter: n. panjang karakter *s. */ /*Kembali: 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; } } kembalikan r; } /************************************************ ********************************/ /*Fungsi: menjawab. Mengembalikan jawaban String dari modul mp3 UART. */ /*Parameter:- uint8_t b. ruang kosong. */ /*Kembali: String. Jika jawabannya adalah jawaban yang diformat dengan baik. */ String sanswer(void) { uint8_t i = 0; String mp3jawaban = ""; // Dapatkan hanya 10 Bytes while (mp3.available() && (i < 10)) { uint8_t b = mp3.read(); ansbuf = b; saya++; mp3jawaban += sbyte2hex(b); } // jika format jawaban benar. if ((ansbuf[0] == 0x7E) && (ansbuf[9] == 0xEF)) { return mp3answer; } kembali "???: " + mp3jawaban; }

Pertama, kita mendefinisikan semua variabel program dan alamat register akses dari modul YX5300.

#termasuk

#define ARDUINO_RX 5 //harus terhubung ke TX dari modul Serial MP3 Player #define ARDUINO_TX 6 //menghubungkan ke RX dari modul SoftwareSerial mp3(ARDUINO_RX, ARDUINO_TX); static int8_t Send_buf[8] = {0}; // Buffer untuk perintah Kirim. // BETTER LOCALLY static uint8_t ansbuf[10] = {0}; // Buffer untuk jawaban. // LEBIH BAIK LOKAL String mp3Answer; // Jawaban dari MP3. String jawaban(kosong); String sbyte2hex(uint8_t b); /************ Byte perintah **************************/ #define CMD_NEXT_SONG 0X01 // Mainkan selanjutnya lagu. #define CMD_PREV_SONG 0X02 // Putar lagu sebelumnya. #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 // Putar Satu Siklus. #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_STOPLAY_FOL_#16PLAY_FOL_define // Hentikan pemutaran terus menerus. #define CMD_FOLDER_CYCLE 0X17 #define CMD_SHUFFLE_PLAY 0x18 // #define CMD_SET_SNGL_CYCL 0X19 // Tetapkan satu siklus. #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 / ********* *** Opini **************************/ #define DEV_TF 0X02 /*************** ************************************************** *****/ int angka; byte estado; byte buzzer = 2; byte pin = 0; byte SortNumber = 0; tombol bool = 0;

Langkah 8:

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

#define CMD_PLAY_W_INDEX 0X03

Alamat 0x03 didefinisikan dengan nama CMD_PLAY_W_INDEX. Ini digunakan untuk memicu lagu dari nomornya, yaitu, Anda memasukkan nomor suara dan itu akan dimainkan.

Dengan nilai-nilai inilah kami akan menggunakannya dan mengonfigurasi fungsi proyek kami.

Setelah Anda menentukan berbagai alamat yang akan digunakan, kami akan memasuki fungsi pengaturan dan mengkonfigurasi pin dan komunikasi serial untuk proyek kami.

Langkah 9: Fungsi Void Setup()

Selanjutnya, lihat fungsi pengaturan batal. Saya melakukan semua pengaturan pin tombol, komunikasi serial modul MP3, dan inisialisasi modul kartu di MP3.

batalkan pengaturan()

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

Saya memulai komunikasi serial untuk mencetak data pada serial komputer dan kemudian kami memulai komunikasi serial melalui objek mp3.

Serial.begin(9600);

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

Modul mp3 dikendalikan melalui perintah yang diterima oleh serial Arduino. Dalam proses ini, kami menggunakan pustaka SoftwareSerial dan mengemulasi serial pada pin digital Arduino.

Dengan demikian, Anda akan dapat menggunakan Arduino untuk mengontrol modul MP3 melalui perintah yang dikirimkan kepadanya.

Selain itu, kami membuat konfigurasi pin digital dan inisialisasi modul Kartu MP3

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

Setelah melakukan konfigurasi, kita harus masuk ke logika utama pada fungsi void loop.

Langkah 10: Fungsi Utama Void Loop()

Kode ini sangat sederhana dan seluruh struktur logis disajikan di bawah ini. Berikut ini, saya akan menjelaskan kepada Anda logika lengkap dari fungsi utama.

lingkaran kosong()

{ pin = 8; randomSeed(analogRead(A0)); angka = acak(8, 12); SortNumber = bilangan; angka = angka - 7; Serial.println(angka); sendCommand(0x03, 0, angka); penundaan (1000); lakukan { tombol = digitalRead(pin); Serial.println(tombol); pin++; if(pin > 13) { pin = 8; } Serial.println("Varrendo…"); Serial.println(pin); //tunda(1000); }sementara(tombol != 1); Serial.println("Saiu…"); if(button == 1 && (pin-1) != SortNumber) { sendCommand(0x03, 0, 6); penundaan(3000); } if(button == 1 && (pin-1) == SortNumber) { sendCommand(0x03, 0, 7); penundaan(3000); } // Periksa jawabannya. if (mp3.available()) { Serial.println(decodeMP3Answer()); } penundaan(100); //Serial.println("Menampilkan musik…"); }

Pada setiap awal siklus fungsi loop, kami akan menghasilkan nilai baru antara 8 dan 12 untuk menghasilkan suara vokal. Nilai dari 8 hingga 12 mengacu pada pin digital vokal.

Kode untuk menghasilkan nilai acak ditunjukkan di bawah ini.

pin = 8;

randomSeed(analogRead(A0)); angka = acak(8, 12); SortNumber = bilangan;

Selain itu, kami mengurangi 7 dari jumlah yang ditarik antara 8 dan 12. Ini akan memungkinkan kami untuk menunjuk ke posisi 1 hingga 5 dari lagu yang direkam pada kartu memori.

angka = angka - 7;

Setelah itu, saya mereproduksi suara vokal yang digambar pada baris di bawah ini.

sendCommand(0x03, 0, angka);

penundaan (1000);

Sekarang waktu yang penting telah tiba: saat kita akan membaca tombol yang ditekan oleh anak. Bagian kode disajikan di bawah ini.

melakukan

{ tombol = digitalRead(pin); Serial.println(tombol); pin++; if(pin > 13) { pin = 8; } Serial.println("Varrendo…"); Serial.println(pin); //tunda(1000); }sementara(tombol != 1);

Loop ini akan dijalankan sampai pengguna menekan tombol. Loop memungkinkan Anda untuk memindai 5 pin digital dan saat anak menekan salah satu tombol, itu akan keluar dari loop dan memeriksa apakah anak telah merespons dengan benar.

Anda akan melakukan verifikasi menggunakan kode di bawah ini.

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

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

Kondisi pertama akan dijalankan ketika pengguna melakukan kesalahan karena tombol ditekan dan nilai pin yang dipicu berbeda dari pin yang ditarik (SortNumber).

Pada titik ini, Anda harus menjalankan perintah di bawah ini.

sendCommand(0x03, 0, 6);

penundaan(3000);

Perintah ini digunakan untuk memicu nada respons yang salah. Akhirnya, kami memiliki kondisi kedua yang akan digunakan untuk memeriksa apakah anak itu benar.

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

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

Langkah 11:

Gambar
Gambar

Jika tombol ditekan dan pin digital yang ditekan sama dengan pin yang ditarik, sistem akan memicu suara jawaban yang benar.

Seperti yang saya jelaskan kepada Anda, kode ini sangat sederhana dan akan membantu setiap anak mengembangkan pengetahuan mereka tentang vokal melalui permainan dengan Arduino.

Pada gambar di atas kotak suara sedang mengeksekusi lagu yang disimpan di SD Card Modul MP3 YX5300.

Langkah 12: Kesimpulan

Pendidikan kelas perlu diubah terus-menerus dan Arduino dapat menjadi sekutu yang hebat dalam menciptakan tugas-tugas yang menyenangkan.

Melalui proyek ini, dimungkinkan untuk mengembangkan kegiatan sederhana yang dapat mengembangkan keterampilan anak-anak melalui pengetahuan tentang bunyi dan ejaan setiap vokal.

Tidak seperti metode pengajaran tradisional, anak-anak akan belajar melalui kesenangan kelas melalui permainan dan elektronik.

Langkah 13: Pengakuan

Proyek ini dikembangkan berkat dukungan dan dorongan dari perusahaan JLCPCB. Mereka mendorong pendidikan dan mengundang kami untuk mengembangkan permainan vokal untuk mengajar anak-anak di kelas.

Jika Anda ingin membeli pelat elektronik Game of Vowels, Anda dapat mengakses tautan ini dan membeli 10 unit seharga $2 di JLCPCB.

Direkomendasikan: