Índice:

Jogo de vogais com Arduino e módulo YX5300 MP3 Catalex: 13 etapas
Jogo de vogais com Arduino e módulo YX5300 MP3 Catalex: 13 etapas

Vídeo: Jogo de vogais com Arduino e módulo YX5300 MP3 Catalex: 13 etapas

Vídeo: Jogo de vogais com Arduino e módulo YX5300 MP3 Catalex: 13 etapas
Vídeo: Como Fazer o Arduino Falar ? 2024, Novembro
Anonim
Jogo de vogais com Arduino e módulo YX5300 MP3 Catalex
Jogo de vogais com Arduino e módulo YX5300 MP3 Catalex

Você consegue ler esta pergunta? Isso é estranho! Eu fiz essa pergunta de propósito. Se você consegue ler este texto, é porque conhece todo o alfabeto e, claro, aprendeu todas as vogais.

As vogais estão presentes em todas as palavras. É impossível escapar de cada um deles. Agora deixa eu te fazer uma pergunta. O aprendizado de sua infância foi divertido e envolveu recursos tecnológicos?

Tenho certeza que os recursos de aprendizagem foram poucos e você usou métodos tradicionais para aprender as vogais e o alfabeto.

Afinal, é possível usar alguns recursos tecnológicos para aprender vogais?

Neste artigo, vou ensiná-lo a ensinar vogais a seus alunos e filhos por meio de um jogo.

Vou te ensinar como criar um sistema com voz, onde seu filho / aluno ouvirá o som da letra e deverá apertar um botão para indicar a letra correta.

Assim, aprenderão brincando e estarão sempre motivados para estudar.

Agora, vou mostrar o processo passo a passo para você criar seu próprio jogo e ensinar as vogais para as crianças.

Suprimentos

Placa de circuito impresso JLCPCB

Arduino Uno

Pressionar no interruptor

Resistor 10kR

Cabeçalho masculino 2, 54 mm 1x7

Etapa 1: desenvolvendo o jogo de vogais com o Arduino

Desenvolvendo o jogo de vogais com o Arduino
Desenvolvendo o jogo de vogais com o Arduino

O coração do jogo é a placa de circuito impresso JLCPCB dos Vowels. Você pode acessar este link e baixar os arquivos do projeto. Possui 5 botões. Você usará cada botão para representar uma vogal e conectá-la ao seu Arduino.

A placa de circuito impresso é mostrada na Figura 1.

Passo 2:

Imagem
Imagem

Com este projeto de PCB, você pode conectá-lo ao Arduino e criar seu jogo. A seguir, vou oferecer um esquema eletrônico para você montar ou construir o projeto em seu protoboard.

Etapa 3:

A partir desse esquema, montamos o layout da placa eletrônica. É mostrado na Figura 2 e você pode baixar os arquivos e fazer seu projeto.

Escolha 5 pinos do Arduino e conecte os jumpers da placa com o Arduino. Ou então, você pode montar o seguinte diagrama eletrônico.

Etapa 4: A ideia do projeto

A ideia do projeto
A ideia do projeto

Vou te ensinar como montar um sistema de som MP3 com o Arduino. Este sistema será responsável por reproduzir a voz falando a letra. O som de cada letra será desenhado usando um valor de 1 a 5, onde 1 representa A e 5 representa U.

Assim, ao ouvir o som, a criança deve olhar para o teclado, reconhecer a grafia da vogal e pressionar a tecla correta.

Se falhar, o sistema piscará o LED vermelho 3 vezes. Caso contrário, o sistema ativará uma campainha por 5 segundos e desenhará uma nova vogal.

Para fazer isso, você deve montar o seguinte circuito.

Neste circuito, você conectará o Módulo MP3 e a placa vogal no Arduino. O módulo Bluetooth foi usado para representar o Módulo Catalex MP3.

O Arduino será responsável por ordenar os 5 números e então enviar o comando para ativar a vogal desenhada

Etapa 5:

Imagem
Imagem

Depois disso, vamos esperar até que a criança ouça e aperte um botão, conforme mostrado na figura acima.

Cada botão acima representa uma vogal do alfabeto. A seguir, mostrarei como você construirá a lógica de programação para este projeto.

Etapa 6: Construindo a Lógica de Programação do Jogo

Construindo a Lógica de Programação do Jogo
Construindo a Lógica de Programação do Jogo

O sistema de jogo de vogais é baseado na operação do módulo YX5300. Este módulo possui algumas funções, no entanto, iremos nos concentrar em apresentar a estrutura de trabalho do jogo através das principais funções do módulo YX5300.

Abaixo estou fornecendo a vocês toda a lógica de programação do projeto.

Etapa 7:

A seguir, explicarei o passo a passo para construir a lógica desse divertido jogo para crianças.

#incluir

#define ARDUINO_RX 5 // deve conectar ao TX do módulo Serial MP3 Player #define ARDUINO_TX 6 // conectar ao RX do módulo SoftwareSerial mp3 (ARDUINO_RX, ARDUINO_TX); estático int8_t Send_buf [8] = {0}; // Buffer para enviar comandos. // MELHOR LOCALMENTE static uint8_t ansbuf [10] = {0}; // Buffer para as respostas. // MELHOR LOCALMENTE String mp3Answer; // Resposta do MP3. String sanswer (void); String sbyte2hex (uint8_t b); / ************ Byte de comando *************************** / #define CMD_NEXT_SONG 0X01 // Play next música. #define CMD_PREV_SONG 0X02 // Toca a música anterior. #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 // Reprodução de ciclo único. #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_WAKE_UP 0X0B #define CMD_RESET 0X0C #define CMD_PLAY 0X0D #define CMD_PAUSE 0X0E #define CMD_PLAY_PLAY_FOLDER_FOLDER_16. #define CMD_FOLDER_CYCLE 0X17 #define CMD_SHUFFLE_PLAY 0x18 // #define CMD_SET_SNGL_CYCL 0X19 // Define um ciclo simples. #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 0x43 #define CMD_QUERY_VOLUME #define CMD_QUERY_FLDR_TRACKS 0x4E #define CMD_QUERY_TOT_TRACKS 0x48 #define CMD_QUERY_FLDR_COUNT 0x4F / ********* *** Opções *************************** / #define DEV_TF 0X02 / ************** ************************************************** ***** / int numero; byte estado; buzzer byte = 2; pino de byte = 0; byte SortNumber = 0; botão bool = 0; void setup () {Serial.begin (9600); mp3.begin (9600); atraso (500); para (pino = 8; pino 13) {pino = 8; } Serial.println ("Varrendo…"); Serial.println (pin); // delay (1000); } enquanto (botão! = 1); Serial.println ("Saiu…"); if (botão == 1 && (pin-1)! = SortNumber) {sendCommand (0x03, 0, 6); atraso (3000); } if (botão == 1 && (pin-1) == SortNumber) {sendCommand (0x03, 0, 7); atraso (3000); } // Verifique a resposta. if (mp3.available ()) {Serial.println (decodeMP3Answer ()); } atraso (100); //Serial.println("Tocando musica… "); } / ************************************************ ********************************** / / * Função sendMP3Command: buscar um comando 'c' e enviá-lo para MP3 * / / * Parâmetro: c. Código para o comando MP3, 'h' para obter ajuda. * / / * Return: void * / void sendMP3Command (char c) {switch (c) {case '?': Case 'h': Serial.println ("HELP"); Serial.println ("p = Reproduzir"); Serial.println ("P = Pausa"); Serial.println ("> = Próximo"); Serial.println ("': Serial.println (" Next "); sendCommand (CMD_NEXT_SONG); sendCommand (CMD_PLAYING_N); // pedir o número do arquivo que está sendo reproduzido break; case' Cartão de memória inserido."; Break; case 0x3D: decodedMP3Answer + = "-> Número de reprodução concluído" + String (ansbuf [6], DEC); // sendCommand (CMD_NEXT_SONG); // sendCommand (CMD_PLAYING_N); // pedir o número do arquivo que está sendo reproduzido; case 0x40: decodedMP3Answer + = "-> Erro"; break; case 0x41: decodedMP3Answer + = "-> Dados recebidos corretamente."; break; case 0x42: decodedMP3Answer + = "-> Status em reprodução:" + String (ansbuf [6], DEC); break; case 0x48: decodedMP3Answer + = "-> Contagem de arquivos:" + String (ansbuf [6], DEC); break; case 0x4C: decodedMP3Answer + = "-> Reproduzindo:" + String (ansbuf [6], DEC); break; case 0x4E: decodedMP3Answer + = "-> Contagem de arquivos de pasta:" + String (ansbuf [6], DEC); break; case 0x4F: decodedMP3Answer + = "-> Contagem de pastas:" + String (ansbuf [6], DEC); break;} return decodedMP3Answer;} / ************************************ ************ ********************************** / / * Função: Enviar comando para o MP3 * / / * Parâmetro: byte comando * / / * Parâmetro: parâmetro byte dat1 para o comando * / / * Parâmetro: parâmetro byte dat2 para o comando * / void sendCommand (byte command) {sendCommand (command, 0, 0); } void sendCommand (comando de byte, byte dat1, byte dat2) {delay (20); Send_buf [0] = 0x7E; // Send_buf [1] = 0xFF; // Send_buf [2] = 0x06; // Len Send_buf [3] = command; // Send_buf [4] = 0x01; // 0x00 NÃO, 0x01 feedback Send_buf [5] = dat1; // datah Send_buf [6] = dat2; // datal Send_buf [7] = 0xEF; // Serial.print ("Enviando:"); para (uint8_t i = 0; i <8; i ++) {mp3.write (Send_buf ); Serial.print (sbyte2hex (Send_buf )); } Serial.println (); } / ************************************************ ********************************** / / * Função: sbyte2hex. Retorna dados de byte em formato HEX. * / / * Parâmetro: - uint8_t b. Byte para converter em HEX. * / / * Return: String * / String sbyte2hex (uint8_t b) {String shex; shex = "0X"; if (b <16) shex + = "0"; shex + = String (b, HEX); shex + = ""; retorno shex; } / ************************************************ ********************************** / / * Função: shex2int. Retorna um int de uma string HEX. * / / * Parâmetro: s. char * s para converter em HEX. * / / * Parâmetro: n. comprimento de char * s. * / / * Return: int * / int shex2int (char * s, int n) {int r = 0; para (int i = 0; i = '0' && s = 'A' && s <= 'F') {r * = 16; r + = (s - 'A') + 10; }} return r; } / ************************************************ ********************************** / / * Função: sanswer. Retorna uma resposta String do módulo UART mp3. * / / * Parâmetro: - uint8_t b. vazio. * / / * Retorno: String. Se a resposta for bem formatada, responda. * / Resposta de string (vazio) {uint8_t i = 0; String mp3answer = ""; // Obtenha apenas 10 bytes while (mp3.available () && (i <10)) {uint8_t b = mp3.read (); ansbuf = b; i ++; mp3answer + = sbyte2hex (b); } // se o formato da resposta estiver correto. if ((ansbuf [0] == 0x7E) && (ansbuf [9] == 0xEF)) {return mp3answer; } return "???:" + mp3answer; }

Primeiro, definimos todas as variáveis do programa e os endereços do registro de acesso do módulo YX5300.

#incluir

#define ARDUINO_RX 5 // deve conectar ao TX do módulo Serial MP3 Player #define ARDUINO_TX 6 // conectar ao RX do módulo SoftwareSerial mp3 (ARDUINO_RX, ARDUINO_TX); estático int8_t Send_buf [8] = {0}; // Buffer para enviar comandos. // MELHOR LOCALMENTE static uint8_t ansbuf [10] = {0}; // Buffer para as respostas. // MELHOR LOCALMENTE String mp3Answer; // Resposta do MP3. String sanswer (void); String sbyte2hex (uint8_t b); / ************ Byte de comando *************************** / #define CMD_NEXT_SONG 0X01 // Play next música. #define CMD_PREV_SONG 0X02 // Toca a música anterior. #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 // Reprodução de ciclo único. #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_WAKE_UP 0X0B #define CMD_RESET 0X0C #define CMD_PLAY 0X0D #define CMD_PAUSE 0X0E #define CMD_PLAY_PLAY_FOLDER_FOLDER_16. #define CMD_FOLDER_CYCLE 0X17 #define CMD_SHUFFLE_PLAY 0x18 // #define CMD_SET_SNGL_CYCL 0X19 // Define um ciclo simples. #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 0x43 #define CMD_QUERY_VOLUME #define CMD_QUERY_FLDR_TRACKS 0x4E #define CMD_QUERY_TOT_TRACKS 0x48 #define CMD_QUERY_FLDR_COUNT 0x4F / ********* *** Opções ************************** / #define DEV_TF 0X02 / ************** *************************************************** ***** / int numero; byte estado; buzzer byte = 2; pino de byte = 0; byte SortNumber = 0; botão bool = 0;

Etapa 8:

Esses endereços de registro são usados para configurar a operação do módulo. Por exemplo, veja este endereço de registro abaixo.

#define CMD_PLAY_W_INDEX 0X03

O endereço 0x03 é definido com o nome CMD_PLAY_W_INDEX. É usado para acionar uma música a partir do seu número, ou seja, você insere o número do som e ele será reproduzido.

Será com estes valores que iremos utilizá-los e configurar o funcionamento do nosso projeto.

Depois de definir os vários endereços que serão usados, entraremos na função de configuração e configuraremos os pinos e a comunicação serial para nosso projeto.

Etapa 9: Função Void Setup ()

A seguir, consulte a função de configuração de void. Fiz todas as configurações dos pinos do botão, comunicação serial do módulo MP3 e inicialização do módulo de cartão no MP3.

void setup ()

{Serial.begin (9600); mp3.begin (9600); atraso (500); para (pino = 8; pino <13; pino ++) {pinMode (pino, ENTRADA); } sendCommand (CMD_SEL_DEV, 0, DEV_TF); atraso (500); }

Iniciei a comunicação serial para imprimir os dados no serial do computador e depois iniciamos a comunicação serial através do objeto mp3.

Serial.begin (9600);

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

O módulo mp3 é controlado por meio de comandos recebidos pelo serial do Arduino. Nesse processo, usamos a biblioteca SoftwareSerial e emulamos um serial nos pinos digitais do Arduino.

Assim, você poderá utilizar o Arduino para controlar o módulo MP3 por meio de comandos enviados a ele.

Além disso, fizemos a configuração dos pinos digitais e inicialização do módulo do cartão MP3

para (pino = 8; pino <13; pino ++) {pinMode (pino, ENTRADA); } sendCommand (CMD_SEL_DEV, 0, DEV_TF); atraso (500);

Depois de fazer a configuração, devemos ir para a lógica principal da função void loop.

Etapa 10: O loop de vazio da função principal ()

O código é muito simples e toda a estrutura lógica está sendo apresentada a seguir. A seguir, explicarei a você a lógica completa da função principal.

void loop ()

{pino = 8; randomSeed (analogRead (A0)); numero = aleatório (8, 12); SortNumber = numero; numero = numero - 7; Serial.println (numero); sendCommand (0x03, 0, numero); atraso (1000); faça {botão = leitura digital (pino); Serial.println (botão); pin ++; if (pino> 13) {pino = 8; } Serial.println ("Varrendo…"); Serial.println (pin); // delay (1000); } enquanto (botão! = 1); Serial.println ("Saiu…"); if (botão == 1 && (pin-1)! = SortNumber) {sendCommand (0x03, 0, 6); atraso (3000); } if (botão == 1 && (pin-1) == SortNumber) {sendCommand (0x03, 0, 7); atraso (3000); } // Verifique a resposta. if (mp3.available ()) {Serial.println (decodeMP3Answer ()); } atraso (100); //Serial.println("Tocando musica… "); }

A cada início do ciclo da função de loop, geraremos um novo valor entre 8 e 12 para gerar o som de uma vogal. O valor de 8 a 12 refere-se ao pino digital da vogal.

O código para gerar o valor aleatório é mostrado abaixo.

pino = 8;

randomSeed (analogRead (A0)); numero = aleatório (8, 12); SortNumber = numero;

Além disso, subtraímos 7 do valor sacado entre 8 e 12. Isso nos permitirá apontar para as posições de 1 a 5 das músicas gravadas no cartão de memória.

numero = numero - 7;

Em seguida, reproduzi o som da vogal desenhada na linha abaixo.

sendCommand (0x03, 0, numero);

atraso (1000);

Agora chegou o momento importante: o momento em que vamos ler o botão pressionado pela criança. A parte do código está sendo apresentada abaixo.

Faz

{botão = leitura digital (pino); Serial.println (botão); pin ++; if (pino> 13) {pino = 8; } Serial.println ("Varrendo…"); Serial.println (pin); // delay (1000); } enquanto (botão! = 1);

Este loop será executado até que o usuário pressione os botões. O loop permite que você escaneie os 5 pinos digitais e no momento em que a criança apertar um dos botões, ele sairá do loop e verificará se a criança respondeu corretamente.

Você fará a verificação usando o código abaixo.

if (botão == 1 && (pin-1)! = SortNumber)

{sendCommand (0x03, 0, 6); atraso (3000); } if (botão == 1 && (pin-1) == SortNumber) {sendCommand (0x03, 0, 7); atraso (3000); }

A primeira condição será executada quando o usuário cometer um erro porque um botão foi pressionado e o valor disparado do pino era diferente do pino desenhado (SortNumber).

Neste ponto, você deve executar o comando abaixo.

sendCommand (0x03, 0, 6);

atraso (3000);

Este comando é usado para acionar o tom de resposta incorreto. Por fim, temos a segunda condição que será usada para verificar se a criança está certa.

if (botão == 1 && (pin-1) == SortNumber)

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

Etapa 11:

Imagem
Imagem

Se um botão foi pressionado e o pino digital que foi pressionado é o mesmo que o pino desenhado, o sistema acionará um som de resposta correta.

Como expliquei para você, esse código é muito simples e ajudará qualquer criança a desenvolver seu conhecimento de vogais por meio de um jogo com o Arduino.

Na figura acima a caixa de som está executando a música armazenada no cartão SD do Módulo MP3 YX5300.

Etapa 12: Conclusão

A educação em sala de aula precisa ser mudada constantemente e o Arduino pode ser um grande aliado na criação de tarefas divertidas.

Por meio deste projeto, foi possível desenvolver uma atividade simples que pode desenvolver as habilidades das crianças por meio do conhecimento do som e da grafia de cada vogal.

Ao contrário dos métodos tradicionais de ensino, as crianças aprenderão por meio da diversão em sala de aula, por meio de jogos e eletrônicos.

Etapa 13: Reconhecimento

Este projeto foi desenvolvido graças ao apoio e incentivo da empresa JLCPCB. Eles incentivaram a educação e nos convidaram a desenvolver o jogo de vogais para o ensino de crianças em sala de aula.

Se você deseja adquirir as placas eletrônicas do Jogo das Vogais, acesse este link e adquira 10 unidades por R $ 2 no JLCPCB.

Recomendado: