Nesse post, vamos aprender a mostrar, em um display OLED, temperatura e umidade, medidas pelo sensor DHT11. O display irá projetar, na tela, a temperatura e, quando o botão for pressionado, a umidade, como se passasse de página.

eletrogate.com
O display OLED oferece uma ótima qualidade de imagem por conta do seu alto contraste.

eletrogate.com
O elemento sensor de temperatura é um termistor do tipo NTC e o sensor de Umidade é do tipo HR202. O circuito interno faz a leitura dos sensores e se comunica a um microcontrolador através de um sinal serial de uma via.
O circuito será o seguinte:

O código do projeto é:
#include <Adafruit_AM2320.h> //inclui as bibliotecas
#include "U8glib.h"
#include <DHT.h>
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE);
#define pino_muda 6 //define o pino do botão
#define pino_DHT A0 //define o pino do sensor
#define DHTTYPE DHT11 //define o tipo de sensor
DHT dht(pino_DHT, DHTTYPE);
int temperatura; //cria uma variavel para a temperatura
int umidade; //cria uma variavel para a umidade
int guarda_estado = LOW; //variavel para guardar o estado do botao
int estado = 0;
unsigned long previousMillis = 0;
//Intervalo de medicao temperatura
const long interval = 2000;
void draw()
{
//Retangulo temperatura atual
u8g.drawRFrame(0, 17, 127, 46, 2);
u8g.setFont(u8g_font_fub20);
//Atualiza a temperatura no display
u8g.setPrintPos(40, 50);
u8g.print(temperatura);
//Circulo grau
u8g.drawCircle(73, 33, 3);
u8g.drawStr( 77, 50, "C");
//Box superior amarelo
u8g.setFont(u8g_font_8x13B);
u8g.drawRBox(0, 0, 127, 16, 2);
u8g.setColorIndex(0);
u8g.drawStr( 21, 13, "TEMPERATURA");
u8g.setColorIndex(1);
if (guarda_estado == HIGH) //se o botao for pressionado
{
//retangulo umidade
u8g.setFont(u8g_font_8x13B);
u8g.drawRBox(0, 0, 127, 16, 2);
u8g.setColorIndex(0);
u8g.drawStr( 21, 13, "UMIDADE"); // escreve no topo
u8g.setColorIndex(1);
u8g.drawRFrame(0, 17, 127, 46, 2);
u8g.setColorIndex(0);
u8g.drawBox(0,17,127,46);
u8g.setColorIndex(1);
u8g.setFont(u8g_font_fub20);
u8g.setPrintPos(40, 50);
u8g.print(umidade); //escreve na tela a umidade em %
u8g.drawStr( 77, 50, "%");
}
else //se o botao nao estiver pressionado , continua mostrando a temperatura
{
u8g.drawRFrame(0, 17, 127, 46, 2);
u8g.setFont(u8g_font_fub20);
//Atualiza a temperatura no display
u8g.setPrintPos(40, 50);
u8g.print(temperatura);
//Circulo grau
u8g.drawCircle(73, 33, 3);
u8g.drawStr( 77, 50, "C");
//Box superior amarelo
u8g.setFont(u8g_font_8x13B);
u8g.drawRBox(0, 0, 127, 16, 2);
u8g.setColorIndex(0);
u8g.drawStr( 21, 13, "TEMPERATURA");
u8g.setColorIndex(1);
}
}
void setup() {
Serial.begin(9600);
pinMode(pino_muda , INPUT); //define o tipo de entrada do push button
dht.begin();
}
void loop() {
unsigned long currentMillis = millis();
//Timer para ler o valor da temperatura e da umidade
if (currentMillis - previousMillis >= interval)
{
temperatura = dht.readTemperature();
umidade = dht.readHumidity();
previousMillis = currentMillis;
}
estado = digitalRead(pino_muda);
if (estado == HIGH) {
guarda_estado = !guarda_estado;
delay(500);
}
u8g.firstPage();
// Chama a rotina de desenho na tela
do
{
draw();
}
while ( u8g.nextPage() );
delay(50);
}Algumas bibliotecas serão necessárias:
U8glib

DHT sensor library

Adafruit_AM2320

Pronto! Depois disso, é só testar.
Conheça a Metodologia Eletrogate e ofereça aulas de robótica em sua escola!
|
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.
Conheça a Metodologia Eletrogate e Lecione um Curso de Robótica nas Escolas da sua Região!