Мазмуну:

Үндүү оюн Arduino жана YX5300 MP3 модулу Catalex менен: 13 кадам
Үндүү оюн Arduino жана YX5300 MP3 модулу Catalex менен: 13 кадам

Video: Үндүү оюн Arduino жана YX5300 MP3 модулу Catalex менен: 13 кадам

Video: Үндүү оюн Arduino жана YX5300 MP3 модулу Catalex менен: 13 кадам
Video: Викторина сабак. Информатика. 8-класс. Сарыбаева Т. 2024, Ноябрь
Anonim
Үндүү оюн Arduino жана YX5300 MP3 Module Catalex менен
Үндүү оюн Arduino жана YX5300 MP3 Module Catalex менен

Бул суроону окуй аласызбы? Бул кызык! Мен бул суроону атайылап койгом. Эгер сиз бул текстти окуй алсаңыз, анда алфавитти толук билгениңиз жана албетте, бардык үндүүлөр жөнүндө билгениңиз үчүн.

Үндүүлөр бардык сөздөрдө бар. Алардын ар биринен качып кутулуу мүмкүн эмес. Эми мен сизге бир суроо берейин. Сиздин бала кезиңиз кызыктуу жана технологиялык ресурстар менен өттүбү?

Мен ишенем, окуу ресурстары аз болчу жана сиз үндүү жана алфавитти үйрөнүү үчүн салттуу ыкмаларды колдондуңуз.

Анткени, үндүү үндөрдү үйрөнүү үчүн кээ бир технологиялык ресурстарды колдонуу мүмкүнбү?

Бул макалада мен сизге оюн аркылуу студенттериңизге жана балдарыңызга үндүү үндөрдү үйрөтүүнү үйрөтөм.

Мен сизге үнү бар системаны кантип түзүүнү үйрөтөм, анда сиздин бала/окуучу каттын үнүн угат жана туура тамганы көрсөтүү үчүн баскычты басуу керек.

Ошентип, алар ойноп жатып үйрөнүшөт жана ар дайым окууга түрткү алышат.

Эми, мен сизге этап-этабы менен процессти көрсөтүп, өз оюңузду түзүп, үндүү үндөрдү балдарга үйрөтөм.

Жабдуулар

JLCPCB Басылган райондук

Arduino Uno

Баскыч баскычы

10kR каршылыгы

Эркек Башы 2, 54мм 1х7

1 -кадам: Arduino менен үндүүлөр оюнун иштеп чыгуу

Ардуино менен үндүүлөр оюнун иштеп чыгуу
Ардуино менен үндүүлөр оюнун иштеп чыгуу

Оюндун жүрөгү - үндүүлөрдүн JLCPCB басма схемасы. Бул шилтемеге кирип, долбоордун файлдарын жүктөп алсаңыз болот. Анын 5 баскычы бар. Сиз ар бир баскычты үнсүздү билдирүү үчүн колдонуп, аны Arduino менен туташтырасыз.

Басылган схема 1 -сүрөттө көрсөтүлгөн.

2-кадам:

Сүрөт
Сүрөт

Бул PCB долбоору менен сиз аны Arduino менен туташтырып, оюнуңузду түзө аласыз. Андан кийин, мен сизге электрондук схеманы сунуштайм, анда сиз өзүңүздүн пробаңызга долбоорду чогултуңуз же куруңуз.

3 -кадам:

Бул схемадан биз электрондук тактанын макетин түздүк. Бул 2 -сүрөттө көрсөтүлгөн жана сиз файлдарды жүктөп алып, долбооруңузду жасай аласыз.

Ардуинодон 5 төөнөгүчтү тандап, борттогу секиргичтерди Arduino менен туташтырыңыз. Же болбосо, сиз төмөнкү электрондук диаграмманы чогулта аласыз.

4 -кадам: Долбоордун идеясы

Долбоордун идеясы
Долбоордун идеясы

Мен сизге MP3 үн системасын Arduino менен кантип чогултууну үйрөтөм. Бул система катты сүйлөгөн үндү кайра чыгаруу үчүн жооптуу болот. Ар бир тамганын үнү 1ден 5ке чейин колдонулат, мында 1 А жана 5 У.

Ошентип, бала үндү укканда, клавиатураны карап, үндүү жазууну таанып, туура баскычты басышы керек.

Эгер ал ишке ашпай калса, система кызыл LEDди 3 жолу күйгүзөт. Болбосо, система 5 секундга сигналды иштетип, жаңы үндү чыгарат.

Бул үчүн төмөнкү схеманы чогултуу керек.

Бул схемада сиз MP3 модулун жана Arduinoдогу үндүү тактаны туташтырасыз. Bluetooth модулу Catalex MP3 модулун көрсөтүү үчүн колдонулган.

Arduino 5 санын сорттоп, анан тартылган үндү активдештирүү үчүн буйрукту жөнөтүү үчүн жооптуу болот

5 -кадам:

Сүрөт
Сүрөт

Андан кийин, бала угуп, баскычты басканга чейин күтөбүз, жогоруда сүрөттө көрсөтүлгөндөй.

Ар бир баскыч алфавиттин үндүү үнүн билдирет. Андан кийин, мен сизге бул долбоордун программалоо логикасын кантип кураарыңызды көрсөтөм.

6 -кадам: Оюндун программалоо логикасын куруу

Оюндун программалоо логикасын куруу
Оюндун программалоо логикасын куруу

Үндүү оюн системасы YX5300 модулунун ишине негизделген. Бул модулдун кээ бир функциялары бар, бирок биз YX5300 модулунун негизги функциялары аркылуу оюндун иштөө структурасын көрсөтүүгө басым жасайбыз.

Төмөндө мен сизге долбоордун бардык программалоо логикасын сунуштайм.

7 -кадам:

Төмөндө мен балдар үчүн бул кызыктуу оюндун логикасын куруу үчүн этап -этабы менен түшүндүрөм.

#кошуу

#define ARDUINO_RX 5 // Serial MP3 Player модулунун TX туташуусу керек #define ARDUINO_TX 6 // ModX RXке туташуу SoftwareSerial mp3 (ARDUINO_RX, ARDUINO_TX); static int8_t Send_buf [8] = {0}; // Жөнөтүү командалары үчүн буфер. // БАШКЫ ЖЕРДЕ статикалык uint8_t ansbuf [10] = {0}; // Жооптор үчүн буфер. // ЖАКШЫ ЖЕРДЕ String mp3Answer; // MP3тен жооп. String sanswer (жараксыз); String sbyte2hex (uint8_t b); / ************ Командалык байт ************************/ #define CMD_NEXT_SONG 0X01 // Кийинкиде ойнотуу ыр. #аныктоо CMD_PREV_SONG 0X02 // Мурунку ырды ойнотуу. #аныктоо CMD_PLAY_W_INDEX 0X03 #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 0X0FFEF_FEFFE_FEF #define CMD_FOLDER_CYCLE 0X17 #CMD_SHUFFLE_PLAY 0x18 аныктоо // #CMD_SET_SNGL_CYCL 0X19 аныктоо // Бир циклди коюу. #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 / ********* *** Opitons ************************** / #define DEV_TF 0X02 / ************** ************************************************ *****/ int numero; байт estado; байт сигнализациясы = 2; байт пин = 0; байт SortNumber = 0; bool баскычы = 0; void setup () {Serial.begin (9600); mp3.begin (9600); кечигүү (500); үчүн (пин = 8; пин 13) {пин = 8; } Serial.println ("Varrendo…"); Serial.println (пин); // кечиктирүү (1000); } while (баскыч! = 1); Serial.println ("Сайу…"); 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'. *// *Return: void */ void sendMP3Command (char c) {switch (c) {case '?': Case 'h': Serial.println ("HELP"); Serial.println ("p = Play"); Serial.println ("P = Пауза"); Serial.println ("> = Кийинки"); Serial.println ("': Serial.println (" Кийинки "); sendCommand (CMD_NEXT_SONG); sendCommand (CMD_PLAYING_N); // файлдын санын сурап тыныгуу ойноп жатат;" Эстутум картасы салынган. "; Тыныгуу; 0x3D иши: decodedMP3Answer + = " -> Толтурулган ойнотуу саны" + Сап (ansbuf [6], DEC); // sendCommand (CMD_NEXT_SONG); // sendCommand (CMD_PLAYING_N); // файлдын санын сурап тыныгуу; 0x40 иши: decodedMP3Answer += " -> Error"; break; case 0x41: decodedMP3Answer += " -> Маалымат туура кабыл алынды."; break; case 0x42: decodedMP3Answer += " -> Статус ойнотуу:" +Стринг (ansbuf [6], DEC); break; case 0x48: decodedMP3Answer + = " -> Файлдын саны:" + String (ansbuf [6], DEC); break; case 0x4C: decodedMP3Answer + = " -> Ойнотуу:" + Стринг (ansbuf [6], DEC); break; case 0x4E: decodedMP3Answer + = " -> Папка файлдарынын саны:" + String (ansbuf [6], DEC); break; case 0x4F: decodedMP3Answer + = " -> Папкалардын саны:" + Сап (ansbuf [6], DEC); break;} decodedMP3Answer кайтаруу;} /********************************* ************ ******************************* / /*Функция: MP3га буйрук жөнөтүү* / /*Параметр: байт команда *// *Параметр: команда үчүн байт dat1 параметр *// *Параметр: *byoid dat2 командасы */ void sendCommand (байт буйругу) {sendCommand (команда, 0, 0); } void sendCommand (байт буйругу, байт дат1, байт дат2) {кечиктирүү (20); Send_buf [0] = 0x7E; // Send_buf [1] = 0xFF; // Send_buf [2] = 0x06; // Len Send_buf [3] = буйрук; // Send_buf [4] = 0x01; // 0x00 NO, 0x01 feedback Send_buf [5] = dat1; // datah Send_buf [6] = dat2; // datal 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ке айландыруу үчүн байт. *// *Return: String */ String sbyte2hex (uint8_t b) {String shex; shex = "0X"; if (b <16) shex += "0"; shex += сап (b, HEX); shex += ""; кайтаруу шекс; } /********************************************** ******************************** / /*Функциясы: shex2int. HEX сабынан int кайтарат. * / /*Параметр: с. char *с HEXке айландыруу. * / /*Параметр: п. 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; } /********************************************** ******************************** / /*Функциясы: жооп. Mp3 UART модулунан String жооп кайтарат. * / /*Параметр:- uint8_t b. жараксыз * / /*Return: String. Эгерде жооп жакшы түзүлгөн болсо. */ String sanswer (жараксыз) {uint8_t i = 0; String mp3answer = ""; // (mp3.available () && (i <10)) {uint8_t b = mp3.read (); ansbuf = b; i ++; mp3answer += sbyte2hex (b); } // эгерде жооптун форматы туура болсо. if ((ansbuf [0] == 0x7E) && (ansbuf [9] == 0xEF)) {return mp3answer; } return "???:" + mp3answer; }

Биринчиден, биз программанын бардык өзгөрмөлөрүн жана YX5300 модулунун кирүү реестринин даректерин аныктайбыз.

#кошуу

#define ARDUINO_RX 5 // Serial MP3 Player модулунун TX туташуусу керек #define ARDUINO_TX 6 // ModX RXке туташуу SoftwareSerial mp3 (ARDUINO_RX, ARDUINO_TX); static int8_t Send_buf [8] = {0}; // Жөнөтүү командалары үчүн буфер. // БАШКЫ ЖЕРДЕ статикалык uint8_t ansbuf [10] = {0}; // Жооптор үчүн буфер. // ЖАКШЫ ЖЕРДЕ String mp3Answer; // MP3тен жооп. String sanswer (жараксыз); String sbyte2hex (uint8_t b); / ************ Командалык байт ************************/ #define CMD_NEXT_SONG 0X01 // Кийинкиде ойнотуу ыр. #аныктоо CMD_PREV_SONG 0X02 // Мурунку ырды ойнотуу. #аныктоо CMD_PLAY_W_INDEX 0X03 #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 0X0FFEF_FEFFE_FEF #define CMD_FOLDER_CYCLE 0X17 #CMD_SHUFFLE_PLAY 0x18 аныктоо // #CMD_SET_SNGL_CYCL 0X19 аныктоо // Бир циклди коюу. #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 / ********* *** 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 -кадам: Void Setup () функциясы

Андан кийин, боштукту орнотуу функциясын караңыз. Мен баскычтын казыктарынын бардык параметрлерин, MP3 модулунун сериялык байланышын жана MP3деги карта модулун инициализациялоону жасадым.

жараксыз орнотуу ()

{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 ()

Код абдан жөнөкөй жана бүт логикалык түзүлүш төмөндө көрсөтүлгөн. Төмөндө мен сизге негизги функциянын толук логикасын түшүндүрөм.

боштук цикл ()

{пин = 8; randomSeed (analogRead (A0)); numero = туш келди (8, 12); SortNumber = numero; numero = numero - 7; Serial.println (numero); 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 ("Сайу…"); 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)); numero = туш келди (8, 12); SortNumber = numero;

Мындан тышкары, биз 8ден 12ге чейинки суммадан 7ди алып салабыз. Бул эс тутум картасына жазылган ырлардын 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 -кадам:

Сүрөт
Сүрөт

Эгерде баскыч басылса жана басылган санарип пин кадалган пин менен бирдей болсо, система туура жооп үнүн чыгарат.

Мен сизге түшүндүрүп жаткандай, бул код абдан жөнөкөй жана ар бир балага Ардуино менен болгон оюн аркылуу үндүүлөр жөнүндө билимин өнүктүрүүгө жардам берет.

Жогорудагы сүрөттө YX5300 MP3 модулунун SD картасында сакталган ыр аткарылып жатат.

12 -кадам: Жыйынтык

Класстык билим дайыма өзгөрүп турушу керек жана Arduino кызыктуу тапшырмаларды түзүүдө эң чоң союздаш боло алат.

Бул долбоор аркылуу ар бир үндүү тыбыштын үнү жана жазылышы боюнча билим аркылуу балдардын жөндөмдүүлүгүн өнүктүрө турган жөнөкөй иш -аракетти иштеп чыгуу мүмкүн болду.

Окутуунун салттуу ыкмаларынан айырмаланып, балдар оюндар жана электроника аркылуу класстагы кызыктуу нерселерди үйрөнүшөт.

13 -кадам: Ыраазычылык

Бул долбоор JLCPCB компаниясынын колдоосу жана дем -күчүнүн аркасында иштелип чыккан. Алар билим алууга үндөшүп, бизди класста балдарды окутуу үчүн үндүүлөрдүн оюнун өнүктүрүүгө чакырышты.

Эгерде сиз үндүү оюндун электрондук плиталарын сатып алууну кааласаңыз, бул шилтемеге кирип, JLCPCBден $ 2 үчүн 10 бирдик сатып алсаңыз болот.

Сунушталууда: