Código de Pesquisa

Código Arduino e vídeo para um sensor digital de temperatura e umidade Aosong AM2320 com LCD1602 e módulo I2C

Código Arduino e vídeo para um sensor digital de temperatura e umidade Aosong AM2320 com LCD1602 e módulo I2C

Neste tutorial, exploraremos como usar o sensor digital de temperatura e umidade Aosong AM2320 em conjunto com um display LCD1602 que utiliza um módulo I2C. O objetivo é exibir leituras de temperatura tanto em Fahrenheit quanto em Celsius, bem como a umidade relativa. Esta configuração é ideal para monitorar condições ambientais em diversos projetos, tornando-a uma adição versátil ao seu kit de ferramentas Arduino.

Usaremos o sensor AM2320 para coletar dados de temperatura e umidade, que serão então exibidos no LCD1602. O módulo I2C simplifica o processo de fiação, exigindo apenas quatro conexões: VCC, GND, SDA e SCL. Para uma compreensão clara da fiação e da programação, recomendo assistir ao vídeo associado (no vídeo às 00:00).

Hardware explicado

Os componentes-chave deste projeto incluem o sensor AM2320, o display LCD1602 e o módulo I2C. O AM2320 é um sensor digital que fornece leituras precisas de temperatura e umidade através de uma interface I2C. Ele funciona com uma tensão de 3.3V a 5.5V e tem uma faixa de medição de -40°C a +80°C para temperatura e de 0% a 100% para umidade.

O display LCD1602 permite a visualização das leituras dos sensores. É um display de 16x2 caracteres que se comunica via protocolo I2C, o que reduz o número de conexões necessárias para apenas quatro. O módulo I2C converte os dados paralelos do LCD para um formato serial, facilitando a conexão ao Arduino.

Detalhes da ficha técnica

FabricanteAosong
Número da peçaAM2320
Tensão lógica/E/S3.3 V - 5.5 V
Tensão de alimentação3.3 V - 5.5 V
Corrente de saída≤ 1.5 mA
Faixa de medição (Temperatura)-40°C a +80°C
Faixa de medição (Umidade)0% a 100%
Tempo de resposta≤ 2s
PacoteDIP-4
Notas / variantesResistores pull-up são recomendados para conexões I2C.

  • Garanta alimentação adequada dentro da faixa de tensão especificada.
  • Use resistores de pull-up (4,7 kΩ recomendados) nas linhas SDA e SCL.
  • Verifique se o endereço I2C está correto (o padrão é 0x27 para a maioria dos LCDs).
  • Trate possíveis erros verificando o código de erro do sensor.
  • Limpe o LCD antes de exibir novas leituras para evitar sobreposição.

Instruções de fiação

Arduino wiring for AM2320 sensor with LCD
Arduino wiring for AM2320 sensor with LCD

Para ligar o sensor AM2320, conecte o pino esquerdo (VCC) a 5V no Arduino. O segundo pino (SDA) vai para o pino A4 em um Arduino Uno (ou pino 20 em um Mega). O terceiro pino (GND) deve ser conectado à terra, e o quarto pino (SCL) conecta-se ao pino A5 em um Arduino Uno (ou pino 21 em um Mega). Além disso, conecte um resistor de 4.7kΩ entre o pino SDA e 5V, e outro resistor de 4.7kΩ entre o pino SCL e 5V para garantir níveis de sinal adequados.

Para o display LCD1602 com I2C, conecte o pino VCC a 5V e o pino GND ao terra. Conecte o pino SDA do LCD ao mesmo pino SDA (A4) usado pelo sensor. Da mesma forma, conecte o pino SCL do LCD ao mesmo pino SCL (A5) usado pelo sensor. Essa fiação compartilhada permite que ambos os dispositivos se comuniquem pelo mesmo barramento I2C.

Exemplos de código e guia passo a passo

O código a seguir inicializa o sensor AM2320 e o display LCD1602. Ele começa incluindo as bibliotecas necessárias e criando uma instância do sensor.

#include 
AM2320 sensor;
#include 
LiquidCrystal_I2C lcd(0x27, 16, 2);

Aqui, osensoro objeto é criado a partir da biblioteca AM2320, e olcdO objeto é inicializado com o endereço I2C do display.

Nosetup()Na função, inicializamos tanto o sensor quanto o LCD. Isso inclui ligar a retroiluminação e exibir uma mensagem inicial.

void setup() {
  sensor.begin();
  lcd.begin();
  lcd.backlight();
  lcd.print("Robojax AM2320 ");
  lcd.setCursor (0,1);
  lcd.print("LCD1602 I2C Demo");
  delay(3000);
}

Este código configura o visor para mostrar uma mensagem de boas-vindas por 3 segundos, permitindo tempo para que o usuário veja que o sistema está inicializando.

Oloop()A função verifica continuamente as medições do sensor e atualiza a tela de acordo. Se uma medição estiver disponível, ela limpa a tela e exibe a temperatura em Fahrenheit e Celsius, juntamente com a umidade relativa.

void loop() {
  if (sensor.measure()) {
    lcd.clear();
    lcd.print("T:");
    lcd.print(temp('F'));
    lcd.print("F/");
    lcd.print(temp('C'));
    lcd.print("C");  
    lcd.setCursor (0,1);
    lcd.print("R.H. :");
    lcd.print(sensor.getHumidity());
    lcd.print("%"); 
  }
  else {
    int errorCode = sensor.getErrorCode();
    switch (errorCode) {
      case 1: lcd.print("ERR: Sensor offline"); break;
      case 2: lcd.print("ERR: CRC failed."); break;
    }    
  }
  delay(500);
}

Este trecho demonstra como o programa recupera e exibe os dados do sensor enquanto trata quaisquer erros potenciais verificando oerrorCode.

Demonstração / O que Esperar

Quando a configuração estiver concluída, espere que o LCD exiba a temperatura em Fahrenheit e Celsius, bem como o percentual de umidade relativa. Se o sensor estiver offline ou houver um erro de CRC, o display mostrará mensagens de erro correspondentes. É importante garantir que todas as conexões estejam seguras para evitar quaisquer problemas (no vídeo em 02:45).

Marcas de tempo do vídeo

  • 00:00- Introdução ao projeto
  • 01:30- Instruções de fiação
  • 03:15- Explicação do código
  • 04:45- Demonstração de funcionalidade

Imagens

AM2320-sensor-1
AM2320-sensor-1
AM2320-sensor-2
AM2320-sensor-2
AM2320-sensor-3
AM2320-sensor-3
AM2320-sensor-4
AM2320-sensor-4
Arduino wiring for AM2320 sensor with LCD
Arduino wiring for AM2320 sensor with LCD
85-This is the Arduino code for an Aosong AM2320 temperature and humidity sensor with an LCD1602 and I2C module.
Idioma: C++
++
/**
 * This is Arduino code for AM2320 Temperature and Humidity Sensor with LCD1602 and I2C Module
 * which displays the temperature and RH (relative humidity)
 * on an LCD1602 with an I2C module.  The code was combined by Robojax.
 * 
    Original Code For AM2320 :https://github.com/hibikiledo/AM2320
    Copyright 2016 Ratthanan Nalintasnai
    
    Modified for Robojax.com video by
    Ahmad S. on March 22, 2018 at 23:55 in Ajax, Ontario, Canada
    This code, with library and other codes, is available at
    https://robojax.com
    Watch the video instruction for this code: https://youtu.be/ym567hneDpE
**/

// Include library for AM2320
#include <AM2320.h>
// Create an instance of the sensor
AM2320 sensor;


#include <Wire.h> 
// Include the LiquidCrystal library for display
#include <LiquidCrystal_I2C.h>

// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);


void setup() {
  // Call sensor.begin() to initialize the library
  sensor.begin();

  // Robojax code for LCD with I2C
  // Initialize the LCD, 
  lcd.begin();
   // Turn on the backlight and print a message.
  lcd.backlight();
  lcd.print("Robojax AM2320 ");
  lcd.setCursor (0,1);
  lcd.print("LCD1602 I2C Demo");
  delay(3000);
}

void loop() {
  if (sensor.measure()) {
    lcd.clear();
    lcd.print("T:");
    lcd.print(temp('F'));
    lcd.print("F/");
    lcd.print(temp('C'));
    lcd.print("C");  
    lcd.setCursor (0,1); // go to start of 2nd line
    lcd.print("R.H. :");
    lcd.print(sensor.getHumidity());
    lcd.print("%"); 
  

  }
  else {  // An error has occurred
    int errorCode = sensor.getErrorCode();
    switch (errorCode) {
      case 1: lcd.print("ERR: Sensor offline"); break;
      case 2: lcd.print("ERR: CRC failed."); break;
    }    
  }

  delay(500);
}

/*
 * temp()
 * Returns the temperature based on the input character T.
 * If T == 'F', converts Celsius to Fahrenheit.
 * Otherwise, returns Celsius.
 * How to use:
 *  To get Fahrenheit, use temp('F').
 *  To get Celsius, use temp('C') or temp('').
 *  temp('') uses an empty single quote.
 * 
 */
float temp(char T)
{
  if (sensor.measure()) {
    if(T =='F')
    {
      // Convert to FAHRENHEIT and return
      // Robojax video tutorial
      return sensor.getTemperature()* 1.8 + 32;
    }else{
      return sensor.getTemperature();// Return CELSIUS
    }

  }// if sensor.measure  
}
86-This is the Arduino code for the Aosong AM2320 temperature and humidity sensor with an LCD1602 and I2C module.
Idioma: C++
/*********************************************************************
Original source: http://playground.arduino.cc/Main/I2cScanner

This program will find the I2C address on the I2C device. Just upload the code into your Arduino
and open the serial monitor and wait. It will display the I2C address as 0x3C or similar.

 * Please view other RoboJax codes and videos at http://robojax.com/learn/arduino
 * If you are sharing this code, you must keep this copyright note.
 * 
*********************************************************************/


#include <Wire.h>
 
 
void setup()
{
  Wire.begin();
 
  Serial.begin(9600);
  while (!Serial);             // Leonardo: wait for serial monitor
  Serial.println("\nI2C Scanner");
}
 
 
void loop()
{
  byte error, address;
  int nDevices;
 
  Serial.println("Scanning...");
 
  nDevices = 0;
  for(address = 1; address < 127; address++ )
  {
    // The I2C scanner uses the return value of
    // the Wire.endTransmission to see if
    // a device did acknowledge the 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("Unknown 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");
 
  delay(5000);           // wait 5 seconds for next scan
}

Coisas que você pode precisar

Recursos e referências

Arquivos📁

Folha de dados (pdf)

Arquivo Fritzing