كود أردوينو وفيديو لمستشعر Aosong AM2320 الرقمي لدرجة الحرارة والرطوبة
في هذا الدرس سنستكشف كيفية استخدام حساس الحرارة والرطوبة الرقمي Aosong AM2320 مع أردوينو. يتواصل هذا الحساس عبر I2C ويتيح لنا قراءة درجة الحرارة بالدرجات المئوية أو بالفهرنهايت، وقراءة الرطوبة بالنسبة المئوية. بنهاية هذا الدرس، ستتمكن من بناء مشروع بسيط يعرض هذه القراءات على المراقب التسلسلي.

المستشعر AM2320 صغير الحجم ويوفر بيانات موثوقة لكل من درجة الحرارة والرطوبة. دقته 0.1°C لدرجة الحرارة ونطاق الرطوبة 0-99%. تتضمن عملية الإعداد توصيل المستشعر إلى Arduino وكتابة بضعة أسطر من الكود لقراءة قيم المستشعر وعرضها. يقدم هذا الفيديو التعليمي دليلاً خطوة بخطوة، بما في ذلك أمثلة على التوصيل والبرمجة (في الفيديو عند 00:00).
شرح الأجهزة
المكون الرئيسي لهذا المشروع هو مستشعر Aosong AM2320. يعمل عبر واجهة I2C، مما يبسط عملية التوصيل لأنه يتطلب سطرين فقط للبيانات (SDA وSCL) بالإضافة إلى الطاقة والأرضي. يقيس المستشعر درجة الحرارة في نطاق -40°C إلى +80°C بدقة ±0.5°C والرطوبة من 0% إلى 99% بدقة مماثلة. تم تصميم المستشعر ليكون منخفض الاستهلاك جدًا للطاقة، مما يجعله مناسبًا للأجهزة التي تعمل بالبطارية.
بالإضافة إلى ذلك، تتضمن وحدة AM2320 مقاومات سحب للأعلى اللازمة لاتصال I2C، مما يساعد على استقرار الإشارات على خطي SDA وSCL. تبسط هذه الميزة عملية التوصيل، إذ لن تحتاج إلى إضافة مقاومات سحب خارجية.
تفاصيل ورقة البيانات
| الشركة المصنعة | أوسونغ |
|---|---|
| رقم القطعة | AM2320 |
| جهد المنطق/الإدخال والإخراج | 3.1 إلى 5.5 فولت |
| جهد التغذية | 3.1 إلى 5.5 فولت |
| نطاق درجات الحرارة | -40 إلى +80 °C |
| نطاق الرطوبة | 0 إلى 99٪ |
| الدقة (درجة الحرارة) | 0.1 درجة مئوية |
| الدقة (الرطوبة) | 0.1٪ |
| الدقة (درجة الحرارة) | ±0.5 درجة مئوية |
| الدقة (الرطوبة) | ±3٪ |
| حزمة | وحدة |
- تأكد من توفّر جهد التغذية الصحيح (3.1 إلى 5.5 فولت).
- استخدم مقاومات سحب للأعلى (عادةً 4.7 kΩ) لخطوط SDA و SCL.
- حافظ على نطاق درجة الحرارة بين -40°C و+80°C لتجنب التلف.
- قراءات الرطوبة دقيقة ضمن نطاق 0% إلى 99%.
- راقب رموز الأخطاء أثناء القراءات (على سبيل المثال: المستشعر غير متصل).
تعليمات التوصيل

لتوصيل حساس AM2320 بالأردوينو، اتبع هذه الخطوات بعناية. أولاً، وصل أطراف الطاقة: الدبوس الأيسر لحساس AM2320 يوصل إلى 5V (أو VCC) في الأردوينو، بينما دبوس الأرضي يوصل إلى GND في الأردوينو. الدبوس الثاني من اليسار (SDA) يوصل إلى الدبوس التماثلي A4 في أردوينو أونو أو إلى A20 في أردوينو ميغا. الدبوس الثالث (SCL) يذهب إلى A5 لأردوينو أونو أو إلى A21 لأردوينو ميغا.
بالإضافة إلى ذلك، ستحتاج إلى توصيل مقاومة بقيمة 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)
-
دليل مستخدم مستشعر Adafruit AM2320 لدرجة الحرارة والرطوبة بتقنية I2C
adafruit-am2320-temperature-humidity-i2c-sensor.pdf1.27 MB
Fritzing File
-
مجس الرطوبة ودرجة الحرارة AM2320
AM2320 Humidity and Temperature Sensor.fzpz0.01 MB