الحساسات الزراعية الأساسية
Core Agricultural Sensors
الفرق بين الحساسات التناظرية والرقمية، مقسم الجهد، قراءة DHT22 لحرارة ورطوبة الهواء، حساس رطوبة التربة السعوي، و LDR للإضاءة — مع المعايرة اليدوية وقياس المناخ الدقيق داخل الصوبة التجريبية.
نظرة عامة على السيشن
بنهاية السيشن ستكون قادراً على
- تفرّق بين Analog و Digital sensors وتعرف أي طرف تستخدم لكل منهما.
- تحسب خرج Voltage divider وتطبقه على حساس الإضاءة LDR.
- تقرأ DHT22 وتتعامل مع فشل القراءة (NaN).
- تُجري معايرة ثنائية النقطة (Two-point calibration) لحساس رطوبة التربة وتحوّل الـ ADC إلى نسبة مئوية.
- تقارن المناخ الدقيق داخل الصوبة وخارجها وتفسر الفروق زراعياً.
التطبيق في مزرعة الكلية
قياس المناخ الدقيق (Microclimate) داخل الصوبة التجريبية مقارنة بالحقل المكشوف: حرارة ورطوبة الهواء، رطوبة التربة على عمقين، وشدة الإضاءة — كل 5 دقائق لمدة 30 دقيقة.
المُخرج (Deliverable)
نظام قياس متعدد الحساسات (DHT22 + Soil + LDR) على ESP32 بمعايرة يدوية موثقة، وجدول مقارنة الصوبة مقابل الحقل.
خطة السيشن (180 دقيقة)
- 0:00 مراجعة مراجعة: GPIO و PWM + نتائج جولة المزرعة 10 د
- 0:10 شرح Analog vs Digital + مقسم الجهد + LDR 30 د
- 0:40 شرح DHT22 والحساس السعوي + المعايرة 30 د
- 1:10 محاكاة Tinkercad: محطة حساسات (TMP36 + Soil + LDR) 30 د
- 1:40 استراحة استراحة 10 د
- 1:50 تطبيق Lab: ESP32 + DHT22 + Soil + LDR ومعايرة حقيقية 35 د
- 2:25 ميداني ميداني: المناخ الدقيق في الصوبة مقابل الحقل 25 د
- 2:50 تقييم اختبار سريع + الواجب 10 د
الأدوات والمكونات
قبل السيشن
- تثبيت مكتبة DHT sensor library (Adafruit) من Library Manager.
- إضافة ESP32 للـ IDE: Boards Manager →
esp32 by Espressif.
قاموس المصطلحات (Glossary)
يحول كمية فيزيائية (حرارة، رطوبة، ضوء) إلى إشارة كهربية.
Analog-to-Digital Converter — يحول الجهد إلى رقم.
عدد المستويات: 10-bit = 1024 مستوى، 12-bit = 4096.
مقاومتان على التوالي تعطيان جهداً بينيا يتغير بتغير إحداهما.
تقل مقاومتها كلما زاد الضوء.
نسبة بخار الماء في الهواء إلى أقصى ما يحمله عند نفس الحرارة.
Volumetric Water Content — حجم الماء ÷ حجم التربة (m³/m³).
يقيس ثابت العزل للتربة بدون تلامس معدني مباشر — لا يتآكل مثل المقاوم.
ربط قراءة الحساس الخام بقيمة حقيقية معروفة.
ظروف الحرارة والرطوبة في حيز صغير (داخل الصوبة، تحت ظل النبات).
أقصى ماء تحتفظ به التربة بعد تصريف الماء الزائد بالجاذبية.
رطوبة لا يستطيع النبات عندها سحب الماء من التربة.
Analog vs Digital ومقسم الجهد
30 دقيقة| Analog sensor | Digital sensor | |
|---|---|---|
| الخرج | جهد متغير 0–3.3V | بيانات رقمية (بروتوكول) |
| أمثلة | Soil moisture، LDR، TMP36 | DHT22 (1-Wire خاص)، BME280 (I2C) |
| القراءة | analogRead() على طرف ADC | مكتبة تتولى البروتوكول |
| التأثر بالتشويش | عالي — يحتاج فلترة (السيشن 3) | منخفض — لكن قد تفشل القراءة كلها (NaN) |
| طول السلك المسموح | قصير (< 1–2 م) | DHT22 حتى ~20 م مع Pull-up مناسب |
معظم الحساسات المقاومة (مثل الـ LDR) لا تعطي جهداً مباشرة، بل تتغير مقاومتها. لتحويل المقاومة إلى جهد نستخدم مقسم الجهد:
Vout = Vin × R2 / (R1 + R2)
ضع الـ LDR مكان R2 ومقاومة ثابتة 10kΩ مكان R1. في الظلام مقاومة الـ LDR عالية (مئات kΩ) ⇒ Vout قريب من Vin. في الشمس تنخفض لعشرات الأوم ⇒ Vout قريب من 0. (يمكن عكس الترتيب حسب ما تريد أن «تزيد» القراءة معه).
قاعدة اختيار R1
اختر R1 قريبة من مقاومة الـ LDR في منتصف المدى الذي يهمك. للصوبة (500–5000 lux) تعمل 10kΩ جيداً، أما لقياس شمس الحقل الكاملة فـ 1kΩ تعطي دقة أفضل في الإضاءة العالية.
DHT22 وحساس رطوبة التربة والمعايرة
30 دقيقة| الحساس | يقيس | المدى / الدقة | ملاحظات حقلية |
|---|---|---|---|
| DHT22 (AM2302) | حرارة + رطوبة الهواء | −40…80°C ±0.5°C / 0–100% RH ±2–5% | قراءة كل ≥ 2 ث، يحتاج غطاء إشعاعي (Radiation shield) في الشمس |
| Capacitive Soil v1.2 | رطوبة التربة (نسبي) | خرج 1.2–2.5V تقريباً | لا تغمر الجزء الإلكتروني العلوي — اعزله بشريط أو ورنيش |
| LDR GL5528 | الإضاءة (نسبي) | ~10–20 kΩ عند 10 lux | ليس دقيقاً للـ PAR — للمقارنة النسبية فقط |
| TMP36 (Tinkercad) | الحرارة | −40…125°C، 10 mV/°C | نستخدمه في المحاكاة بدل DHT22 |
لماذا المعايرة؟
الحساس السعوي يعطي رقماً خاماً (مثلاً 2400) لا يعني شيئاً زراعياً. وكل حساس يختلف عن الآخر، وكل نوع تربة يختلف. أبسط معايرة هي معايرة ثنائية النقطة:
- Dry: الحساس في الهواء أو في تربة مجففة بالفرن ⇒ مثلاً 3200.
- Wet: الحساس في ماء أو تربة مشبعة ⇒ مثلاً 1300.
- أي قراءة بينهما نحولها خطياً إلى نسبة:
% = (Dry − Raw) / (Dry − Wet) × 100
المعايرة الأدق (للبحث العلمي) تتم بطريقة الوزن (Gravimetric): نأخذ عينة تربة بجوار الحساس، نزنها، نجففها 24 ساعة على 105°C، ونحسب المحتوى المائي الحقيقي — ونرسم منحنى معايرة لتربة المزرعة نفسها.
من النسبة إلى القرار الزراعي
نسبة 30% من الحساس ليست 30% ماء في التربة! هي موقع القراءة بين «جاف تماماً» و«مشبع». لتحديد عتبة الري الصحيحة نربطها بالسعة الحقلية ونقطة الذبول لتربة المزرعة الطينية (معمل الأراضي بالكلية) — سنستخدم ذلك في نموذج FAO-56 في السيشن 15.
Tinkercad: محطة الحساسات
30 دقيقةمحطة حساسات الصوبة (TMP36 + Soil Moisture + LDR)
30 دقيقةTinkercad لا يحتوي DHT22، لذلك نستخدم TMP36 للحرارة. نقرأ الحساسات الثلاثة ونطبع CSV على Serial يمكن نسخه إلى Excel.
المكونات (Components)
- Arduino Uno R3
- Temperature Sensor [TMP36]
- Soil Moisture Sensor
- Photoresistor (LDR)
- Resistor 10kΩ
- Breadboard
التوصيل (Wiring)
| من | إلى | ملاحظة |
|---|---|---|
| TMP36 Vs / GND | 5V / GND | الوجه المسطح ناحيتك: يسار=Vs، يمين=GND |
| TMP36 Vout | A0 | |
| Soil sensor VCC / GND | 5V / GND | |
| Soil sensor SIG | A1 | |
| LDR (طرف) | 5V | الطرف الآخر إلى A2 |
| 10kΩ | A2 → GND | مقسم جهد |
ابنِ الدائرة والصق الكود، ثم شغّل المحاكاة وافتح Serial Monitor.
اضغط على كل حساس أثناء المحاكاة لتظهر مسطرة تغيير القيمة (حرارة / رطوبة / ضوء).
سجل 5 قراءات لكل حالة: تربة جافة، متوسطة، مبتلة — ولاحظ متى تظهر رسالة «soil is dry».
انسخ مخرجات CSV من Serial Monitor والصقها في Excel وارسم خطاً بيانياً.
/*
Session 2 — Core agricultural sensors (Arduino Uno — Tinkercad Circuits version)
Tinkercad has no DHT22, so we use: TMP36 (air temperature) on A0, Soil Moisture Sensor on A1,
Photoresistor (LDR) with a 10kΩ voltage divider on A2. Real hardware version: s02_sensors_esp32
*/
const int TMP36_PIN = A0;
const int SOIL_PIN = A1;
const int LDR_PIN = A2;
// Manual 2-point calibration (session 2 lab): read the sensor in dry soil and in saturated soil
int SOIL_DRY = 0; // Tinkercad soil sensor: 0 = dry ... ~876 = wet (real capacitive sensors are inverted!)
int SOIL_WET = 876;
void setup() {
Serial.begin(9600);
Serial.println(F("temp_c,soil_raw,soil_pct,light_raw,light_pct")); // CSV header -> paste into Excel
}
void loop() {
// TMP36: 10 mV/°C with 500 mV offset -> T = (V - 0.5) * 100
float v = analogRead(TMP36_PIN) * 5.0 / 1023.0;
float tempC = (v - 0.5) * 100.0;
int soilRaw = analogRead(SOIL_PIN);
float soilPct = constrain((soilRaw - SOIL_DRY) * 100.0 / (SOIL_WET - SOIL_DRY), 0, 100);
// LDR divider: more light -> lower LDR resistance -> higher voltage on A2 (LDR to 5V, 10k to GND)
int lightRaw = analogRead(LDR_PIN);
float lightPct = lightRaw * 100.0 / 1023.0;
Serial.print(tempC, 1); Serial.print(',');
Serial.print(soilRaw); Serial.print(',');
Serial.print(soilPct, 0); Serial.print(',');
Serial.print(lightRaw); Serial.print(',');
Serial.println(lightPct, 0);
if (soilPct < 30) Serial.println(F("# soil is dry -> irrigation recommended"));
delay(2000);
}
مؤشر حالة بالـ LEDs
أضف 3 LEDs (أحمر، أصفر، أخضر) على D8، D9، D10 تبين حالة التربة: أحمر < 30%، أصفر 30–60%، أخضر > 60%. وأضف Buzzer على D7 يصفر إذا تجاوزت الحرارة 35°C.
الحل (Solution)
digitalWrite(8, soilPct < 30);
digitalWrite(9, soilPct >= 30 && soilPct <= 60);
digitalWrite(10, soilPct > 60);
if (tempC > 35) tone(7, 1000, 200); // heat alarm
Lab: الحساسات الحقيقية على ESP32
35 دقيقةتوصيل DHT22 + Soil + LDR على ESP32 ومعايرة الحساس
- التوصيل
DHT22 DATA → GPIO 4 (مع 10kΩ إلى 3.3V إن لم تكن في الموديول)، Soil AOUT → GPIO 34، LDR → GPIO 35. كل الحساسات على 3.3V.
- تحقق بالـ Multimeter
قس جهد خرج حساس التربة في الهواء ثم في الماء — يجب أن يقل الجهد في الماء (~2.5V ⇒ ~1.2V).
- الرفع والقراءة
ارفع الكود وافتح Serial Monitor على 115200.
- المعايرة
سجل متوسط 10 قراءات في الهواء (Dry) و 10 في الماء (Wet) وعدّل
SOIL_DRYوSOIL_WETفي الكود. - اختبار التربة
اغرس الحساس في تربة جافة ثم أضف 50 مل ماء كل دقيقة وسجل الاستجابة.
النتيجة المتوقعة: القراءات تتغير بشكل منطقي: الرطوبة ترتفع مع إضافة الماء، و DHT22 يعطي قيماً قريبة من ترمومتر المعمل (±0.5°C).
/*
Session 2 — Core agricultural sensors on real hardware (ESP32 DevKit) — greenhouse microclimate
DHT22 : DATA -> GPIO 4 (10kΩ pull-up to 3.3V if your module has none), VCC 3.3V
Soil : Capacitive Soil Moisture v1.2 AOUT -> GPIO 34 (ADC1), VCC 3.3V
LDR : 3.3V — LDR — GPIO 35 — 10kΩ — GND
Library: "DHT sensor library" by Adafruit (+ "Adafruit Unified Sensor")
NOTE: use ADC1 pins (32-39) — ADC2 pins stop working when Wi-Fi is on.
*/
#include <DHT.h>
#define DHT_PIN 4
#define SOIL_PIN 34
#define LDR_PIN 35
DHT dht(DHT_PIN, DHT22);
// Calibration values measured in the lab (dry air / glass of water). Capacitive sensors: wet = LOWER value
int SOIL_DRY = 3200;
int SOIL_WET = 1300;
void setup() {
Serial.begin(115200);
analogReadResolution(12); // 0..4095
analogSetAttenuation(ADC_11db); // full 0..3.3 V range
dht.begin();
Serial.println("time_s,air_temp_c,air_hum_pct,soil_raw,soil_pct,light_raw");
}
void loop() {
float t = dht.readTemperature();
float h = dht.readHumidity();
if (isnan(t) || isnan(h)) {
Serial.println("# DHT22 read failed — check wiring / pull-up");
}
int soilRaw = analogRead(SOIL_PIN);
float soilPct = constrain((float)(SOIL_DRY - soilRaw) / (SOIL_DRY - SOIL_WET) * 100.0, 0, 100);
int light = analogRead(LDR_PIN);
Serial.printf("%lu,%.1f,%.1f,%d,%.0f,%d\n", millis() / 1000, t, h, soilRaw, soilPct, light);
delay(2500); // DHT22 needs >= 2 s between reads
}
⚠️ استخدم أطراف ADC1 (32–39) لأن أطراف ADC2 تتوقف عن العمل عند تشغيل Wi-Fi — خطأ شائع جداً عند الانتقال للسيشن 5.
لماذا يعطي DHT22 أحياناً NaN؟
القراءة أسرع من ثانيتين، أو السلك طويل بدون Pull-up، أو مصدر 3.3V ضعيف. الكود لا يجب أن يرسل NaN للسيرفر أبداً — نتخطى القيمة (سنتعامل معها كقيمة مفقودة في السيشن 14).
ميداني: المناخ الدقيق في الصوبة
25 دقيقةالصوبة مقابل الحقل المكشوف
الصوبة التجريبية + نقطة مكشوفة بجوارها (نفس التوقيت)
- التمركز
فريقان: الأول داخل الصوبة على ارتفاع النبات (~50 سم)، الثاني في الحقل المكشوف. الحساس في الظل (لا تعرضه للشمس المباشرة — ستقرأ حرارته هو!).
- التربة
اغرس حساس التربة عمودياً حتى الخط المرسوم عليه، على عمق 5 سم ثم 15 سم بجوار جذور النبات.
- التسجيل
سجل كل 5 دقائق لمدة 30 دقيقة (أو احفظ Serial Monitor).
- المقارنة
احسب الفرق في الحرارة والرطوبة والإضاءة بين الموقعين.
| الوقت | الموقع | حرارة °C | رطوبة هواء % | تربة 5 سم % | تربة 15 سم % | إضاءة (ADC) |
|---|---|---|---|---|---|---|
- أدخل الصوبة بأحذية نظيفة (منع نقل الأمراض).
- لا تغرس الحساس بالقرب من خراطيم التنقيط مباشرة — ستقرأ «مبتلاً» دائماً.
- الإلكترونيات بعيداً عن رش المياه.
فكّر وناقش
كم درجة أعلى داخل الصوبة؟ وما أثر ذلك على النتح (Transpiration) واحتياج الري؟
لماذا الرطوبة النسبية داخل الصوبة أعلى؟ ومتى تصبح خطراً (أمراض فطرية)؟
هل رطوبة التربة على 5 سم مثل 15 سم؟ أي عمق يهم المحصول الحالي؟
اختبر فهمك
6 أسئلة · نتيجة فوريةالواجب والتسليم
الواجب الأسبوعي (Weekly Assignment)
أكمل تحدي LEDs الحالة + Buzzer على Tinkercad.
ارسم في Excel منحنى الاستجابة: كمية الماء المضافة (مل) مقابل قراءة الحساس الخام — هل العلاقة خطية؟
اكتب تقرير المقارنة (صوبة × حقل) في صفحة واحدة مع جدول القراءات وتفسير زراعي.
قائمة التسليم (Submission Checklist)
مراجع ومصادر
استعد للسيشن القادمة
لاحظت أن قراءة التربة «ترتعش»؟ السيشن القادمة نعالج التشويش بالفلاتر البرمجية. احتفظ بملف CSV الخاص بقراءاتك.