Search Code

Arduino-code en video voor een Aosong AM2320 digitale temperatuur- en vochtigheidssensor met LCD1602 en I2C-module

Arduino-code en video voor een Aosong AM2320 digitale temperatuur- en vochtigheidssensor met LCD1602 en I2C-module

In deze tutorial verkennen we hoe we de Aosong AM2320 digitale temperatuur- en luchtvochtigheidssensor kunnen gebruiken samen met een LCD1602-display dat gebruikmaakt van een I2C-module. Het doel is om temperatuurwaarden in zowel Fahrenheit als Celsius weer te geven, evenals relatieve luchtvochtigheid. Deze opstelling is ideaal voor het bewaken van omgevingsomstandigheden in verschillende projecten, waardoor het een veelzijdige toevoeging is aan je Arduino-toolkit.

We zullen de AM2320-sensor gebruiken om temperatuur- en luchtvochtigheidsgegevens te verzamelen, die vervolgens worden weergegeven op de LCD1602. De I2C-module vereenvoudigt het bedradingsproces, waardoor slechts vier verbindingen nodig zijn: VCC, GND, SDA en SCL. Voor een duidelijk begrip van de bedrading en programmering raad ik aan om de bijbehorende video te bekijken (in video op 00:00).

Hardware Uitgelegd

De belangrijkste componenten in dit project zijn de AM2320-sensor, het LCD1602-display en de I2C-module. De AM2320 is een digitale sensor die nauwkeurige metingen van temperatuur en luchtvochtigheid levert via een I2C-interface. Hij werkt op een spanning van 3,3V tot 5,5V en heeft een meetbereik van -40°C tot +80°C voor temperatuur en 0% tot 100% voor luchtvochtigheid.

Het LCD1602-display maakt visualisatie van de sensormetingen mogelijk. Het is een 16x2-karakters display dat communiceert via het I2C-protocol, waardoor het aantal benodigde verbindingen wordt teruggebracht tot slechts vier. De I2C-module zet de parallelle gegevens van het LCD om naar een seriële indeling, waardoor het gemakkelijker wordt om verbinding te maken met de Arduino.

Datasheet Details

FabrikantAosong
OnderdeelnummerAM2320
Logica/IO-spanning3,3 V - 5,5 V
Voedingsspanning3,3 V - 5,5 V
Uitgangsstroom≤ 1,5 mA
Meetbereik (Temperatuur)-40°C tot +80°C
Meetbereik (Luchtvochtigheid)0% tot 100%
Reactietijd≤ 2s
BehuizingDIP-4
Opmerkingen / variantenPull-up weerstanden worden aanbevolen voor I2C-verbindingen.

  • Zorg voor een correcte voedingsspanning binnen het gespecificeerde spanningsbereik.
  • Gebruik pull-up weerstanden (4,7kΩ aanbevolen) voor de SDA- en SCL-lijnen.
  • Controleer het juiste I2C-adres (standaard is 0x27 voor de meeste LCD's).
  • Verwerk mogelijke fouten door de foutcode van de sensor te controleren.
  • Wis het LCD voordat je nieuwe metingen weergeeft om overlapping te voorkomen.

Bedradingsinstructies

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

Om de AM2320-sensor te bedraden, verbind je de linkerpin (VCC) met 5V op de Arduino. De tweede pin (SDA) gaat naar de A4-pin op een Arduino Uno (of pin 20 op een Mega). De derde pin (GND) moet worden verbonden met de grond, en de vierde pin (SCL) verbindt met de A5-pin op een Arduino Uno (of pin 21 op een Mega). Verbind daarnaast een 4,7kΩ-weerstand tussen de SDA-pin en 5V, en nog een 4,7kΩ-weerstand tussen de SCL-pin en 5V om correcte signaalniveaus te garanderen.

Voor het LCD1602-display met I2C verbind je de VCC-pin met 5V en de GND-pin met de grond. Verbind de SDA-pin van het LCD met dezelfde SDA-pin (A4) die voor de sensor wordt gebruikt. Verbind op dezelfde manier de SCL-pin van het LCD met dezelfde SCL-pin (A5) die voor de sensor wordt gebruikt. Deze gedeelde bedrading stelt beide apparaten in staat om te communiceren via dezelfde I2C-bus.

Codevoorbeelden & Uitleg

De volgende code initialiseert de AM2320-sensor en het LCD1602-display. Het begint met het opnemen van de benodigde bibliotheken en het maken van een instantie van de sensor.

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

Hier wordt het sensor-object gemaakt op basis van de AM2320-bibliotheek, en wordt het lcd-object geïnitialiseerd met het I2C-adres van het display.

In de setup()-functie initialiseren we zowel de sensor als de LCD. Dit omvat het inschakelen van de achtergrondverlichting en het afdrukken van een eerste bericht.

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

Deze code stelt het display in om gedurende 3 seconden een welkomstbericht te tonen, zodat de gebruiker kan zien dat het systeem wordt geïnitialiseerd.

De loop()-functie controleert continu op sensormetingen en werkt het display dienovereenkomstig bij. Als er een meting beschikbaar is, wist het het scherm en drukt het de temperatuur af in zowel Fahrenheit als Celsius, samen met de relatieve luchtvochtigheid.

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 mislukt."); break;
    }    
  }
  delay(500);
}

Dit fragment laat zien hoe het programma de sensorgegevens ophaalt en weergeeft, terwijl het mogelijke fouten afhandelt door de errorCode te controleren.

Demonstratie / Wat te Verwachten

Wanneer de setup is voltooid, verwacht dan dat de LCD de temperatuur weergeeft in zowel Fahrenheit als Celsius, evenals het percentage relatieve luchtvochtigheid. Als de sensor offline is of er een CRC-fout optreedt, toont het display de bijbehorende foutmeldingen. Het is belangrijk om ervoor te zorgen dat alle verbindingen stevig zijn om problemen te voorkomen (in video op 02:45).

Videotijdstippen

  • 00:00 - Introductie van het project
  • 01:30 - Bedradingsinstructies
  • 03:15 - Uitleg van de code
  • 04:45 - Demonstratie van de functionaliteit

Afbeeldingen

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.
Taal: 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.
Taal: 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
}

Dingen die je misschien nodig hebt

Hulpmiddelen en referenties

Bestanden📁

Datasheet (pdf)

Fritzing-bestand