Kod Arduino i wideo dla cyfrowego czujnika temperatury i wilgotności Aosong AM2320 z wyświetlaczem LCD1602 i modułem I2C
W tym samouczku dowiemy się, jak używać cyfrowego czujnika temperatury i wilgotności Aosong AM2320 wraz z wyświetlaczem LCD1602 wyposażonym w moduł I2C. Celem jest wyświetlanie odczytów temperatury zarówno w stopniach Fahrenheita, jak i Celsjusza, a także wilgotności względnej. Taka konfiguracja idealnie nadaje się do monitorowania warunków środowiskowych w różnych projektach, co czyni ją wszechstronnym dodatkiem do Twojego zestawu Arduino.

Będziemy używać czujnika AM2320 do zbierania danych o temperaturze i wilgotności, które następnie zostaną wyświetlone na LCD1602. Moduł I2C upraszcza proces podłączania, wymagając tylko czterech połączeń: VCC, GND, SDA i SCL. Aby dobrze zrozumieć okablowanie i programowanie, polecam obejrzenie powiązanego wideo (na wideo w 00:00).
Omówienie Sprzętu
Kluczowe komponenty w tym projekcie to czujnik AM2320, wyświetlacz LCD1602 oraz moduł I2C. AM2320 to cyfrowy czujnik, który zapewnia dokładne odczyty temperatury i wilgotności poprzez interfejs I2C. Działa przy napięciu od 3,3 V do 5,5 V i ma zakres pomiarowy od -40°C do +80°C dla temperatury oraz od 0% do 100% dla wilgotności.
Wyświetlacz LCD1602 umożliwia wizualizację odczytów czujnika. Jest to wyświetlacz znakowy 16x2, który komunikuje się za pomocą protokołu I2C, co zmniejsza liczbę wymaganych połączeń do zaledwie czterech. Moduł I2C konwertuje dane równoległe z LCD na format szeregowy, co ułatwia podłączenie do Arduino.
Szczegóły z Karty Katalogowej
| Producent | Aosong |
|---|---|
| Numer części | AM2320 |
| Napięcie logiki/IO | 3,3 V - 5,5 V |
| Napięcie zasilania | 3,3 V - 5,5 V |
| Prąd wyjściowy | ≤ 1,5 mA |
| Zakres pomiarowy (Temperatura) | -40°C do +80°C |
| Zakres pomiarowy (Wilgotność) | 0% do 100% |
| Czas odpowiedzi | ≤ 2 s |
| Obudowa | DIP-4 |
| Uwagi / warianty | Zalecane są rezystory podciągające dla połączeń I2C. |
- Zapewnij prawidłowe zasilanie w określonym zakresie napięcia.
- Użyj rezystorów podciągających (zalecane 4,7 kΩ) dla linii SDA i SCL.
- Sprawdź poprawny adres I2C (domyślnie 0x27 dla większości wyświetlaczy LCD).
- Obsłuż potencjalne błędy, sprawdzając kod błędu czujnika.
- Wyczyść LCD przed wyświetleniem nowych odczytów, aby uniknąć nakładania się.
Instrukcje Okablowania

Aby podłączyć czujnik AM2320, podłącz lewy pin (VCC) do 5 V na Arduino. Drugi pin (SDA) podłącz do pinu A4 na Arduino Uno (lub pinu 20 na Mega). Trzeci pin (GND) należy podłączyć do masy, a czwarty pin (SCL) do pinu A5 na Arduino Uno (lub pinu 21 na Mega). Dodatkowo podłącz rezystor 4,7 kΩ między pin SDA a 5 V oraz kolejny rezystor 4,7 kΩ między pin SCL a 5 V, aby zapewnić prawidłowe poziomy sygnału.
Dla wyświetlacza LCD1602 z I2C podłącz pin VCC do 5 V, a pin GND do masy. Podłącz pin SDA z LCD do tego samego pinu SDA (A4), który jest używany przez czujnik. Podobnie podłącz pin SCL z LCD do tego samego pinu SCL (A5), który jest używany przez czujnik. To wspólne okablowanie umożliwia komunikację obu urządzeń po tej samej magistrali I2C.
Przykłady Kodów i Omówienie
Poniższy kod inicjalizuje czujnik AM2320 oraz wyświetlacz LCD1602. Zaczyna się od dołączenia niezbędnych bibliotek i utworzenia instancji czujnika.
#include
AM2320 sensor;
#include
LiquidCrystal_I2C lcd(0x27, 16, 2);
Tutaj obiekt sensor jest tworzony z biblioteki AM2320, a obiekt lcd jest inicjalizowany z adresem I2C wyświetlacza.
W funkcji setup() inicjalizujemy zarówno czujnik, jak i wyświetlacz LCD. Obejmuje to włączenie podświetlenia i wydrukowanie komunikatu początkowego.
void setup() {
sensor.begin();
lcd.begin();
lcd.backlight();
lcd.print("Robojax AM2320 ");
lcd.setCursor (0,1);
lcd.print("LCD1602 I2C Demo");
delay(3000);
}
Ten kod konfiguruje wyświetlacz tak, aby pokazywał komunikat powitalny przez 3 sekundy, dając użytkownikowi czas na zobaczenie, że system się inicjalizuje.
Funkcja loop() ciągle sprawdza pomiary czujnika i odpowiednio aktualizuje wyświetlacz. Jeśli pomiar jest dostępny, czyści ekran i wyświetla temperaturę zarówno w stopniach Fahrenheita, jak i Celsjusza, wraz z wilgotnością względną.
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);
}
Ten fragment pokazuje, jak program pobiera i wyświetla dane z czujnika, obsługując potencjalne błędy poprzez sprawdzenie errorCode.
Demonstracja / Czego się spodziewać
Po zakończeniu konfiguracji spodziewaj się, że wyświetlacz LCD pokaże temperaturę zarówno w stopniach Fahrenheita, jak i Celsjusza, oraz procent wilgotności względnej. Jeśli czujnik jest offline lub wystąpi błąd CRC, wyświetlacz pokaże odpowiednie komunikaty o błędach. Ważne jest, aby upewnić się, że wszystkie połączenia są pewne, aby uniknąć problemów (na filmie w 02:45).
Znaczniki czasu wideo
- 00:00 - Wprowadzenie do projektu
- 01:30 - Instrukcje dotyczące okablowania
- 03:15 - Wyjaśnienie kodu
- 04:45 - Demonstracja działania
++
/**
* 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
}
Rzeczy, których możesz potrzebować
-
Amazon
-
AliExpressPurchase AM2302 or DHT11 or DHT22 sensor from AliExpresss.click.aliexpress.com
Zasoby i odniesienia
-
ZewnętrznyAM2320 Library (from GitHub)github.com
-
ZewnętrznyStrona dokumentacji Arduino Wirearduino.cc
Pliki📁
Karta katalogowa (pdf)
-
Adafruit-am2320-temperature-humidity-i2c-sensor user's manual
adafruit-am2320-temperature-humidity-i2c-sensor.pdf1.27 MB
Plik Fritzing
-
AM2320 Humidity and Temperature Sensor
AM2320 Humidity and Temperature Sensor.fzpz0.01 MB