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.
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.
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:
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:
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.
A pinagem do transmissor é (da esquerda para a direita):
Já o receptor possui a seguinte pinagem (também da esquerda para a direita):
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.
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!
Materiais necessários para o projeto com Display LCD + Módulo RF para Detecção de Presença
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:
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:
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.
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.
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); }
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.
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!
Conheça a Metodologia Eletrogate e ofereça aulas de robótica em sua escola!
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!
|
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!