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:


12 - Arduino no protoboard com conversor TTL-USB

O microcontrolador que está inserido na placa Arduino pode ser retirado de seu soquete e instalado num protoboard ou mesmo num circuito impresso. Para isso, é necessário alimentá-lo com 5V, conectar um cristal de 16MHz e 2 capacitores de 22pF, conforme esquema abaixo que se refere a um microcontrolador de encapsulamento DIP28, como o ATMEGA8, ATMEGA168 ou ATMEGA328.


A correspondência de pinagem entre o microcontrolador e aquela utilizada no ambiente de programação é exibida na figura abaixo:



Se, por exemplo, no ambiente de desenvolvimento fosse elaborado um programa que alternasse o nível de tensão do pino digital 13 entre alto e baixo, conforme exemplificado no item 7 deste tutorial, tal efeito seria notado no pino 19 do microcontrolador.

As placas Arduino normalmente contêm um chip conversor de sinais de USB para TTL, pois o computador se comunica pela USB com o ambiente externo e o microcontrolador por meio de níveis lógicos TTL. Assim, este conversor funciona como um tradutor entre o computador e o microcontrolador, o que permite a comunicação entre ambos.

Um microcontrolador com bootloader Arduino pode ser programado diretamente num circuito impresso ou num protoboard utilizando um conversor USB-TTL, sem a necessidade de uma placa Arduino completa.

O conversor deve dispor de 2 pinos:
  • RXD para recepção de dados
  • TXD para recepção de dados
O pino RXD do conversor deve estar conectado ao pino TXD do microcontrolador e o pino TXD do conversor, ao pino RXD do microcontrolador. Nos microcontroladores ATMEGA8, ATMEGA168 ou ATMEGA328 com encapsulamento DIP28, o RXD é o pino 2 e o TXD é o pino 3. (vide figura acima)

A conexão do microcontrolador ao conversor deve ser feita preferencialmente utilizando-se resistores entre 1k~10k ohm, conforme figura:
Uma vez que o conversor TTL-USB está conectado ao computador pela porta USB e ao microcontrolador conforme figura acima, é possível programar o chip a partir do ambiente de desenvolvimento Arduino.

Uma fez que um programa foi compilado, deve-se seguir os passos abaixo para enviá-lo ao chip:
  • clicar em:

  • pressionar rapidamente o botão do circuito e liberá-lo em seguida

É importante observar que o conversor TTL-USB pode não ser prontamente visível ao computador, pois pode haver a necessidade de que seja instalado um driver que permita tal comunicação. Os fabricantes, via de regra, disponibilizam livremente para download o driver necessário.

A título de exemplo, o conversor exibido na figura abaixo (vide datasheet) funciona diretamente no sistema operacional Ubuntu, enquando que no Windows há necessidade de instalar este driver fornecido pelo fabricante.

11 - Eagle - Diagramação de circuitos eletrônicos

Há uma série de softwares para a confecção de diagramas de circuitos eletrônicos, sendo encontrados tanto os que são pagos como os gratuitos. Neste tutorial será abordado o software Eagle que se tornou bastante popular e pode ser obtido aqui.
O Eagle em sua versão gratuita restringe a área de trabalho em 10 x 8 cm e 2 camadas, no entanto, estas limitações ainda permitem a confecção de circuitos de significativa complexidade, o que tem garantindo a sua popularização entre hobistas.

Assim que o Eagle é iniciado, surge a tela abaixo:


Neste ponto, é necessário iniciar um novo projeto o que pode ser feito em:

File-->New-->Project

Assim que criado o projeto, o próximo passo é criar o esquemático a partir de:

File-->New-->Schematic

Neste ponto deve surgir uma tela similar à exibida logo abaixo:


Para adicionar um componente ao diagrama basta clicar no botão Add que se encontra na barra lateral esquerda. Neste momento surge a tela:


Se for inserido mega8* no campo de pesquisa de componentes, surgirão todos os componentes cadastrados e cujos nomes se iniciam por "mega8". Se, por outro lado, for inserido mega8-P no campo de pesquisa, apenas o componentes com este nome específico é que será localizado.
Para visualizar toda a biblioteca de componentes sem a aplicação de filtros, basta deixar vazio o campo de pesquisa e pressionar ENTER.
Uma vez escolhido o componente desejado, basta pressionar OK e inseri-lo no diagrama.

Há diversos tutoriais do EAGLE na internet, assim, para aqueles que querem se aprofundar no assunto, segue abaixo uma série de links interessantes:
  • http://www.scribd.com/doc/7230019/Tutorial-Eagle-Portugues
  • http://www.handmades.com.br/index.php?option=com_content&task=view&id=77&Itemid=46
  • http://www.eletronica.org/arq_apostilas/apostila_eagle_4x.pdf

Outro programa bastante interessante e que permite elaborar circuitos como se estivessem no protoboard é o Fritizing. Na figura abaixo está um exemplo de circuito em que uma placa Arduino é conectada a outros componentes do protoboard.


10 - Fonte de 5V

Como pode ser observado no item 9 deste tutorial, o microcontrolador foi alimentado com 5V de tensão contínua ou 5VDC. No entanto, pode ser difícil encontrar uma fonte que forneça exatamente 5V. Isso acontece porque as fontes geralmente apresentam saídas múltiplas de 1,5VDC, simulando a tensão fornecida pelas pilhas comuns. Para contornar este problema, pode-se recorrer a um regulador de tensão.
Os reguladores de tensão exibidos na figura abaixo apresentam um pino de entrada, um de saída e outro conectado ao terra. Aplicando-se um intervalo de tensões em seu pino de entrada, é obtido uma tensão fixa no pino de saída. Assim, pode-se utilizar a saída de um regulador de 5V para alimentar o microcontrolador, valendo observar que a tensão de entrada do regulador deverá sempre ser superior à de saída e inferior a um limite definido em seu datasheet.
Nas figuras podem-se observar 2 encapsulamentos para o regulador de tensão. A primeiro deles é o TO220 e é utilizado para circuitos que consomem correntes mais elevadas de até 1,5A e o segundo é o TO92 para correntes de 100mA, sendo o mais comumente utilizado.

Um regulador de 5V bastante empregado é o LM7805 e no circuito abaixo tem-se um exemplo de como utilizá-lo. Como pode ser observado, há necessidade de se adotar capacitores para garantir a estabilidade da tensão de saída.

9 - Arduino no protoboard

O microcontrolador que está inserido na placa Arduino pode ser retirado de seu soquete e instalado num protoboard ou mesmo num circuito impresso. Para isso, é necessário alimentá-lo com 5V, conectar um cristal de 16MHz e 2 capacitores de 22pF, conforme esquema abaixo que se refere a um microcontrolador de encapsulamento DIP28, como o ATMEGA8, ATMEGA168 ou ATMEGA328.


A correspondência de pinagem entre o microcontrolador e aquela utilizada no ambiente de programação é exibida na figura abaixo:

Se, por exemplo, no ambiente de desenvolvimento fosse elaborado um programa que alternasse o nível de tensão do pino digital 13 entre alto e baixo, conforme exemplificado no item 7 deste tutorial, tal efeito seria notado no pino 19 do microcontrolador.