Съдържание:

Игра на гласни с Arduino и YX5300 MP3 модул Catalex: 13 стъпки
Игра на гласни с Arduino и YX5300 MP3 модул Catalex: 13 стъпки

Видео: Игра на гласни с Arduino и YX5300 MP3 модул Catalex: 13 стъпки

Видео: Игра на гласни с Arduino и YX5300 MP3 модул Catalex: 13 стъпки
Видео: Простой mp3-плеер Arduino 2024, Ноември
Anonim
Игра на гласни с Arduino и YX5300 MP3 модул Catalex
Игра на гласни с Arduino и YX5300 MP3 модул Catalex

Можете ли да прочетете този въпрос? Това е странно! Нарочно зададох този въпрос. Ако можете да прочетете този текст, това е така, защото знаете цялата азбука и, разбира се, сте научили за всички гласни.

Гласните присъстват във всички думи. Невъзможно е да избягате от всеки от тях. Сега да ви задам един въпрос. Дали обучението ви в детството беше забавно и включваше ли технологични ресурси?

Сигурен съм, че учебните ресурси са били малко и сте използвали традиционни методи, за да научите гласните и азбуката.

В края на краищата възможно ли е да се използват някои технологични ресурси за изучаване на гласни?

В тази статия ще ви науча как да учите вашите ученици и деца на гласни чрез игра.

Ще ви науча как да създадете система с глас, където вашето дете/ученик ще чуе звука на буквата и трябва да натисне бутон, за да посочи правилната буква.

Така те ще се учат, докато играят и винаги ще бъдат мотивирани да учат.

Сега ще ви покажа стъпка по стъпка процеса да създадете своя собствена игра и да научите гласните деца.

Консумативи

Печатна платка на JLCPCB

Arduino Uno

Превключвател с бутон

10kR резистор

Мъжка глава 2, 54 мм 1x7

Стъпка 1: Разработване на играта на гласни с Arduino

Разработване на играта на гласни с Arduino
Разработване на играта на гласни с Arduino

Сърцето на играта е печатната платка JLCPCB на гласните. Можете да получите достъп до тази връзка и да изтеглите файловете на проекта. Има 5 бутона. Ще използвате всеки бутон, за да представите гласна и да я свържете към вашия Arduino.

Печатната платка е показана на фигура 1.

Стъпка 2:

Образ
Образ

С този проект за печатни платки можете да го свържете с Arduino и да създадете своята игра. След това ще ви предложа електронна схема, за да сглобите или изградите проекта на вашата протоборд.

Стъпка 3:

От тази схема ние настройваме оформлението на електронната платка. Той е показан на фигура 2 и можете да изтеглите файловете и да направите своя проект.

Изберете 5 пина от Arduino и свържете джъмперите на дъската с Arduino. Или по друг начин можете да сглобите следната електронна диаграма.

Стъпка 4: Идеята за проекта

Идеята за проекта
Идеята за проекта

Ще ви науча как да сглобите MP3 звукова система с Arduino. Тази система ще отговаря за възпроизвеждането на гласа, изговарящ буквата. Звукът на всяка буква ще бъде изтеглен, като се използва стойност от 1 до 5, където 1 представлява A и 5 представлява U.

Така, когато детето чуе звука, то трябва да погледне клавиатурата, да разпознае правописа на гласната и да натисне правилния клавиш.

Ако не успее, системата ще мига червения светодиод 3 пъти. В противен случай системата ще активира зумер за 5 секунди и ще изтегли нова гласна.

За да направите това, трябва да сглобите следната схема.

В тази схема ще свържете MP3 модула и гласната платка на Arduino. Bluetooth модулът беше използван за представяне на MP3 модула Catalex.

Arduino ще отговаря за сортирането на 5 -те числа и след това ще изпрати командата за активиране на изтеглената гласна

Стъпка 5:

Образ
Образ

След това ще изчакаме, докато детето чуе и натисне бутон, както е показано на фигурата по -горе.

Всеки бутон по -горе представлява гласна от азбуката. След това ще ви покажа как ще изградите програмната логика за този проект.

Стъпка 6: Изграждане на логиката за програмиране на играта

Изграждане на логиката за програмиране на играта
Изграждане на логиката за програмиране на играта

Системата за гласни игри се основава на работата на модула YX5300. Този модул има някои функции, но ние ще се съсредоточим върху представянето на работната структура на играта чрез основните функции на модула YX5300.

По -долу ви представям цялата програмна логика на проекта.

Стъпка 7:

По -долу ще обясня стъпка по стъпка към изграждането на логиката на тази забавна игра за деца.

#включва

#define ARDUINO_RX 5 // трябва да се свърже с TX на модула Serial MP3 Player #define ARDUINO_TX 6 // да се свърже с RX на модула SoftwareSerial mp3 (ARDUINO_RX, ARDUINO_TX); статичен int8_t Send_buf [8] = {0}; // Буфер за команди за изпращане. // ПО -ДОБРО ЛОКАЛНО статично uint8_t ansbuf [10] = {0}; // Буфер за отговорите. // ПО -ДОБРО ЛОКАЛНО String mp3Answer; // Отговор от MP3. Струнен sanswer (невалиден); Низ sbyte2hex (uint8_t b); / ************ Команден байт **************************/ #define CMD_NEXT_SONG 0X01 // Пусни следващия песен. #define CMD_PREV_SONG 0X02 // Пуснете предишната песен. #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 // Възпроизвеждане на един цикъл. #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 CMP_PLAY #define CMD_FOLDER_CYCLE 0X17 #define CMD_SHUFFLE_PLAY 0x18 // #define CMD_SET_SNGL_CYCL 0X19 // Задаване на единичен цикъл. # определят CMD_SET_DAC 0X1A # определят DAC_ON 0x00 # определят DAC_OFF 0x01 # определят CMD_PLAY_W_VOL 0X22 # определят CMD_PLAYING_N 0x4C # определят CMD_QUERY_STATUS 0x42 # определят CMD_QUERY_VOLUME 0x43 # определят CMD_QUERY_FLDR_TRACKS 0x4e # определят CMD_QUERY_TOT_TRACKS 0x48 # определят CMD_QUERY_FLDR_COUNT 0x4f / ********* *** Opitons ************************** / #define DEV_TF 0X02 / ************** ************************************************** *****/ int numero; байт estado; байтов зумер = 2; байтов щифт = 0; байт SortNumber = 0; bool бутон = 0; void setup () {Serial.begin (9600); mp3.begin (9600); забавяне (500); for (pin = 8; pin 13) {pin = 8; } Serial.println ("Varrendo …"); Serial.println (щифт); // забавяне (1000); } while (бутон! = 1); Serial.println ("Saiu …"); if (button == 1 && (pin-1)! = SortNumber) {sendCommand (0x03, 0, 6); забавяне (3000); } if (button == 1 && (pin-1) == SortNumber) {sendCommand (0x03, 0, 7); забавяне (3000); } // Проверете за отговора. if (mp3.available ()) {Serial.println (decodeMP3Answer ()); } забавяне (100); //Serial.println("Tocando musica … "); } /************************************************ ******************************** / /*Функция sendMP3Command: потърсете команда 'c' и я изпратете в MP3 * / /*Параметър: c. Код за MP3 командата, 'h' за помощ. *// *Връщане: void */ void sendMP3Command (char c) {switch (c) {case '?': Case 'h': Serial.println ("HELP"); Serial.println ("p = Възпроизвеждане"); Serial.println ("P = Пауза"); Serial.println ("> = Следващ"); Serial.println ("': Serial.println (" Напред "); sendCommand (CMD_NEXT_SONG); sendCommand (CMD_PLAYING_N); // искане за броя на файловете, които се възпроизвеждат break; case' Карта с памет е поставена."; Break; регистър 0x3D: decodedMP3Answer + = " -> Завършен брой възпроизвеждане" + String (ansbuf [6], DEC); // sendCommand (CMD_NEXT_SONG); // sendCommand (CMD_PLAYING_N); // искане за броя на файловете, които се възпроизвеждат; регистър 0x40: decodedMP3Answer += " -> Грешка"; break; регистър 0x41: decodedMP3Answer += " -> Данните са получени правилно."; break; регистър 0x42: decodedMP3Answer += " -> Статус възпроизвежда:" +String (ansbuf [6], DEC); break; регистър 0x48: decodedMP3Answer + = " -> Брой файлове:" + String (ansbuf [6], DEC); break; case 0x4C: decodedMP3Answer + = " -> Възпроизвеждане:" + String (ansbuf [6], DEC); break; регистър 0x4E: декодиранMP3Answer + = " -> Брой файлове на папката:" + String (ansbuf [6], DEC); break; регистър 0x4F: декодиранMP3Answer + = " -> Брой папки:" + String (ansbuf [6], DEC); прекъсване;} връщане декодираноMP3Answer;} /*********************************** ************ ********************************* / /*Функция: Изпращане на команда до MP3* / /*Параметър: байт команда *// *Параметър: байт dat1 параметър за командата *// *Параметър: байт dat2 параметър за командата */ void sendCommand (байтова команда) {sendCommand (команда, 0, 0); } void sendCommand (байтова команда, байт dat1, байт dat2) {забавяне (20); Send_buf [0] = 0x7E; // Send_buf [1] = 0xFF; // Send_buf [2] = 0x06; // Len Send_buf [3] = команда; // Send_buf [4] = 0x01; // 0x00 НЕ, 0x01 обратна връзка Send_buf [5] = dat1; // datah Send_buf [6] = dat2; // датален Send_buf [7] = 0xEF; // Serial.print ("Изпращане:"); for (uint8_t i = 0; i <8; i ++) {mp3.write (Send_buf ); Serial.print (sbyte2hex (Send_buf )); } Serial.println (); } /************************************************ ******************************** / /*Функция: sbyte2hex. Връща байтови данни във формат HEX. * / /*Параметър:- uint8_t b. Байт за преобразуване в HEX. *// *Връщане: String */ String sbyte2hex (uint8_t b) {String shex; shex = "0X"; ако (b <16) shex += "0"; шекс += низ (b, HEX); shex += ""; обратен шекс; } /************************************************ ******************************** / /*Функция: shex2int. Връща int от HEX низ. * / /*Параметър: s. char *s за преобразуване в HEX. * / /*Параметър: n. дължина на char *s. *// *Връщане: 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; } /************************************************ ******************************** / /*Функция: sanswer. Връща низов отговор от mp3 UART модул. * / /*Параметър:- uint8_t b. невалиден. * / /*Връщане: Низ. Ако отговорът е добре оформен отговор. */ Низов отговор (void) {uint8_t i = 0; Низ mp3answer = ""; // Вземете само 10 байта while (mp3.available () && (i <10)) {uint8_t b = mp3.read (); ansbuf = b; i ++; mp3answer += sbyte2hex (b); } // ако форматът на отговора е правилен. if ((ansbuf [0] == 0x7E) && (ansbuf [9] == 0xEF)) {връщане mp3answer; } връщане "???:" + mp3answer; }

Първо, дефинираме всички програмни променливи и адресите на регистъра за достъп на модула YX5300.

#включва

#define ARDUINO_RX 5 // трябва да се свърже с TX на модула Serial MP3 Player #define ARDUINO_TX 6 // да се свърже с RX на модула SoftwareSerial mp3 (ARDUINO_RX, ARDUINO_TX); статичен int8_t Send_buf [8] = {0}; // Буфер за команди за изпращане. // ПО -ДОБРО ЛОКАЛНО статично uint8_t ansbuf [10] = {0}; // Буфер за отговорите. // ПО -ДОБРО ЛОКАЛНО String mp3Answer; // Отговор от MP3. Струнен sanswer (невалиден); Низ sbyte2hex (uint8_t b); / ************ Команден байт **************************/ #define CMD_NEXT_SONG 0X01 // Пусни следващия песен. #define CMD_PREV_SONG 0X02 // Пуснете предишната песен. #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 // Възпроизвеждане на един цикъл. #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 CMP_PLAY #define CMD_FOLDER_CYCLE 0X17 #define CMD_SHUFFLE_PLAY 0x18 // #define CMD_SET_SNGL_CYCL 0X19 // Задаване на единичен цикъл. # определят CMD_SET_DAC 0X1A # определят DAC_ON 0x00 # определят DAC_OFF 0x01 # определят CMD_PLAY_W_VOL 0X22 # определят CMD_PLAYING_N 0x4C # определят CMD_QUERY_STATUS 0x42 # определят CMD_QUERY_VOLUME 0x43 # определят CMD_QUERY_FLDR_TRACKS 0x4e # определят CMD_QUERY_TOT_TRACKS 0x48 # определят CMD_QUERY_FLDR_COUNT 0x4f / ********* *** Opitons ************************** / #define DEV_TF 0X02 / ************** ************************************************** *****/ int numero; байт estado; байтов зумер = 2; байтов щифт = 0; байт SortNumber = 0; bool бутон = 0;

Стъпка 8:

Тези регистърни адреси се използват за конфигуриране на работата на модула. Например вижте този адрес за регистрация по -долу.

#дефинирайте CMD_PLAY_W_INDEX 0X03

Адрес 0x03 е дефиниран с името CMD_PLAY_W_INDEX. Използва се за задействане на песен от нейния номер, тоест въвеждате номера на звука и той ще бъде възпроизведен.

С тези стойности ще ги използваме и ще конфигурираме функционирането на нашия проект.

След като сте определили различните адреси, които ще се използват, ще влезем във функцията за настройка и ще конфигурираме пиновете и серийната комуникация за нашия проект.

Стъпка 9: Функцията за настройка на празнотата ()

След това вижте функцията за настройка на празнотата. Направих всички настройки на щифтовете на бутоните, серийната комуникация на MP3 модула и инициализацията на модула на картата в MP3.

void setup ()

{Serial.begin (9600); mp3.begin (9600); забавяне (500); for (pin = 8; pin <13; pin ++) {pinMode (pin, INPUT); } sendCommand (CMD_SEL_DEV, 0, DEV_TF); забавяне (500); }

Започнах серийната комуникация, за да отпечатвам данни от серийната на компютъра и след това започнахме серийната комуникация чрез mp3 обекта.

Serial.begin (9600);

mp3.begin (9600); забавяне (500);

MP3 модулът се управлява чрез команди, получени от сериала на Arduino. В този процес използвахме библиотеката SoftwareSerial и емулирахме сериал на цифровите щифтове на Arduino.

По този начин ще можете да използвате Arduino за управление на MP3 модула чрез команди, изпратени до него.

Освен това направихме конфигурацията на цифровите пинове и инициализацията на модула MP3 карта

for (pin = 8; pin <13; pin ++) {pinMode (pin, INPUT); } sendCommand (CMD_SEL_DEV, 0, DEV_TF); забавяне (500);

След като направим конфигурацията, трябва да преминем към основната логика във функцията void loop.

Стъпка 10: Основната функция Void Loop ()

Кодът е много прост и цялата логическа структура е представена по -долу. По -долу ще ви обясня пълната логика на основната функция.

void loop ()

{pin = 8; randomSeed (analogRead (A0)); число = случайно (8, 12); SortNumber = число; numero = numero - 7; Serial.println (число); sendCommand (0x03, 0, numero); забавяне (1000); do {button = digitalRead (pin); Serial.println (бутон); щифт ++; if (pin> 13) {pin = 8; } Serial.println ("Varrendo …"); Serial.println (щифт); // забавяне (1000); } while (бутон! = 1); Serial.println ("Saiu …"); if (button == 1 && (pin-1)! = SortNumber) {sendCommand (0x03, 0, 6); забавяне (3000); } if (button == 1 && (pin-1) == SortNumber) {sendCommand (0x03, 0, 7); забавяне (3000); } // Проверете за отговора. if (mp3.available ()) {Serial.println (decodeMP3Answer ()); } забавяне (100); //Serial.println("Tocando musica … "); }

При всяко стартиране на цикъла на цикъла, ние ще генерираме нова стойност между 8 и 12, за да генерираме звука на гласна. Стойността от 8 до 12 се отнася до цифровия щифт на гласната.

Кодът за генериране на случайна стойност е показан по -долу.

щифт = 8;

randomSeed (analogRead (A0)); число = случайно (8, 12); SortNumber = число;

Освен това изваждаме 7 от сумата, изтеглена между 8 и 12. Това ще ни позволи да посочим позициите на 1 до 5 от песните, записани на картата с памет.

numero = numero - 7;

След това възпроизведох звука на гласната, нарисувана на долната линия.

sendCommand (0x03, 0, numero);

забавяне (1000);

Сега дойде важното време: моментът, в който ще прочетем натиснатия от детето бутон. Кодовата част е представена по -долу.

направете

{button = digitalRead (pin); Serial.println (бутон); щифт ++; if (pin> 13) {pin = 8; } Serial.println ("Varrendo …"); Serial.println (щифт); // забавяне (1000); } while (бутон! = 1);

Този цикъл ще се изпълнява, докато потребителят не натисне бутоните. Цикълът ви позволява да сканирате 5 -те цифрови пина и в момента, в който детето натисне един от бутоните, то ще излезе от цикъла и ще провери дали детето е отговорило правилно.

Ще извършите проверката, като използвате кода по -долу.

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

{sendCommand (0x03, 0, 6); забавяне (3000); } if (button == 1 && (pin-1) == SortNumber) {sendCommand (0x03, 0, 7); забавяне (3000); }

Първото условие ще бъде изпълнено, когато потребителят направи грешка, защото е натиснат бутон и задействаната стойност на щифта е различна от изтегления щифт (SortNumber).

В този момент трябва да изпълните командата по -долу.

sendCommand (0x03, 0, 6);

забавяне (3000);

Тази команда се използва за задействане на грешен тон на отговор. И накрая, имаме второто условие, което ще се използва за проверка дали детето е правилно.

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

{sendCommand (0x03, 0, 7); забавяне (3000); }

Стъпка 11:

Образ
Образ

Ако е натиснат бутон и цифровият щифт, който е натиснат, е същият като изтегления щифт, системата ще задейства звука на правилния отговор.

Както ви обяснявам, този код е много прост и ще помогне на всяко дете да развие познанията си за гласните чрез игра с Arduino.

На фигурата по -горе звуковата кутия изпълнява песента, съхранена в SD картата на MP3 модула YX5300.

Стъпка 12: Заключение

Образованието в класната стая трябва да се променя постоянно и Arduino може да бъде чудесен съюзник при създаването на забавни задачи.

Чрез този проект беше възможно да се разработи проста дейност, която може да развие уменията на децата чрез познаване на звука и правописа на всяка гласна.

За разлика от традиционните методи на преподаване, децата ще се учат чрез забавление в класната стая чрез игри и електроника.

Стъпка 13: Потвърждение

Този проект е разработен благодарение на подкрепата и насърчението на компанията JLCPCB. Те насърчиха образованието и ни поканиха да развием играта на гласни за преподаване на деца в класната стая.

Ако искате да закупите електронните табели на Играта на гласните, можете да получите достъп до тази връзка и да закупите 10 единици за $ 2 в JLCPCB.

Препоръчано: