Dia de projeto!. Neste artigo você vai aprender a montar um produto que indica umidade e temperatura 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 : *
30 + 12 =