Mã Arduino và Video cho cảm biến nhiệt độ và độ ẩm kỹ thuật số Aosong AM2320
Trong hướng dẫn này, chúng ta sẽ khám phá cách sử dụng cảm biến nhiệt độ và độ ẩm kỹ thuật số Aosong AM2320 với Arduino. Cảm biến này giao tiếp qua I2C và cho phép chúng ta đọc nhiệt độ theo độ C hoặc độ F, và độ ẩm theo phần trăm. Đến cuối hướng dẫn này, bạn sẽ có thể xây dựng một dự án đơn giản hiển thị các số liệu này trên màn hình nối tiếp.

Cảm biến AM2320 nhỏ gọn và cung cấp dữ liệu đáng tin cậy cho cả nhiệt độ và độ ẩm. Nó có độ phân giải 0,1°C cho nhiệt độ và dải độ ẩm từ 0-99%. Quá trình thiết lập bao gồm việc nối dây cảm biến với Arduino và viết vài dòng mã để đọc và hiển thị các giá trị cảm biến. Video hướng dẫn này cung cấp hướng dẫn từng bước, bao gồm các ví dụ về nối dây và mã (trong video tại 00:00).
Phần cứng được giải thích
Thành phần chính của dự án này là cảm biến Aosong AM2320. Nó hoạt động bằng giao tiếp I2C, giúp đơn giản hóa quá trình kết nối vì chỉ cần hai đường dữ liệu (SDA và SCL) cùng với nguồn và đất. Cảm biến đo nhiệt độ trong dải từ -40°C đến +80°C với độ chính xác ±0,5°C và độ ẩm từ 0% đến 99% với độ chính xác tương tự. Cảm biến được thiết kế để tiêu thụ điện năng rất thấp, phù hợp cho các thiết bị chạy bằng pin.
Ngoài ra, mô-đun AM2320 bao gồm các điện trở kéo lên cần thiết cho giao tiếp I2C, giúp ổn định tín hiệu trên các đường SDA và SCL. Tính năng này đơn giản hóa quá trình nối dây, vì bạn sẽ không cần thêm điện trở kéo lên bên ngoài.
Chi tiết từ bảng dữ liệu
| Nhà sản xuất | Aosong |
|---|---|
| Số bộ phận | AM2320 |
| Điện áp logic/IO | 3,1 đến 5,5 V |
| Điện áp cung cấp | 3,1 đến 5,5 V |
| Dải nhiệt độ | -40 đến +80 °C |
| Dải độ ẩm | 0 đến 99 % |
| Độ phân giải (Nhiệt độ) | 0,1 °C |
| Độ phân giải (Độ ẩm) | 0,1 % |
| Độ chính xác (Nhiệt độ) | ±0,5 °C |
| Độ chính xác (Độ ẩm) | ±3 % |
| Đóng gói | Mô-đun |
- Đảm bảo điện áp cung cấp chính xác (3,1 đến 5,5 V).
- Sử dụng điện trở kéo lên (thường là 4,7 kΩ) cho các đường SDA và SCL.
- Giữ dải nhiệt độ trong khoảng -40°C đến +80°C để tránh hư hỏng.
- Độ ẩm được đo chính xác trong dải 0% đến 99%.
- Theo dõi các mã lỗi trong quá trình đọc (ví dụ: cảm biến ngoại tuyến).
Hướng dẫn nối dây

Để nối dây cảm biến AM2320 với Arduino, hãy làm theo các bước sau một cách cẩn thận. Đầu tiên, kết nối các chân nguồn: chân ngoài cùng bên trái của AM2320 kết nối với 5V (hoặc VCC) của Arduino, trong khi chân đất kết nối với GND của Arduino. Chân thứ hai từ bên trái (SDA) kết nối với chân analog A4 của Arduino cho Arduino Uno hoặc A20 cho Arduino Mega. Chân thứ ba (SCL) đi đến A5 cho Arduino Uno hoặc A21 cho Arduino Mega.
Ngoài ra, bạn sẽ cần kết nối một điện trở 4,7 kΩ từ chân SDA đến đường 5V và một điện trở 4,7 kΩ khác từ chân SCL đến đường 5V. Điều này đảm bảo giao tiếp I2C hoạt động đúng. Nếu bạn sử dụng các mẫu Arduino khác như Leonardo, các chân SDA và SCL cũng sẽ lần lượt là A4 và A5.
Ví dụ mã và hướng dẫn chi tiết
Hãy xem xét một số phần chính của mã Arduino được sử dụng trong dự án này. Đầu tiên, chúng ta khởi tạo cảm biến và thiết lập giao tiếp nối tiếp:
#include
AM2320 sensor;
void setup() {
Serial.begin(9600);
sensor.begin();
}
Trong đoạn mã này, chúng ta bao gồm thư viện cần thiết bằng #include <AM2320.h> và tạo một phiên bản của cảm biến. Hàm setup() khởi tạo giao tiếp nối tiếp ở tốc độ baud 9600 và bắt đầu cảm biến.
Tiếp theo, chúng ta có vòng lặp chính đọc nhiệt độ và độ ẩm:
if (sensor.measure()) {
Serial.print("Temperature: ");
Serial.print(temp('C'));
Serial.print(" C, Humidity: ");
Serial.print(sensor.getHumidity());
Serial.println("%");
}
Mã này kiểm tra xem phép đo cảm biến có thành công hay không. Nếu có, nó in nhiệt độ theo độ C và phần trăm độ ẩm ra màn hình nối tiếp. Hàm temp('C') được gọi để lấy nhiệt độ theo độ C. Nếu bạn muốn độ F, bạn có thể gọi temp('F').
Trình diễn / Điều gì sẽ xảy ra
Khi bạn chạy chương trình, bạn sẽ thấy các số liệu nhiệt độ và độ ẩm cập nhật mỗi nửa giây trên màn hình nối tiếp. Ví dụ, đầu ra có thể hiển thị "Temperature: 23.5 C, Humidity: 50%". Nếu bạn tác động nhiệt lên cảm biến, bạn sẽ quan sát thấy nhiệt độ tăng và độ ẩm giảm, chứng minh khả năng phản hồi của nó (trong video tại 11:15).
Mốc thời gian video
- 00:00 - Giới thiệu về cảm biến AM2320
- 01:30 - Hướng dẫn nối dây
- 03:45 - Hướng dẫn chi tiết mã
- 05:15 - Trình diễn các số liệu đọc
++
/**
This is Arduino code for Aosong Digital Temperature and Humidity Sensor.
This code is presented as part of a Robojax tutorial.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 Ratthanan Nalintasnai
Modified for Robojax.com video by
Ahmad S. on March 22, 2018 at 22:45 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/3ifN0FhLB5E
**/
// Include library into the sketch
#include <AM2320.h>
// Create an instance of sensor
AM2320 sensor;
void setup() {
// enable serial communication
Serial.begin(9600);
Serial.print("Robojax AM2320 Demo ");
// call sensor.begin() to initialize the library
sensor.begin();
}
void loop() {
// sensor.measure() returns a boolean value
// - true indicates measurement is completed successfully
// - false indicates that either the sensor is not ready or CRC validation failed
// use getErrorCode() to check for the cause of the error.
if (sensor.measure()) {
Serial.print("Temperature: ");
Serial.print(temp('C'));
Serial.print(" C, Humidity: ");
Serial.print(sensor.getHumidity());
Serial.println("%");
}
else { // error has occurred
int errorCode = sensor.getErrorCode();
switch (errorCode) {
case 1: Serial.println("ERR: Sensor is offline"); break;
case 2: Serial.println("ERR: CRC validation failed."); break;
}
}
delay(500);
}
/*
* temp()
* returns temperature based on the parameter T
* if T == 'F', will convert Celsius to Fahrenheit
* if T is anything else or empty, will return Celsius
* how to use:
* to get Fahrenheit, use temp('F')
* to get Celsius, use temp('C') or temp('')
* the 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
}
Tài nguyên & tài liệu tham khảo
Chưa có tài nguyên nào.
Tập tin📁
Bảng dữ liệu (pdf)
-
Sổ tay hướng dẫn sử dụng cảm biến nhiệt độ độ ẩm I2C Adafruit-am2320
adafruit-am2320-temperature-humidity-i2c-sensor.pdf1.27 MB
Tập tin Fritzing
-
Cảm biến độ ẩm và nhiệt độ AM2320
AM2320 Humidity and Temperature Sensor.fzpz0.01 MB