Como Fazer uma Calculadora no Arduino Usando Teclado Matricial, Potenciômetro e LCD 16x2
Como Fazer uma Calculadora no Arduino Usando Teclado Matricial, Potenciômetro e LCD 16x2
Introdução
Criar uma calculadora com Arduino é um projeto excelente para aprender sobre eletrônica, programação e integração de componentes. Neste artigo, vamos desenvolver uma calculadora simples utilizando um teclado matricial 4x4, um potenciômetro para ajustar o contraste do LCD 16x2 e explorar como essa atividade contribui para o desenvolvimento em robótica.
Materiais Necessários
Arduino Uno (ou similar)
Teclado matricial 4x4
Display LCD 16x2 com módulo I2C (ou sem I2C, utilizando resistores)
Potenciômetro 10kΩ (se o LCD não for I2C)
Protoboard e jumpers
Cabo USB para programação
Montagem do Circuito
Programação no Arduino IDE
Bibliotecas Necessárias
LiquidCrystal.h
(ouLiquidCrystal_I2C.h
se usar I2C)Keypad.h
Código Básico da Calculadora
#include <LiquidCrystal.h>#include <Keypad.h>const byte filas = 4; //cuatro filas.const byte columnas = 4; //cuatro columnas.char tecla[filas][columnas] = {{'1','2','3','A'},{'4','5','6','+'},{'7','8','9','-'},{'*','0','=','/'}};byte pinFilas[filas] = {7, 6, 5, 4}; //conectarse a las patillas de salida de fila del teclado.byte pinColumnas[columnas] = {3, 2, A5, A4}; //conectarse a las patillas de las columnas del teclado.Keypad keypad = Keypad( makeKeymap(tecla), pinFilas, pinColumnas, filas, columnas );LiquidCrystal lcd(8,9,10,11,12,13); //RS,E,D4,D5,D6,D7String leeCadena1,leeCadena2;byte cuenta=0;char a;long dato1,dato2,rpt1;double dato3,dato4,rpt2;void setup(){lcd.begin(16,2); //LCD (16 COLUMNAS Y 2 FILAS)}void loop(){char key = keypad.getKey();if (key=='0'||key=='1'||key=='2'||key=='3'||key=='4'||key=='5'||key=='6'||key=='7'||key=='8'||key=='9'){if(cuenta==0){lcd.print(key);leeCadena1+=key;dato1=leeCadena1.toInt();}else if(cuenta==1){lcd.print(key);leeCadena2+=key;dato2=leeCadena2.toInt();}}if(key=='A'){leeCadena2="";leeCadena1="";dato1=0;dato2=0;dato3=0;dato4=0;cuenta=0;rpt1=0;rpt2=0;lcd.clear();}else if(key=='='&&a=='+'){cuenta++;lcd.setCursor(0,2);rpt1=dato1+dato2;lcd.print("RPT=");lcd.print(rpt1);}else if(key=='='&&a=='-'){cuenta++;lcd.setCursor(0,2);rpt1=dato1-dato2;lcd.print("RPT=");lcd.print(rpt1);}else if(key=='='&&a=='*'){cuenta++;lcd.setCursor(0,2);rpt1=dato1*dato2;lcd.print("RPT=");lcd.print(rpt1);}else if(key=='='&&a=='/'){cuenta++;lcd.setCursor(0,2);dato3=dato1;dato4=dato2;lcd.print("RPT=");rpt2=(dato3/dato4);lcd.print(rpt2);}else if((key=='+'||key=='-'||key=='*'||key=='/')&&(cuenta==0)){cuenta++;a=key;lcd.print(a);}}//********script dos **********/*//Este script se puede poner la cantidad de digitos para hacer la operacíon.#include <LiquidCrystal.h>#include <Keypad.h>const byte filas = 4; //cuatro filas.const byte columnas = 4; //cuatro columnas.char tecla[filas][columnas] = {{'1','2','3','A'},{'4','5','6','+'},{'7','8','9','-'},{'*','0','=','/'}};byte pinFilas[filas] = {7, 6, 5, 4}; //conectarse a las patillas de salida de fila del teclado.byte pinColumnas[columnas] = {3, 2, A5, A4}; //conectarse a las patillas de las columnas del teclado.Keypad keypad = Keypad( makeKeymap(tecla), pinFilas, pinColumnas, filas, columnas );LiquidCrystal lcd(8,9,10,11,12,13); //RS,E,D4,D5,D6,D7String leeCadena1,leeCadena2;byte numero = 0; //variable a incrementarbyte digito = 2; //cantidad de dígitos para la operaciónbyte cuenta=0;char a;long dato1,dato2,rpt1;double dato3,dato4,rpt2;void setup(){lcd.begin(16,2); //LCD (16 COLUMNAS Y 2 FILAS)}void loop(){char key = keypad.getKey();if (key=='0'||key=='1'||key=='2'||key=='3'||key=='4'||key=='5'||key=='6'||key=='7'||key=='8'||key=='9' && numero <= digito){numero++;if(cuenta==0 && numero<= digito){lcd.print(key);leeCadena1+=key;dato1=leeCadena1.toInt();}else if(cuenta==1 && numero <= digito){lcd.print(key);leeCadena2+=key;dato2=leeCadena2.toInt();}}if(key=='A'){leeCadena2="";leeCadena1="";dato1=0;dato2=0;dato3=0;dato4=0;numero = 0;cuenta=0;rpt1=0;rpt2=0;lcd.clear();}else if(key=='='&&a=='+'){numero = 0;cuenta++;lcd.setCursor(0,2);rpt1=dato1+dato2;lcd.print("RPT=");lcd.print(rpt1);}else if(key=='='&&a=='-'){numero = 0;cuenta++;lcd.setCursor(0,2);rpt1=dato1-dato2;lcd.print("RPT=");lcd.print(rpt1);}else if(key=='='&&a=='*'){numero = 0;cuenta++;lcd.setCursor(0,2);rpt1=dato1*dato2;lcd.print("RPT=");lcd.print(rpt1);}else if(key=='='&&a=='/'){numero = 0;cuenta++;lcd.setCursor(0,2);dato3=dato1;dato4=dato2;lcd.print("RPT=");rpt2=(dato3/dato4);lcd.print(rpt2);}else if((key=='+'||key=='-'||key=='*'||key=='/')&&(cuenta==0)){numero = 0;cuenta++;a=key;lcd.print(a);}}*/
Importância para o Desenvolvimento em Robótica
1. Integração de Múltiplos Componentes
Robôs dependem da comunicação entre sensores, atuadores e microcontroladores. Este projeto ensina como conectar e gerenciar diferentes dispositivos (teclado, LCD, potenciômetro) em um único sistema.
2. Lógica de Programação
Desenvolver uma calculadora envolve manipulação de variáveis, estruturas condicionais e tratamento de entradas, habilidades essenciais para programar robôs autônomos.
3. Interface Homem-Máquina (HMI)
O uso de um teclado e display LCD simula a interação entre humanos e robôs, um conceito fundamental em robótica industrial e aplicações autônomas.
4. Ajuste e Calibração de Sensores
O potenciômetro, usado para ajustar o contraste do LCD, introduz o conceito de calibração de sensores, algo crítico em robótica para garantir precisão.
5. Prototipagem Rápida
Aprender a montar circuitos no Arduino e protoboard é essencial para testar ideias antes de implementá-las em robôs mais complexos.
Conclusão
Construir uma calculadora com Arduino é um projeto didático que ajuda a entender conceitos fundamentais de eletrônica e programação, diretamente aplicáveis à robótica. Além disso, desenvolve habilidades práticas em integração de hardware e software, essenciais para quem deseja avançar em automação e sistemas embarcados.
Experimente modificar o projeto adicionando novas funções (como cálculo de potência ou raiz quadrada) ou integrando um módulo Bluetooth para controle remoto!
Comentários
Postar um comentário