- KFS × Navera
- IoT & AI for Smart Agriculture
- السيشن التمهيدية
السيشن التمهيدية: خريطة الكورس وتجهيز بيئة العمل
Orientation: Course Roadmap, Teams & Lab Setup
قبل أول سطر كود: نرى المنتج النهائي يعمل أمامنا، نفهم رحلة الـ 22 سيشن وطريقة التقييم، نكوّن فرق العمل ونوزع مناطق المزرعة، نجهّز كل الأدوات على اللابتوب ونتأكد منها بسكربت فحص، ونتعلم «لغة المزارع» (التربة والماء والبخر) التي سنبني عليها كل قرار.
نظرة عامة على السيشن
بنهاية السيشن ستكون قادراً على
- تصف المنتج النهائي للكورس (منصة KFS Smart Farm) ومكوناته، وتربط كل مكون بالوحدة التي سنبنيه فيها.
- تعرف نظام العمل: هيكل السيشن (3 ساعات)، الأدوار داخل الفريق، الواجبات، وتوزيع الدرجات.
- تجهّز بيئة العمل كاملة: Arduino IDE 2 + ESP32 core، Tinkercad، Wokwi، Python وحزمه، VS Code و Git — وتتحقق منها بسكربت.
- تشرح بلغة بسيطة مفاهيم Field capacity و Wilting point و ET0 و Kc، وتحسب متى يحتاج الحقل للري.
- تقرأ أول حقيقة من بيانات المزرعة الحقيقية: مطر سنوي ~52 مم مقابل بخر-نتح ~1826 مم — ولماذا الري هو كل شيء في الدلتا.
التطبيق في مزرعة الكلية
جولة تعارف وسلامة في مزرعة الكلية: مقابلة مشرف المزرعة لفهم «كيف يُتخذ قرار الري اليوم» (Baseline)، وتسليم كل فريق منطقته التي سيعمل عليها طوال الكورس، واختبار اللمس (Feel test) لرطوبة التربة كأول قياس — بدون أي جهاز.
المُخرج (Deliverable)
لابتوب جاهز (نتيجة check_env.py بدون FAIL + أول دائرة على Tinkercad و Wokwi)، ميثاق الفريق (Team charter) بالأدوار والمنطقة، وورقة «خط الأساس» لطريقة الري الحالية في منطقة الفريق.
خطة السيشن (180 دقيقة)
- 0:00 مراجعة تعارف + سؤال الافتتاح: كم لتر يشربه فدان الذرة في يوليو؟ 15 د
- 0:15 شرح رحلة الكورس + عرض حي للمنتج النهائي (KFS Smart Farm) 25 د
- 0:40 نقاش نظام العمل: الفرق والأدوار والتقييم + ميثاق الفريق 20 د
- 1:00 تطبيق Lab: تجهيز بيئة العمل وفحصها بـ check_env.py 35 د
- 1:35 استراحة استراحة 10 د
- 1:45 محاكاة لغة المزارع: التربة كخزان ماء + محاكي «متى نروي؟» 25 د
- 2:10 ميداني تطبيق ميداني: جولة السلامة، مقابلة المشرف، Feel test 40 د
- 2:50 تقييم اختبار تحديد مستوى + الواجب 10 د
الأدوات والمكونات
قبل السيشن
- لا يلزم أي خبرة سابقة في البرمجة أو الإلكترونيات أو الزراعة — هذه السيشن تحديداً لتسوية نقطة البداية للجميع.
- لو أمكن: حمّل مسبقاً Arduino IDE 2 و Python 3.10+ و VS Code (الملفات كبيرة وشبكة المعمل مشتركة).
قاموس المصطلحات (Glossary)
إدارة الحقل بالقياس: الكمية المناسبة في المكان والوقت المناسبين بدل المعاملة الموحدة.
جهاز صغير في الحقل (متحكم + حساسات + اتصال) يقيس ويرسل القراءات.
جهاز يجمع رسائل العقد ويوصلها للسيرفر أو الإنترنت.
صفحة ويب تعرض القراءات والرسوم والتنبيهات وأزرار التحكم.
أقصى ماء تحتفظ به التربة بعد تصريف الماء الزائد بالجاذبية (~1-2 يوم بعد الري).
رطوبة لا يستطيع النبات عندها سحب الماء من التربة فيذبل ولا يتعافى.
TAW = (FC − WP) × عمق الجذور. RAW جزء منه (غالباً 50%) يسحبه النبات بدون إجهاد.
كمية الماء (مم/يوم) التي يفقدها نجيل مرجعي بسبب الطقس فقط — تحسبها الأرصاد.
يحوّل ET0 إلى احتياج محصول معين حسب نوعه ومرحلة نموه: ETc = Kc × ET0.
الوضع الحالي قبل أي تحسين — بدونه لا نستطيع إثبات أن النظام وفّر ماءً.
مجلد يحتوي حزم مشروع واحد حتى لا تتعارض الإصدارات بين المشاريع.
مجلد يتتبع Git كل تغيير فيه — نسلم عليه الواجبات ونعمل كفريق.
رحلة الكورس والمنتج النهائي
25 دقيقةسؤال الافتتاح (5 دقائق — خمّن قبل أن تحسب)
فدان ذرة (4200 م²) في مزرعة الكلية في منتصف يوليو: كم لتر ماء يفقده يومياً بالبخر والنتح؟ اكتب تخمينك في الكراسة — سنحسب الرقم الحقيقي من بيانات المزرعة في الجزء الرابع، وستندهش.
هذا الكورس لا يتكون من 22 درساً منفصلاً، بل من مشروع واحد كبير نبنيه طبقة فوق طبقة: في السيشن 22 ستقف أمام لجنة وتعرض نظاماً حقيقياً يقيس تربة مزرعة الكلية، ويرسل القراءات لاسلكياً، ويعرضها على لوحة ويب، ويتوقع بالذكاء الاصطناعي متى يحتاج الحقل للري، ويشغّل المضخة ويرسل تنبيهاً على Telegram.
| الوحدة | السيشنات | السؤال الزراعي | ما ستبنيه بيدك |
|---|---|---|---|
| Sensors + DAQ الحساسات وجمع البيانات | 1-4 | ما حالة التربة والهواء الآن؟ | عقدة Arduino/ESP32 تقيس الرطوبة والحرارة والإضاءة وتخزن محلياً على SD |
| Wireless Sensor Networks الشبكات اللاسلكية | 5-8 | كيف تصل القراءة من الحقل البعيد؟ | شبكة ESP-NOW + Gateway + MQTT broker + سيرفر استقبال |
| Web + Dashboard الويب ولوحة التحكم | 9-12 | كيف يرى المشرف المزرعة من هاتفه؟ | تطبيق Flask + SQLite + لوحة تفاعلية + تحكم آمن بالمضخة |
| Data Analysis & ML تحليل البيانات والتعلم الآلي | 13-16 | هل يحتاج الحقل ري خلال 24 ساعة؟ | نماذج Random Forest على بيانات المزرعة الحقيقية (F1 = 0.865) |
| Integration + Automation الدمج والأتمتة | 17-20 | كيف يتصرف النظام وحده بأمان؟ | تنبؤ حي + قواعد إنذار + خرائط + OTA وصيانة |
| Final Project المشروع النهائي | 21-22 | هل وفّر النظام ماءً فعلاً؟ | اختبار ميداني 48 ساعة + عرض وتقرير فني |
هكذا سيبدو مشروعك في السيشن 22
يشغّل المدرب المنصة الجاهزة على اللابتوب ويعرضها على البروجكتور: لوحة القراءات، خريطة العقد في المزرعة، توقع الري من النموذج مع طقس الغد الحقيقي، وزر المضخة. لا تحاول فهم الكود الآن — الهدف أن ترى الوجهة. في كل سيشن سنفتح «صندوقاً» واحداً من هذا النظام.
cd projects/smart-farm
pip install -r requirements.txt
python app.py # http://127.0.0.1:5000
python simulate_nodes.py --backfill 72 # second terminal: 72 h of farm readings
ما يلاحظه الطلاب أثناء العرض (اكتب في الكراسة)
-
من أين جاءت القراءة؟
اختر رقماً واحداً على اللوحة (مثلاً رطوبة تربة 27%) وتتبع رحلته: حساس ← عقدة ← شبكة ← سيرفر ← شاشة. كم «صندوقاً» مرت به؟
-
من اتخذ القرار؟
عندما ظهر «يُنصح بالري خلال 24 ساعة» — هل هذا قاعدة ثابتة أم نموذج تعلم آلي؟ وما الفرق؟ (الإجابة في السيشن 15-17).
-
ما الذي يمكن أن يفشل؟
بطارية تنفد، واي فاي ينقطع، حساس يصدأ، شخص يضغط زر المضخة بالخطأ… سجّل 3 مخاطر — سنعالج كل واحدة منها في الكورس.
لماذا مزرعة الكلية تحديداً؟
لأن كل رقم في هذا الكورس يجب أن يكون له معنى زراعي يمكن التحقق منه: بيانات الطقس والتربة التي سنحللها هي بيانات حقيقية لموقع المزرعة (Open-Meteo / ERA5 لعامي 2023-2024)، والعقد ستُركّب في مناطقها، وقرار الري سيُقارن بقرار مشرف المزرعة الفعلي. أي بيانات محاكاة في الكورس مكتوب عليها ذلك صراحة.
نظام العمل والفرق والتقييم
20 دقيقةشكل كل سيشن (3 ساعات)
كل سيشن من الـ 22 تتبع نفس الإيقاع حتى تعرف دائماً أين أنت: مراجعة قصيرة ← شرح مفاهيم ← محاكاة (Tinkercad / Wokwi / محاكي تفاعلي في الصفحة) ← استراحة ← Lab على جهاز حقيقي ← تطبيق ميداني في المزرعة ← اختبار سريع وواجب. شريط «خطة الـ 180 دقيقة» أعلى كل صفحة سيشن يوضح التوزيع، وفيه مؤقت للمدرب.
| الدور | مسؤوليته | يقود في السيشنات |
|---|---|---|
| Hardware Lead | الدوائر، التوصيل، الحساسات، الطاقة، السلامة الكهربية | 1-4، 21 |
| Network & Firmware | كود العقد، الاتصال اللاسلكي، MQTT، التحديث عن بعد | 5-8، 20 |
| Web & Docs | السيرفر ولوحة التحكم والتوثيق ومستودع الفريق | 9-12، 22 |
| Data & AI | تنظيف البيانات، النماذج، التفسير الزراعي، الخرائط | 13-19 |
التبديل إجباري
كل طالب يقود دوراً مختلفاً في كل وحدة تقريباً، لكن الجميع يكتب كوداً ويوصل دوائر ويخرج للمزرعة. الهدف أن يتخرج كل فرد قادراً على شرح النظام كاملاً — وهذا ما تسأل عنه اللجنة في السيشن 22.
| البند | الوزن | ماذا يُقيَّم؟ |
|---|---|---|
| الحضور والمشاركة العملية | 20% | الانتظام، التفاعل، المساهمة في الفريق، الالتزام بالسلامة في الحقل |
| الواجبات الأسبوعية | 20% | قوائم التسليم في نهاية كل سيشن — دقة التنفيذ وجودة التوثيق |
| اختبار منتصف الكورس (نهاية الأسبوع 6) | 15% | فهم الأساسيات، القدرة على تجميع وتشغيل دائرة |
| المشروع النهائي المتكامل | 35% | اكتمال النظام، الاستقرار 48 ساعة، دقة النموذج، جودة الواجهة |
| العرض والتوثيق الفني | 10% | وضوح الشرح، بنية التقرير، الأداء في الأسئلة |
| درجة النجاح | 60% |
كيف تستخدم صفحات السيشنات
- كل صفحة مقسمة لتبويبات: نظرة عامة ← أجزاء الشرح ← اختبار سريع ← الواجب والتسليم. اضغط «أنهيت هذا الجزء» في آخر كل تبويب لتتبع تقدمك.
- تقدمك وإجابات الاختبار وقائمة التسليم تُحفظ في متصفحك أنت (نفس الجهاز والمتصفح) — لا تُرسل لأي مكان، والتسليم الرسمي يكون على مستودع الفريق.
- أزرار نسخ و تحميل على كل كود، وكل المشاريع والبيانات في صفحة الكورس الرئيسية كملفات ZIP.
- المصطلحات الإنجليزية في «القاموس» بنظرة كل سيشن — احفظها بالإنجليزي، فهي ما ستبحث به وما ستقابله في سوق العمل.
ميثاق الفريق (Team Charter)
على ورقة واحدة يكتب كل فريق: اسم الفريق، الأعضاء وأدوار الوحدة الأولى، المنطقة التي سيتبناها في المزرعة (الصوبة التجريبية / حقل الخضر / حقل الذرة / النقطة المرجعية المكشوفة)، قناة التواصل، موعد ثابت أسبوعي للعمل، وقاعدة واحدة لحل الخلافات. ثم ينشئ Web & Docs مستودعاً على GitHub باسم kfs-smart-farm-<team> ويضيف الجميع والمدرب.
تلميح (Hint)
المنطقة ليست تفصيلة: كل بيانات فريقك ونموذجه وعرضه النهائي سيكون عن هذه المنطقة. فريق الصوبة سيهتم بالرطوبة والأمراض الفطرية، وفريق الذرة بالإجهاد الحراري واحتياج الري في الصيف.
Lab: تجهيز بيئة العمل
35 دقيقةمن لابتوب فارغ إلى بيئة جاهزة للكورس كله
الهدف: كل طالب يخرج من السيشن وعلى جهازه كل ما سيحتاجه حتى السيشن 22، ويثبت ذلك بسكربت فحص — حتى لا نضيع وقت السيشنات القادمة في مشاكل تثبيت.
- Arduino IDE 2 + ESP32
ثبّت Arduino IDE 2، ثم
File → Preferences → Additional boards manager URLsوالصق:https://espressif.github.io/arduino-esp32/package_esp32_index.json
ثمBoards Manager← ابحث عن esp32 by Espressif ← Install. - Driver الـ USB
وصّل اللوحة. لو لم يظهر
COMxفيTools → Port: انظر للشريحة بجوار منفذ USB — CH340 أو CP2102 — وثبّت الـ driver المناسب. 50% من مشاكل «اللوحة لا تعمل» سببها كابل شحن فقط بلا بيانات. - أول Upload
افتح
File → Examples → 01.Basics → Blinkوارفعه. في ESP32 اضغط زر BOOT لو توقف الرفع عندConnecting..... - Tinkercad + Wokwi
سجّل في Tinkercad Circuits (للـ Arduino Uno — سنستخدمه في 7 سيشنات) و Wokwi (يحاكي ESP32 والواي فاي و DHT22 التي لا يدعمها Tinkercad). اعمل Blink على كل منهما واحفظ الرابط.
- Python + venv
ثبّت Python 3.10 أو أحدث (في ويندوز علّم على Add python.exe to PATH). فك
agritech-ai-projects.zipوagritech-datasets.zipفي مجلد واحد اسمهkfs-course، ثم من داخله:python -m venv .venv.venv\Scripts\activate(ويندوز) أوsource .venv/bin/activate(ماك/لينكس)pip install -r projects/setup/requirements-course.txt - الفحص النهائي
شغّل
python projects/setup/check_env.py— لا تغادر المعمل وفيه سطر FAIL. سطور WARN مقبولة الآن (بجوار كل منها رقم السيشن التي ستحتاجه). - VS Code + Git
ثبّت VS Code مع إضافة Python، و Git، ثم
git config --global user.name "اسمك"وgit cloneلمستودع فريقك.
النتيجة المتوقعة: LED يومض على اللوحة الحقيقية وعلى Tinkercad وعلى Wokwi، وسطر Result: … 0 FAIL -> ready for session 1.
"""KFS Smart Farm course - session 0 environment check.
Run from the folder that contains 'projects/' and 'datasets/':
python projects/setup/check_env.py
Every line prints OK / WARN / FAIL. Fix every FAIL before session 1;
WARN items are only needed later in the course (the session number is shown).
"""
import importlib
import importlib.metadata as metadata
import socket
import sys
from pathlib import Path
RESULTS = []
def report(status, item, detail=""):
RESULTS.append(status)
print(f"[{status:4s}] {item:38s} {detail}")
# 1) Python itself ---------------------------------------------------------
v = sys.version_info
if v >= (3, 10):
report("OK", "Python", sys.version.split()[0])
elif v >= (3, 8):
report("WARN", "Python", f"{sys.version.split()[0]} works, 3.10+ recommended")
else:
report("FAIL", "Python", f"{sys.version.split()[0]} is too old, install 3.10+")
# 2) Packages: (import name, pip name, first session that needs it, required now?)
PACKAGES = [
("pandas", "pandas", 13, True),
("numpy", "numpy", 13, True),
("matplotlib", "matplotlib", 13, True),
("sklearn", "scikit-learn", 15, True),
("joblib", "joblib", 15, True),
("flask", "flask", 9, True),
("paho.mqtt", "paho-mqtt", 7, False),
("serial", "pyserial", 3, False),
("certifi", "certifi", 17, False),
]
missing = []
for mod, pip_name, session, required in PACKAGES:
try:
importlib.import_module(mod)
try:
version = metadata.version(pip_name)
except metadata.PackageNotFoundError:
version = "installed"
report("OK", f"{pip_name}", version)
except Exception:
missing.append(pip_name)
report("FAIL" if required else "WARN", f"{pip_name}", f"missing - needed from session {session}")
# 3) Course data -----------------------------------------------------------
here = Path(__file__).resolve()
candidates = [Path.cwd() / "datasets", here.parents[2] / "datasets"]
data_dir = next((p for p in candidates if p.is_dir()), None)
daily = data_dir / "kfs_farm_daily_2023_2024.csv" if data_dir else None
if daily and daily.exists():
report("OK", "Farm dataset", str(daily))
try:
import pandas as pd
d = pd.read_csv(daily, parse_dates=["date"])
july = d[d.date.dt.month == 7]
rain_year = d.precipitation_mm.sum() / d.date.dt.year.nunique()
et0_year = d.et0_mm.sum() / d.date.dt.year.nunique()
print(f" first look at the farm: {len(d)} days, July ET0 = {july.et0_mm.mean():.1f} mm/day, "
f"rain = {rain_year:.0f} mm/yr vs ET0 = {et0_year:.0f} mm/yr")
except Exception as exc: # pandas missing or file damaged
report("WARN", "Farm dataset read", str(exc))
else:
report("FAIL", "Farm dataset", "datasets/kfs_farm_daily_2023_2024.csv not found - unzip agritech-datasets.zip here")
# 4) Network ports the course uses ----------------------------------------
def port_free(port):
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
return s.connect_ex(("127.0.0.1", port)) != 0
for port, use, session in [(5000, "Flask (smart-farm web)", 9), (1883, "MQTT broker (Mosquitto)", 7)]:
if port_free(port):
report("OK", f"Port {port} free", use)
else:
report("WARN", f"Port {port} in use", f"{use} - something already listens (fine if it is your broker)")
# 5) Internet (Open-Meteo forecast is used live from session 17) -----------
try:
socket.create_connection(("api.open-meteo.com", 443), timeout=4).close()
report("OK", "Internet (api.open-meteo.com)", "reachable")
except OSError:
report("WARN", "Internet (api.open-meteo.com)", "not reachable - only needed for live forecasts")
# 6) Serial ports (a connected Arduino / ESP32) ---------------------------
try:
from serial.tools import list_ports
ports = [f"{p.device} ({p.description})" for p in list_ports.comports()]
report("OK" if ports else "WARN", "Serial ports", ", ".join(ports) if ports else "no board connected (plug one in to test the driver)")
except Exception:
report("WARN", "Serial ports", "install pyserial to list boards")
# Summary ------------------------------------------------------------------
print("-" * 70)
fails, warns = RESULTS.count("FAIL"), RESULTS.count("WARN")
if missing:
print("Install the missing packages with:\n python -m pip install " + " ".join(missing))
print(f"Result: {RESULTS.count('OK')} OK, {warns} WARN, {fails} FAIL"
+ (" -> ready for session 1" if not fails else " -> fix the FAIL lines before session 1"))
sys.exit(1 if fails else 0)
السكربت يفحص: إصدار Python، الحزم المطلوبة (وأي سيشن تحتاجها)، وجود بيانات المزرعة ويقرأ منها أول حقيقة، المنافذ 5000 (Flask) و 1883 (MQTT)، الاتصال بـ Open-Meteo، واللوحات الموصلة على USB.
مثال: نتيجة الفحص على جهاز المدرب
لاحظ أن الجهاز «جاهز للسيشن 1» رغم وجود WARN: حزمة paho-mqtt لن نحتاجها قبل السيشن 7، و pyserial قبل السيشن 3. ولاحظ السطر الذي قرأه السكربت من بيانات المزرعة — سنعود إليه بعد الاستراحة.
python projects/setup/check_env.py
المخرجات الفعلية عند التشغيل (Real output)
[WARN] Python 3.8.8 works, 3.10+ recommended
[OK ] pandas 2.0.3
[OK ] numpy 1.24.3
[OK ] matplotlib 3.7.5
[OK ] scikit-learn 1.3.2
[OK ] joblib 1.4.2
[OK ] flask 3.0.3
[WARN] paho-mqtt missing - needed from session 7
[WARN] pyserial missing - needed from session 3
[OK ] certifi 2024.6.2
[OK ] Farm dataset ...\kfs-course\datasets\kfs_farm_daily_2023_2024.csv
first look at the farm: 731 days, July ET0 = 7.6 mm/day, rain = 52 mm/yr vs ET0 = 1826 mm/yr
[OK ] Port 5000 free Flask (smart-farm web)
[OK ] Port 1883 free MQTT broker (Mosquitto)
[OK ] Internet (api.open-meteo.com) reachable
[WARN] Serial ports install pyserial to list boards
----------------------------------------------------------------------
Install the missing packages with:
python -m pip install paho-mqtt pyserial
Result: 11 OK, 4 WARN, 0 FAIL -> ready for session 1| العَرَض | السبب | الحل |
|---|---|---|
'python' is not recognized | لم يُضف للـ PATH | أعد تشغيل المثبت ← Modify ← Add to PATH، أو استخدم py بدل python في ويندوز |
running scripts is disabled عند activate | سياسة PowerShell | Set-ExecutionPolicy -Scope CurrentUser RemoteSigned |
| لا يظهر أي Port | كابل شحن فقط / driver ناقص | كابل بيانات آخر + driver CH340/CP210x |
Failed to connect to ESP32 | اللوحة لم تدخل وضع الرفع | اضغط BOOT مع بداية الرفع حتى يظهر Writing… |
pip بطيء جداً | شبكة المعمل مزدحمة | المدرب يوزع مجلد الحزم (wheels) على فلاشة: pip install --no-index --find-links wheels -r … |
لغة المزارع: التربة كخزان ماء
25 دقيقةطلاب الهندسة والحاسبات يحتاجون لغة الزراعة، وطلاب الزراعة يحتاجون لغة الأرقام — وهنا يلتقي الطرفان. أبسط نموذج يستخدمه المهندس الزراعي (ومنظمة الفاو في دليل FAO-56) هو أن التربة خزان (Bucket): الري والمطر يملآنه، والبخر-نتح يفرغه، وحجمه يعتمد على نوع التربة وعمق الجذور.
الخزان في 4 مستويات
-
التشبع (Saturation)
كل المسام ممتلئة بالماء — لا هواء للجذور. الماء الزائد يصرف لأسفل خلال يوم أو يومين.
-
السعة الحقلية (Field capacity)
«الخزان ممتلئ» — أعلى ماء مفيد تحتفظ به التربة. الري فوقها هدر وغسيل للسماد.
-
نقطة إعادة الري (Refill point)
بعد استهلاك الماء السهل (RAW ≈ 50% من المتاح) يبدأ النبات يتعب. هنا نروي — وهذا بالضبط ما سيتعلم النموذج توقعه.
-
نقطة الذبول (Wilting point)
ماء موجود لكن النبات لا يستطيع سحبه. الوصول هنا = خسارة محصول.
من الطقس إلى احتياج المحصول
ETc = Kc × ET0 — الطقس (حرارة، شمس، رياح، رطوبة) يحدد ET0 بالملليمتر يومياً، والمحصول ومرحلة نموه يحددان Kc (ذرة في التزهير ≈ 1.2، بادرات ≈ 0.3-0.4). 1 مم على فدان = 4.2 م³ = 4200 لتر.
والآن إجابة سؤال الافتتاح من بيانات المزرعة الحقيقية: متوسط ET0 في يوليو = 7.6 مم/يوم. ذرة في التزهير: 1.2 × 7.6 ≈ 9.1 مم/يوم ≈ 38,000 لتر للفدان يومياً. والمطر السنوي كله في موقع المزرعة ~52 مم فقط مقابل ET0 سنوي ~1826 مم — أي أن المطر يغطي أقل من 3% من الطلب: كل قطرة يحتاجها الحقل صيفاً تأتي من الري.
| يناير | مارس | مايو | يوليو | سبتمبر | نوفمبر | |
|---|---|---|---|---|---|---|
| ET0 (مم/يوم) | 2.6 | 4.4 | 6.5 | 7.6 | 5.9 | 3.2 |
| متوسط العظمى (°C) | 21.1 | 25.3 | 32.2 | 38.7 | 35.9 | 26.9 |
| مطر الشهر (مم) | 10.4 | 9.1 | 1.9 | 0.0 | 0.8 | 5.1 |
لماذا يهمنا هذا في كورس IoT؟
لأن حساس رطوبة التربة (السيشن 2) يقيس «مستوى الماء في الخزان»، والطقس (السيشن 17) يخبرنا بسرعة التفريغ، والنموذج (السيشن 16) يتوقع متى نصل لنقطة إعادة الري. بدون هذا الفهم ستكون الأرقام على اللوحة بلا معنى.
تطبيق ميداني: التعارف والسلامة وخط الأساس
40 دقيقةأول زيارة: كيف يُروى الحقل اليوم؟
مزرعة كلية الزراعة — غرفة المضخات ثم منطقة كل فريق
- تعريف السلامة (10 د)
مع مشرف المزرعة: حدود المناطق المسموح دخولها، أماكن لوحات الكهرباء والمضخات (ممنوع اللمس)، المبيدات والأسمدة المخزنة، نقطة التجمع، ورقم الطوارئ. يوقّع كل طالب على تعليمات السلامة.
- مقابلة المشرف — خط الأساس (10 د)
كل فريق يسأل عن منطقته: كيف يُقرر موعد الري الآن؟ كل كم يوم صيفاً وشتاءً؟ كم ساعة تعمل المضخة؟ ما تدفقها؟ هل حدث ري زائد أو عطش أو مرض بسبب الماء؟ — سجّل الأرقام كما هي؛ ستقارن بها نظامك في السيشن 21.
- اختبار اللمس (Feel test) (10 د)
خذ قبضة تربة من عمق 10-15 سم في منطقتك واضغطها: تتفتت ولا تتماسك = جافة، تتماسك كرة وتتفتت عند اللمس = متوسطة، كرة لامعة تلطخ اليد = رطبة. سجّل التقدير ونوع التربة الظاهر (رملية/طميية/طينية) — هذا أول «حساس» في الكورس، وسنقيس بدقة وزنياً (Gravimetric) في السيشن 2.
- صورة المنطقة (10 د)
صوّر المنطقة من 4 اتجاهات + صورة قريبة للنبات، واكتب المحصول وعمره التقريبي ونظام الري. أول Commit في مستودع الفريق سيكون هذه الصور وورقة خط الأساس.
| المنطقة | المحصول / العمر | نظام الري | من يقرر الري؟ وكيف؟ | تكرار الري صيفاً | ساعات تشغيل المضخة | Feel test | مشكلات سابقة |
|---|---|---|---|---|---|---|---|
- لا تلمس لوحات الكهرباء أو المضخات أو الصمامات إطلاقاً — حتى لو طلب أحد ذلك.
- لا تقترب من أماكن تخزين المبيدات، واغسل يديك بعد لمس التربة.
- حذاء مغلق؛ قنوات الري والأرض الطينية زلقة.
- لا دخول للصوبة بدون المشرف (منع نقل العدوى بين النباتات).
نقاش العودة من المزرعة
قارن الفرق: هل يروي المشرف بجدول ثابت أم بالملاحظة؟ ماذا يحدث لهذا الجدول في موجة حر مثل 14 يونيو 2024 (العظمى 44.8°C في بيانات المزرعة)؟
هل تطابقت نتيجة Feel test بين المناطق مع توقعك؟ أي منطقة تبدو الأكثر عرضة للعطش؟
ما الرقم الواحد الذي لو عرفه المشرف كل صباح على هاتفه سيغيّر قراره؟ (هذا هو أول عنصر في لوحة تحكم فريقك).
اختبر فهمك
8 أسئلة · نتيجة فوريةالواجب والتسليم
الواجب الأسبوعي (Weekly Assignment)
أكمل تجهيز بيئتك حتى يظهر
0 FAILفيcheck_env.py، وارفع لقطة شاشة للنتيجة في مستودع الفريق (مجلدweek00/).ارفع ميثاق الفريق وورقة خط الأساس وصور المنطقة في نفس المجلد كأول Commit — مع رسالة Commit واضحة.
استخدم محاكي «متى نروي؟» لمنطقة فريقك (نوع التربة من Feel test، والمحصول من المقابلة): كم يوماً بين الريات في يوليو؟ وقارنه بما قاله المشرف في فقرة من 5 أسطر.
اقرأ الفصل الأول من FAO-56 (Introduction to evapotranspiration) — 15 دقيقة، والمطلوب فقط فهم الفرق بين ET0 و ETc.
قائمة التسليم (Submission Checklist)
مراجع ومصادر
استعد للسيشن القادمة
السيشن 1 نبدأ العمل الحقيقي: أحضر لوحة Arduino Uno أو ESP32 مع كابل البيانات الذي جربته اليوم، و Breadboard و LEDs ومقاومات 220Ω و Push button و Potentiometer. وافتح Tinkercad مسبقاً.