Sensor de temperatura HDC1080 com Arduino
Hoje vamos mostrar como usar o Sensor de Temperatura e Umidade HDC1080 com Arduino Uno, uma excelente opção para o seu projeto de automação residencial ou estação meteorológica usando Arduino.
Por utilizar a interface I2C, é um sensor muito simples de conectar pois usa somente dois fios para comunicação com o microcontrolador.
O sensor de temperatura e umidade HDC1080
O HDC1080 (datasheet) é um sensor de temperatura e umidade de alta precisão com 14 bits de resolução, precisão de temperatura de 0,2 °C e de umidade 2%, realizando medições entre -40 e +125 °C. A comunicação é feita pela interface I2C, o que facilita bastante a conexão e utilização com os mais diversos tipos de placas e microcontroladores, já que a maioria conta com I2C nativo.
Você pode alimentar este módulo com tensões entre 2.7 e 5.5 VDC, e na placa temos também dois furos que podem ser utilizados para fixação.
Circuito HDC1080 com Arduino
Neste teste vamos usar o sensor de temperatura e umidade HDC1080 com Arduino Uno e um display LCD 16×2 I2C. Isso vai simplificar a conexão já que tanto o sensor como o display LCD vão usar o mesmo barramento para comunicação com o Arduino.
Na imagem acima, os mesmo pinos que estamos usando para ligar o sensor serão usados também para conexão com o display: pinos VCC (5V), GND, SDA (conectado ao pino A4 do Arduino) e SCL (pino A5).
Biblioteca e programa sensor HDC1080
Antes de mais nada vamos instalar as bibliotecas necessárias para que o programa funcione corretamente. A primeira é a biblioteca do display I2C, a LiquidCrystal I2C.
Instale à partir da IDE do Arduino, no menu Sketch -> Incluir Biblioteca -> Gerenciar Bibliotecas. Procure por “liquidcrystal_i2c” e clique em instalar, conforme a imagem abaixo:
Faça o mesmo com a biblioteca ClosedCube HDC1080, procurando por “hdc1080” no Gerenciador de Biblioteca:
Após a instalação, carregue o programa abaixo na IDE do Arduino:
//Programa: Sensor de temperatura e umidade HDC1080 com Arduino //Autor: Arduino e Cia #include <Wire.h> #include <ClosedCube_HDC1080.h> #include <LiquidCrystal_I2C.h> ClosedCube_HDC1080 hdc1080; //Inicializa o display no endereco 0x3B //e define o numero de colunas e linhas do display LiquidCrystal_I2C lcd(0x3B, 16, 2); //Array que desenha o simbolo de grau byte grau[8] = {B00110, B01001, B01001, B00110, B00000, B00000, B00000, B00000,}; void setup() { Serial.begin(9600); //Inicializa o HDC1080 no endereço 0x40 hdc1080.begin(0x40); Serial.println("Sensor HDC1080 com Arduino"); //Inicializa o display LCD I2C lcd.init(); lcd.backlight(); //Atribui a "1" o valor do array "grau", que desenha o simbolo de grau lcd.createChar(1, grau); //Mostra no display as informações iniciais lcd.setCursor(0, 0); lcd.print("Temp.: XX.XX C"); lcd.setCursor(0, 1); lcd.print("Umid.: YY.YY %"); } void loop() { //Le os valores de temperatura e umidade float t = hdc1080.readTemperature(); float h = hdc1080.readHumidity(); //Mostra os valores no display lcd.setCursor(7, 0); lcd.print(t); lcd.setCursor(13, 0); lcd.write(1); lcd.setCursor(7, 1); lcd.print(h); //Mostra os valores no Serial Monitor Serial.print("Temperatura: "); Serial.print(t); Serial.print(" C, Umidade: "); Serial.print(h); Serial.println(" %"); delay(3000); }
No programa acima, inicializamos o sensor HDC1080 com o endereço padrão 0x40 na linha 23. Depois disso a leitura dos dados de temperatura e umidade é feita nas linhas 44 e 45, respectivamente. Os valores são então mostrados tanto no display como no serial monitor:
Se quiser conhecer outros sensores de temperatura para o Arduino, clique aqui e confira posts sobre DHT11, DHT22, LM35 e DS18B20 aqui mesmo no Arduino e Cia!
[…] First viewed here […]
Olá, boa noite.
Muito bom o artigo.
Poderia me dar uma ajuda/orientação, por favor?
Não estou conseguindo usar dois dispositivos I2C simultaneamente em um NodeMcu ESP-12E
Estou tentando usar um sensor de temperatura (HDC1080 e um Display Oled 0.96 I2c Ssd1306.
Usei esse substituindo o arduino pelo nodemcu e o display LCD pelo display OLED
Os pinos SDA do sensor e do display estão ligados na GPIO D2 e os pinos SDL estão ligados na GPIO D1.
Abaixo segue o código.
No exemplo abaixo as linhas relacionadas ao Display estão comentadas e dessa forma o sensor funciona e o scan dos dispositivos I2C retorna o endereço do sensor. Quando descomento as linhas do display, o display funciona, o sensor para de funcionar e o scan retorna apenas o endereço do display.
#include
#include
#include “SSD1306Wire.h”
ClosedCube_HDC1080 hdc1080;
//SSD1306Wire display(0x3c);
void setup()
{
Wire.begin();
Serial.begin(115200);
hdc1080.begin(0x40);
Serial.println(“Sensor HDC1080 com Arduino”);
//display.init();
// display.flipScreenVertically();
}
void loop()
{
//Le os valores de temperatura e umidade
float t = hdc1080.readTemperature();
float h = hdc1080.readHumidity();
Serial.print(“Temperatura: “);
Serial.print(t);
Serial.print(” C, Umidade: “);
Serial.print(h);
Serial.println(” %”);
// display.clear();
// display.setFont(ArialMT_Plain_10);
// display.drawString(10, 15, String(t));
// display.drawString(10, 30, String(millis()));
// display.display();
delay(3000);
scan();
}
void scan()
{
byte error, address;
int nDevices;
Serial.println(“Scanning…”);
nDevices = 0;
for(address = 1; address < 127; address++ )
{
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0)
{
Serial.print("I2C device found at address 0x");
if (address<16)
Serial.print("0");
Serial.print(address,HEX);
Serial.println(" !");
nDevices++;
}
else if (error==4)
{
Serial.print("Unknow error at address 0x");
if (address<16)
Serial.print("0");
Serial.println(address,HEX);
}
}
if (nDevices == 0)
Serial.println("No I2C devices found\n");
else
Serial.println("done\n");
}
Boa tarde, gostaria de saber se há possibilidade de usar dois sensores em um único Arduino. Se há, como mudar o endereço do sensor pra poder identificar ele no código.
Oi Daniel,
Eu dei uma olhada aqui no sensor que eu tenho e aparentemente não é possível mudar o endereço I2C do módulo.
Abraço!
Adilson
Amigos tem esse projeto com Relogio Temperatura e Umidade ?
Gostaria de montar alguem sabe
Obrigado
QSL do Brasil.
Bom dia!
Eu tenho alguns posts sobre relógio, e é bem fácil de adaptar um sensor de temperatura. Dê uma olhada, por favor: https://www.arduinoecia.com.br/page/2/?s=relogio
Abraço!
Adilson