Pular para o conteúdo principal

LCD gráfico 128×64 controlador ST7920 para o Arduino temperatura e umidade

 


COPIA DA PAGINA

https://thesolaruniverse.wordpress.com/2017/08/11/an-128x64-graphic-lcd-display-with-st7920-controller-for-the-arduino-displaying-temperature-and-relative-humidity/


Um display LCD gráfico 128×64 com controlador ST7920 para o Arduino, exibindo temperatura e umidade relativa

por Floris Wouterlood – Holanda – 11 de agosto de 2017

Resumo
Os monitores LCD gráficos 128×64 são baseados na tecnologia LCD (monocromático), mas oferecem recursos gráficos interessantes porque cada pixel é endereçável individualmente. Esses visores são mais complicados de programar do que os visores LCD 'comuns' de 16×2 ou 20×4 que apresentam duas ou quatro linhas de posições de caracteres fixas. A recompensa é a apresentação com considerável flexibilidade graças à existência de caracteres embutidos e, no software para o Arduino, uma extensa biblioteca gráfica u8g, ou seja, a mesma biblioteca que suporta a exibição de gráficos em displays OLED. Aqui discutimos a fiação de um display LCD 12864B gráfico 12864B baseado em ST7920. Este display é usado para apresentar dados coletados com um sensor de temperatura Dallas DS18B20 e um sensor de umidade relativa DHT11.

Introdução
Uma das soluções para exibir dados coletados com sensores conectados a uma placa microcontroladora Arduino é através de um display LCD gráfico 128×64 (Figura 1). oferecem recursos gráficos onde até as imagens podem ser exibidas (claro em monocromático). Neste artigo, discutimos um tipo muito comum de quebra de tela LCD 128×64 com base no controlador ST7920. Apesar dos impressionantes 20 pinos que decoram esta placa apenas três pinos de um Arduino são essenciais para fazer o display funcionar, ou seja: no modo SPI. Este modesto 'requisito de pinos' torna o display ST7920 atraente para uso em projetos Arduino onde outros pinos precisam ser reservados para todos os tipos de dispositivos periféricos e ações. As telas estão na direção vertical duas vezes maiores que as telas LCD 20×4, oferecendo boa legibilidade. A biblioteca u8g escrita por Oliver Kraus ('Olikraus') oferece uma seleção de funções gráficas, caracteres especiais e fontes de texto que tornam o uso deste tipo de exibição ainda mais atraente.

Anúncios
DENUNCIAR ESTE ANÚNCIO

Figura 1: Fiação de um display LCD gráfico 128×64, no modo SPI. Apenas 3 pinos digitais do Arduino são necessários para obter saída no display: pinos que suportam as funções RS, R/W e E. Aqui, RS é conectado ao pino 12 do Nano, R/W ao pino 11 e E ao pino 13 Esses pinos precisam ser declarados na parte do construtor de exibição do esboço. O visor mostra alguns dos recursos gráficos oferecidos pela biblioteca u8g: triângulos, linhas, círculos, texto.

Eletrônicos e suprimentos
1 placa microcontroladora Arduino Nano, placa de ensaio, fios de jumper Dupont, placa breakout de display LCD 128×64 ST 7920, 1 potenciômetro de 10 kΩ, 1 resistor de 220 Ω. Adicional: 1x sensor de temperatura/umidade relativa DHT11, 1x sensor de temperatura Dallas DS18B20, 1x resistor de 10kΩ, 1x resistor de 4,7 k10kΩ.

Fiação
A placa de interrupção do display LCD tem 20 pinos para conectividade, rotulados GND, VCC, V0, RS, R/W, E, DB0, DB1, DB2, DB3, DB4, DB5, DB6, DB7, PSB, NC, RST, VOUT , BLA e BLK.
A Figura 1 mostra a conectividade básica através da interface SPI (SPI significa Serial Peripheral Interface). GND é conectado ao GND do Arduino, 5V a 5V, V0 ao limpador de um potenciômetro de 10kΩ (isto é para adaptar o contraste entre caracteres ou gráficos do LCD contra o fundo), RS ao pino 12, R/W ao pino 11 e E ao pino 13. Os pinos DB0 a DB7 da placa breakout precisam ser conectados somente se o modo paralelo for considerado. O PSB está conectado ao terra, enquanto o BLA precisa de 3,3V (luz LED de fundo do display LCD) e o BLK precisa de conexão ao GND. O BLA pode ser conectado ao pino de 5V do Arduino com um resistor de 220Ω em série para reduzir a tensão, ou pode ser conectado diretamente ao pino de 3,3V do Arduino.

Confusão na nomenclatura
Enquanto os protocolos SPI funcionam com pinos marcados como MISO, MOSI, CLK e CS, a placa de breakout ST7920 tem designações de pinos completamente diferentes enquanto suporta o protocolo SPI. MISO e MOSI são necessários para o modo mestre/escravo e não importam na construção atual. CLK (relógio) e CS (seleção de chip) são necessários, assim como o pino de dados (R/W) e o pino marcado como PSB (este último precisa ser conectado ao GND – pino ajustado continuamente em BAIXO para informar ao chip controlador do display que está deve funcionar em modo serial (PSB HIGH significa modo paralelo).
Resumido: SPI's CLK é suportado pelo pino 'E' na placa de breakout do display, os dados são suportados pelo pino 'R/W' e Chip Select pelo pino 'CS'. O PSB deve ser conectado ao GND e os fios ao GND, VCC, VD, BLA e BLK fornecem energia para o breakout da tela e regulam a luz de fundo e o contraste de pixels versus fundo.

Anúncios
DENUNCIAR ESTE ANÚNCIO

Flexibilidade de seleção de pinos
O SPI não é mapeado em hardware, ou seja, o protocolo não requer pinos específicos do Arduino. No entanto, os pinos do Arduino usados ​​para conectar CLK, data e CS precisam ser declarados no construtor de exibição (veja abaixo). O uso de pinos diferentes é permitido desde que sejam declarados corretamente no construtor de exibição, por exemplo, pinos 2, 3 e 4.
.
Sensores e sua conectividade
Um Dallas DS18B20 é um sensor de temperatura preciso que possui três fios: 5V, GND e DATA. O fio DATA pode ser conectado a um pino Arduino de sua escolha; neste exemplo pino 6 (Figura 2). Um DHT 11 tem quatro pinos dos quais (visto de frente, da esquerda para a direita, Fig. 2) o primeiro pino precisa ser conectado com 5V, o segundo é DATA, neste exemplo conectado ao pino 8 do Arduino, o terceiro pino não está conectado enquanto o quarto pino precisa de GND. Enquanto um DHT fornece umidade relativa e temperatura, a precisão de um Dallas DS18B20 é muito melhor. Além disso, este artigo foi escrito para mostrar que as leituras de dois sensores completamente diferentes podem ser facilmente exibidas neste display LCD. Observe os resistores de pull up que são necessários para obter sinais de dados 'limpos' dos sensores.

Anúncios
DENUNCIAR ESTE ANÚNCIO

Figura 2: A fiação da placa de fuga do display LCD é a mesma da Figura 1, mas agora os sensores foram conectados ao Arduino: um Dallas DS18B20 – indicado com o círculo rosa, e um sensor de temperatura/umidade relativa DHT 11. Ambos os sensores requerem para retransmissão de dados apenas um pino do Arduino (e claro 5V e GND). Observe que todos os dados: temperatura e umidade do DHT são transmitidos através do fio DATA (cor branca). Ambos os sensores precisam de um resistor pull-up: o DS18B20 não funcionará sem um resistor de 4,7 kΩ enquanto o DHT11 precisa de um resistor pull-up de 10 kΩ

Sketch – notas
O sketch que fornece todas as instruções para o Arduino faz uso da biblioteca u8g escrita por Oliver Kraus (apelido no fórum do Arduino 'Olikraus'). Como o esboço (chamado 'LCD_128x64_ST7920_DS18B20_DHT11' pode ser baixado do site, discuto aqui o esboço do esboço e com mais detalhes duas partes complicadas.

As bibliotecas
necessárias são:
U8glib.h — biblioteca de controle de exibição gráfica,
OneWire.h — protocolo de barramento único para transferência de dados do sensor
DS18B20 DallasTemperature.h — biblioteca extra com instruções DS18B20.
DHT.h — biblioteca com instruções DHT

Variáveis ​​declaradas
Ambas as strings de caracteres, temp_string [5] e hum_string [5] são arrays de caracteres necessários no sketch devido à peculiaridade de que a biblioteca u8glib não oferece instruções para exibir os valores armazenados nas variáveis. Esta biblioteca aparentemente foi escrita especificamente para exibir gráficos. Um truque para contornar essa limitação é converter variáveis ​​em cadeias de caracteres e exibi-las no visor LCD. Os valores de temperatura e umidade devem ser armazenados em variáveis ​​float (porque 'floats' suporta notação decimal).

Construtor do display
Observe que esta linha contém as designações dos pinos para CLK, R/W e CS. A linha U8GLIB_ST7920_128X64 u8g (13, 11, 12, U8G_PIN_NONE); implica que CLK (pino marcado E no display breakout está conectado ao pino 13 do Arduino, pino marcado R/W no display breakout ao pino 11 do Arduino, e pino marcado RS no display breakout com pino 12 do Arduino .


Endereço do dispositivo DS18B20


DeviceAddress: Cada sensor DS18B20 individual tem sua própria identidade de 8 bytes, o Device Address. Através do protocolo de um fio, um sensor com um endereço de dispositivo específico recebe uma chamada para liberar seus dados (leitura de temperatura). Isso possibilita a leitura de vários sensores através de apenas um fio e um pino do Arduino.
O endereço do dispositivo de um DS18B20 pode ser encontrado através de um esboço 'DS18B20_address_finder.ino' – disponível para download no site. Você pode localizar este esboço ou um similar na internet.

Void loop() e void draw()
A essência da abordagem Olikraus de exibir matéria gráfica através de um Arduino com sua memória muito limitada em um dispositivo multipixel como o display LCD ST7920 128×64 é trabalhar com um cache cujo conteúdo é impresso em a posição apropriada no espaço de 128×64 pixels. Em analogia com um editor de periódico que trabalha com dois departamentos: Editorial e Impresso, uma tela é construída em void draw (), assim como as páginas de um periódico são compostas pela equipe editorial do Departamento Editorial da editora. Quando a tela estiver pronta ela é enviada via cache (a chamada 'nextPage()' ) para o Departamento de Impressão. Este procedimento é essencial para economizar memória preciosa.
Todas as instruções para cálculos e ações devem, portanto, estar localizadas na sub-rotina 'Draw()'.

Conversão de variável float para string de caracteres
O valor numérico da temperatura medida pelo DS18B20 é armazenado na variável float 'tempC', que contém, por exemplo, um valor de 24,2 graus centígrados. Este valor numérico é convertido em quatro caracteres: '2' – '4' – '.' e '2', e armazenados na string de caracteres 'temp_string” através da instrução:

dtostrf(tempC, 3, 1, temp_string);

Imediatamente depois, essa string é desenhada na tela começando no pixel 33,37 com a instrução: u8g.drawStr(33,27, temp_string;

e a linha é finalizada adicionando: u8g.drawStr(70,27, “*C”);

O mesmo é feito para o valor da umidade relativa informado pelo DHT11.

Anúncios
DENUNCIAR ESTE ANÚNCIO

Esboços

DS18B20_address_finder.zip — esboce para encontrar o endereço do dispositivo de qualquer sensor Dallas DS18B20. Deve ser executado separadamente.

LCD_128x64_ST7920_DS18B20_DHT11.zip — esboço que lê a temperatura e umidade dos respectivos sensores e exibe na tela, conforme mostrado na Figura 2.
































Comentários

Postagens mais visitadas deste blog

GPS NEO 6M NO ARDUINO PAGINA ELETROGATE

ESQUEMA DE ARDUINO DIY BÁSICO

Endereços Barramento I2C