Tartalomjegyzék:

Magánhangzók játék Arduino és YX5300 MP3 Catalex modullal: 13 lépés
Magánhangzók játék Arduino és YX5300 MP3 Catalex modullal: 13 lépés

Videó: Magánhangzók játék Arduino és YX5300 MP3 Catalex modullal: 13 lépés

Videó: Magánhangzók játék Arduino és YX5300 MP3 Catalex modullal: 13 lépés
Videó: S - Sz hangok - 1. játék 2024, December
Anonim
Magánhangzók játék Arduino és YX5300 MP3 Catalex modullal
Magánhangzók játék Arduino és YX5300 MP3 Catalex modullal

El tudja olvasni ezt a kérdést? Ez fura! Szándékosan tettem fel ezt a kérdést. Ha el tudja olvasni ezt a szöveget, az azért van, mert ismeri a teljes ábécét, és természetesen megtanult minden magánhangzót.

A magánhangzók minden szóban jelen vannak. Lehetetlen menekülni mindegyikük elől. Most hadd tegyek fel egy kérdést. A gyerekkori tanulás szórakoztató volt és technológiai erőforrásokkal járt?

Biztos vagyok benne, hogy a tanulási források kevések voltak, és hagyományos módszerekkel tanulta meg a magánhangzókat és az ábécét.

Végül is lehetséges -e valamilyen technológiai erőforrást használni a magánhangzók tanulására?

Ebben a cikkben megtanítlak arra, hogyan tanítsd tanulóidnak és gyermekeidnek a magánhangzókat egy játék segítségével.

Megtanítom, hogyan hozzon létre egy hangos rendszert, ahol gyermeke/tanítványa hallja a betű hangját, és meg kell nyomnia egy gombot a helyes betű jelzésére.

Így játék közben tanulnak, és mindig motiváltak lesznek a tanulásra.

Most megmutatom nektek a lépésről lépésre a saját játék létrehozásának folyamatát, és megtanítom a magánhangzókat a gyerekeknek.

Kellékek

JLCPCB nyomtatott áramkör

Arduino Uno

Nyomógombos kapcsoló

10kR ellenállás

Férfi fej 2, 54 mm 1x7

1. lépés: A magánhangzók játékának fejlesztése az Arduino segítségével

A magánhangzók játékának fejlesztése Arduino -val
A magánhangzók játékának fejlesztése Arduino -val

A játék szíve a magánhangzók JLCPCB nyomtatott áramköri lapja. Elérheti ezt a linket, és letöltheti a projektfájlokat. 5 gombja van. Minden gombot használni fog egy magánhangzó ábrázolásához, és az Arduino -hoz csatlakoztatja.

A nyomtatott áramköri lap az 1. ábrán látható.

2. lépés:

Kép
Kép

Ezzel a NYÁK -projekttel összekapcsolhatja az Arduino -val, és létrehozhatja játékát. Ezután kínálok Önnek egy elektronikus vázlatot, amellyel összeszerelheti vagy felépítheti a projektet a protoboardon.

3. lépés:

Ebből a vázlatból állítottuk be az elektronikus kártya elrendezését. A 2. ábrán látható, és letöltheti a fájlokat, és elkészítheti a projektet.

Válasszon 5 tűt az Arduino -ból, és csatlakoztassa a táblán lévő ugrókat az Arduino -hoz. Vagy különben összeállíthatja az alábbi elektronikus diagramot.

4. lépés: A projektötlet

A projekt ötlete
A projekt ötlete

Megtanítom, hogyan kell MP3 hangrendszert összeállítani Arduino segítségével. Ez a rendszer lesz felelős a betűt beszélő hang reprodukálásáért. Az egyes betűk hangját 1 -től 5 -ig kell rajzolni, ahol 1 A -t és 5 U -t jelent.

Így amikor a gyermek meghallja a hangot, meg kell néznie a billentyűzetet, fel kell ismernie a magánhangzó helyesírását, és meg kell nyomnia a megfelelő gombot.

Ha nem sikerül, a rendszer háromszor felvillan a piros LED -et. Ellenkező esetben a rendszer 5 másodpercre bekapcsol egy hangjelzőt, és új magánhangzót rajzol.

Ehhez össze kell állítania a következő áramkört.

Ebben az áramkörben összekapcsolja az MP3 modult és az Arduino magánhangzó tábláját. A Bluetooth modult a Catalex MP3 modul képviseletére használták.

Az Arduino feladata lesz az 5 szám rendezése, majd a parancs küldése a rajzolt magánhangzó aktiválásához

5. lépés:

Kép
Kép

Ezt követően megvárjuk, amíg a gyermek meghallja és megnyom egy gombot, amint az a fenti ábrán látható.

Minden fenti gomb az ábécé magánhangzóját jelöli. Ezután megmutatom, hogyan építi fel a programozási logikát ehhez a projekthez.

6. lépés: A játék programozási logikájának felépítése

A játék programozási logikájának felépítése
A játék programozási logikájának felépítése

A magánhangzó játékrendszer az YX5300 modul működésén alapul. Ennek a modulnak van néhány funkciója, azonban a játék működési struktúrájának bemutatására összpontosítunk az YX5300 modul fő funkcióin keresztül.

Az alábbiakban bemutatom a projekt összes programozási logikáját.

7. lépés:

A következőkben lépésről lépésre elmagyarázom ennek a szórakoztató, gyerekeknek szóló játéknak a logikáját.

#befoglalni

#define ARDUINO_RX 5 // csatlakozzon a soros MP3 lejátszó modul TX -jéhez #define ARDUINO_TX 6 // csatlakozzon a SoftwareSerial mp3 modul RX -hez (ARDUINO_RX, ARDUINO_TX); static int8_t Send_buf [8] = {0}; // Puffer küldési parancsokhoz. // LOCALY JOBB statikus uint8_t ansbuf [10] = {0}; // Puffer a válaszokhoz. // LOCALY JOBB String mp3Answer; // Válasz az MP3 -ból. String válasz (void); Karakterlánc sbyte2hex (uint8_t b); / ************ Parancsbájt *************************/ #define CMD_NEXT_SONG 0X01 // Lejátszás következő dal. #define CMD_PREV_SONG 0X02 // Az előző dal lejátszása. #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_FILE_FILE_FILE_FILE_FILE_FILE_FILE_FILE_FILE_FILE_FILE_FILE_FILE_FILE_FILE_FILE_FILE_FILE_FILE_FILE_FILE_FILE_FILE_FILE_FILE_FILE_FOLD_FILE_FILTER_FI #define CMD_FOLDER_CYCLE 0X17 #define CMD_SHUFFLE_PLAY 0x18 // #define CMD_SET_SNGL_CYCL 0X19 // Egy ciklus beállítása. #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 / ********* *** Opciók *************************** / #define DEV_TF 0X02 / ************** ************************************************** *****/ int numero; byte estado; bájtzümmögő = 2; byte pin = 0; byte SortNumber = 0; bool gomb = 0; void setup () {Serial.begin (9600); mp3. kezdet (9600); késleltetés (500); for (pin = 8; 13 pin) {pin = 8; } Serial.println ("Varrendo …"); Serial.println (pin); // delay (1000); } while (gomb! = 1); Serial.println ("Saiu…"); if (gomb == 1 && (pin-1)! = SortNumber) {sendCommand (0x03, 0, 6); késleltetés (3000); } if (gomb == 1 && (pin-1) == Rendezési szám) {sendCommand (0x03, 0, 7); késleltetés (3000); } // Ellenőrizze a választ. if (mp3.available ()) {Serial.println (decodeMP3Answer ()); } késleltetés (100); //Serial.println("Tocando musica … "); } /************************************************ ******************************** / /*SendMP3Command parancs: keressen egy "c" parancsot és küldje el MP3 -ra * / /*Paraméter: c. Az MP3 parancs kódja, „h” segítségért. *// *Vissza: void */ void sendMP3Command (char c) {switch (c) {case '?': Case 'h': Serial.println ("HELP"); Serial.println ("p = Lejátszás"); Serial.println ("P = Szünet"); Serial.println ("> = Következő"); Serial.println ("': Serial.println (" Következő "); sendCommand (CMD_NEXT_SONG); sendCommand (CMD_PLAYING_N); // kérdezze meg a lejátszott fájl számát szünet; tok" Memóriakártya behelyezve. "; Break; case 0x3D: decodedMP3Answer + = " -> Befejezett lejátszási szám" + String (ansbuf [6], DEC); // sendCommand (CMD_NEXT_SONG); // sendCommand (CMD_PLAYING_N); // kérdezze meg a lejátszott fájlok számát szünet; eset 0x40: decodedMP3Answer += " -> Hiba"; break; case 0x41: decodedMP3Answer += " -> Az adatok helyesen visszaállítva."; break; case 0x42: decodedMP3Answer += " -> Állapot lejátszása:" +String (ansbuf [6], DEC); break; case 0x48: decodedMP3Answer + = " -> Fájlok száma:" + String (ansbuf [6], DEC); break; case 0x4C: decodedMP3Answer + = " -> Lejátszás:" + String (ansbuf [6], DEC); break; case 0x4E: decodedMP3Answer + = " -> Mappafájlok száma:" + String (ansbuf [6], DEC); break; case 0x4F: decodedMP3Answer + = " -> Mappaszám:" + String (ansbuf [6], DEC); break;} return dekódolt MP3Válasz;} /********************************** ************ ********************************* / / Funkció: Parancs küldése az MP3 -ra* / /*Paraméter: bájt parancs *// *Paraméter: bájt dat1 paraméter a parancshoz *// *Paraméter: bájt dat2 paraméter a parancshoz */ void sendCommand (bájt parancs) {sendCommand (parancs, 0, 0); } void sendCommand (bájt parancs, bájt dat1, bájt dat2) {delay (20); Send_buf [0] = 0x7E; // Küldés_buf [1] = 0xFF; // Küldés_buf [2] = 0x06; // Len Send_buf [3] = parancs; // Küldés_buf [4] = 0x01; // 0x00 NEM, 0x01 visszajelzés Send_buf [5] = dat1; // datah Send_buf [6] = dat2; // datal Send_buf [7] = 0xEF; // Serial.print ("Küldés:"); for (uint8_t i = 0; i <8; i ++) {mp3.write (Send_buf ); Serial.print (sbyte2hex (Send_buf ))); } Sorozat.println (); } /************************************************ ******************************** / /*Funkció: sbyte2hex. Bájtadatokat ad vissza HEX formátumban. * / /*Paraméter:- uint8_t b. Bájt HEX formátumra konvertáláshoz. *// *Return: String */ String sbyte2hex (uint8_t b) {String shex; héj = "0X"; ha (b <16) hatszög += "0"; hatszög += Karakterlánc (b, HEX); hatszög += ""; visszatérő hatszög; } /************************************************ ******************************** / /*Funkció: shex2int. Intet ad vissza egy HEX karakterláncból. * / /*Paraméter: s. char *s HEX -re konvertálni. * / /*Paraméter: n. char *s hossza. *// *Vissza: int */ int shex2int (char *s, int n) {int r = 0; mert (int i = 0; i = '0' && s = 'A' && s <= 'F') {r *= 16; r + = (s - 'A') + 10; }} return r; } /************************************************ ******************************** / /*Funkció: válasz. String választ ad vissza az mp3 UART modulból. * / /*Paraméter:- uint8_t b. üres. * / /*Vissza: karakterlánc. Ha a válasz jól megfogalmazott válasz. */ String sanswer (void) {uint8_t i = 0; String mp3answer = ""; // Csak 10 bájt lekérése, miközben (mp3.available () && (i <10)) {uint8_t b = mp3.read (); ansbuf = b; i ++; mp3 válasz> +sbyte2hex (b); } // ha a válasz formátuma helyes. if ((ansbuf [0] == 0x7E) && (ansbuf [9] == 0xEF)) {return mp3answer; } return "???:" + mp3answer; }

Először definiáljuk az YX5300 modul összes programváltozóját és hozzáférési nyilvántartási címét.

#befoglalni

#define ARDUINO_RX 5 // csatlakozzon a soros MP3 lejátszó modul TX -jéhez #define ARDUINO_TX 6 // csatlakozzon a SoftwareSerial mp3 modul RX -hez (ARDUINO_RX, ARDUINO_TX); static int8_t Send_buf [8] = {0}; // Puffer küldési parancsokhoz. // LOCALY JOBB statikus uint8_t ansbuf [10] = {0}; // Puffer a válaszokhoz. // LOCALY JOBB String mp3Answer; // Válasz az MP3 -ból. String válasz (void); Karakterlánc sbyte2hex (uint8_t b); / ************ Parancsbájt *************************/ #define CMD_NEXT_SONG 0X01 // Lejátszás következő dal. #define CMD_PREV_SONG 0X02 // Az előző dal lejátszása. #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_FILE_FILE_FILE_FILE_FILE_FILE_FILE_FILE_FILE_FILE_FILE_FILE_FILE_FILE_FILE_FILE_FILE_FILE_FILE_FILE_FILE_FILE_FILE_FILE_FILE_FILE_FOLD_FILE_FILTER_FI #define CMD_FOLDER_CYCLE 0X17 #define CMD_SHUFFLE_PLAY 0x18 // #define CMD_SET_SNGL_CYCL 0X19 // Egy ciklus beállítása. #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 / ********* *** Opciók *************************** / #define DEV_TF 0X02 / ************** ************************************************** *****/ int numero; byte estado; bájtzümmögő = 2; byte pin = 0; byte SortNumber = 0; bool gomb = 0;

8. lépés:

Ezek a regisztercímek a modul működésének konfigurálására szolgálnak. Lásd például ezt a regisztrációs címet alább.

#define CMD_PLAY_W_INDEX 0X03

A 0x03 cím CMD_PLAY_W_INDEX névvel van definiálva. Arra szolgál, hogy egy számot a számából indítson el, azaz adja meg a hang számát, és lejátszásra kerül.

Ezekkel az értékekkel fogjuk használni és konfigurálni a projektünk működését.

Miután meghatározta a használni kívánt különböző címeket, belépünk a beállítási funkcióba, és konfiguráljuk a projektünkhöz tartozó csapokat és soros kommunikációt.

9. lépés: Az üresség beállítása () függvény

Ezután nézze meg az üresség beállítási funkciót. Elvégeztem a gombcsapok összes beállítását, az MP3 modul soros kommunikációját és a kártya modul inicializálását az MP3 -ban.

üres beállítás ()

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

Elindítottam a soros kommunikációt, hogy adatokat nyomtassak a számítógép sorosra, majd elkezdtük a soros kommunikációt az mp3 objektumon keresztül.

Sorozat.kezdet (9600);

mp3. kezdet (9600); késleltetés (500);

Az mp3 modult az Arduino sorozat által kapott parancsok vezérlik. Ebben a folyamatban a SoftwareSerial könyvtárat használtuk, és sorozatot emuláltunk az Arduino digitális tüskéin.

Így az Arduino segítségével vezérelheti az MP3 modult a hozzá küldött parancsok segítségével.

Ezenkívül elvégeztük a digitális tűk konfigurálását és az MP3 kártya modul inicializálását

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

A konfiguráció elvégzése után el kell mennünk a void loop funkció fő logikájához.

10. lépés: A fő funkció üres hurok ()

A kód nagyon egyszerű, és a teljes logikai felépítést az alábbiakban mutatjuk be. A következőkben elmagyarázom Önnek a fő funkció teljes logikáját.

üres hurok ()

{pin = 8; randomSeed (analogRead (A0)); numero = véletlenszerű (8, 12); Rendezési szám = szám; numero = numero - 7; Serial.println (numero); sendCommand (0x03, 0, numero); késleltetés (1000); do {gomb = digitalRead (pin); Serial.println (gomb); pin ++; if (pin> 13) {pin = 8; } Serial.println ("Varrendo …"); Serial.println (pin); // delay (1000); } while (gomb! = 1); Serial.println ("Saiu…"); if (gomb == 1 && (pin-1)! = SortNumber) {sendCommand (0x03, 0, 6); késleltetés (3000); } if (gomb == 1 && (pin-1) == Rendezési szám) {sendCommand (0x03, 0, 7); késleltetés (3000); } // Ellenőrizze a választ. if (mp3.available ()) {Serial.println (decodeMP3Answer ()); } késleltetés (100); //Serial.println("Tocando musica … "); }

A hurok funkcióciklus minden indításakor új értéket generálunk 8 és 12 között a magánhangzó hangjának létrehozásához. A 8 és 12 közötti érték a magánhangzó digitális tűjére vonatkozik.

A véletlen érték előállításának kódja az alábbiakban látható.

csap = 8;

randomSeed (analogRead (A0)); numero = véletlenszerű (8, 12); Rendezési szám = szám;

Ezenkívül levonunk 7 -et a 8 és 12 között húzott összegből. Ez lehetővé teszi számunkra, hogy rámutassunk a memóriakártyára rögzített dalok 1-5 pozíciójára.

numero = numero - 7;

Ezt követően reprodukáltam az alábbi vonalra rajzolt magánhangzó hangját.

sendCommand (0x03, 0, numero);

késleltetés (1000);

Most eljött a fontos idő: az a pillanat, amikor elolvassuk a gyermek által megnyomott gombot. Az alábbiakban bemutatjuk a kódrészletet.

tedd

{gomb = digitalRead (pin); Serial.println (gomb); pin ++; if (pin> 13) {pin = 8; } Serial.println ("Varrendo …"); Serial.println (pin); // delay (1000); } while (gomb! = 1);

Ez a ciklus addig fut, amíg a felhasználó le nem nyomja a gombokat. A hurok lehetővé teszi az 5 digitális tű beolvasását, és abban a pillanatban, amikor a gyermek megnyomja az egyik gombot, kilép a hurokból, és ellenőrzi, hogy a gyermek helyesen válaszolt -e.

Az ellenőrzést az alábbi kód használatával végezheti el.

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

{sendCommand (0x03, 0, 6); késleltetés (3000); } if (gomb == 1 && (pin-1) == Rendezési szám) {sendCommand (0x03, 0, 7); késleltetés (3000); }

Az első feltétel akkor kerül végrehajtásra, amikor a felhasználó hibát követ el, mert megnyomtak egy gombot, és a csap aktivált értéke eltér a húzott tűtől (SortNumber).

Ezen a ponton végre kell hajtania az alábbi parancsot.

sendCommand (0x03, 0, 6);

késleltetés (3000);

Ez a parancs a rossz válaszhang beindítására szolgál. Végül megvan a második feltétel, amellyel ellenőrizni fogjuk, hogy a gyermeknek igaza van -e.

if (gomb == 1 && (pin-1) == Rendezési szám)

{sendCommand (0x03, 0, 7); késleltetés (3000); }

11. lépés:

Kép
Kép

Ha megnyomott egy gombot, és a megnyomott digitális tű megegyezik a kihúzott tűvel, a rendszer helyes válasz hangot ad ki.

Ahogy elmagyarázom nektek, ez a kód nagyon egyszerű, és minden gyermeknek segíteni fog a magánhangzók ismereteinek fejlesztésében az Arduino játékkal.

A fenti ábrán a soundbox az YX5300 MP3 modul SD -kártyáján tárolt dalt hajtja végre.

12. lépés: Következtetés

Az osztálytermi oktatást folyamatosan változtatni kell, és az Arduino nagyszerű szövetséges lehet a szórakoztató feladatok létrehozásában.

Ennek a projektnek a segítségével olyan egyszerű tevékenységet lehetett kifejleszteni, amely az egyes magánhangzók hangjának és helyesírásának ismerete révén fejlesztheti a gyermekek készségeit.

A hagyományos tanítási módszerekkel ellentétben a gyerekek az osztálytermi szórakozáson keresztül tanulnak játékokon és elektronikán keresztül.

13. lépés: Nyugtázás

Ez a projekt a JLCPCB vállalat támogatásának és bátorításának köszönhetően jött létre. Bátorították az oktatást, és felkértek bennünket, hogy fejlesszük ki a magánhangzók játékát a gyermekek osztálytermi tanítására.

Ha meg szeretné vásárolni a magánhangzók játékának elektronikus tábláit, akkor kattintson erre a linkre, és vásároljon 10 egységet 2 dollárért a JLCPCB -n.

Ajánlott: