Spisu treści:

Gra samogłosek z modułem Arduino i YX5300 MP3 Catalex: 13 kroków
Gra samogłosek z modułem Arduino i YX5300 MP3 Catalex: 13 kroków

Wideo: Gra samogłosek z modułem Arduino i YX5300 MP3 Catalex: 13 kroków

Wideo: Gra samogłosek z modułem Arduino i YX5300 MP3 Catalex: 13 kroków
Wideo: Just Choose the Best arduino Starter Kit- the Best Arduino Starter Kit 2024, Lipiec
Anonim
Gra samogłosek z modułem Arduino i YX5300 MP3 Catalex
Gra samogłosek z modułem Arduino i YX5300 MP3 Catalex

Czy jesteś w stanie przeczytać to pytanie? To jest dziwne! Celowo zadałem to pytanie. Jeśli potrafisz przeczytać ten tekst, to dlatego, że znasz cały alfabet i oczywiście znasz wszystkie samogłoski.

Samogłoski są obecne we wszystkich słowach. Od każdego z nich nie da się uciec. Teraz pozwól, że zadam ci pytanie. Czy nauka w dzieciństwie była zabawna i wymagała zaangażowania zasobów technologicznych?

Jestem pewien, że zasobów edukacyjnych było niewiele, a do nauki samogłosek i alfabetu używałeś tradycyjnych metod.

W końcu czy można wykorzystać jakieś zasoby technologiczne do nauki samogłosek?

W tym artykule nauczę Cię, jak uczyć swoich uczniów i dzieci samogłosek poprzez grę.

Nauczę Cię, jak stworzyć system głosowy, w którym Twoje dziecko/uczeń usłyszy dźwięk litery i będzie musiał nacisnąć przycisk, aby wskazać właściwą literę.

Dzięki temu będą się uczyć podczas zabawy i zawsze będą zmotywowani do nauki.

Teraz pokażę ci krok po kroku proces tworzenia własnej gry i uczenia samogłosek dzieci.

Kieszonkowe dzieci

Płytka drukowana JLCPCB

Arduino Uno

Wciśnij przycisk przełącznika

Rezystor 10kR

Głowica męska 2, 54mm 1x7

Krok 1: Tworzenie gry samogłosek za pomocą Arduino

Rozwijanie gry samogłosek za pomocą Arduino
Rozwijanie gry samogłosek za pomocą Arduino

Sercem gry jest płytka drukowana samogłosek JLCPCB. Możesz uzyskać dostęp do tego linku i pobrać pliki projektu. Posiada 5 przycisków. Użyjesz każdego przycisku do reprezentowania samogłoski i połączenia go z Arduino.

Płytka drukowana jest pokazana na rysunku 1.

Krok 2:

Obraz
Obraz

Dzięki temu projektowi PCB możesz połączyć go z Arduino i stworzyć swoją grę. Następnie zaoferuję ci schemat elektroniczny do złożenia lub zbudowania projektu na płycie prototypowej.

Krok 3:

Na podstawie tego schematu ustalamy układ płytki elektronicznej. Jest to pokazane na rysunku 2 i możesz pobrać pliki i stworzyć swój projekt.

Wybierz 5 pinów z Arduino i połącz zworki na płytce z Arduino. Lub w inny sposób możesz złożyć następujący schemat elektroniczny.

Krok 4: Pomysł na projekt

Pomysł na projekt
Pomysł na projekt

Nauczę Cię jak zmontować system dźwiękowy MP3 z Arduino. System ten będzie odpowiedzialny za odtworzenie głosu wypowiadającego literę. Dźwięk każdej litery zostanie narysowany przy użyciu wartości od 1 do 5, gdzie 1 reprezentuje A, a 5 reprezentuje U.

Tak więc, gdy dziecko usłyszy dźwięk, musi spojrzeć na klawiaturę, rozpoznać pisownię samogłoski i nacisnąć odpowiedni klawisz.

Jeśli to się nie powiedzie, system zamiga czerwoną diodą 3 razy. W przeciwnym razie system aktywuje brzęczyk na 5 sekund i rysuje nową samogłoskę.

Aby to zrobić, musisz złożyć następujący obwód.

W tym obwodzie połączysz moduł MP3 i tablicę samogłosek na Arduino. Moduł Bluetooth został użyty do reprezentowania modułu Catalex MP3.

Arduino będzie odpowiedzialne za posortowanie 5 liczb, a następnie wysłanie polecenia aktywacji narysowanej samogłoski

Krok 5:

Obraz
Obraz

Następnie poczekamy, aż dziecko usłyszy i naciśnie przycisk, jak pokazano na powyższym rysunku.

Każdy przycisk powyżej reprezentuje samogłoskę alfabetu. Następnie pokażę Ci, jak zbudujesz logikę programowania dla tego projektu.

Krok 6: Budowanie logiki programowania gry

Budowanie logiki programowania gry
Budowanie logiki programowania gry

System gier samogłoskowych oparty jest na działaniu modułu YX5300. Moduł ten posiada kilka funkcji, jednak skupimy się na przedstawieniu struktury działania gry poprzez główne funkcje modułu YX5300.

Poniżej przedstawiam całą logikę programowania projektu.

Krok 7:

Poniżej wyjaśnię krok po kroku, jak budować logikę tej zabawnej gry dla dzieci.

#włączać

#define ARDUINO_RX 5 //powinien połączyć się z TX modułu szeregowego odtwarzacza MP3 #define ARDUINO_TX 6 //podłączyć do RX modułu SoftwareSerial mp3(ARDUINO_RX, ARDUINO_TX); statyczny int8_t Send_buf[8] = {0}; // Bufor dla poleceń wysyłania. // LEPIEJ LOKALNIE static uint8_t ansbuf[10] = {0}; // Bufor na odpowiedzi. // LEPIEJ LOKALNIE String mp3Answer; // Odpowiedz z MP3. Odpowiedź ciągu (unieważniona); Ciąg sbyte2hex(uint8_t b); /************* Bajt polecenia **************************/ #define CMD_NEXT_SONG 0X01 // Odtwórz następny utwór muzyczny. #define CMD_PREV_SONG 0X02 // Odtwórz poprzedni utwór. #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 // Odtwarzanie w jednym cyklu. #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_ #define CMPLAY 0XDX0F #define CMD_FOLDER_CYCLE 0X17 #define CMD_SHUFFLE_PLAY 0x18 // #define CMD_SET_SNGL_CYCL 0X19 // Ustaw pojedynczy cykl. #define CMD_SET_DAC 0x1a #define DAC_ON #define DAC_OFF 0x00 0x01 0x22 #define CMD_PLAY_W_VOL #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 / ********* *** Opcje **************************/ #define DEV_TF 0X02 /*************** ************************************************** *****/ wewn. liczba; stan bajtowy; brzęczyk bajtów = 2; pin bajtu = 0; bajt SortNumber = 0; przycisk logiczny = 0; void setup() { Serial.begin(9600); mp3.początek(9600); opóźnienie (500); for(pin = 8; pin 13) { pin = 8; } Serial.println("Warrendo…"); Serial.println(pin); //opóźnienie(1000); }gdy(przycisk != 1); Serial.println("Saiu…"); if(przycisk == 1 && (pin-1) != SortNumber) { sendCommand(0x03, 0, 6); opóźnienie(3000); } if(przycisk == 1 && (pin-1) == SortNumber) { sendCommand(0x03, 0, 7); opóźnienie(3000); } // Sprawdź odpowiedź. if (mp3.available()) { Serial.println(decodeMP3Answer()); } opóźnienie(100); //Serial.println("Tocando musica…"); } /************************************************** ********************************/ /*Funkcja sendMP3Command: wyszukaj polecenie 'c' i wyślij je do MP3 */ /*Parametr: ok. Kod do polecenia MP3, 'h' dla pomocy. */ /*Return: void */ void sendMP3Command(char c) { switch (c) { case '?': case 'h': Serial.println("HELP"); Serial.println("p = Odtwórz"); Serial.println("P = Pauza"); Serial.println("> = Dalej"); Serial.println(" ': Serial.println("Next"); sendCommand(CMD_NEXT_SONG); sendCommand(CMD_PLAYING_N); // zapytaj o numer odtwarzanego pliku break; case ' Karta pamięci włożona."; break; case 0x3D: decodedMP3Answer += " -> Completed play num " + String(ansbuf[6], DEC); //sendCommand(CMD_NEXT_SONG); //sendCommand(CMD_PLAYING_N); // zapytaj o numer odtwarzanego pliku, przerwa; wielkość liter 0x40: decodedMP3Answer += " -> Error"; break; case 0x41: decodedMP3Answer += " -> Dane odebrane poprawnie. "; break; case 0x42: decodedMP3Answer += " -> Status odtwarzania: " + String(ansbuf[6], DEC); break; case 0x48: decodedMP3Answer += " -> Liczba plików: " + String(ansbuf[6], DEC); break; case 0x4C: decodedMP3Answer += " -> Odtwarzanie: " + String(ansbuf[6], DEC); break; case 0x4E: decodedMP3Answer += " -> Liczba plików folderów: " + String(ansbuf[6], DEC); break; case 0x4F: decodedMP3Answer += " -> Liczba folderów: " + String(ansbuf [6], DEC); przerwa; } return decodedMP3Answer; } /*********************************** ************ *********************************/ /*Funkcja: Wyślij polecenie do MP3 */ /*Parametr: bajt polecenie */ /*Parametr: bajt dat1 parametr polecenia */ /*Parametr: bajt dat2 parametr polecenia */ void sendCommand(byte polecenie){ sendCommand(polecenie, 0, 0); } void sendCommand(bajt polecenia, bajt dat1, bajt dat2){ delay(20); Wyślij_buf[0] = 0x7E; // Wyślij_buf[1] = 0xFF; // Wyślij_buf[2] = 0x06; // Len Send_buf[3] = polecenie; // Wyślij_buf[4] = 0x01; // 0x00 NIE, 0x01 sprzężenie zwrotne Send_buf[5] = dat1; // datah Send_buf[6] = data2; // datal Send_buf[7] = 0xEF; // Serial.print("Wysyłanie: "); for (uint8_t i = 0; i < 8; i++) { mp3.write(Send_buf); Serial.print(sbyte2hex(Send_buf)); } Serial.println(); } /************************************************** ********************************/ /*Funkcja: sbyte2hex. Zwraca dane bajtowe w formacie HEX. */ /*Parametr:- uint8_t b. Bajt do konwersji na HEX. */ /*Return: String */ String sbyte2hex(uint8_t b) { String shex; szesnast = "0X"; jeśli (b < 16) szesnastkę += "0"; szesnastkowy += Ciąg(b, szesnastkowy); szesnastkowy += " "; zwróć szesnastkę; } /************************************************** ********************************/ /*Funkcja: shex2int. Zwraca int z ciągu HEX. */ /*Parametr: s. char *s do konwersji na HEX. */ /*Parametr: n. długość znaku *s. */ /*Zwrot: 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; } } return r; } /************************************************** ********************************/ /*Funkcja: odpowiedź. Zwraca ciąg odpowiedzi z modułu mp3 UART. */ /*Parametr:- uint8_t b. próżnia. */ /*Zwrot: Ciąg. Jeśli odpowiedź jest dobrze sformatowana odpowiedź. */ String sanswer(void) { uint8_t i = 0; Ciąg mp3answer = ""; // Pobierz tylko 10 bajtów while (mp3.available() && (i < 10)) { uint8_t b = mp3.read(); ansbuf = b; i++; mp3odpowiedź += sbyte2hex(b); } // czy format odpowiedzi jest poprawny. if ((ansbuf[0] == 0x7E) && (ansbuf[9] == 0xEF)) { return mp3answer; } return "???: " + mp3answer; }

Najpierw definiujemy wszystkie zmienne programu i adresy rejestrów dostępu modułu YX5300.

#włączać

#define ARDUINO_RX 5 //powinien połączyć się z TX modułu szeregowego odtwarzacza MP3 #define ARDUINO_TX 6 //podłączyć do RX modułu SoftwareSerial mp3(ARDUINO_RX, ARDUINO_TX); statyczny int8_t Send_buf[8] = {0}; // Bufor dla poleceń wysyłania. // LEPIEJ LOKALNIE static uint8_t ansbuf[10] = {0}; // Bufor na odpowiedzi. // LEPIEJ LOKALNIE String mp3Answer; // Odpowiedz z MP3. Odpowiedź ciągu (unieważniona); Ciąg sbyte2hex(uint8_t b); /************* Bajt polecenia **************************/ #define CMD_NEXT_SONG 0X01 // Odtwórz następny utwór muzyczny. #define CMD_PREV_SONG 0X02 // Odtwórz poprzedni utwór. #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 // Odtwarzanie w jednym cyklu. #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_ #define CMPLAY 0XDX0F #define CMD_FOLDER_CYCLE 0X17 #define CMD_SHUFFLE_PLAY 0x18 // #define CMD_SET_SNGL_CYCL 0X19 // Ustaw pojedynczy cykl. #define CMD_SET_DAC 0x1a #define DAC_ON #define DAC_OFF 0x00 0x01 0x22 #define CMD_PLAY_W_VOL #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 / ********* *** Opcje **************************/ #define DEV_TF 0X02 /*************** ************************************************** *****/ wewn. liczba; stan bajtowy; brzęczyk bajtów = 2; pin bajtu = 0; bajt SortNumber = 0; przycisk logiczny = 0;

Krok 8:

Te adresy rejestrów służą do konfiguracji działania modułu. Na przykład zobacz ten adres rejestracyjny poniżej.

#define CMD_PLAY_W_INDEX 0X03

Adres 0x03 jest zdefiniowany pod nazwą CMD_PLAY_W_INDEX. Służy do wyzwalania utworu z jego numeru, to znaczy, że wpisujesz numer dźwięku i zostanie on odtworzony.

To właśnie z tymi wartościami będziemy je wykorzystywać i konfigurować funkcjonowanie naszego projektu.

Po zdefiniowaniu różnych adresów, które będą używane, przejdziemy do funkcji konfiguracji i skonfigurujemy piny i komunikację szeregową dla naszego projektu.

Krok 9: Funkcja Void Setup()

Następnie zobacz funkcję void setup. Zrobiłem wszystkie ustawienia pinów przycisków, komunikację szeregową modułu MP3 oraz inicjalizację modułu karty w MP3.

pusta konfiguracja()

{ Szeregowy.początek(9600); mp3.początek(9600); opóźnienie (500); for(pin = 8; pin < 13; pin++) { pinMode(pin, INPUT); } sendCommand(CMD_SEL_DEV, 0, DEV_TF); opóźnienie (500); }

Rozpocząłem komunikację szeregową, aby wydrukować dane na szeregowym komputerze, a następnie rozpoczęliśmy komunikację szeregową przez obiekt mp3.

Serial.początek(9600);

mp3.początek(9600); opóźnienie (500);

Moduł mp3 jest sterowany za pomocą poleceń odbieranych przez port szeregowy Arduino. W tym procesie wykorzystaliśmy bibliotekę SoftwareSerial i emulowaliśmy port szeregowy na pinach cyfrowych Arduino.

Dzięki temu będziesz mógł używać Arduino do sterowania modułem MP3 za pomocą wysyłanych do niego poleceń.

Dodatkowo wykonaliśmy konfigurację pinów cyfrowych oraz inicjalizację modułu karty MP3

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

Po dokonaniu konfiguracji musimy przejść do głównej logiki w funkcji void loop.

Krok 10: Główna funkcja Void Loop()

Kod jest bardzo prosty, a całą strukturę logiczną prezentujemy poniżej. Poniżej wyjaśnię pełną logikę głównej funkcji.

pusta pętla()

{ szpilka = 8; randomSeed(analogRead(A0)); numero = losowo(8, 12); Numer Sortowania = liczba; numer = numer - 7; Serial.println(numer); sendCommand(0x03, 0, numer); opóźnienie (1000); zrobić { przycisk = digitalRead(pin); Serial.println(przycisk); szpilka++; if(pin > 13) { pin = 8; } Serial.println("Varrendo…"); Serial.println(pin); //opóźnienie(1000); }gdy(przycisk != 1); Serial.println("Saiu…"); if(przycisk == 1 && (pin-1) != SortNumber) { sendCommand(0x03, 0, 6); opóźnienie(3000); } if(przycisk == 1 && (pin-1) == SortNumber) { sendCommand(0x03, 0, 7); opóźnienie(3000); } // Sprawdź odpowiedź. if (mp3.available()) { Serial.println(decodeMP3Answer()); } opóźnienie(100); //Serial.println("Tocando musica…"); }

Na każdym początku cyklu funkcji pętli wygenerujemy nową wartość od 8 do 12, aby wygenerować dźwięk samogłoski. Wartość od 8 do 12 odnosi się do cyfrowego pinu samogłoski.

Poniżej przedstawiono kod do generowania wartości losowej.

szpilka = 8;

randomSeed(analogRead(A0)); numero = losowo(8, 12); Numer Sortowania = liczba;

Dodatkowo od wylosowanej liczby od 8 do 12 odejmujemy 7. To pozwoli nam wskazać pozycje od 1 do 5 utworów zapisanych na karcie pamięci.

numer = numer - 7;

Następnie odtworzyłem dźwięk samogłoski narysowanej w linii poniżej.

sendCommand(0x03, 0, numer);

opóźnienie (1000);

Teraz nadszedł ważny czas: moment, w którym będziemy czytać przycisk wciśnięty przez dziecko. Poniżej przedstawiono fragment kodu.

robić

{ przycisk = digitalRead(pin); Serial.println(przycisk); szpilka++; if(pin > 13) { pin = 8; } Serial.println("Warrendo…"); Serial.println(pin); //opóźnienie(1000); }gdy(przycisk != 1);

Ta pętla będzie wykonywana, dopóki użytkownik nie naciśnie przycisków. Pętla pozwala zeskanować 5 cyfrowych pinów i w momencie naciśnięcia przez dziecko jednego z przycisków, wyjdzie z pętli i sprawdzi, czy dziecko zareagowało poprawnie.

Weryfikację wykonasz za pomocą poniższego kodu.

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

{ sendCommand (0x03, 0, 6); opóźnienie(3000); } if(przycisk == 1 && (pin-1) == SortNumber) { sendCommand(0x03, 0, 7); opóźnienie(3000); }

Pierwszy warunek zostanie spełniony, gdy użytkownik popełni błąd, ponieważ przycisk został naciśnięty, a wyzwolona wartość pinu była inna niż wylosowana pin (SortNumber).

W tym momencie musisz wykonać poniższe polecenie.

sendCommand(0x03, 0, 6);

opóźnienie(3000);

To polecenie służy do wyzwalania nieprawidłowego sygnału dźwiękowego. Na koniec mamy drugi warunek, który posłuży do sprawdzenia, czy dziecko ma rację.

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

{ sendCommand (0x03, 0, 7); opóźnienie(3000); }

Krok 11:

Obraz
Obraz

Jeśli przycisk został naciśnięty, a cyfrowa szpilka, która została naciśnięta, jest taka sama jak wylosowana szpilka, system uruchomi prawidłowy dźwięk odpowiedzi.

Jak wyjaśniam, ten kod jest bardzo prosty i pomoże każdemu dziecku rozwinąć swoją wiedzę na temat samogłosek poprzez grę z Arduino.

Na powyższym rysunku soundbox wykonuje utwór zapisany na karcie SD modułu MP3 YX5300.

Krok 12: Wniosek

Edukacja w klasie musi być stale zmieniana, a Arduino może być świetnym sprzymierzeńcem w tworzeniu zabawnych zadań.

Dzięki temu projektowi udało się opracować prostą czynność, która może rozwijać umiejętności dzieci poprzez znajomość dźwięku i pisowni każdej samogłoski.

W przeciwieństwie do tradycyjnych metod nauczania, dzieci będą uczyć się poprzez zabawę w klasie poprzez gry i elektronikę.

Krok 13: Potwierdzenie

Ten projekt powstał dzięki wsparciu i zachęty firmy JLCPCB. Zachęcili edukację i zaprosili nas do rozwijania gry samogłosek do nauczania dzieci w klasie.

Jeśli chcesz kupić płytki elektroniczne Game of Vowels, możesz uzyskać dostęp do tego linku i kupić 10 jednostek za 2 USD w JLCPCB.

Zalecana: