Dia de projeto!. Neste artigo você vai aprender a montar um produto que indica temperatura e umidade do ambiente através de um display LCD, utilizando Arduino e sendo alimentado por uma daquelas fontes/carregador de celular. Veja imagem abaixo.
Produto pronto.
   A minha motivação para criar este produto foi que eu queria acompanhar/visualizar a mudança de temperatura e umidade dentro da minha casa, pois eu recentemente comprei um aquecedor de ambientes portátil. As funcionalidades (características) deste produto/projeto são:
– Leitura de temperatura e umidade do ambiente através do sensor Si7021
– Visualização dos dados em display LCD 16×2
– Processamento realizado por um Arduino Nano, facilmente reprogramável por USB
– Pode ser alimentado por uma fonte externa de 5V (Jack P4) ou cabo USB.
   Programei o Arduino Nano para que o produto execute as seguintes funções
– Leitura de umidade e temperatura do sensor Si7021 a cada um (1) segundo
– Cálculo e memorização da maior temperatura, menor temperatura, mais alta umidade e mais baixa umidade. 
– Mostrar temperatura e umidade atuais (bem como as memorizadas) em um display LCD 16×2
   A lista de materiais e diagrama esquemático do projeto estão logo abaixo, junto com links para compra dos materiais:
– Sensor de umidade e temperatura Si7021 (funciona via i2C): compre aqui.
– Display LCD 16×2 com qualquer cor de backlight: compre aqui.
– Arduino Nano V3 (já vem com chip USB embutido): compre aqui
– Potenciômetro 10k ohm para controle de contraste do LCD: compre aqui.
– Placa com regulador de tensão 3,3V + conector USB + conector Jack: compre aqui.
– Placa verde perfurada para protótipos, 4x6cm ou 6x8cm: compre aqui.
   Resolvi montar toda a parte eletrônica (Arduino, fonte, sensor, potenciômetro) na parte de trás do LCD e em 90 graus, para ter um melhor “acabamento” e força mecânica no produto final. Abaixo segue algumas fotos da montagem do produto (diagrama esquemático e componentes listado acima):
   E finalmente o detalhe das conexões elétricas, que foram feitas totalmente no lado oposto aos componentes (para fins estéticos):
   Após efetuar a montagem de todo o circuito eletrônico você deve programar o Arduino Nano com o código abaixo, também disponível neste link da minha página do GitHub. Este código se baseou nos códigos disponíveis na internet, para LCD 16×2 e para o sensor Si7021.
  #include <Wire.h>   
#include <Artekit_SI7021.h>
#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
float temperaturaMaisBaixa = 100.0;
float temperaturaMaisAlta = 1.0;
float humidadeMaisAlta = 0.0;
float humidadeMaisBaixa = 100.0;

Artekit_SI7021 si7021;

byte topArrow[8] = {
B00000,
B00100,
B01110,
B10101,
B00100,
B00100,
B00100,
};

byte downArrow[8] = {
B00100,
B00100,
B00100,
B10101,
B01110,
B00100,
B00000,
};

static void sensorRead()
{
float temperature;
float humidity;

humidity = si7021.ReadHumidity();
temperature = si7021.ReadTemperature(true);

if (temperature >= temperaturaMaisAlta){
temperaturaMaisAlta = temperature;
}
if (temperature <= temperaturaMaisBaixa){
temperaturaMaisBaixa = temperature;
}

if (humidity >= humidadeMaisAlta){
humidadeMaisAlta = humidity;
}
if (humidity <= humidadeMaisBaixa){
humidadeMaisBaixa = humidity;
}

//Serial.print("RH: ");
//Serial.print(humidity);
//Serial.print("%tTemperature: ");
//Serial.println(temperature);

lcd.setCursor(0, 0);
lcd.print(temperature,1);
lcd.setCursor(8, 0);
lcd.print(temperaturaMaisAlta,0);
lcd.setCursor(13, 0);
lcd.print(temperaturaMaisBaixa,0);


lcd.setCursor(0, 1);
lcd.print(humidity,1);
lcd.setCursor(8, 1);
lcd.print(humidadeMaisAlta,0);
lcd.setCursor(13, 1);
lcd.print(humidadeMaisBaixa,0);
}

void setup()
{

lcd.createChar(0, topArrow);
lcd.createChar(1, downArrow);
/* Start I2C */
Wire.begin();
/* Start serial */
Serial.begin(9600);
lcd.begin(16, 2);
lcd.setCursor(4, 1);
lcd.print("%");
lcd.setCursor(5, 1);
lcd.print("|");
lcd.setCursor(4, 0);
lcd.print("C");
lcd.setCursor(5, 0);
lcd.print("|");

lcd.setCursor(7, 0);
lcd.write(byte(0));
lcd.setCursor(12, 0);
lcd.write(byte(1));
lcd.setCursor(7, 1);
lcd.write(byte(0));
lcd.setCursor(12, 1);
lcd.write(byte(1));

lcd.setCursor(10, 0);
lcd.print("C");
lcd.setCursor(15, 0);
lcd.print("C");

//lcd.setCursor(11, 0);
//lcd.print("|");
//lcd.setCursor(11, 1);
//lcd.print("|");

lcd.setCursor(10, 1);
lcd.print("%");
lcd.setCursor(15, 1);
lcd.print("%");

}

void loop()
{
static int counter = 0;
static bool heater = false;

sensorRead();

delay(1000);
}
   O que este código todo faz é:
– Implementa função de leitura do sensor Si7021 via i2C
– Implementa escrita no display LCD
– Criação de caracteres especiais (“flecha para cima” e “flecha para baixo”) para o LCD
– Implementa estrutura de condicionais para capturar extremos de temperatura e umidade (maiores e menores valores de cada variável).
   A imagem abaixo explica o funcionamento do código.
   Os valores de temperatura e umidade “Atuais” são atualizados a cada um (1) segundo, e os valores de “maior” e “menor” são atualizados toda vez que uma temperatura ou umidade mais alta ou mais baixa acontecem; estes valores são perdidos se a alimentação do circuito for desligada.
Faça você mesmo: display de umidade e temperatura
Classificado como:                                    

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Solve : *
26 + 15 =