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:
- 2x Arduinos Nano / Uno
- 1x Display LCD 16×2 I²C
- 3x Push Buttons
- 1x Conector RCA
- 2x Resistores de 1kΩ
- 2x Protoboard
- Jumpers
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.
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:
- “Aprenda a conectar um Arduino na televisão”
- “Debounce, o que é e como resolver via software”
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.
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.
Com pequenas modificações é possível adicionar mais atendentes para atender estabelecimentos com mais colaboradores.
Conclusão
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.
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.
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.
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
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.
Boa tarde. É, está dando muito erros. Por favor, você como autor , verifique aí esses erros e me oriente, por favor. Obrigado
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.
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.
Boa noite, Carlos
Ela já deve vir junto com a biblioteca TVout, não precisa se preocupar com ela.
Eu preciso da sua ajuda. Gostaria muito de construir esse projeto. Está dando erro com a biblioteca que citei anteriormente. Um abraço