İçindekiler:

Arduino ve YX5300 MP3 Modülü Catalex ile Ünlüler Oyunu: 13 Adım
Arduino ve YX5300 MP3 Modülü Catalex ile Ünlüler Oyunu: 13 Adım

Video: Arduino ve YX5300 MP3 Modülü Catalex ile Ünlüler Oyunu: 13 Adım

Video: Arduino ve YX5300 MP3 Modülü Catalex ile Ünlüler Oyunu: 13 Adım
Video: Arduino ile SD Kart Modülü Kullanımı 2024, Kasım
Anonim
Arduino ve YX5300 MP3 Modülü ile Sesli Harfler Oyunu Catalex
Arduino ve YX5300 MP3 Modülü ile Sesli Harfler Oyunu Catalex

Bu soruyu okuyabiliyor musun? Bu tuhaf! Bu soruyu bilerek sordum. Bu metni okuyabiliyorsanız, bunun nedeni tüm alfabeyi bilmeniz ve elbette tüm sesli harfleri öğrenmiş olmanızdır.

Sesli harfler tüm kelimelerde bulunur. Her birinden kaçmak imkansızdır. Şimdi size bir soru sorayım. Çocukluğunuz eğlenceliydi ve teknolojik kaynaklar içeriyor muydu?

Öğrenme kaynaklarının az olduğuna ve ünlüleri ve alfabeyi öğrenmek için geleneksel yöntemler kullandığına eminim.

Sonuçta, sesli harfleri öğrenmek için bazı teknolojik kaynakları kullanmak mümkün müdür?

Bu yazımda size bir oyun aracılığıyla öğrencilerinize ve çocuklarınıza sesli harfleri nasıl öğreteceğinizi öğreteceğim.

Çocuğunuzun/öğrencinizin harfin sesini duyacağı ve doğru harfi belirtmek için bir düğmeye basması gereken sesli bir sistem oluşturmayı öğreteceğim.

Böylece oynarken öğrenecekler ve çalışmaya her zaman motive olacaklar.

Şimdi size kendi oyununuzu yaratmanız ve çocuklara sesli harfleri öğretmeniz için adım adım süreci göstereceğim.

Gereçler

JLCPCB Baskılı Devre Kartı

Arduino Uno'su

Buton Anahtarı

10kR Direnç

Erkek Başlık 2, 54mm 1x7

Adım 1: Arduino ile Ünlüler Oyununu Geliştirmek

Arduino ile Ünlüler Oyunu Geliştirmek
Arduino ile Ünlüler Oyunu Geliştirmek

Oyunun kalbi Vowels'ın JLCPCB baskılı devre kartıdır. Bu bağlantıya erişebilir ve proje dosyalarını indirebilirsiniz. 5 düğmesi vardır. Bir sesli harfi temsil etmek ve onu Arduino'nuza bağlamak için her düğmeyi kullanacaksınız.

Baskılı devre kartı Şekil 1'de gösterilmiştir.

Adım 2:

resim
resim

Bu PCB Projesi ile Arduino'ya bağlayabilir ve oyununuzu oluşturabilirsiniz. Ardından, projeyi protoboardunuzda birleştirmeniz veya oluşturmanız için size elektronik bir şema sunacağım.

Aşama 3:

Bu şemadan elektronik kartın düzenini kurduk. Şekil 2'de gösterilmiştir ve dosyaları indirebilir ve projenizi yapabilirsiniz.

Arduino'dan 5 pin seçin ve kart üzerindeki jumperları Arduino'ya bağlayın. Veya aksi takdirde aşağıdaki elektronik diyagramı monte edebilirsiniz.

Adım 4: Proje Fikri

Proje Fikri
Proje Fikri

Arduino ile MP3 ses sistemi kurmayı öğreteceğim. Bu sistem, mektubu söyleyen sesin yeniden üretilmesinden sorumlu olacaktır. Her harfin sesi, 1'in A'yı ve 5'in U'yu temsil ettiği 1'den 5'e kadar bir değer kullanılarak çizilecektir.

Bu nedenle çocuk sesi duyduğunda klavyeye bakmalı, sesli harfin yazılışını tanımalı ve doğru tuşa basmalıdır.

Başarısız olursa, sistem Kırmızı LED'i 3 kez yanıp söner. Aksi takdirde, sistem 5 saniye boyunca sesli uyarıyı etkinleştirecek ve yeni bir sesli harf çizecektir.

Bunu yapmak için aşağıdaki devreyi monte etmelisiniz.

Bu devrede Arduino üzerindeki MP3 Modülü ile sesli harf kartını bağlayacaksınız. Bluetooth modülü, Catalex MP3 Modülünü temsil etmek için kullanıldı.

Arduino, 5 sayıyı sıralamaktan ve ardından çizilen sesli harfi etkinleştirmek için komutu göndermekten sorumlu olacaktır

Adım 5:

resim
resim

Bundan sonra, çocuk yukarıdaki Şekilde gösterildiği gibi bir düğmeyi duyup basana kadar bekleyeceğiz.

Yukarıdaki her düğme, alfabenin bir sesli harfini temsil eder. Ardından, bu proje için programlama mantığını nasıl oluşturacağınızı size göstereceğim.

Adım 6: Oyunun Programlama Mantığını Oluşturma

Oyunun Programlama Mantığını Oluşturma
Oyunun Programlama Mantığını Oluşturma

Ünlü oyun sistemi, YX5300 modülünün çalışmasına dayanmaktadır. Bu modülün bazı işlevleri vardır, ancak oyunun çalışma yapısını YX5300 modülünün ana işlevleri üzerinden sunmaya odaklanacağız.

Aşağıda size projenin tüm programlama mantığını sunuyorum.

7. Adım:

Aşağıda, çocuklar için bu eğlenceli oyunun mantığını oluşturmanın adım adım adımlarını anlatacağım.

#Dahil etmek

#define ARDUINO_RX 5 //Seri MP3 Çalar modülünün TX'ine bağlanmalı #define ARDUINO_TX 6 //Modülün RX'ine bağlanın SoftwareSerial mp3(ARDUINO_RX, ARDUINO_TX); static int8_t Send_buf[8] = {0}; // Gönder komutları için arabellek. // YEREL OLARAK DAHA İYİ statik uint8_t ansbuf[10] = {0}; // Cevaplar için arabellek. // YEREL OLARAK DAHA İYİ String mp3Answer; // MP3'ten cevap. String cevabı(void); Dize sbyte2hex(uint8_t b); /************ Komut baytı **************************/ #define CMD_NEXT_SONG 0X01 // Sonrakini oynat şarkı. #define CMD_PREV_SONG 0X02 // Önceki şarkıyı çal. #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_FOLDER_TOPFILE 0X0F'yi sürekli oynatmayı durdur. //define 0X0F #define CMD_FOLDER_CYCLE 0X17 #define CMD_SHUFFLE_PLAY 0x18 // #define CMD_SET_SNGL_CYCL 0X19 // Tek döngü ayarlayın. # 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 / ********* *** Opsiyonlar **************************/ #define DEV_TF 0X02 /************** ******************************************************* *****/ int sayı; bayt tahmini; bayt buzzer = 2; bayt pini = 0; bayt SortNumber = 0; bool düğmesi = 0; geçersiz kurulum() { Serial.begin(9600); mp3.begin(9600); gecikme(500); for(pin = 8; pin 13) { pin = 8; } Serial.println("Varrendo…"); Seri.println(pin); //gecikme(1000); }while(düğme != 1); Serial.println("Saiu…"); if(button == 1 && (pin-1) != SortNumber) { sendCommand(0x03, 0, 6); gecikme(3000); } if(button == 1 && (pin-1) == SortNumber) { sendCommand(0x03, 0, 7); gecikme(3000); } // Cevabı kontrol edin. if (mp3.available()) { Serial.println(decodeMP3Answer()); } gecikme(100); //Serial.println("Tocando musica…"); } /******************************************************* ***********************************/ /* sendMP3Command işlevi: bir 'c' komutu arayın ve MP3'e gönderin */ /*Parametre: c. MP3 Komutu kodu, yardım için 'h'. */ /*Dönüş: void */ void sendMP3Command(char c) { switch (c) { case '?': case 'h': Serial.println("HELP "); Serial.println(" p = Oynat"); Serial.println(" P = Duraklat"); Serial.println(" > = Sonraki"); Serial.println(" ': Serial.println("Sonraki"); sendCommand(CMD_NEXT_SONG); sendCommand(CMD_PLAYING_N); // ara verilen dosyanın sayısını sor; case ' Hafıza kartı takılı."; break; case 0x3D: decodingMP3Answer += " -> Tamamlanan oynatma num " + String(ansbuf[6], DEC); //sendCommand(CMD_NEXT_SONG); //sendCommand(CMD_PLAYING_N); // break çalmakta olan dosyanın sayısını sor; case 0x40: decodingMP3Answer += " -> Error"; break; case 0x41: decodingMP3Answer += " -> Veri doğru bir şekilde alındı. "; break; case 0x42: decodingMP3Answer += " -> Çalma durumu: " + String(ansbuf[6], DEC); break; case 0x48: decodingMP3Answer += " -> Dosya sayısı: " + String(ansbuf[6], DEC); break; case 0x4C: decodingMP3Answer += " -> Çalıyor: " + String(ansbuf[6], DEC); break; case 0x4E: decodingMP3Answer += " -> Klasör dosya sayısı: " + String(ansbuf[6], DEC); break; case 0x4F: decodingMP3Answer += " -> Klasör sayısı: " + String(ansbuf [6], DEC); ara; } kodu çözülmüş MP3Answer'ı döndür; } /**************************************** *************** ***********************************/ /*İşlev: MP3'e komut gönder */ /*Parametre: bayt komut */ /*Parametre: komut için bayt dat1 parametresi */ /*Parametre: komut için bayt dat2 parametresi */ void sendCommand(bayt komutu){ sendCommand(komut, 0, 0); } void sendCommand(bayt komutu, bayt tarih1, bayt tarih2){ gecikme(20); Send_buf[0] = 0x7E; // Send_buf[1] = 0xFF; // Send_buf[2] = 0x06; // Len Send_buf[3] = komut; // Send_buf[4] = 0x01; // 0x00 HAYIR, 0x01 geri bildirim Send_buf[5] = dat1; // veri Send_buf[6] = veri2; // veri Send_buf[7] = 0xEF; // Serial.print("Gönderiliyor: "); for (uint8_t i = 0; i < 8; i++) { mp3.write(Send_buf); Serial.print(sbyte2hex(Send_buf)); } Seri.println(); } /******************************************************* ***********************************/ /*İşlev: sbyte2hex. HEX biçiminde bir bayt verisi döndürür. */ /*Parametre:- uint8_t b. HEX'e dönüştürülecek bayt. */ /*Dönüş: String */ String sbyte2hex(uint8_t b) { String shex; shex = "0X"; if (b < 16) shex += "0"; shex += String(b, HEX); shex += " "; geri dönüş shex; } /******************************************************* ***********************************/ /*İşlev: shex2int. HEX dizesinden bir int döndürür. */ /*Parametre: s. char *s HEX'e dönüştürmek için. */ /*Parametre: n. char *s' uzunluğu. */ /*Dönüş: 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'yi döndür; } /******************************************************* ***********************************/ /*İşlev: cevap. mp3 UART modülünden bir String yanıtı döndürür. */ /*Parametre:- uint8_t b. geçersiz. */ /*Dönüş: Dize. Cevap iyi biçimlendirilmişse cevap. */ String sanswer(void) { uint8_t i = 0; Dize mp3cevap = ""; // Sadece 10 Bayt alırken (mp3.available() && (i < 10)) { uint8_t b = mp3.read(); cevap = b; ben++; mp3answer += sbyte2hex(b); } // cevap formatı doğruysa. if ((ansbuf[0] == 0x7E) && (ansbuf[9] == 0xEF)) { return mp3answer; } dönüş "???: " + mp3cevap; }

Öncelikle YX5300 modülünün tüm program değişkenlerini ve erişim kayıt adreslerini tanımlıyoruz.

#Dahil etmek

#define ARDUINO_RX 5 //Seri MP3 Çalar modülünün TX'ine bağlanmalı #define ARDUINO_TX 6 //SoftwareSerial mp3(ARDUINO_RX, ARDUINO_TX); static int8_t Send_buf[8] = {0}; // Gönder komutları için arabellek. // YEREL OLARAK DAHA İYİ statik uint8_t ansbuf[10] = {0}; // Cevaplar için arabellek. // YEREL OLARAK DAHA İYİ String mp3Answer; // MP3'ten cevap. String cevabı(void); Dize sbyte2hex(uint8_t b); /************ Komut baytı **************************/ #define CMD_NEXT_SONG 0X01 // Sonrakini oynat şarkı. #define CMD_PREV_SONG 0X02 // Önceki şarkıyı çal. #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_FOLDER_TOPFILE 0X0F oynamayı durdur #define CMD_FOLDER_CYCLE 0X17 #define CMD_SHUFFLE_PLAY 0x18 // #define CMD_SET_SNGL_CYCL 0X19 // Tek döngü ayarlayın. # 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 / ********* *** Opsiyonlar **************************/ #define DEV_TF 0X02 /************** ******************************************************* *****/ int sayı; bayt tahmini; bayt buzzer = 2; bayt pini = 0; bayt SortNumber = 0; bool düğmesi = 0;

Adım 8:

Bu kayıt adresleri, modülün çalışmasını yapılandırmak için kullanılır. Örneğin, aşağıdaki kayıt adresine bakın.

#define CMD_PLAY_W_INDEX 0X03

0x03 adresi CMD_PLAY_W_INDEX adıyla tanımlanır. Numarasından bir şarkıyı tetiklemek için kullanılır yani sesin numarasını girersiniz ve çalınacaktır.

Bu değerlerle onları kullanacağız ve projemizin işleyişini yapılandıracağız.

Kullanılacak çeşitli adresleri tanımladıktan sonra setup fonksiyonuna girip projemiz için pinleri ve seri iletişimi yapılandıracağız.

Adım 9: Void Setup() İşlevi

Ardından, geçersiz kurulum işlevine bakın. Buton pinlerinin tüm ayarlarını, MP3 modülünün seri iletişimini ve MP3'te kart modülünün başlatılmasını yaptım.

geçersiz kurulum()

{ Serial.başlangıç(9600); mp3.begin(9600); gecikme(500); for(pin = 8; pin < 13; pin++) { pinMode(pin, INPUT); } sendCommand(CMD_SEL_DEV, 0, DEV_TF); gecikme(500); }

Bilgisayarın seri numarasına veri yazdırmak için seri haberleşmeyi başlattım ve ardından mp3 nesnesi üzerinden seri haberleşmeye başladık.

Seri.başla(9600);

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

Mp3 modülü, Arduino serisi tarafından alınan komutlarla kontrol edilir. Bu süreçte SoftwareSerial kütüphanesini kullandık ve Arduino dijital pinleri üzerinde bir seri öykündük.

Böylece Arduino'yu kendisine gönderilen komutlar aracılığıyla MP3 modülünü kontrol etmek için kullanabileceksiniz.

Ayrıca dijital pinlerin konfigürasyonunu ve MP3 Card modülünün başlatılmasını yaptık.

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

Konfigürasyonu yaptıktan sonra void loop fonksiyonunda ana mantığa gitmeliyiz.

Adım 10: Ana İşlev Void Loop()

Kod çok basittir ve tüm mantıksal yapı aşağıda sunulmaktadır. Aşağıda size ana fonksiyonun tam mantığını anlatacağım.

boşluk döngüsü()

{ pin = 8; randomSeed(analogRead(A0)); sayı = rastgele(8, 12); SortNumber = sayı; sayı = sayı - 7; Seri.println(sayı); sendCommand(0x03, 0, sayı); gecikme(1000); do { düğme = digitalRead(pin); Serial.println(düğme); pin++; if(pin > 13) {pin = 8; } Serial.println("Varrendo…"); Seri.println(pin); //gecikme(1000); }while(düğme != 1); Serial.println("Saiu…"); if(button == 1 && (pin-1) != SortNumber) { sendCommand(0x03, 0, 6); gecikme(3000); } if(button == 1 && (pin-1) == SortNumber) { sendCommand(0x03, 0, 7); gecikme(3000); } // Cevabı kontrol edin. if (mp3.available()) { Serial.println(decodeMP3Answer()); } gecikme(100); //Serial.println("Tocando musica…"); }

Döngü işlevi döngüsünün her başlangıcında, bir sesli harfin sesini oluşturmak için 8 ile 12 arasında yeni bir değer üreteceğiz. 8'den 12'ye kadar olan değer, sesli harfin dijital pinini ifade eder.

Rastgele değer üretme kodu aşağıda gösterilmiştir.

pim = 8;

randomSeed(analogRead(A0)); sayı = rastgele(8, 12); SortNumber = sayı;

Ayrıca 8 ile 12 arasında çekilen miktardan 7 çıkarıyoruz. Bu, hafıza kartında kayıtlı şarkıların 1 ila 5'inin konumlarını göstermemizi sağlayacaktır.

sayı = sayı - 7;

Daha sonra aşağıdaki çizgiye çizilen sesli harfin sesini çoğalttım.

sendCommand(0x03, 0, sayı);

gecikme(1000);

Şimdi önemli zaman geldi: Çocuğun bastığı düğmeyi okuyacağımız an. Kod kısmı aşağıda sunulmaktadır.

yapmak

{ buton = digitalRead(pin); Serial.println(düğme); pin++; if(pin > 13) {pin = 8; } Serial.println("Varrendo…"); Seri.println(pin); //gecikme(1000); }while(düğme != 1);

Bu döngü, kullanıcı düğmelere basana kadar yürütülecektir. Döngü, 5 dijital pimi taramanıza izin verir ve çocuk düğmelerden birine bastığı anda döngüden çıkar ve çocuğun doğru yanıt verip vermediğini kontrol eder.

Aşağıdaki kodu kullanarak doğrulamayı yapacaksınız.

if(düğme == 1 && (pin-1) != SıralamaNumarası)

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

Kullanıcı bir butona basıldığında ve pinin tetiklenen değeri çizilen pinden (SortNumber) farklı olduğu için hata yaptığında ilk koşul uygulanacaktır.

Bu noktada aşağıdaki komutu uygulamalısınız.

sendCommand(0x03, 0, 6);

gecikme(3000);

Bu komut, yanlış yanıt tonunu tetiklemek için kullanılır. Son olarak, çocuğun haklı olup olmadığını kontrol etmek için kullanılacak ikinci koşulumuz var.

if(düğme == 1 && (pin-1) == SıralamaNumarası)

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

Adım 11:

resim
resim

Bir tuşa basılmışsa ve basılan dijital pin, çekilen pin ile aynı ise, sistem doğru cevap sesini tetikleyecektir.

Size açıkladığım gibi, bu kod çok basittir ve herhangi bir çocuğun Arduino ile bir oyun aracılığıyla sesli harf bilgilerini geliştirmesine yardımcı olacaktır.

Yukarıdaki şekilde ses kutusu MP3 Modülü YX5300'ün SD Kartında depolanan şarkıyı yürütmektedir.

Adım 12: Sonuç

Sınıf eğitiminin sürekli olarak değiştirilmesi gerekiyor ve Arduino eğlenceli görevler oluşturmada harika bir müttefik olabilir.

Bu proje sayesinde, her bir sesli harfin ses ve yazım bilgisi yoluyla çocukların becerilerini geliştirebilecek basit bir etkinlik geliştirmek mümkün oldu.

Geleneksel öğretim yöntemlerinden farklı olarak, çocuklar oyunlar ve elektronikler aracılığıyla sınıf eğlencesi yoluyla öğreneceklerdir.

Adım 13: Onay

Bu proje, JLCPCB şirketinin desteği ve teşviki sayesinde geliştirildi. Eğitimi teşvik ettiler ve bizi sınıfta çocuklara öğretmek için sesli harf oyunu geliştirmeye davet ettiler.

Game of Vowels'ın elektronik plakalarını satın almak isterseniz bu bağlantıya erişebilir ve JLCPCB'de 2 dolara 10 adet satın alabilirsiniz.

Önerilen: