Code Arduino et vidéo pour un capteur numérique de température et d'humidité Aosong AM2320 avec écran LCD1602 et module I2C
Dans ce tutoriel, nous allons explorer comment utiliser le capteur numérique de température et d'humidité Aosong AM2320 avec un écran LCD1602 doté d'un module I2C. L'objectif est d'afficher les mesures de température en Fahrenheit et en Celsius, ainsi que l'humidité relative. Cette configuration est idéale pour surveiller les conditions environnementales dans divers projets, ce qui en fait un ajout polyvalent à votre boîte à outils Arduino.

Nous utiliserons le capteur AM2320 pour recueillir les données de température et d'humidité, qui seront ensuite affichées sur l'écran LCD1602. Le module I2C simplifie le câblage, ne nécessitant que quatre connexions : VCC, GND, SDA et SCL. Pour bien comprendre le câblage et la programmation, je recommande de regarder la vidéo associée (dans la vidéo à 00:00).
Le matériel expliqué
Les composants clés de ce projet comprennent le capteur AM2320, l'afficheur LCD1602 et le module I2C. L'AM2320 est un capteur numérique qui fournit des mesures précises de la température et de l'humidité via une interface I2C. Il fonctionne sous une tension de 3,3 V à 5,5 V et a une plage de mesure de -40 °C à +80 °C pour la température et de 0 % à 100 % pour l'humidité.
L'afficheur LCD1602 permet de visualiser les mesures des capteurs. Il s'agit d'un écran 16x2 caractères qui communique via le protocole I2C, ce qui réduit le nombre de connexions nécessaires à seulement quatre. Le module I2C convertit les données parallèles de l'écran LCD en un format série, ce qui facilite la connexion à l'Arduino.
Détails de la fiche technique
| Fabricant | Aosong |
|---|---|
| Numéro de pièce | AM2320 |
| Tension logique/E/S | 3.3 V - 5.5 V |
| Tension d'alimentation | 3.3 V - 5.5 V |
| Courant de sortie | ≤ 1.5 mA |
| Plage de mesure (température) | de -40 °C à +80 °C |
| Plage de mesure (humidité) | 0 % à 100 % |
| Temps de réponse | ≤ 2 s |
| Paquet | DIP-4 |
| Notes / variantes | Des résistances pull-up sont recommandées pour les connexions I2C. |
- Assurez une alimentation électrique adéquate dans la plage de tension spécifiée.
- Utilisez des résistances de pull-up (4,7 kΩ recommandées) pour les lignes SDA et SCL.
- Vérifiez que l'adresse I2C est correcte (par défaut 0x27 pour la plupart des écrans LCD).
- Gérez les erreurs potentielles en vérifiant le code d'erreur du capteur.
- Effacez l'écran LCD avant d'afficher de nouvelles mesures pour éviter le chevauchement.
Instructions de câblage

Pour câbler le capteur AM2320, connectez la broche de gauche (VCC) au 5 V de l'Arduino. La deuxième broche (SDA) va à la broche A4 sur un Arduino Uno (ou à la broche 20 sur un Mega). La troisième broche (GND) doit être reliée à la masse, et la quatrième broche (SCL) se connecte à la broche A5 sur un Arduino Uno (ou à la broche 21 sur un Mega). De plus, connectez une résistance de 4,7 kΩ entre la broche SDA et le 5 V, et une autre résistance de 4,7 kΩ entre la broche SCL et le 5 V pour garantir des niveaux de signal appropriés.
Pour l'afficheur LCD1602 avec I2C, connectez la broche VCC au 5V et la broche GND à la masse. Connectez la broche SDA du LCD à la même broche SDA (A4) utilisée pour le capteur. De même, connectez la broche SCL du LCD à la même broche SCL (A5) utilisée pour le capteur. Ce câblage partagé permet aux deux appareils de communiquer sur le même bus I2C.
Exemples de code et tutoriel pas à pas
Le code suivant initialise le capteur AM2320 et l'afficheur LCD1602. Il commence par inclure les bibliothèques nécessaires et par créer une instance du capteur.
#include
AM2320 sensor;
#include
LiquidCrystal_I2C lcd(0x27, 16, 2); Ici, lesensorun objet est créé à partir de la bibliothèque AM2320, et lelcdl'objet est initialisé avec l'adresse I2C de l'écran.
Dans lesetup()Dans la fonction, nous initialisons à la fois le capteur et l'écran LCD. Cela inclut l'activation du rétroéclairage et l'affichage d'un message initial.
void setup() {
sensor.begin();
lcd.begin();
lcd.backlight();
lcd.print("Robojax AM2320 ");
lcd.setCursor (0,1);
lcd.print("LCD1602 I2C Demo");
delay(3000);
}Ce code configure l'affichage pour afficher un message de bienvenue pendant 3 secondes, ce qui laisse le temps à l'utilisateur de voir que le système est en cours d'initialisation.
Leloop()La fonction vérifie en continu les mesures du capteur et met l'affichage à jour en conséquence. Si une mesure est disponible, elle efface l'écran et affiche la température en degrés Fahrenheit et Celsius, ainsi que l'humidité relative.
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);
}Cet extrait montre comment le programme récupère et affiche les données du capteur tout en gérant d'éventuelles erreurs en vérifiant leerrorCode.
Démonstration / À quoi s'attendre
Une fois la configuration terminée, l'écran LCD devrait afficher la température à la fois en Fahrenheit et en Celsius, ainsi que le pourcentage d'humidité relative. Si le capteur est hors ligne ou s'il y a une erreur CRC, l'affichage indiquera les messages d'erreur correspondants. Il est important de s'assurer que toutes les connexions sont bien sécurisées pour éviter tout problème (dans la vidéo à 02:45).
Horodatages vidéo
- 00:00- Introduction au projet
- 01:30- Instructions de câblage
- 03:15- Explication du code
- 04:45- Démonstration de la fonctionnalité
++
/**
* 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
}
/*********************************************************************
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
}
Ce dont vous pourriez avoir besoin
-
Amazon
-
AliExpressAchetez le capteur AM2302 ou DHT11 ou DHT22 sur AliExpresss.click.aliexpress.com
Ressources et références
-
ExterneBibliothèque AM2320 (de GitHub)github.com
-
ExternePage de documentation de l'Arduino Wirearduino.cc
Fichiers📁
Fiche technique (pdf)
-
Manuel de l'utilisateur du capteur de température et d'humidité I2C Adafruit AM2320
adafruit-am2320-temperature-humidity-i2c-sensor.pdf1.27 MB
Fichier Fritzing
-
Capteur d'humidité et de température AM2320
AM2320 Humidity and Temperature Sensor.fzpz0.01 MB