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.