Sistema Chama Garçom com Arduino e módulo RF 433MHz
Faz tempo que o módulo RF 433MHz não aparece aqui no blog. Mais precisamente desde abril de 2015, quando eu escrevi o post Comunicação sem fio com módulo RF 433MHz. Então hoje vamos aproveitar e usar o módulo para criar um Sistema Chama Garçom com Arduino.
O Chama Garçom
Chama Garçom com Arduino e módulo RF 433MHz
Vamos montar o nosso Chama Garçom utilizando módulos RF Transmissor e Receptor 433MHz, mas com 2 emissores (que seriam colocados nas mesas) e 1 receptor (no balcão de atendimento). Se você precisar de mais emissores, verá que expandir o sistema é bem fácil.
O material que vamos usar é o seguinte:
- 2 Placas Arduino Nano (para os emissores)
- Resistores diversos (pull up botões emissores)
- 2 Push Buttons (para os emissores)
- 2 módulos RF 433MHz Emissor
- 1 Arduino Uno (para o receptor, mas você pode usar um Nano também, se preferir)
- 1 módulo RF 433MHz Receptor
- 1 Display Oled I2C (para o receptor)
Com o material em mãos, vamos montar primeiro o circuito receptor.
Circuito Receptor RF
Programa Receptor RF
//Programa: Chama Garcom com Arduino e Modulo RF 433MHz - Receptor //Autor: Arduino e Cia #include <VirtualWire.h> #include <U8glib.h> //Definicoes do display Oled U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_FAST); //Armazena o numero da mesa que esta chamando int mesa_chamando; char recebido_RF_char[4]; void draw() { //Comandos graficos para o display devem ser colocados aqui u8g.setFont(u8g_font_fub14); u8g.drawRFrame(0, 0, 128, 63, 4); u8g.drawStr(35, 19, "MESA"); u8g.setPrintPos(55, 31); u8g.setFont(u8g_font_fub30); u8g.setPrintPos(55, 57); u8g.print(mesa_chamando); } void setup() { Serial.begin(9600); //Pino ligado ao pino DATA do receptor RF vw_set_rx_pin(7); //Velocidade de comunicacao (bits por segundo) vw_setup(5000); //Inicia a recepcao vw_rx_start(); Serial.println("Modulo Receptor Chama Garcom - Aguardando..."); //Display Oled if ( u8g.getMode() == U8G_MODE_R3G3B2 ) { u8g.setColorIndex(255); // white } else if ( u8g.getMode() == U8G_MODE_GRAY2BIT ) { u8g.setColorIndex(3); // max intensity } else if ( u8g.getMode() == U8G_MODE_BW ) { u8g.setColorIndex(1); // pixel on } else if ( u8g.getMode() == U8G_MODE_HICOLOR ) { u8g.setHiColorByRGB(255, 255, 255); } } void loop() { uint8_t buf[VW_MAX_MESSAGE_LEN]; uint8_t buflen = VW_MAX_MESSAGE_LEN; u8g.firstPage(); if (vw_get_message(buf, &buflen)) { int i; for (i = 0; i < buflen; i++) { //Armazena os caracteres recebidos recebido_RF_char[i] = char(buf[i]); } recebido_RF_char[buflen] = '\0'; //Converte o valor recebido para integer mesa_chamando = atoi(recebido_RF_char); //Mostra no serial monitor o valor recebido Serial.print("A mesa "); Serial.print(mesa_chamando); Serial.println(" esta chamando!"); } // Chama a rotina de desenho na tela do { draw(); } while ( u8g.nextPage() ); }
Circuito Emissor RF
Programa Emissor RF
//Programa: Chama Garcom com Arduino e Modulo RF 433MHz - Emissor //Autor: Arduino e Cia #include <VirtualWire.h> //Define pinos Led e Botao const int ledPin = 13; const int pino_botao = 4; int valor_botao; char Valor_CharMsg[4]; //Armazena o numero da mesa int mesa = 1; void setup() { Serial.begin(9600); pinMode(ledPin,OUTPUT); pinMode(pino_botao,INPUT); //Pino ligado ao pino DATA do transmissor RF vw_set_tx_pin(A4); //Velocidade de comunicacao (bits por segundo) vw_setup(5000); //Informacoes iniciais Serial.print("Voce esta na mesa "); Serial.print(mesa); Serial.println(" - Acione o botao..."); } void loop() { //Verifica o estado do push-button valor_botao = digitalRead(pino_botao); //Caso o botao seja pressionado, envia dados if (valor_botao == 0) { //Converte valor para envio itoa(mesa,Valor_CharMsg,10); //Liga o led da porta 13 para indicar envio dos dados digitalWrite(13, true); //Envio dos dados vw_send((uint8_t *)Valor_CharMsg, strlen(Valor_CharMsg)); //Aguarda envio dos dados vw_wait_tx(); //Desliga o led da porta 13 ao final da transmissao digitalWrite(13, false); Serial.print("Dados enviados! Mesa "); Serial.print(mesa); Serial.println(" chamando!"); delay(500); } }
e chegando no receptor:
Experimente melhorar o circuito adicionando um buzzer para avisos sonoros e um sistema de “fila”, no caso de várias mesas chamando ao mesmo tempo.
Projeto legal mesmo, parabéns!
Valeu Cicero!
Abraço.
Adilson
O display o oled e bem legal poderia ter uma opção um pouco maior para usar com esse projeto?
Opa, boa tarde!
Uma opção seria usar com o LCD gráfico 128×64, ou mesmo com uma matriz de leds 8×8.
Abraço!
Adilson
Qual o alcance obtido com estes módulos com e sem a antena?
Grato!
Oi Carlos,
Eu testei os meus sem antena, não pega muito longe não. Recomendo que você use uma antena para melhorar o sinal.
Abraço!
Adilson
ÒTIMO PROJETO! PARABÉNS…..ESTOU TERMINANDO A FATEC (AUTOMAÇÃO INDUSTRIAL) E LOGO QUE TIVER TEMPO VOU VOLTAR PARA MEU ARDUINO.
Sucesso! E se precisar de ajuda estamos aí. 🙂
Abraço!
Adilson
Quero comprar esse material vcs vendem ???
Oi Roberio,
Dê uma olhada no site da FilipeFlop, por favor. Lá eles vendem tudo o que você precisa. 🙂
Abraço!
Adilson
Como fazer uma fila no receptor quando mais de um sinal for recebido? A idéia é só liberar para outra mesa quando aquela sinalizada tiver sido atendida.
Boa noite,
Vai ter que mexer na programação, além de incluir algum recurso (um botão?) para indicar que a mesa atual foi atendida.
Abraço!
Adilson
Muito bom, mas como implementar mais de um emissor para um único receptor e só permitir a mudança no receptor após o segundo acionamento do emissor, desta forma passando para o próximo emissor que já foi acionado?
Gostaria de comprar varias unidades, quanto custa?
Oi Roberto,
Dê uma olhada no site da FilipeFlop, por favor. Lá eles vendem tudo o que você precisa. 🙂
Abraço!
Adilson
vc não tem um projeto de controle remoto 16 canais com Arduino?é pra acionar 16 relés via rf…
Oi Aslem,
Ainda não, mas se você precisar disso eu posso desenvolver sob encomenda. Entre em contato utilizando o formulário de contato no lado direito da página.
Abraço!
Adilson
Oi preciso conversar com a pessoa que fez o projeto, temos uma proposta de parceria.
Boa noite,
Obrigado. Por favor utilize o formulário de contato no lado direito da página. Vamos conversar. 😉
Abraço!
Adilson
Bom dia,
Parabéns pelo projeto e por compartilhar o conhecimento, me tire uma dúvida posso usar um Arduíno pro mini no lugar do nano? Obrigado pela atenção.
Jorge Sousa
Oi Jorge,
Obrigado. resposta abaixo. 🙂
Abraço!
Adilson
Bom dia,
Me tire uma dúvida posso usar um Arduíno pro mini no lugar do nano? Obrigado pela atenção dispensada.
Jorge Sousa
Oi Jorge,
Perfeitamente. 🙂
Abraço!
Adilson
Olá, o acionamento de dois ou mais transmissores ao mesmo tempo na mesma frequência não pode causar interferência e prejudicar a comunicação? É possível resolver isso pela programação?
Oi Joel,
Teoricamente sim, se os controles forem acionados ao mesmo tempo pode acontecer algum tipo de interferência, mas creio que até pela velocidade do microcontrolador e pelo tamanho do pacote de dados enviado isso é bem difícil de acontecer.
Você também pode inserir na programação uma função para que os dados sejam enviados apenas uma vez, mesmo que o botão do emissor continue pressionado.
Abraço!
Adilson
Oi, é possível construir o circuito do rf 433hmz usando componentes smd?
Bom dia!
Sim, não vejo problemas. 🙂
Abraço!
Adilson
Sou novo no mundo de Arduino.
Estou montando com meu filho este projeto e nos deparamos com o seguinte problema.
Erro no void setup
(void setup()
{
Serial.begin(9600);
//Pino ligado ao pino DATA do receptor RF
vw_set_rx_pin(7);
//Velocidade de comunicacao (bits por segundo)
vw_setup(5000);
//Inicia a recepcao
vw_rx_start();
Serial.println("Modulo Receptor Chama Garcom – Aguardando…");
//Display Oled
if ( u8g.getMode() == U8G_MODE_R3G3B2 ) {
u8g.setColorIndex(255); // white
}
else if ( u8g.getMode() == U8G_MODE_GRAY2BIT ) {
u8g.setColorIndex(3); // max intensity
} )
Bom dia,
Se o seu programa estiver exatamente como você passou, tem um parênteses a mais no começo e no final do programa. Retire que vai funcionar.
Abraço!
Adilson
Arduino : 1.6.5 (Windows 7), Carte : “Arduino Uno”
Les options de compilation ont été modifiées, tout sera recompilé
sketch_aug31c:66: error: empty character constant
Multiple libraries were found for “U8glib.h”
Used: C:\Users\Amen\Documents\Arduino\libraries\U8glib_Arduino-master
Not used: C:\Users\Amen\Documents\Arduino\libraries\U8glib-1.19.1
empty character constant
Ce rapport contiendrait plus d’informations si l’option
“Montrer les informations de sortie pendant la compilation”
était activée dans Fichier > Préférences.
I am new to the Arduino world. i’m trying to do this project but i have a problem with the receiver code at line 66
help me please
Hi! How are you?
What´s the problem? Can you send the erro message?
Best regards!
Adilson
thank you,
here is the error:
sketch_sep17b:66: error: empty character constant
hi!
Sorry, there´s an error in line 66. The code is:
recebido_RF_char[buflen] = ‘\0’;
Also adjusted in the post. Please try again and let me know if worked, please.
Best regards!
Adilson
thank you ,
I corrected as you asked but this time it indicates that the sketch is too big
here is: processing.app.debug.RunnerException: Sketch too big; see http://www.arduino.cc/en/Guide/Troubleshooting#size for discount tips.
at processing.app.debug.Compiler.size (Compiler.java:339)
at processing.app.debug.Compiler.build (Compiler.java:122)
at processing.app.Sketch.build (Sketch.java:1109)
at processing.app.Sketch.build (Sketch.java:1084)
at processing.app.Editor $ BuildHandler.run (Editor.java:1955)
Sketch too big; see http://www.arduino.cc/en/Guide/Troubleshooting#size for discount tips.
Hello,
just to tell you after checking the code it came out that the sketch is too gro. but only that I am new to the world of arduino programming and I do not know how to modify it.
cordialment
Amen
Boa tarde.
Estou mexendo no arduino pela primeira vez, tentei criar um código a partir de combinação de dois que encontrei na internet, que seria um estacionamento inteligente, sendo que utilizaria 2 arduino uno. Um sendo transmissor e outro recepitor, porque quero utilizar o RF433Mhz. Esta dando erro no transmissor e com isso não consigo colocar o projeto pra testar.
Oi Paulo,
Qual erro está apresentando o transmissor?
Abraço!
Adilson
hi. svp aidez moi avec le code du récepteur car après compilation il indique qu’il est trop gros .svp
Bonjour Quelle carte utilisez-vous? Ici, sur mon Arduino Uno, il se compile normalement, il ne montre pas d’erreur de mémoire insuffisante.
Je vous remercie!
Adilson
Bonjour; s’il vous plait j’aimerais savoir si il est possible de changer le module rf 433 mhz par le module sans fil HC-12 ?
si oui alors j’aimerais savoir si le code reste le même ou sera changé ?
merci par avance.
Bonjour!
Ils fonctionnent à des fréquences différentes, mais les deux sont très faciles à utiliser.
Salutations!
Adilson
ok
svp pouvez vous m’aider pour le code ? je suis nouveau en programmation Arduino
aidez moi pour le code svp
Oi Boa tarde, gostei muito do projeto e gostaria de saber se tem como adapta-lo para fazer com Wi-fi, ao invés de usar RF