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.
