Crie um jogo de multiplicação com Arduino, teclado matricial 4×3 e display 16×2

Font Size

Nesse post iremos criar um projeto simples para ver se você ou a quem você mostrar esse projeto é bom de matemática, iremos fazer um joguinho de perguntas de multiplicação com o arduino, o  teclado de membrana 4×3 e o display 16×2, onde o arduino controlará tudo, o teclado receberá a resposta e o display exibirá a multiplicação e dirá se você acertou ou não.

E o melhor de tudo o nosso projeto não será composto de continhas pré-definidas, todos os números serão gerados aleatoriamente, o que torna esse projeto ainda mais dinâmico e divertido.  Então agora que já sabemos o que temos que fazer vamos lá conhecer os módulos que iremos utilizar!

Display 16×2

Antes de tudo aposto que você está se perguntando por que esse “16×2”?
~Esse nome é dado devido ao fato de ele possuir 16 colunas e duas linhas, ou seja, é possível reproduzir 16 caracteres e em duas linhas, totalizando 32 caracteres, bastante coisa né?

O display 16×2 é uma forma simples e barata para exibir textos, números e etc, já imaginou ligar 32 displays de 7 segmentos ao mesmo tempo e controlar todos eles? daria bastante trabalho né? O nosso display reproduz a mesma quantidade de caracteres que os 32 displays de 7 seguimentos, porém com tamanhos bem menores e com um controle bem mais simples e intuitivo.

Além disso o display 16×2 tem várias combinações de cores diferentes, basta você escolher o melhor para o seu projeto

 Figura 01: Displays 16×2 e seus diversos modelos
Fonte: Aliexpress

No nosso projeto utilizaremos o Display Lcd 16×2 Backlight Azul, que tem as seguintes especificações:

Especificações:

– Controlador: HD44780;
– Cor backlight: Azul;
– Cor escrita: Branca;
– Dimensão Total: 80mm X 36mm X 12mm;
– Dimensão Área visível: 64.5mm X 14mm;
– Dimensão Caracter: 3mm X 5.02mm;
– Dimensão Ponto: 0.52mm X 0.54mm.

Teclado de Membrana 4×3

Internamente o Teclado de Membrana 4×3 12 Teclas possui uma diversos de botões (mais precisamente 12), dispostos em forma de matriz. Cada botão quando acionado faz a ligação entre uma linha e uma coluna,  e através de um sistema de coordenadas matricial podemos saber qual tecla foi pressionada
A imagem abaixo ilustra essa ligação linha x coluna no teclado 4×3 que estamos usando.

 Figura 02: Teclado de Membrana 4×3 12 Teclas  representação interna
Fonte: Arduino e cia

Na parte central da imagem temos, em azul, a representação das conexões das linhas, e no lado direito, em vermelho, a representação das conexões das colunas.
Os conectores enumerados de 1 a 4 são os que tem contato com as linhas e os pinos de 5 a 7 com as colunas.
Se por exemplo pressionarmos a tecla 4 será feita uma conexão ente o pino 2 e o pino 5, através disso o nosso microcontrolador reconhecerá os números digitados.
agora que já conhecemos a os módulos que iremos utilizar vamos por a mão na massa!

Materiais Utilizados:

Esses itens, e mais uma outros para implementar seu projeto – você acha AQUI na nossa loja :D.

Montagem:

O circuito é bem simples, olha só como ele ficou :


Figura 02: Circuito eletrônico de algum roboô
Fonte: Autocore robotica

O Potenciômetro está presente no circuito para poder ajusta o brilho dos segmentos do display, ele é bastante importante para poder deixar as informações do display o mais legíveis o possível.

Código comentado:

Sei que você está ansioso para programar  né, mas antes disso é fundamental instalar as bibliotecas do teclado e do display, elas estão disponíveis logo abaixo:

Biblioteca LiquidCristal 

Biblioteca Keypad

Agora com ela já instalada seu código vai pegar perfeitamente ;D

// Programa: Jogo de multiplicação com Arduino, teclado matricial 4x3 e display 16x2
// Autor: Saulo Alexandre - Autocore Robótica

// incluindo as bibliotecas 
#include <Keypad.h> //biblioteca do teclado matricial
#include <LiquidCrystal.h> // biblioteca do display
 
// definições do teclado
const byte numLinhas= 4; //numero de linhas do teclado
const byte numColunas= 3; //numero de colunas do teclado
//criando um array com os valores referentes a cada teclada
char mapaTeclado[numLinhas][numColunas]=
{
 {'1', '2', '3'},
 {'4', '5', '6'},
 {'7', '8', '9'},
 {'*', '0', '#'}
 };
byte pinosLinhas[numLinhas] = {10,9,8,7}; //definindo os pinos das linhas
byte pinosColunas[numColunas]= {13,12,11}; //definindo os pinos das colunas
// enviando as informações dos pinos e dos valores do teclado para a biblioteca dele
Keypad TecladoMatricial= Keypad(makeKeymap(mapaTeclado), pinosLinhas, pinosColunas, numLinhas, numColunas);
 
//definindo os pinos do display LCD
LiquidCrystal lcd(A0, A1, A2, A3, A4, A5);


void setup() {
 lcd.begin(16, 2); //Incia o display LCD
 randomSeed(analogRead(7));//Inicia o gerador de números aleatórios
 lcd.setCursor(0, 0);
 lcd.print(" Autocore");
 lcd.setCursor(0, 1);
 lcd.print(" Robotica");
 delay(2000);
}
 
void loop() {
 lcd.clear();//apagando tudo do display
 lcd.setCursor(0, 0);
 //Escolhe dois números e os exibe no LCD
 int num1 = random(2, 11);
 int num2 = random(2, 11);
 int resultado = num1 * num2;
 lcd.print(String(num1) + " x " + String(num2) + " = ");
 // Esperando a resposta do usuário e digitar o resultado
 int resposta = valorLido().toInt(); //recebe um valor no char e converte para o tipo String
 lcd.setCursor(0, 1);
 // Se o valor digitado for igual ao resultado da mutiplicação
 if (resultado == resposta){
 lcd.print("Voce acertou!");

}
 else {
 // se não for igual ao resultado da multiplicação
 lcd.print("Errou... R: " + String(resultado));
 }
 resposta = valorLido().toInt(); //Apenas esperando pressionar qualquer tecla para continuar
}
 
//Entra aqui quando é pressionado o "#"
//Recebe os valores do teclado e os imprime na tela e retorna para a função anterior o valor recebido
String valorLido(){
 String valorDigitado = "";
 char teclaPressionada = TecladoMatricial.getKey();
 while (teclaPressionada != '#'){
 teclaPressionada = TecladoMatricial.getKey();
 if ((teclaPressionada != NO_KEY) && (teclaPressionada != '#')) {
 valorDigitado.concat(teclaPressionada);// concatena os valores que recebe com os já recebidos anteriormente
 lcd.print(teclaPressionada);
 } 
 } 
 return(valorDigitado); // retorna o valor digitado para a função anterior
 }

Conclusão:

Gravamos um vídeo para demonstrar o funcionamento do nosso joguinho :

Gostaram do projeto? O display de LCD 16×2, particularmente, é um dos componentes mais legais e amplos que existem e junto com o teclado eles podem fazer diversos projetos, esse jogo de multiplicação foi só um deles.

Saiba mais sobre tecnologia.

O que acharam? Legal? Divertido? Desafiador?

Deixe seu comentário ai embaixo, seu curtir  no nosso Facebook – e não perca o nosso próximo post.

Posts relacionados

Diferenças entre os sensores DHT11 e DHT22

por autocore
7 anos ago

O que todo maker deve ter em sua bancada.

por autocore
7 anos ago

Aprenda a utilizar o sensor de tensão com Arduino

por autocore
8 anos ago
Sair da versão mobile