Componentes Eletronicos

Display LCD + Módulo RF para Detecção de Presença

Eletrogate 11 de julho de 201710 min

Introdução

Neste artigo vamos falar de um tópico muito útil a todos os desenvolvedores de sistemas embarcados e Arduino. Trata-se do Display LCD e dos módulos de comunicação sem fio RF. Vamos apresentar o funcionamento de um tradicional display LCD 16×2 e também explicar um pouco do módulo RF Transmissor e Receptor RF 433MHz. 

Além de conhecer como cada um desses componentes funcionam, vamos mostrar uma aplicação no qual vamos transmitir a leitura de um sensor óptico-reflexivo via RF de um Arduino para outro. No Arduino que recebe o sinal (módulo RF receptor), está interfaceado um display LCD no qual vamos mostrar os dados recebidos via rádio. Preparado? Vamos lá!

Se você ainda não sabe como funciona o sensor óptico-reflexivo, acesse o nosso post aqui no blog sobre ele e aprenda.

Introdução Display 16×2

O display 16×2 é um dispositivo que possui interface para comunicação e controle padronizada. São fáceis de serem controlados e graças a essa padronização é possível trocar um display 16×2 de um fabricante por outro diferente sem maiores problemas.

A tecnologia utilizada nos displays tradicionais é LCD (Liquid Crystal Display). Mais recentemente modelos mais modernos com tecnologia e OLeds , os LEDS orgânicos, já estão sendo encontrados também.

A grande vantagem e razão pela qual até hoje é componente popular é o seu preço e a facilidade de implementação em projetos eletrônicos. Antes dos displays LCD, a interface gráfica usada para mostrar caracteres alfa numéricos era os displays a LED de x segmentos(os mais comuns eram de 7, 14 ou 16 segmentos).

Esses componentes mais antigos utilizavam vários leds (7,14 ou 16) dispostos em segmentos, de forma que dependendo de qual conjunto de leds fosse aceso, um determinado caractere seria mostrado.

Especificações do display

Na hora de comprar um display LCD, você vai encontrar diversas opções além do mais tradicional 16×2. A especificação é dada em relação ao número de caracteres por linha e o número de linhas. Assim, 16×2 significa que o display pode exibir 16 caracteres em cada linha, e possui 2 linhas. Alguns valores típicos para essas especificações são:

  • Quantidade de caracteres padrão de mercado: 8, 12, 16, 20, 24 e 40;
  • Quantidade de linhas mais comuns: 1, 2 e 4;
  • Cores de fundo(backlight): Azul ou verde;
LCD 16x2

Display LCD 16×2. Créditos: Eletrogate

O display que vamos trabalhar é de 16 colunas e 2 linhas (16×2) e com backlight azul e caracteres brancos. A interface com Arduino é feita por meio de 16 pinos. Em geral apenas 12 são utilizados de fato. Os pinos do LCD são:

  • Pino de register select (RS): Controle em que parte da memória(do LCD) o usuário está escrevendo os dados. São duas opções, você pode escrever um dado para ser mostrado no display, ou uma instrução no MCU do display;
  • Pino de Read/Write (R/W): Seleciona se está em modo de leitura ou de escrita;
  • Pino de Enable: Habilita a escrita de dados nos registradores;
  • 8 pinos de dados (D0 -D7). Os estados de cada pino desses corresponde aos bits que você está escrevendo em um registrador do MCU (do display), ou os valores que você lê de um registrador quando está no modo de leitura.
  • Pinos de alimentação VCC e GND, do LCD e do Backlight;
  • Pino V0 de ajuste de contraste;

Introdução Módulos RF 430MHz

Os módulos Receptor e Transmissor 430MHz são pequenos, possuem custo acessível e são bastante práticos e fáceis de serem ligados com Arduino. O módulo transmissor é alimentado com tensão entre 3,5 e 12V. A tensão de alimentação influi diretamente no alcance do sinal. Com a tensão de 3,5V o alcance é de 20 metros. Com a tensão de 12V o alcance chega a 200 metros. É recomendado que a grandes distâncias você use uma antena, mas para aplicações de bancada e até 20 metros não é necessário.

Com um RF Transmissor + Receptor 433 Mhz é possível substituir ligações físicas e enviar dados de forma remota. O kit que vamos utilizar opera na frequência de 433 MHz, mas há também no mercado o kit de 315 MHz, cujo modo de funcionamento é exatamente o mesmo.

O sinal de rádiofrequência é modulado em AM (Amplitude Modulation), ou seja, a informação é transmitida nas ondas de 433 MHz por meio da variação da amplitude desses sinais de rádio. A taxa de transmissão não é muito alta, o que pode ser um limitador dependendo das especificações de seu projeto. Os módulos de 433 MHz  operam com  4KB/s de taxa de transferência.

Módulo RF 433 MHz

Módulo RF Transmissor e receptor 433 MHz. Créditos: Eletrogate

A pinagem do transmissor é (da esquerda para a direita):

  • Dados;
  • VCC;
  • GND;

Já o receptor possui a seguinte pinagem (também da esquerda para a direita):

  • VCC;
  • Dados;
  • Dados;
  • GND;

Aplicações

Displays LCD 16×2 e suas outras variações têm aplicações as mais diversas. Qualquer projeto eletrônico embarcado no qual seja necessário mostrar algum dado para o usuário pode ser feito com um display LCD. Produtos eletrônicos e eletrodomésticos usam extensivamente esse componente para mostrar informações para os usuários.

Os módulos RF são aplicados para substituir ligações por fios e conexões de cobre. Assim, é possível ler um sensor e transmitir a informação sem fio para um outro circuito. Qualquer projeto no qual seja preciso utilizar comunicação sem fio pode ser aplicado com os módulos RF. As limitações são o alcance e a taxa de transmissão, que deve estar de acordo com as especificações do projeto.

Caso o ambiente externo seja muito carregado de interferência eletromagnética pode ser que a comunicação não seja tão boa também. Para ambientes hostis e com muita interferência outros protocolos de comunicação sem fio são mais adequados.


Descrição do Projeto

Em nosso projeto prático nós vamos fazer o seguinte:

Monitorar um sensor óptico-reflexivo com Arduino e sempre que um objeto for identificado pelo sensor, enviar o sinal de aviso para outro arduino e mostrar no display LCD uma mensagem de detecção de presença “

Parece um projeto que pode ser usado em várias aplicações práticas né? Essa é exatamente a nossa ideia. Vamos para a implementação agora. Começando pelos aspectos de hardware!

Aspectos de Hardware

Materiais necessários para o projeto com Display LCD + Módulo RF para Detecção de Presença

cita_cart

Como são dois Arduinos, serão duas montagens. A primeira delas você ver na figura abaixo em que está a ligação do Arduino para monitorar o sensor reflexivo e o transmissor RF:

Montagem 1

Montagem do transmissor RF junto com sensor reflexivo

A segunda montagem é a que vai receber o receptor RF, o display LCD e o segundo Arduino. Na ligação do display com o Arduino Uno utilizamos  4 pinos de dados(D4, D5, D6, D7) conectados aos pinos digitais 3, 4, 5 e 6. Ligamos os 2 pinos de controle(RS e E) do display aos pinos digitais 8 e 9. O pino de R/W está aterrado, o que significa que vamos apenas escrever dados. De fato, nós apenas vamos receber os dados via RF e escrever no Display. Assim não precisamos ligar um pino digital do Arduino no RW do display. Para o ajuste de contraste ligamos um potenciômetro de 10K.

Veja como é o circuito na figura abaixo:

Receptor

Montagem do circuito Receptor

VCC e GND são ligados ao VCC e GND do Arduino, respectivamente. Os pinos A e K do display também são de alimentação. O pino A é de Anodo, é o sinal positivo para acender o backlight, ligamos ele também no VCC por meio de um resistor de 330R. O pino K é o catodo, que ligamos ao GND. O pino de dados do receptor é ligado ao pino 12.

Aspectos de Software

Para fazer o nosso software nós utilizamos dois bibliotecas. Uma delas é para controlar o lcd e é nativa da IDE, trata-se da LiquidCrystal.h. A outra é uma biblioteca desenvolvida por Mike McCaulay no âmbito do projeto PJRC.  Essa segunda biblioteca chama-se VirutalWire.h e você fazer o download aqui.

Como temos duas montagens, são dois firmwares, um para o circuito transmissor e outro para o circuito receptor.

Software Transmissor

Na figura abaixo temos as variáveis declaradas e a função void Setup(). Veja que incluímos a biblioteca VirtualWire.h para podermos utilizar as funções vw_set_tx_pin() e vw_setup(). Inicializamos os pinos de entrada e saída que vamos usar na void loop().

#include <VirtualWire.h>

const int rfTransmissor = 6;
int leituraSensor = 0;
const int led = 13;
const int saidaSensor = 7;
char presenca[10] = "presenca";
char ausente[10] = "ausencia";
int IsUpedated, IsUpdated2;

void setup(){
  IsUpdated = IsUpdated2 = 0;
  vw_set_tx_pin(rfTransmissor);
  vw_setup(2000);
  pinMode(led, OUTPUT); // Pino para ativar o led
  pinMode(saidaSensor, INPUT); // Pino para ler o sinal no coletor do fototranmissor
}

Na função void loop(), basicamente nós monitoramos o estado do sensor reflexivo. Quando um objeto é detectado, nós enviamos uma mensagem para o módulo transmissor por meio da função vw_send(msg, msgLenght). As variáeis IsUpdated e IsUpdated2 são usadas para garantir que as mensagens sejam enviadas apenas uma vez a cada detecção de objeto.

void loop(){
  leituraSensor = digitalRead(saidaSensor);

  if (leituraSensor == 0){
    IsUpdated++;
    if (IsUpdated == 1){
      vw_send((uint8_t *)presnca, strlen(presenca));
      vw_wait_tx();
      digitalWrite(led, HIGH);
      IsUpdated2 = 0;
    }
  }else{
    IsUpdated2++;
    if (IsUpdated2 == 1){
      vw_send((uindt8_t *)ausente, strlen(ausente));
      vw_wait_tx();
      digitalWrite(led, LOW);
      IsUpdated = 0;
    }
  }
  delay(5);
}

Software Receptor

Na figura abaixo temos as variáveis e a função void Setup() usadas no software receptor. Como essa montagem possui interface com o display LCD, nós incluímos a biblioteca LiquidCrystal.h. Na função void Setup() nós indicamos o pino usado para receber os dados do receptor e inicializamos a biblioteca VirtualWire com 2000 bytes/s. Essa taxa tem que ser igual à taxa setada no software do transmissor. Chamamos também a função v_rx_start() para começar as leituras com o receptor e RF e a função lcd.begin(), para inicializar o display LCD.

#include <VirtualWire.h>
#include <LiquidCrystal.h>
#define rfReceptor 12
#define led 13 // Onboard LED

int IsUpdated = 0;
int IsUpdated2 = 0;
int Escreveu = 0;
int ctrl1, ctrl2;
unsigned int data = 0; // variável usada para armazenar dados recebidos
LiquidCrystal lcd(9, 8, 3, 4, 5, 6); // RS E D4 D5 D6 D7 D8
byte message[VW_MAX_MESSAGE_LEN];
byte msgLength = VW_MAX_MESSAGE_LEN; 

void setup(){
  Serial.begin(9600);
  vw_set_rx_pin(rfReceptor);
  vw_setup(2000); // Bits por segundo
  vw_rx_start(); // Inicializa o receptor
  lcd.begin(16, 2);
  delay(2000);
}

Na função void loop() nós monitoramos se algum dado chegou para o receptor. Quando uma nova mensagem chega, nós transcrevemos a mesma para a tela do display.

void loop(){
  if (vw_get_message(buffer, &bufferlenght)){
    lcd.clear();
    digitalWrite(led, HIGH);
    for (int i = 0; i < bufferlenght; i++){
      Serial.print(buffer[i], HEX);
      lcd.write(buffer[i]);
    }
    digitalWrite(led, LOW);
  }
  delay(500);
}

Você também pode conferir o código completo e atualizado visitando o repositório desse post no GitHub da Eletrogate.


Botando pra Rodar!

Repare que no circuito transmissor nós declaramos as mensagens “presenca” e “ausente” para indicar quando um objeto foi detectado ou não. Essas são as mensagens enviadas via RF pela função vw_send(). Assim sendo, no circuito receptor, esperamos que essas mensagens sejam mostradas no display LCD. “Presenca” indicando que o sensor reflexivo do outro circuito identificou a presença de um objeto, e “ausencia”, indicando que nenhum objeto está sob alcance do sensor naquele instante. Veja as imagens de como ficou!

Montagem LCD + RF

Conheça a Metodologia Eletrogate e ofereça aulas de robótica em sua escola!


Considerações Finais

Esse projeto mostrou o funcionamento do display LCD 16×2 e dos módulos RF 433MHZ. Na documentação da biblioteca Virtualwire.H você ainda pode encontrar outras funções para incrementar mais ainda o seu projeto. Com esse aprendizado você já pode fazer os seus primeiros projetos de leitura de sensores e acionamentos remotos por meio de conexões RF. Deixe seu comentário aqui no blog!


Sobre o Autor


Vitor Vidal

Engenheiro eletricista, mestrando em eng. elétrica e apaixonado por eletrônica, literatura, tecnologia e ciência. Divide o tempo entre pesquisas na área de sistemas de controle, desenvolvimento de projetos eletrônicos e sua estante de livros.


Eletrogate

11 de julho de 2017

A Eletrogate é uma loja virtual de componentes eletrônicos do Brasil e possui diversos produtos relacionados à Arduino, Automação, Robótica e Eletrônica em geral.

Tenha a Metodologia Eletrogate dentro da sua Escola! Conheça nosso Programa de Robótica nas Escolas!

Eletrogate Robô

Cadastre-se e fique por
dentro de novidades!