Display LCD + Módulo RF para deteção de presença

Neste artigo vamos falar de um tópico muito útil para todos os desenvolvedores que utilizam 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 Recetor RF 433MHz.

Além de conhecer como cada um destes 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á ligado um display LCD no qual vamos mostrar os dados recebidos via rádio. Preparado? Vamos lá!

Se ainda não sabe como funciona o sensor óptico-reflexivo, acesse o nosso artigo 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). Hoje em dia já existem modelos mais modernos com tecnologia OLED.

A grande vantagem e razão pela qual até hoje é um 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 a que, dependendo de quais LEDs fossem acesos, um determinado caracter 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;

Display LCD 16×2

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

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

Introdução Módulos RF 433MHz

Os módulos Recetor e Transmissor 433MHz são pequenos, possuem um custo acessível e são bastante práticos e fáceis de serem ligados com o Arduino. O módulo transmissor é alimentado com tensão entre 3,5 e 12V. A tensão de alimentação influencia 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 para as grandes distâncias use uma antena, mas para aplicações de bancada e até 20 metros não é necessário.

Com um RF Transmissor + Recetor 433MHz é 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 radiofrequê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 do seu projeto. Os módulos de 433 MHz  operam com  4KB/s de taxa de transferência.

Módulo RF Transmissor e receptor 433 MHz

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

  • Dados;
  • VCC;
  • GND;

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

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

Aplicações

Qualquer projeto eletrónico 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 este 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

Neste projeto prático vamos fazer o seguinte:

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

Este projeto pode ser utilizado em várias aplicações práticas. Vamos para a implementação agora. Começando pelos aspetos de hardware!

Aspetos de Hardware

Antes de tudo, a lista de componentes que vai precisar para este projeto é a seguinte:

Como são dois Arduinos, serão duas montagens. A primeira delas encontra-se na figura abaixo na qual está a ligação do Arduino para monitorar o sensor reflexivo e o transmissor RF:

Montagem do transmissor RF junto com sensor reflexivo

A segunda montagem é a que vai receber o recetor 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 controlo (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 de ligar um pino digital do Arduino no RW do display. Para o ajuste de contraste ligámos um potenciómetro de 10K.

Veja como é o circuito na figura abaixo:

Montagem do circuito Recetor

O VCC e o GND são ligados ao VCC e ao GND do Arduino, respetivamente. Os pinos A e K do display também são de alimentação. O pino A é de ânodo e é o sinal positivo para acender o backlight. Ligamos também o VCC por meio de uma resistência de 330Ω. O pino K é o cátodo, que ligamos ao GND. O pino de dados do recetor é ligado ao pino 12.

Aspetos de Software

Para fazer o software utilizámos duas 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.

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

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(). Iniciámos também os pinos de entrada e saída que vamos usar na void loop().

Função Void Setup() do programa transmissor

Na função void loop(), basicamente monitorizámos o estado do sensor reflexivo. Quando um objeto é detetado, o Arduino envia uma mensagem para o módulo transmissor por meio da função vw_send(msg, msgLenght). As variáveis IsUpdated e IsUpdated2 são usadas para garantir que as mensagens são enviadas apenas uma vez a cada deteção de objeto.

Função Void Loop() do programa transmissor

Software Recetor

Na figura abaixo temos as variáveis e a função void Setup() usadas no software recetor. Como esta montagem possui interface com o display LCD, devemos incluir a biblioteca LiquidCrystal.h. Na função void Setup() indicámos o pino usado para receber os dados do recetor e iniciámos a biblioteca VirtualWire.h com 2000 bytes/s. Esta taxa tem que ser igual à taxa definida no software do transmissor. Utilizamos também a função v_rx_start() para começar as leituras com o recetor e RF e a função lcd.begin(), para iniciar o display LCD.

Função Void Setup() do programa recetor

Na função void loop() o Arduino monitoriza se algum dado chegou para o recetor. Quando uma nova mensagem chega, o Arduino transcreve a mesma para a tela do display.

Função void Loop() do programa recetor

Hora de testar!

Repare que no circuito transmissor declarámos as mensagens “presença” e “ausente” para indicar quando um objeto foi detetado ou não. Estas são as mensagens enviadas via RF pela função vw_send(). Assim sendo, no circuito recetor é esperado que estas mensagens sejam mostradas no display LCD: “presença”, indicando que o sensor reflexivo do outro circuito identificou a presença de um objeto, e “ausente”, indicando que nenhum objeto está no alcance do sensor naquele instante. Veja a imagem de como ficou!

Montagem LCD+RF