Senha de Atendimento com Arduino: Aprenda a fazer! - MakerHero
Senha de Atendimento com Arduino

Senha de Atendimento com Arduino 9

Neste post veremos como montar um sistema de senha de atendimento com Arduino. Ao entrar no estabelecimento, o consumidor apertará um botão e uma senha será exibida em um display. Quando um atendente estiver disponível, esse também apertará um botão e a senha do cliente da vez será exibida em uma TV.

Materiais Necessários

Para montagem desse projeto serão necessários os seguintes materiais:

Montagem do Circuito

Neste projeto, utilizaremos dois Arduinos que se comunicam via Serial. O primeiro Arduino cuidará dos botões e display LCD, enquanto o segundo se dedica a exibir as imagens na TV.

Os pinos GND dos dois Arduinos devem ser conectados juntos para permitir a comunicação Serial, e o TX de um conectado ao RX do outro.

Os Arduinos podem ser alimentados pelos seus pinos de VIN + GND, 5V + GND ou pela entrada USB. Também é possível fornecer energia a um dos Arduinos via USB e conectar seus pinos de 5V e GND juntos para compartilhem a mesma fonte de energia.

As conexões dos Botões, Display e o Arduino 1 devem ser feitas conforme a tabela abaixo:

 

Arduino Display LCD Botão Cliente Botão

Atendente 1 

Botão

Atendente 2

GND GND Terminal 1 Terminal 1 Terminal 1
5V VCC
A4 SDA
A5 SCL
D4 Terminal 2
D3 Terminal 2
D2 Terminal 2

 

A conexão com a Televisão é bem simples. Primeiro conectamos o GND do Arduino 2 ao anel externo do conector RCA. Depois conectamos os pinos digitais 7 e 9 do segundo Arduino ao pino interno do conector através de resistores de 1kΩ. Podemos também utilizar um conector RCA macho conectado conforme a imagem abaixo.

Conector RCA

Código

Para saber mais detalhes sobre a comunicação do Arduino com a Televisão e o uso de Push Buttons acesse os nossos posts:

Neste código utilizaremos as seguintes bibliotecas, que podem ser instaladas através do Gerenciador de Bibliotecas da Arduino IDE ou dos links abaixo:

O código abaixo deve ser carregado no Arduino 1.

/*
#-------------------------#
|        SENHA  DE        |
|       ATENDIMENTO       |
|      Ítalo  Coelho      |
#-------------------------#
*/ 

#include <Wire.h>
#include <TVout.h>
#include <pushButton.h>
#include <LiquidCrystal_I2C.h>

// Inicializa o Display no Endereço 0x27
LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7,3, POSITIVE);

// Inicializa os Botões 
pushButton cliente(4);
pushButton atendente1(3);
pushButton atendente2(2);

TVout TV;

// Variáveis globais de Controle
int senha = 0;
int atendimento = 0;
bool livre1 = true;
bool livre2 =  true;

// Protótipos das Funções
void esperaCliente();

void setup()
{
  lcd.begin (16,2);  //Inicia o Display
  
  lcd.setBacklight(HIGH);  //Liga a Luz de Fundo
  
  esperaCliente();

  Serial.begin(9600);
}

void loop()
{
  mostraSenha(false);
  
  if(cliente.wasPressed())  //Cliente apertou o botão
    mostraSenha(true);

  // Atendente ficou disponível
  if(atendente1.wasPressed())
    livre1 = true;
  if(atendente2.wasPressed())
    livre2 = true;

  if(atendimento < senha)    //Tem pessoas esperando
  {
    if(livre1)
    {
      atendimento++;
      livre1 = false;
      // Cliente vai no Guiche 1
      String texto = "Senha: " + String(atendimento) + " dirija-se ao Guiche 1\n\n";
      for(int i = 0; i < texto.length(); i++)
      {
        Serial.print(texto[i]);
        delay(5);
      }
    }
    else if(livre2)
    {
      atendimento++;
      livre2 = false;
      // Cliente vai no Guiche 2
      String texto = "Senha: " + String(atendimento) + " dirija-se ao Guiche 2\n\n";
      for(int i = 0; i < texto.length(); i++)
      {
        Serial.print(texto[i]);
        delay(5);
      }
    }
  }
  delay(100);
}

void esperaCliente()
{
  lcd.clear();          //Limpa a tela e coloca o cursor na posição inicial
  
  lcd.setCursor(0,0);   //Escrever na primeira linha
  lcd.print(" Aperte o botao ");
  lcd.setCursor(0,1);   //Escrever na segunda linha
  lcd.print("para ver a senha");
}

void mostraSenha(bool apertado)
{
  static uint64_t then = millis()/1000;
  static bool runOnce = false;
  
  if(apertado)
  {
    senha++;
    lcd.clear();
    lcd.setCursor(0,1);
    lcd.print("Sua senha:");
    lcd.setCursor(11,1);
    lcd.print(senha);
    lcd.setCursor(0,0);
    lcd.print("   Bem Vindo!   ");
    
    then = millis()/1000;
    runOnce = true;
  }

  if(millis()/1000 - then >= 10 && runOnce)
  {
    esperaCliente();
    runOnce = false;
  }
}

O código a seguir deve ser carregado no Arduino 2.

/*
#-------------------------#
|        SENHA  DE        |
|       ATENDIMENTO       |
|      Ítalo  Coelho      |
#-------------------------#
*/ 

#include <TVout.h>
#include <fontALL.h>

TVout TV;

void setup() 
{
  TV.begin(NTSC,120,96);  //Define os parâmetros da TV(não alterar)
  
  Serial.begin(9600);
  
  TV.select_font(font6x8);  //Tamanho da fonte
  TV.println(32,10,"Senha de");
  TV.println(22,30,"Atendimento");
  TV.delay(2500);
  TV.println(40,70,"Italo");
  TV.delay(5000);
  TV.clear_screen(); //Limpa a tela
}


void loop()
{  
  if(Serial.available())  //Recebeu informação via Serial
  {
    TV.select_font(font6x8);
    TV.print(char(Serial.read())); 
  }
}

Utilização

Ao entrar no estabelecimento o cliente aperta o botão e recebe no display uma senha para seu atendimento.

UI do Cliente para o projeto de senha de atendimento com Arduino

Quando o atendente ficar disponível, aperta o botão e a senha do cliente da vez aparece na TV indicando o guichê do atendente disponível.

UI do Atendente do projeto de senha de atendimento com Arduino

Com pequenas modificações é possível adicionar mais atendentes para atender estabelecimentos com mais colaboradores.

Conclusão

YouTube video

Gostou de aprender a fazer um Sistema de Senha de Atendimento com Arduino? Não se esqueça de deixar um comentário nos contando o que achou. 

Faça seu comentário

Acesse sua conta e participe

9 Comentários

  1. HISTÓRICO DOS ERROS NO CÓDIGO DO PROJETO SENHA DE ATENDIMENTO COM ARDUINO
    Consegui alguma ajuda na comunidade e fui até determinado pontos
    CÓDIGO DO ARDUINO UNO 1
    Após compilar pela 1ª vez, apareceu esse erro:

    Observe que pushButton está escrito em preto. Eu troquei a letra p por P e a letra B por b e corrigiu esse erro. Quando fiz essa troca de letras minúscula por maiúscula, a palavra pushButton
    Após compilar pela 2ª vez, apareceu esse erro:

    Fiz a alteração na linha que deu erro de LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7,3, POSITIVE);
    Para LiquidCrystal_I2C lcd(0x27,16,2); e deu certo.

    Após compilar pela 3ª vez, apareceu esse erro:
    Nessa 3ª compilação, repeti o que fiz na 1ª compilação ( 3 vezes troquei as letras p e b de minúscula para maiúscula ) Essas palavras estavam em preto e ficaram laranja após essa troca das letras. E deu certo

    Após compilar pela 4ª vez, apareceu esse erro:

    Eu segui a sugestão que o erro em laranja deu. modifiquei de wasPressed para isPressed e deu certo. wasPressed estava em preto e quando passei para isPressed ficou laranja e deu certo.
    Fiz isso em toda linha que apresentasse a palavra wasPressed.

    Após compilar pela 5ª vez, apareceu esse erro:

    Apareceu o seguinte erro:

    Eu fiz isso acima e também não deu certo. Depois pluguei um arduino nano e mandei compilar e continuou aparecendo a mesma mensagem.
    Aí eu parei por aqui.

  2. Sou iniciante e estou com muita dificuldade de baixar esses dois códigos. Estão dando erros. Você poderia ir me ajudando a corrigir um por um? Eu teria que ter um canal para enviar vídeo ou foto dos erros e mensagens que aparece. Obrigado. Carlos.

    1. Boa noite, Carlos
      Entra na comunidade do Facebook, lá você vai poder postar suas dúvidas com mais detalhes e obter respostas de vários membros. É só ir nesse endereço: https://www.facebook.com/groups/272908123918982

      1. Boa tarde Italo. Não tive uma experiência boa nessa comunidade. Fui mal tratado, com ironia, por um dos membros, pelo fato de eu ter dificuldades pois estou iniciando. Portanto, se não for te incomodar, gostaria que você me ajudasse.

        Na linha 15 LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7,3, POSITIVE);

        Aparece o erro: status de saída 1 ‘POSITIVO’ não foi declarado neste escopo

        Eu não sei declarar essa variável.

        Carlos Leonardo de A. Almeida
      2. Boa tarde. É, está dando muito erros. Por favor, você como autor , verifique aí esses erros e me oriente, por favor. Obrigado

        1. Boa tarde, Carlos
          Vi que você já conseguiu resolver o problema relacionado ao Display LCD, o link da biblioteca no post vai ser atualizado para evitar problemas como esse no futuro. O código como está, funciona, e é exatamente o mesmo utilizado na demonstração do vídeo. Para resolver dúvidas específicas, entra a nossa comunidade do Facebook é mais prática e você consegue vários pontos de vista na resolução do problema.

  3. Boa noite. Gostaria de sua ajuda. Não estou conseguindo baixar a biblioteca fontALL.h da parte final do código. Não encontrei no IDE e ela não veio com um LInk para baixar. Você poderia me ajudar.

    Carlos Leonardo de A. Almeida
    1. Boa noite, Carlos
      Ela já deve vir junto com a biblioteca TVout, não precisa se preocupar com ela.

      1. Eu preciso da sua ajuda. Gostaria muito de construir esse projeto. Está dando erro com a biblioteca que citei anteriormente. Um abraço

        Carlos Leonardo de Alcântara Almeida