شِفر (کود) آردوینو و ویدئو برای حساس(حس کننده) دیجیتال دما و رطوبت آوسونگ AM2320
در این آموزش، به بررسی نحوه استفاده از حساس(حس کننده) دیجیتال دما و رطوبت Aosong AM2320 با آردوینو میپردازیم. این حساس(حس کننده) از طریق I2C ارتباط برقرار میکند و به ما امکان میدهد دما را به درجهٔ سانتیگراد یا فارنهایت و رطوبت را بهصورت درصد بخوانیم. تا پایان این آموزش، شما قادر خواهید بود یک پروژهٔ ساده بسازید که این مقادیر را روی نمایشگر مسلسل نمایش میدهد.

حساس(حس کننده) AM2320 جمعوجور است و دادههای قابلاعتماد برای هر دو دما و رطوبت فراهم میکند. دقت آن برای دما 0.1°C است و بازه رطوبت 0-99% است. فرایند راهاندازی شامل سیمکشی حساس(حس کننده) به آردوینو و نوشتن چند خط شِفر (کود) برای خواندن و نمایش مقادیر حساس(حس کننده) است. این آموزش ویدیویی یک راهنمای گامبهگام ارائه میدهد، از جمله نمونههای سیمکشی و کدنویسی (در ویدیو در 00:00).
شرح سختافزار
قطعه اصلی این پروژه حساس(حس کننده) Aosong AM2320 است. این حساس(حس کننده) از ارتباط I2C استفاده میکند که روند اتصال را ساده میکند زیرا تنها به دو خط داده (SDA و SCL) بهعلاوه تغذیه و زمین نیاز دارد. این حساس(حس کننده) دما را در بازه -40°C تا +80°C با دقت ±0.5°C و رطوبت را از 0% تا 99% با دقت مشابه اندازهگیری میکند. حساس(حس کننده) برای مصرف بسیار پایین طراحی شده است که آن را برای دستگاههای مجهز به باتری مناسب میسازد.
علاوه بر این، ماجیول AM2320 دارای مقاومتهای pull-up است که برای ارتباط I2C ضروری بوده و به تثبیت سیگنالها در خطوط SDA و SCL کمک میکنند. این ویژگی فرایند سیمکشی را ساده میکند، زیرا نیازی به افزودن مقاومتهای pull-up خارجی نخواهید داشت.
جزئیات برگه مشخصات
| تولیدکننده | آوسونگ |
|---|---|
| شماره قطعه | AM2320 |
| ولتاژ منطق/ورودیخروجی | 3.1 تا 5.5 V |
| ولتاژ تغذیه | 3.1 تا 5.5 ولت |
| محدوده دما | -40 تا +80 درجه سانتیگراد |
| محدوده رطوبت | 0 تا 99 % |
| رزولوشن (دما) | 0.1 درجه سانتیگراد |
| تفکیکپذیری (رطوبت) | 0.1٪ |
| دقت (دما) | ±0.5 °C |
| دقت (رطوبت) | ±۳٪ |
| بسته | ماجیول |
- اطمینان حاصل کنید که ولتاژ تغذیه صحیح است (3.1 تا 5.5 V).
- برای خطوط SDA و SCL از مقاومتهای پولآپ (معمولاً 4.7 kΩ) استفاده کنید.
- برای جلوگیری از آسیب، محدوده دما را در بازه -40°C تا +80°C نگه دارید.
- خوانشهای رطوبت در بازهٔ 0% تا 99% دقیق هستند.
- در حین خوانشها کدهای خطا را پایش کنید (مثلاً حساس(حس کننده) آفلاین).
دستورالعمل سیمکشی

برای سیمکشی حساس(حس کننده) AM2320 به آردوینو، مراحل زیر را با دقت دنبال کنید. ابتدا پایههای تغذیه را وصل کنید: چپترین پایهِ AM2320 به 5V آردوینو (یا VCC) متصل میشود و پایه زمین (GND) به GND آردوینو وصل میشود. پایه دوم از چپ (SDA) به پایه آنالوگ A4 در آردوینو Uno یا A20 در آردوینو Mega متصل میشود. پایه سوم (SCL) به A5 در آردوینو Uno یا A21 در آردوینو Mega متصل میشود.
علاوه بر این، باید یک مقاومت 4.7 kΩ بین پایه SDA و خط 5V و یک مقاومت 4.7 kΩ دیگر بین پایه SCL و خط 5V متصل کنید. این امر ارتباط صحیح I2C را تضمین میکند. اگر از مدلهای دیگر آردوینو مانند Leonardo استفاده میکنید، پایههای SDA و SCL نیز بهترتیب A4 و A5 خواهند بود.
نمونههای شِفر (کود) و راهنمای گامبهگام
بیایید نگاهی به برخی از بخشهای کلیدی شِفر (کود) آردوینو استفادهشده در این پروژه بیندازیم. ابتدا حساس(حس کننده) را مقداردهی اولیه کرده و ارتباط سریال را راهاندازی میکنیم:
#include
AM2320 sensor;
void setup() {
Serial.begin(9600);
sensor.begin();
} در این قطعه شِفر (کود)، کتابخانهٔ لازم را با#include <AM2320.h>و یک نمونه از حساس(حس کننده) را ایجاد کنید. اینsetup()این تابع ارتباط سریال را با نرخ 9600 بیت بر ثانیه مقداردهی اولیه میکند و حساس(حس کننده) را راهاندازی میکند.
در ادامه، حلقهٔ اصلی را داریم که دما و رطوبت را میخواند:
if (sensor.measure()) {
Serial.print("Temperature: ");
Serial.print(temp('C'));
Serial.print(" C, Humidity: ");
Serial.print(sensor.getHumidity());
Serial.println("%");
}این شِفر (کود) بررسی میکند که آیا اندازهگیری حساس(حس کننده) موفقیتآمیز بوده است. در این صورت، دما را بر حسب سانتیگراد و درصد رطوبت را در نمایشگر مسلسل چاپ میکند. اینtemp('C')این تابع برای بازیابی دما بر حسب سانتیگراد فراخوانی میشود. اگر میخواهید بر حسب فارنهایت، میتوانید آن را فراخوانی کنید.temp('F').
تظاهرات / چه انتظاری داشته باشید
وقتی برنامه را اجرا میکنید، باید در نمایشگر مسلسل ببینید که خوانشهای دما و رطوبت هر نیمثانیه بهروزرسانی میشوند. برای مثال، خروجی ممکن است نشان دهد دما: 23.5 C، رطوبت: 50%. اگر گرما به حساس(حس کننده) اعمال کنید، باید افزایش دما و کاهش رطوبت را مشاهده کنید که پاسخگویی آن را نشان میدهد (در ویدئو در 11:15).
برچسبهای زمانی ویدئو
- 00:00- معرفی حساس(حس کننده) AM2320
- 01:30- دستورالعملهای سیمکشی
- 03:45- مرور شِفر (کود)
- 05:15- نمایش خوانشها
++
/**
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
}
منابع و مراجع
هنوز هیچ منبعی موجود نیست.
فایلها📁
برگه مشخصات (pdf)
-
راهنمای کاربر حساس(حس کننده) دما و رطوبت I2C آدافرuit-AM2320
adafruit-am2320-temperature-humidity-i2c-sensor.pdf1.27 MB
فایل فریزینگ
-
حساس(حس کننده) رطوبت و دما AM2320
AM2320 Humidity and Temperature Sensor.fzpz0.01 MB