O Painel de Senhas é um recurso muito comum encontrado em estabelecimentos comerciais para organizar o atendimento ao público. Na entrada a pessoa retira um papel com a senha, e depois basta aguardar para que o seu número seja chamado em um painel eletrônico. Aqui vamos mostrar como você pode montar um Painel de Senhas com Arduino utilizando alguns poucos componentes.
Nosso painel de senhas, além de mostrar o número no display 8×8 também terá um sinal sonoro para chamar a atenção das pessoas.
O que o Painel de Senhas com Arduino não vai ter
Sei que é meio estranho começar o post com esse aviso, mas a ideia do projeto é dar uma base para que você desenvolva seu próprio painel adicionando novas funções. Com isso, vamos às funcionalidades que não estão presentes neste Painel de Senhas com Arduino e que você pode implementar depois:
- Conexão wireless: Preferi manter o básico com 2 botões (aumentar e diminuir o contador);
- Reset do contador: Utilize o botão de reset do Arduino para reiniciar a contagem;
- Teclado numérico;
- Gravação da última senha na memória: caso o Arduino seja reiniciado, a contagem começa do zero
Uma sugestão de conexão wireless que você pode implementar neste projeto encontra-se no post Sistema Chama garçom com Arduino, onde uso módulos RF 433MHz de baixo custo para a comunicação entre os dispositivos.
Circuito botões e módulo MAX7219
O nosso painel de senhas será montado utilizando os seguintes componentes:
- Arduino Uno
- Módulo 4 matrizes de led 8×8 com Max7219
- 3x Push-buttons
- Buzzer
Confira no esquema abaixo como os componentes devem ser interligados. Para os botões usamos os pinos digitais 2 e 3, para o Buzzer o pino 8 e para ligação do display 8×8 os pinos 5, 6 e 7.
Usei no projeto um Arduino Uno por ser a placa mais comum da linha, mas você pode criar um projeto mais compacto usando um Arduino Nano, por exemplo.
Programa Painel de Senhas
Neste programa vamos usar a biblioteca MD_MAX72XX, instalada à partir da própria IDE do Arduino. Para instalação, vá até Sketch -> Incluir Biblioteca -> Gerenciar Bibliotecas e procure por MD_MAX72XX clicando em seguida em instalar conforme a imagem abaixo:
Nesta nova versão da biblioteca a definição da placa é feita no próprio programa, como podemos verificar na linha 7 onde colocamos o tipo de módulo que estamos usando, o FC16_HW.
Caso você queria ligar por exemplo mais um painel em cascata totalizando 8 displays 8×8, basta alterar o valor da linha 8 (MAX_DEVICES).
//Programa: Painel de Senhas com Arduino //Autor: Arduino e Cia #include <MD_MAX72xx.h> //Tipo da placa e numero de displays #define HARDWARE_TYPE MD_MAX72XX::FC16_HW #define MAX_DEVICES 4 //Pinos de conexao do modulo MAX7219 #define DATA_PIN 5 #define CS_PIN 6 #define CLK_PIN 7 MD_MAX72XX mx = MD_MAX72XX(HARDWARE_TYPE, DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES); //Velocidade do scroll #define DELAYTIME 100 //Definicao dos pinos dos botoes #define botao1 2 #define botao2 3 #define pinobuzzer 8 bool estado = 1; String txt; char charBuf[50]; int contador = 0; void scrollText(char *p) { uint8_t charWidth; uint8_t cBuf[8]; mx.clear(); for (int c = 0; c < 8; c++) { while (*p != '') { charWidth = mx.getChar(*p++, sizeof(cBuf) / sizeof(cBuf[0]), cBuf); //Espaco entre caracteres for (uint8_t i = 0; i <= charWidth; i++) { mx.transform(MD_MAX72XX::TSL); if (i < charWidth) mx.setColumn(0, cBuf[i]); delay(DELAYTIME); } } mx.transform(MD_MAX72XX::TSL); delay(DELAYTIME); } for (int m = 0; m < 16; m++) { mx.transform(MD_MAX72XX::TSL); delay(DELAYTIME); } } void setup() { Serial.begin(9600); //Definicoes dos pinos dos botoes e buzzer pinMode(botao1, INPUT); digitalWrite(botao1, HIGH); pinMode(botao2, INPUT); digitalWrite(botao2, HIGH); pinMode(pinobuzzer, OUTPUT); //Inicializa o display mx.begin(); //Define a intensidade do brilho do display mx.control(MD_MAX72XX::INTENSITY, 3); //Informacoes iniciais display e serial monitor Serial.println("Painel de senhas com Arduino"); Serial.println("Pressione o botao para iniciar..."); scrollText("Iniciando... "); } void loop() { lerbotoes(); if (estado == 0) { String textotemp = "Senha "; txt = textotemp + contador; Serial.print("Chamando senha: "); Serial.println(contador); //Aciona o buzzer tone(pinobuzzer, 660, 200); delay(200); tone(pinobuzzer, 550, 200); delay(200); tone(pinobuzzer, 440, 300); delay(400); //Envia comando para o display for (int c = 0; c <= 1; c++) { txt.toCharArray(charBuf, 50); scrollText(charBuf); } estado = 1; } } void lerbotoes() { //Botao 1 - Aumenta contador int valor1 = digitalRead(botao1); if (valor1 == 0) { contador++; while (digitalRead(botao1) == 0) { delay(50); } estado = 0; } //Botao 2 - Diminui contador int valor2 = digitalRead(botao2); if (valor2 == 0) { contador--; while (digitalRead(botao2) == 0) { delay(50); } estado = 0; } }
Carregado o programa, basta acionar o botão para que o valor do contador seja incrementado e a senha exibida no display.
Gostou? Confira outros projetos com matriz 8×8 e MAX7219 aqui mesmo no Arduino e Cia!