15 - Aplicação: Display LCD de caracter

Os displays LCD representam uma forma prática e de baixo custo para exibir informações. Há diversos tipos de displays como os de caracter, gráficos, TFT, OLED, entre outros. Neste tópico será abordado o de caracter, que são os mais simples e baratos.

Os displays de caracter são diferenciados pelo número de linhas, colunas, cor, dimensões e se têm ou não backlight. Os displays com o recurso de backlight ou luz de fundo são particularmente úteis em ambientes escuros.

Nas figuras abaixo temos alguns exemplos de displays:




display 8x2 (8 colunas e 2 linhas) display 16x1 (16 colunas e 1 linha)


Independentemente de seu formato, os displays de caracter são programados de uma forma padronizada. Isto é possível graças à aderência dos fabricantes ao controlador HD44780, o qual é responsável pelo troca de informações do display com o mundo exterior.

Os displays apresentam os seguintes pinos:
  • VSS :  0V (terra)
  • VDD ou VCC : 3.3V ou 5V (valores típicos)
  • Vo ou Ve : tensão de contraste
  • RS : pino de seleção de envio de comando ou dados
  • R/W : pino de leitura ou escrita de dados
  • E : abilita o display para leitura/escrita
  • D0~D7 : 8 pinos de dados
  • Backlight Anodo : 3.3V ou 5V (valores típicos)
  • Backlight Catodo : 0V (terra)
Na figura abaixo é visualizada a pinagem de um display 16x2 com backlight:


O ambiente arduino disponibiliza a biblioteca LiquidCrystal que facilita a programação de módulos de displays LCD. Esta biblioteca já acompanha o ambiente, sendo disponibilizados exemplos de sua utilização em File-->Examples-->LiquidCrystal.

Para testar um display 16x2 que opera em 5V, similar ao da figura acima, conecte-o à sua placa arduino conforme o diagrama abaixo:

Para realizar um teste preliminar de funcionamento do display, varie o potenciômetro de 10k ohms até que se observe uma barra horizontal conforme a figura abaixo:



Em seguida, carregue o programa abaixo para visualizar a mensagem "teste de LCD" no display e uma contagem de tempo em segundos:

#include <LiquidCrystal.h>

// inicia a biblioteca

// LiquidCrystal lcd(RS, E, D4, D5, D6, D7)
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
  // lcd com 16 colunas e 2 linhas
  lcd.begin(16, 2);
  // envia mensagem para o LCD.
  lcd.print("teste de LCD");
}

void loop() {
  // coloca o cursor na coluna 0 e linha 1

  lcd.setCursor(0, 1);
  // envia o tempo em segundos para o LCD
  lcd.print(millis()/1000);
}


O backlight é formado por leds ligados em série. Por estes leds recai uma tensão e corrente típica que são informados pelo datasheet do display. Na figura abaixo é exibido como esta informação é fornecida e como o backlight é energizado:

datasheetcircuito energização

Neste caso, para uma tensão típica de 4.1V e corrente de 120mA, seria necessário utilizar um resistor limitador de corrente () dado por:



Vale observar que podem ser utilizados outros valores de tensão, além de 5V, para alimentar o backlight. Para tanto,  basta ajustar de forma que a corrente não supere os 120mA especificados pelo datasheet.

14 - Aplicação : sensor de distância HC-SR04

O sensor HC-SR04 permite detectar objetos que lhe estão distantes entre 2 cm e 500 cm com uma resolução de 0,3 cm. Estes sensores emitem um sinal ultrasônico que reflete num objeto e retorna ao sensor. O sinal de retorno é captado, permitindo-se deduzir a distância do objeto ao sensor tomando o tempo de trânsito do sinal.

O velocidade do sinal ultrasônico é de aproximadamente 340 m/s no ar, assim, se o sensor estiver a uma distância d do objeto, o sinal percorrerá uma distância equivalente a 2d para sair e retornar ao sensor, conforme figura abaixo:



Dessa forma, o tempo que o sinal leva para sair e retornar ao sensor permite calcular a distância d pela equação:  



Na figura abaixo é visualizado o sensor HC-SR04. Nele são encontrados 4 pinos de conexão que da direita para a esquerda são respectivamente :
  • VCC : alimentação de 5V
  • TRIG : pino de gatilho
  • ECHO : pino de eco
  • GND : terra


O pino TRIG normalmente deve estar em nível baixo. Para iniciar uma leitura de distância, o mesmo deve ser colocado em nível alto por 10us e retornar para nível baixo em seguida. Neste momento, 8 pulsos de 40kHz são emitidos e no pino ECHO será gerado um sinal em nível alto proporcional à distância do sensor ao objeto. Em seguida, basta verificar o tempo em que o pino ECHO permaneceu em nível alto e utilizar a fórmula abaixo para obter a distância:


A biblioteca Ultrasonic para o arduino facilita o cálculo da distância. Basta descompactá-la e copiar a pasta "Ultrasonic" para o diretório "libraries" do ambiente arduino. Um exemplo de utilização da biblioteca segue abaixo, onde o pino digital 12 foi conectado ao TRIG e o pino 13 ao ECHO.

#include "Ultrasonic.h"

Ultrasonic ultrasonic(12,13); // TRIG = pino 12     ECHO = pino 13

void setup() {
   Serial.begin(9600);
}

void loop()
{
   Serial.print("distancia em centimetros : ");
   Serial.println(ultrasonic.Ranging(CM));
   delay(1000);
}


Para monitorar as distâncias amostradas, basta pressionar o botão "Serial Monitor" no ambiente arduino para obter uma tela similar a:


13 - Aplicação : sensor de temperatura DS18B20

O sensor DS18B20 utiliza o protocolo de comunicação 1-Wire. Este protocolo permite a conexão de inúmeros dispositivos numa mesma rede, utilizando apenas 1 fio para a troca de dados.

O sensor DS18B20 fornece temperaturas entre -55°C e 125°C com uma precisão de ±0.5°C no intervalo de -10°C to +85°C. Vide datasheet. Ele é identificado na rede 1-Wire a partir de um código único de 64 bits.

Na figura abaixo são observados os seus pinos no encapsulamento TO92. Nota-se que o pino GND corresponde ao terra, VDD a 5V e no pino DQ é fornecida a informação de temperatura.


Um microcontrolador pode ler informações deste sensor utilizando um único fio e resistor de pull-up, sendo normalmente utilizado um resistor de 4k7 ohms.

No circuito abaixo observa-se a conexão do sensor com uma placa arduino, sendo que foi escolhida a porta digital 2 do arduino para a leitura do sensor.


Para este circuito, é possível monitorar as temperaturas amostradas pelo sensor utilizando o código arduino abaixo. As bibliotecas OneWire e DallasTemperature podem ser obtidas aqui. Basta descompactar as bibliotecas no diretório "libraries" do ambiente arduino.


#include "OneWire.h"
#include "DallasTemperature.h"


#define ONE_WIRE_BUS 2       // sensor conectado na porta digital 2


OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

void setup() {
  Serial.begin(9600);
  sensors.begin();
}

void loop() {
  sensors.requestTemperatures();

  Serial.print("Temperatura no sensor 1 : "); // pode haver mais
  Serial.println(sensors.getTempCByIndex(0)); // do que um sensor
}


Para verificar as temperaturas amostradas, basta pressionar a tecla "Serial Monitor" no ambiente de programação arduino e visualizar uma tela similar à figura abaixo: