19 maio 2019

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.

Painel de Senhas com Arduino

Nosso painel de senhas, além de mostrar o número no display 8x8 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 Painel de Senhas


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 8x8 os pinos 5, 6 e 7.

Circuito Arduino Uno e módulo display 8x8 Max7219


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:

Instalação biblioteca MD_MAX72XX IDE Arduino


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 8x8, basta alterar o valor da linha 8 (MAX_DEVICES).

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
//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 != '\0')
    {
      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 8x8 e MAX7219 aqui mesmo no Arduino e Cia!

Nenhum comentário:

Postar um comentário