Painel de senhas com Arduino

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:

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:

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!

4/5 - (1 voto)

Related posts

Display LCD 16×2 e Sensor de temperatura LM35

by Arduino e Cia
12 anos ago

Como usar o TM1638 com Raspberry Pi

by Arduino e Cia
5 anos ago

Detectando campos magnéticos com o Sensor Hall KY-003

by Arduino e Cia
10 anos ago
Sair da versão mobile