Skip to Content

Tutorial Arduino do sensor digital de temperatura e humidade AM2320

Tutorial Arduino do sensor digital de temperatura e humidade AM2320

Neste tutorial, vais aprender a usar o sensor digital de temperatura e humidade AM2320 com Arduino. Incluí diagramas de ligação e dois exemplos de código para começares!

Para este tutorial, vamos usar a biblioteca Adafruit AM2320. Esta biblioteca facilita muito a comunicação com o sensor via I2C. Usaremos esta biblioteca no nosso primeiro exemplo para ler os dados de temperatura e humidade do sensor AM2320 e mostrá-los no Monitor Serial.

No segundo exemplo, vamos expandir isto adicionando um LCD de 16×2 caracteres. Este também será ligado via barramento I2C e permite-nos mostrar as leituras no LCD. O projeto completo ficará assim:

Project to display AM2320 data on LCD
Projeto para mostrar dados do AM2320 no LCD

Se quiseres aprender mais sobre outros sensores de temperatura, vê os nossos outros tutoriais abaixo:

Vamos começar!

Peças Necessárias

Abaixo encontras as peças necessárias para este projeto. Para além de um Arduino, vais precisar de uma breadboard, alguns fios e, claro, do sensor AM2320. Para este tutorial, vou usar o clássico Arduino Uno (REV3), mas qualquer outro Arduino (ou ESP32/ESP8266) também serve.

Incluí também um display LCD 16×2 na lista de peças necessárias, que vais precisar para o segundo exemplo deste tutorial. Se estiveres satisfeito em mostrar a temperatura e humidade apenas no Monitor Serial, não precisas deste.

Arduino Uno

Dupont wire set

Conjunto de fios Dupont

Half_breadboard56a

Breadboard

USB Data Sync cable Arduino

Cabo USB para Arduino UNO

Sensor de Temperatura AM2320

LCD 16×2 Carateres I2C

Makerguides is a participant in affiliate advertising programs designed to provide a means for sites to earn advertising fees by linking to Amazon, AliExpress, Elecrow, and other sites. As an Affiliate we may earn from qualifying purchases.

Sobre o AM2320

O AM2320 é um sensor digital de temperatura e humidade de baixo custo fabricado pela ASAIR. Este sensor é semelhante aos populares sensores DHT11/DHT22, mas possui uma interface I2C em vez do protocolo de comunicação de um único fio que muitos dos outros sensores DHTxx usam. Podes encontrar o nosso tutorial para o DHT11 e DHT22 aqui:

O sensor consiste num elemento capacitivo de deteção de humidade e num elemento integrado de medição de temperatura de alta precisão ligado a um microprocessador. O intervalo de medição de temperatura do sensor é de -40 a 80 graus Celsius, com uma precisão declarada de ± 0,5 °C. 

Humidade relativa

Ao consultares a folha de dados do sensor, verás que ele mede a humidade relativa (HR) do ar e não a humidade absoluta. Mas qual é a diferença? A humidade absoluta é a quantidade de vapor de água no ar (expressa em g/m³), independentemente da temperatura. A humidade relativa  faz  consideração da temperatura.

A humidade relativa é a razão entre a quantidade real de vapor de água presente no ar e a quantidade máxima de vapor de água que o ar pode conter a uma dada temperatura.

O ar quente pode conter mais água do que o ar frio. Isto significa que, para a mesma quantidade de vapor de água no ar, a humidade relativa no ar frio será maior do que no ar quente. A 100 por cento de humidade relativa, o ar está saturado e encontra-se no seu ponto de orvalho.

Pinout do AM2320

O pinout do sensor AM2320 é o seguinte:

Pinout of AM2320 (source)
Pinout do AM2320 (source)
Pino Nome Descrição
1 VDD Pino de alimentação positiva (3.1 – 5.5 V)
2 SDA Dados seriais, porta bidirecional
3 GND Terra
4 SCL Entrada de relógio serial (terra do barramento único)

Note que o endereço I2C padrão do sensor é 0x5C e não pode ser alterado.

A tabela seguinte apresenta as características mais importantes do AM2320:

Especificações do AM2320

Tensão de alimentação 3.1 – 5.5 V
Consumo de energia Modo sleep: 10 μA
Modo medição: 950 μA
Intervalo de humidade 0 – 99.9 % HR ± 3 % HR
Intervalo de temperatura -40 – 80 °C ± 0.5 °C
Interface I2C
1-Wire
Período de amostragem 2.0 s
Dimensões 15 x 12.1 x 4.5 mm
Custo Check price

Para mais informações, podes consultar a folha de dados aqui:

Ligação do AM2320 ao Arduino

Ligar o AM2320 ao Arduino é muito fácil, como podes ver no diagrama abaixo.

Wiring of the AM2320 with the Arduino
Ligação do AM2320 ao Arduino

Basta ligar o 5V (ou 3.3V) do Arduino ao Pino 1 (VDD) do AM2320 e, da mesma forma, o terra (GND) ao GND. O A4 vai para o Pino 2 (SDA) e o A5 é ligado ao Pino 4 (SCL) do AM2320. As ligações estão também indicadas na tabela abaixo

Ligações do AM2320

AM2320 Fio Arduino
Pino 1 (VDD) vermelho 5 V
Pino 2 (SDA) amarelo A4
Pino 3 (GND) preto GND
Pino 4 (SCL) verde A5

Se não estiveres a usar um Arduino Uno, os pinos SDA e SCL podem estar em localizações diferentes. Consulta a tabela abaixo para mais detalhes.

Placa SDA SCL
Arduino Uno A4 A5
Arduino Nano A4 A5
Arduino Micro 2 3
Arduino Mega 2560 20 21
Arduino Leonardo 2 3
Arduino Due 20 21
Localização dos pinos SDA e SCL em diferentes placas Arduino.

Um Arduino Uno com o layout R3 (pinout 1.0) também tem os pinos SDA (linha de dados) e SCL (linha de relógio) próximos do pino AREF. O diagrama seguinte mostra um circuito alternativo que liga o AM2320 a esses pinos SDA e SCL:

Alternative Circuit with Pullup Resistors and alternative SDA/SCL pins
Circuito alternativo com resistores pullup e pinos SDA/SCL alternativos

Note que existem também dois resistores pullup adicionais com valor de 4.7KΩ nas linhas SDA e SCL. Na maioria dos casos, não vais precisar deles, pois o Arduino UNO tem resistores pullup internos que geralmente são suficientes. No entanto, eles têm um valor relativamente alto e, se encontrares problemas de comunicação com um dispositivo I2C, deves adicionar os teus próprios, especialmente se usares cabos mais longos.

Instalar as bibliotecas Arduino necessárias

Para este tutorial, vamos usar a biblioteca Adafruit AM2320. Para instalar a biblioteca, vai a Tools > Manage Libraries no Arduino IDE. O Gestor de Bibliotecas abrirá.

Library Manager to install Libraries
Instalar biblioteca via Gestor de Bibliotecas

No GESTOR DE BIBLIOTECAS procura por ‘Adafruit AM2320’ e clica em INSTALL.

Install Adafruit AM2320 library
Instalar biblioteca Adafruit AM2320

Dependendo das outras bibliotecas que já tens instaladas, podes ou não ver a seguinte mensagem. Ela indica que precisas instalar outras bibliotecas necessárias para a biblioteca AM2320. Isso é perfeitamente normal. Basta clicar em INSTALL ALL.

Install dependent libraries
Instalar bibliotecas dependentes

Agora tens todas as bibliotecas instaladas que precisamos para executar o código fornecido na próxima secção.

Código para ler Temperatura e Humidade com AM2320

O código de exemplo seguinte mostra como ler a temperatura e a humidade do sensor AM2320 e mostrar os dados no Monitor Serial e no Serial Plotter. Dá uma vista de olhos rápida primeiro, depois explicamos os detalhes do código

// Read Temperature and Humidity with AM2320

#include "Adafruit_Sensor.h"
#include "Adafruit_AM2320.h"

Adafruit_AM2320 sensor = Adafruit_AM2320();

void setup() {
  Serial.begin(9600);
  sensor.begin();
}

void loop() {
  float tempC = sensor.readTemperature();
  float tempF = tempC * 1.8 + 32;
  float humidity = sensor.readHumidity();

  Serial.print("Temperatur:");
  Serial.println(tempF);
  Serial.print("Humidity:");
  Serial.println(humidity);  

  delay(2000);
}

Importar as Bibliotecas

No primeiro passo incluímos as bibliotecas Adafruit_AM2320 e Adafruit_Sensor.

#include "Adafruit_Sensor.h"
#include "Adafruit_AM2320.h"

Criar Instância do Sensor

De seguida, criamos uma nova instância da classe Adafruit_AM2320. Neste caso, chamei-a “sensor“, mas podes escolher outro nome, desde que ajustes o código seguinte em conformidade.

Adafruit_AM2320 sensor = Adafruit_AM2320();

Função setup

Na função  setup(), iniciamos a comunicação serial a 9600 baud. Certifica-te que o Monitor Serial também está configurado para 9600. Inicializamos também o sensor AM2320 com sensor.begin().

void setup() {
  Serial.begin(9600);
  sensor.begin();
}

Função loop

Na secção loop do código, lemos os dados de temperatura e humidade do sensor AM2320 com as funções readTemperature() e readHumidity().

Note que readTemperature() devolve a temperatura em graus Celsius. Podemos facilmente convertê-la para Fahrenheit usando a fórmula tempF = tempC * 1.8 + 32.

  // Read the temperature and the humidity:
  float tempC = sensor.readTemperature();
  float tempF = tempC * 1.8 + 32;
  float humidity = sensor.readHumidity();

Por fim, imprimimos os resultados no Monitor Serial e adicionamos um atraso entre as leituras. O intervalo mínimo entre leituras é de 2 segundos (ver Datasheet), por isso usamos um atraso de 2000 ms (=2 seg) entre leituras.

  Serial.print("Temperatur:");
  Serial.println(tempF);
  Serial.print("Humidity:");
  Serial.println(humidity);  

  delay(2000);

E é tudo! Temos um leitor de temperatura e humidade. Agora vamos experimentar.

Saída no Monitor Serial

Se executares este código e abrires o Monitor Serial, deverás ver leituras de temperatura e humidade semelhantes às abaixo. Certifica-te que a taxa de baud está definida para 9600.

Temperature and Humidity readings on Serial Monitor
Leituras de Temperatura e Humidade no Monitor Serial

Saída no Serial Plotter

Se agora abrires o Serial Plotter e soprar no sensor AM2320, deverás ver um pico na humidade e uma ligeira subida na temperatura, semelhante ao gráfico abaixo:

Temperature and Humidity data on Serial Plotter
Dados de Temperatura e Humidade no Serial Plotter

Adicionar um LCD para Mostrar os Dados

Nesta parte mostro como adicionar um LCD de 16×2 caracteres para mostrar os dados. Felizmente, é muito simples.

Ligação do LCD

O diagrama seguinte mostra a ligação completa. O AM2320 está ligado exatamente como antes. Adicionamos o LCD ligando a sua alimentação (VCC, GND) ao rail de alimentação e os seus pinos SDA e SCL às mesmas linhas SDA e SCL onde o AM2320 está ligado.

Wiring of the AM2320 and LCD with the Arduino
Ligação do AM2320 e LCD ao Arduino

Assim, tanto o LCD como o AM2320 estão ligados via I2C ao Arduino. I2C é um barramento serial que pode permitir até 128 dispositivos comunicarem.

I2C bus with Arduino, AM2320 and LCD
Barramento I2C com Arduino, AM2320 e LCD

Os dispositivos no barramento são distinguidos pelo seu endereço I2C. O endereço I2C do AM2320 é fixo em 0x5C. O endereço I2C do teu LCD pode variar, no entanto. Endereços típicos são 0x27 ou 0x3F, e muitas vezes estão impressos na parte de trás. Se não tiveres a certeza, podes executar um scanner I2C para descobrir o endereço. Vê o nosso tutorial Character I2C LCD with Arduino Tutorial.

Mostrar leituras do AM2320 no LCD

O código para mostrar dados no LCD é bastante simples. Vamos usar a biblioteca LiquidCrystal do Frank de Brabander para controlar o LCD.

Se ainda não a instalaste, precisas de a instalar da mesma forma que instalaste a biblioteca AM2302. E se precisares de ajuda, vê o nosso tutorial sobre How to use the MQ-7 Gas Sensor with an LCD display and Arduino, onde fazemos exatamente isso com passos detalhados.

Dá uma vista de olhos rápida ao código antes de explicarmos os detalhes

// Display temperature and humidity readings from AM2320 sensor
// on 16x2 LCD display at I2C address 0x3F

#include "LiquidCrystal_I2C.h"
#include "Adafruit_Sensor.h"
#include "Adafruit_AM2320.h"

Adafruit_AM2320 sensor = Adafruit_AM2320();
LiquidCrystal_I2C lcd = LiquidCrystal_I2C(0x3F, 20, 2);

void setup() {
  Serial.begin(9600);
  sensor.begin();
  lcd.init();
  lcd.backlight();
}

void loop() {
  float tempC = sensor.readTemperature();
  float tempF = tempC * 1.8 + 32;
  float humidity = sensor.readHumidity();
  
  lcd.clear();

  lcd.setCursor(0, 0);
  lcd.print("Temperatur"); 
  lcd.setCursor(11, 0);
  lcd.print(tempF);     

  lcd.setCursor(0, 1);
  lcd.print("Humidity"); 
  lcd.setCursor(11, 1);
  lcd.print(humidity);   

  delay(2000);
}

Começamos por incluir as bibliotecas necessárias.

Bibliotecas

Para usar o sensor AM2320 e o display LCD, precisamos de incluir as bibliotecas necessárias. Incluímos a biblioteca “LiquidCrystal_I2C.h” para o display LCD, a “Adafruit_Sensor.h” para o sensor, e a “Adafruit_AM2320.h” para o sensor AM2320.

#include "LiquidCrystal_I2C.h"
#include "Adafruit_Sensor.h"
#include "Adafruit_AM2320.h"

Objetos

Primeiro criamos dois objetos: um para o sensor AM2320 e outro para o display LCD. Inicializamos o objeto do sensor como “sensor” e o do LCD como “lcd”. Para criar o objeto lcd, precisamos passar o endereço I2C do display LCD (0x3F) e as dimensões do display (20 colunas e 2 linhas) ao construtor “LiquidCrystal_I2C”.

Adafruit_AM2320 sensor = Adafruit_AM2320();
LiquidCrystal_I2C lcd = LiquidCrystal_I2C(0x3F, 20, 2);

Função setup

Na função “setup()”, inicializamos a comunicação serial a 9600 baud. Também chamamos a função “begin()” no objeto sensor para inicializar o sensor AM2320. Depois, chamamos a função “init()” no objeto lcd para inicializar o display LCD. Finalmente, ligamos a luz de fundo do LCD usando a função “backlight()”.

void setup() {
  Serial.begin(9600);
  sensor.begin();
  lcd.init();
  lcd.backlight();
}

Função loop

Na função “loop()”, lemos os valores de temperatura e humidade do sensor usando as funções “readTemperature()” e “readHumidity()”, respetivamente.

Como antes, armazenamos a temperatura em Celsius na variável “tempC” e convertemos para Fahrenheit multiplicando por 1.8 e somando 32, armazenando o resultado na variável “tempF”. De forma semelhante, armazenamos o valor da humidade na variável “humidity”.

Limpamos o display LCD usando a função “clear()”. Depois, definimos a posição do cursor para a primeira coluna da primeira linha com a função “setCursor()” e imprimimos “Temperature”. Definimos a posição do cursor para a décima segunda coluna da primeira linha e imprimimos a temperatura em Fahrenheit.

De seguida, definimos a posição do cursor para a primeira coluna da segunda linha e imprimimos “Humidity”. Definimos a posição do cursor para a décima segunda coluna da segunda linha e imprimimos o valor da humidade.

Finalmente, adicionamos um atraso de 2000 milissegundos (2 segundos) usando a função “delay()” para permitir que as leituras sejam exibidas antes de repetir o loop.

void loop() {
  float tempC = sensor.readTemperature();
  float tempF = tempC * 1.8 + 32;
  float humidity = sensor.readHumidity();

  lcd.clear();

  lcd.setCursor(0, 0);
  lcd.print("Temperature"); 
  lcd.setCursor(11, 0);
  lcd.print(tempF);     

  lcd.setCursor(0, 1);
  lcd.print("Humidity"); 
  lcd.setCursor(11, 1);
  lcd.print(humidity);   

  delay(2000);
}

E é isso. Agora tens um sistema totalmente funcional para mostrar dados de temperatura e humidade num LCD.

Perguntas Frequentes

Aqui estão algumas perguntas frequentes sobre o uso do sensor AM2320 para ler temperatura e humidade e mostrar os dados num LCD 16×2 com Arduino.

P: O que é o sensor AM2320?

R: O AM2320 é um sensor digital de temperatura e humidade que usa o barramento serial I2C para comunicar com microcontroladores como o Arduino. Fornece leituras precisas de temperatura e humidade, tornando-o ideal para várias aplicações como monitorização meteorológica, automação doméstica e controlo de estufas.

P: O que é o I2C e como funciona?

R: I2C (Inter-Integrated Circuit) é um protocolo de comunicação serial que permite que múltiplos dispositivos comuniquem entre si usando apenas dois fios – SDA (linha de dados) e SCL (linha de relógio). Permite uma comunicação eficiente entre microcontroladores e sensores, minimizando o número de pinos necessários para a ligação.

Certifica-te de que estás a usar os endereços I2C corretos dos dispositivos ligados no teu código. Também garante que as linhas SDA e SCL não estão trocadas.

P: Como ligo o AM2320 e o LCD ao Arduino via I2C?

R: Para ligar o AM2320 e o LCD ao Arduino via I2C, precisas fazer as seguintes ligações:

  • Liga o pino SDA do sensor AM2320 ao pino SDA do Arduino.
  • Liga o pino SCL do sensor AM2320 ao pino SCL do Arduino.
  • Liga o pino SDA do LCD ao pino SDA do Arduino.
  • Liga o pino SCL do LCD ao pino SCL do Arduino.

P: Como leio temperatura e humidade via o sensor AM2320?

R: Para ler temperatura e humidade via o sensor AM2320, precisas inicializar o sensor e depois usar as funções apropriadas para obter os valores de temperatura e humidade. A biblioteca AM2320 fornece funções como begin() para inicializar o sensor e readTemperature() e readHumidity() para obter as leituras de temperatura e humidade, respetivamente.

P: Como mostro os dados num LCD 16×2?

R: Para mostrar os dados de temperatura e humidade num LCD 16×2, precisas inicializar o LCD e depois usar as funções da biblioteca LCD para escrever os dados no ecrã. A biblioteca LiquidCrystal fornece funções como begin() para inicializar o LCD e print() para mostrar os dados no LCD.

P: Existem dicas para resolver problemas ao usar o sensor AM2320 e o LCD?

R: Se encontrares problemas ao usar o sensor AM2320 e o LCD, aqui tens algumas dicas para resolver:

  • Verifica as ligações para garantir que estão corretamente feitas.
  • Confirma que instalaste as bibliotecas necessárias para o sensor AM2320 e o LCD.
  • Certifica-te que tens os endereços I2C corretos tanto para o sensor como para o LCD.
  • Verifica se há conflitos com outros dispositivos que usam o barramento I2C.
  • Testa o teu código passo a passo para identificar possíveis erros.

Conclusão

Neste tutorial, mostrei-te como usar o sensor de temperatura e humidade AM2320 com Arduino. Espero que tenhas achado útil e informativo.

Se tiveres alguma dúvida, não hesites em deixar um comentário.