مبتدئ → تطبيقي · 10 دروس

صانع IoT — من Arduino إلى أتمتة ذكية

تتعلّم ما هو إنترنت الأشياء، تبرمج Arduino، تربط مستشعرات وLEDs، وتخرج بمشروع نهائي — مصباح مكتب ذكي أو تنبيه حرارة — على لوحة حقيقية أو محاكي Wokwi.

كيف تدرس هذا المسار؟

  1. افتح Wokwi.com إن لم تملك لوحة Arduino بعد.
  2. انسخ كود كل درس وشغّله في المحاكي.
  3. نفّذ المهمة — توصيلات آمنة أولاً.
  4. أكمل الاختبار — التقدّم يُحفظ على جهازك.

محتوى أصلي من Mesue Learn — عملي ومناسب لسن +12 وما فوق.

1. ما هو IoT؟ — عندما «تتكلّم» الأشياء

الهدف: تفهم فكرة إنترنت الأشياء قبل لمس أي لوحة إلكترونية.

IoT = Internet of Things = إنترنت الأشياء.

تخيّل ثلاجة ترسل لك رسالة: «الحليب ينفد». أو مزرعة تراقب رطوبة التربة وتفتح الريّ تلقائياً. هذا IoT: أجهزة حقيقية + مستشعرات + قرارات + أحياناً إنترنت.

المكوّنات الأساسية:
• **الجهاز (Thing):** Arduino، ESP32، Raspberry Pi...
• **المستشعر (Sensor):** يقيس — حرارة، ضوء، حركة...
• **المُفعّل (Actuator):** يفعل — LED، محرّك، ريليه، buzzer
• **البرمجة:** «إذا الحرارة > 30° → شغّل المروحة»
• **(اختياري) السحابة:** إرسال البيانات لتطبيق أو لوحة تحكم

في هذا المسار نبدأ بـ Arduino — لوحة تعليمية رائعة للمبتدئين. لا تحتاج لوحة حقيقية من اليوم الأول: محاكي **Wokwi** (wokwi.com) يشغّل دوائر افتراضية في المتصفح.

Mesue نصيحة: IoT ليس «سحراً» — هو منطق (if/else) + أسلاك + صبر.

  • IoT = أجهزة + مستشعرات + قرارات (+ أحياناً إنترنت)
  • Sensor يقيس — Actuator ينفّذ
  • Arduino نقطة انطلاق ممتازة للمراهقين
  • Wokwi محاكي مجاني إن لم تتوفر لوحة

صورة ذهنية

 [Sensor] → [Arduino] → [LED/Motor]
        |
        v
   (Serial / Cloud / App)

مختبر: صيّاد IoT

امشِ 10 دقائق في البيت أو المدرسة — اكتب 5 أشياء «ذكية» (كاميرا، ترموستات، ساعة...) — أيها sensor وأيها actuator؟

مهمة عملية

اشرح لصديق في 4 جمل: ما الفرق بين مستشعر ومُفعّل؟

اختبر فهمك

في مشروع IoT، مستشعر الحرارة هو...

2. لوحة Arduino — «دماغ» الدائرة الصغيرة

الهدف: تتعرّف على Arduino Uno ومنافذها وبرنامج Arduino IDE.

**Arduino Uno** (الأشهر للتعلّم) لوحة صغيرة فيها متحكّك دقيق (Microcontroller) — «كمبيوتر مصغّر» بدون شاشة ولوحة مفاتيح.

أجزاء مهمة:
• **Digital pins 0–13:** ON/OFF (0 أو 1) — LEDs، أزرار
• **Analog pins A0–A5:** قراءات متدرجة (0–1023) — مستشعرات
• **5V و GND:** تغذية ومأرضة — مثل «+» و «−» في البطارية
• **USB:** برمجة اللوحة وتغذية من الحاسوب

**Arduino IDE** (desktop أو web editor): تكتب فيه **Sketch** (ملف .ino)، تضغط Upload، اللوحة تنفّذ.

بدون hardware:
1) افتح wokwi.com
2) New Project → Arduino Uno
3) أضف LED من القائمة — جرّب مثال Blink

```cpp
void setup() {
pinMode(13, OUTPUT); // مرة واحدة عند التشغيل
}
void loop() {
digitalWrite(13, HIGH); // LED ON
delay(1000);
digitalWrite(13, LOW); // LED OFF
delay(1000);
}
```

setup() = الإعداد. loop() = يتكرّر للأبد.

  • Digital = 0/1 — Analog = قيم متدرجة
  • 5V/GND ضروريان لكل مكوّن
  • setup() مرة — loop() بلا توقف
  • Wokwi = Arduino Uno افتراضي

صورة ذهنية

 [USB] → [Arduino Uno]
            |
    Digital 0-13
    Analog A0-A5
    5V · GND

مختبر: Blink

في Wokwi شغّل Blink — غيّر delay إلى 200ms — هل LED يرمش أسرع؟

مهمة عملية

ارسم على ورقة Arduino Uno مع تسمية Digital و Analog و 5V و GND — أو شغّل Blink على Wokwi.

اختبر فهمك

أي دالة في Arduino تتكرّر باستمرار؟

3. رقمي وتناظري — ON/OFF مقابل «كم؟»

الهدف: تميّز بين digitalWrite/digitalRead و analogRead.

**رقمي (Digital):** حالتان فقط — HIGH (1) أو LOW (0).
• LED: يشتعل أو يطفأ
• زر: مضغوط أو غير مضغوط (مع pull-up)

```cpp
digitalWrite(8, HIGH);
int btn = digitalRead(2); // 0 أو 1
```

**تناظري (Analog):** قيم بين min و max.
• Arduino Uno: analogRead(A0) يعطي **0–1023** (10 bits)
• مستشعر ضوء LDR: ظلام ≈ قيمة عالية، ضوء قوي ≈ قيمة منخفضة (حسب التوصيل)

```cpp
int light = analogRead(A0);
// light من 0 إلى 1023
```

**PWM** (على بعض Digital pins ~): يُحاكي شدّة — مثل dimmer للـ LED عبر analogWrite(pin, 0–255).

في Wokwi: أضف Potentiometer إلى A0 — راقب القيمة تتغيّر في Serial Monitor (الدرس 6).

قاعدة: **Digital للقرارات** — **Analog للقياسات**.

  • digitalRead/Write = 0 أو 1
  • analogRead = 0–1023 على Uno
  • analogWrite (PWM) = 0–255 للتدرّج
  • Potentiometer على Wokwi يُحاكي مستشعر

صورة ذهنية

 Digital:  [0]──────[1]
 Analog:   [0]~~~1023~~~
           A0 → analogRead

مختبر: Potentiometer

Wokwi: Uno + Potentiometer على A0 + Serial Monitor — حرّك المقبض — هل الأرقام تتغيّر؟

مهمة عملية

اكتب جملة: متى تستخدم digital ومتى analog في مشروع «ضوء يشتعل عند الظلام»؟

اختبر فهمك

analogRead على Arduino Uno يعطي نطاقاً تقريبياً...

4. المستشعرات — حرارة وضوء

الهدف: تربط LDR (ضوء) و TMP36 أو محاكي حرارة وتقرأ القيم.

**مستشعر الضوء LDR** (Light Dependent Resistor):
• مقاومته تتغيّر مع الضوء
• غالباً في **Voltage Divider** مع مقاومة ثابتة → قراءة على A0

**مستشعر الحرارة TMP36** (أو LM35):
• Analog out — كل 10mV ≈ 1°C (TMP36: offset 500mV عند 0°C)
• صيغة تقريبية:
```cpp
int raw = analogRead(A1);
float volts = raw * (5.0 / 1023.0);
float tempC = (volts - 0.5) * 100.0; // TMP36
```

**على Wokwi بدون TMP36:**
• استخدم **Temperature Sensor** أو Potentiometer كـ «حرارة وهمية» للتدريب
• المهم: تفهم أن raw → volts → وحدة حقيقية (°C أو %)

**معايرة (Calibration):** «عند الظلام raw > 800» — سجّل قيمتك أنت، لا تنسخ أرقاماً عشوائية.

Mesue: دوّن 5 قراءات في ظروف مختلفة (ضوء الغرفة، مصباح، ظلام) — جدول بسيط.

  • LDR للضوء — TMP36/LM35 للحرارة
  • Voltage divider شائع مع LDR
  • raw → volts → °C بمعادلة
  • المعايرة على بيئتك أدق

صورة ذهنية

 LDR ──→ A0 (light)
 TMP36 ─→ A1 (temp)
        |
        v
   [Serial / Logic]

مختبر: جدول قراءات

Wokwi: LDR + TMP36 (أو بدائل) — اطبع light و temp كل ثانية — غطِّ LDR بيدك — ماذا حصل؟

مهمة عملية

أنشئ جدولاً: 3 حالات ضوء + 3 قراءات raw — و2 حالات «حرارة» (Potentiometer) مع القيم.

اختبر فهمك

لماذا نحوّل analogRead إلى volts قبل °C؟

5. LEDs — ضوء، ألوان، ومقاومة

الهدف: توصّل LED بأمان (مع مقاومة) وتتحكم بعدة LEDs أو PWM.

**LED** (Light Emitting Diode):
• يمرّ التيار في اتجاه واحد فقط (+ طويل = Anode → 5V عبر مقاومة، − قصير = Cathode → GND)
• **بدون مقاومة (220Ω–330Ω)** قد يحرق LED أو يتلف Pin!

```cpp
pinMode(9, OUTPUT);
digitalWrite(9, HIGH); // ON
```

**PWM dimming:**
```cpp
analogWrite(9, 128); // نصف السطوع (0–255)
```

**RGB LED** (اختياري): 3 pins للأحمر والأخضر والأزرق — مزج ألوان.

**Wokwi:** اسحب LED + Resistor 220Ω — Arduino يُحاكي الحرق إن نسيت المقاومة أحياناً.

**مشروع مصغّر:** LED يرمش 3 مرات عند ضغط زر (digitalRead).

```cpp
if (digitalRead(2) == LOW) { // زر مع pull-up
for (int i=0; i<3; i++) {
digitalWrite(13, HIGH); delay(150);
digitalWrite(13, LOW); delay(150);
}
}
```

  • مقاومة 220Ω–330Ω مع LED almost always
  • اتجاه LED مهم — لا عكس
  • analogWrite = PWM للسطوع
  • زر + pull-up: LOW = مضغوط

صورة ذهنية

 5V ──[220Ω]──►|── LED ──► GND
         PWM pin ──► brightness

مختبر: fade LED

Wokwi: LED على pin 9 — شغّل fade (PWM) — هل ترى تدرّج السطوع؟

مهمة عملية

وصّل (أو حاكِ) LED + مقاومة + زر — 3 ومضات عند الضغط.

اختبر فهمك

لماذا نضع مقاومة مع LED؟

6. Serial Monitor — «عيون» البرنامج

الهدف: تطبع رسائل وقيم وتستخدمها لتصحيح الأخطاء (debug).

**Serial** = حوار بين Arduino والحاسوب عبر USB.

```cpp
void setup() {
Serial.begin(9600); // سرعة — 9600 baud شائعة
Serial.println("Mesue IoT ready!");
}
void loop() {
int x = analogRead(A0);
Serial.print("Light raw: ");
Serial.println(x);
delay(500);
}
```

**في Arduino IDE:** Tools → Serial Monitor (9600 baud)
**في Wokwi:** نافذة Serial أسفل المحاكاة

**نصائح debug:**
• println() سطر جديد — print() بدون
• «Marker»: Serial.println("--- loop start ---");
• إذا لا شيء يظهر: تحقق baud، كابل USB، أو نسيت Serial.begin

**Serial Plotter** (IDE): رسم بياني للقيم — رائع لمراقبة حرارة أو ضوء عبر الزمن.

Mesue: قبل إصلاح bug — **اقرأ** ماذا يطبع Serial. نصف الأخطاء «القيمة غريبة» = توصيل أو pin خاطئ.

  • Serial.begin(9600) في setup
  • print / println للنص والأرقام
  • Serial Plotter لرسم القيم
  • Baud rate يجب أن يطابق Monitor

صورة ذهنية

 [Arduino] --USB--> [PC]
              Serial Monitor
              9600 baud

مختبر: Serial Plotter

اطبع analogRead(A0) كل 100ms — افتح Plotter — حرّك LDR — هل المنحنى منطقي؟

مهمة عملية

أضف رسائل Serial لـ sketch Blink توضّح ON/OFF — التقط لقطة Serial Monitor.

اختبر فهمك

Serial.begin(9600) يجب أن يُستدعى عادةً في...

7. أتمتة بسيطة — إذا... فافعل...

الهدف: تبني منطق if/else يربط مستشعراً بمُفعّل — قلب IoT.

أتمتة = قواعد تلقائية بدون تدخّل يدوي كل ثانية.

**مثال 1 — ضوء تلقائي:**
```cpp
int light = analogRead(A0);
if (light > 700) { // ظلام (عاير!)
digitalWrite(9, HIGH); // LED ON
} else {
digitalWrite(9, LOW);
}
```

**مثال 2 — تنبيه حرارة:**
```cpp
float t = readTempC();
if (t > 28.0) {
digitalWrite(8, HIGH); // LED تحذير
Serial.println(F("Hot!"));
} else {
digitalWrite(8, LOW);
}
```

**Hysteresis** (متقدّم بسيط): لا تطفئ عند 27.9 وتشعل عند 28.0 — استخدم هامشاً (28 ON، 26 OFF) لتجنب الوميض.

**map():** تحويل 0–1023 إلى 0–255:
`int pwm = map(analogRead(A0), 0, 1023, 0, 255);`

**Wokwi:** جرّب تغيير temp/light — هل LED يستجيب فوراً؟

Mesue: اكتب **3 قواعد** لمشروعك النهائي قبل الكود.

  • if/else = منطق الأتمتة
  • عاير عتبات (thresholds) على مكانك
  • Hysteresis يمنع الوميض عند الحد
  • map() لربط sensor بـ PWM

صورة ذهنية

 read sensor
     |
     v
 [if threshold?]
   /        \
 YES        NO
  |          |
 actuate    idle

مختبر: قانونان

اجمع LDR + LED — قانون للظلام + قانون للضوء القوي — سجّل العتبات في تعليق.

مهمة عملية

اكتب pseudocode (عربي/إنجليزي) لمصباح مكتب: «إذا ظلام > X AND بعد 18:00 → ON» (الوقت اختياري لاحقاً).

اختبر فهمك

لماذا نستخدم hysteresis في تنبيه الحرارة؟

8. السلامة — كهرباء، حرارة، وأسلاك

الهدف: تتبع قواعد السلامة قبل توصيل hardware حقيقي أو مشروع نهائي.

**قواعد Mesue — لا تتخطّاها:**

1) **لا 230V mains** — هذا المسار 5V/3.3V فقط. الريليه للمبتدئين بإشراف بالغ.
2) **افصل USB** قبل تعديل الأسلاك — لا hot-plug للمكوّنات.
3) **مقاومة مع LED** — تحقق من التوصيل على Wokwi أولاً.
4) **قصر/دائرة:** إن سخنت لوحة أو رائحة احتراق → **أوقف فوراً**، افصل USB.
5) **تيار المحرّكات:** Uno لا يشغّل محرّكاً كبيراً مباشرة — استخدم transistor/Motor driver.
6) **Batteries:** راقب القطبية (+/−) — لا عكس.
7) **مكتب نظيف:** ماء بعيداً عن اللوحة.

**ESD:** لمس معدن قبل لمس chips حساسة (اختياري).

**محاكاة أولاً:** Wokwi يختبر المنطق — hardware يختبر العالم الحقيقي.

**بالغ/معلّم:** مطلوب عند لحام، أدوات حادة، أو أي جهد > 5V.

السلامة مهارة IoT — ليس «درساً ثانوياً».

  • 5V تعليمي فقط — لا شبكة 230V
  • افصل USB قبل تعديل الدائرة
  • رائحة/حرارة = أوقف فوراً
  • Wokwi أولاً — hardware بإشراف

صورة ذهنية

 Plan (Wokwi)
     |
     v
 Check wires OFF
     |
     v
 Power ON · Monitor

مختبر: تدقيق دائرة

راجع sketch + wiring (Wokwi أو رسم يدوي) — هل يوجد مسار مباشر من 5V إلى GND بدون load؟

مهمة عملية

اكتب 5 قواعد سلامة بخطك — شاركها مع زميل.

اختبر فهمك

قبل تغيير الأسلاك على Arduino موصول بـ USB...

9. Wokwi والتوصيل — جرّب قبل الشراء

الهدف: تبني دائرة كاملة في Wokwi وتجهّز مخططاً لمشروعك النهائي.

**Wokwi** (wokwi.com) محاكي:
• Arduino Uno، ESP32، مستشعرات، LEDs
• تشغيل فوري — مشاركة رابط المشروع
• مجاني للتعلّم

**خطوات مشروع Wokwi:**
1) New → Arduino Uno
2) + component: LED، Resistor، LDR، TMP36، Button
3) توصيل: 5V/GND، A0 للـ LDR، pin 9 للـ LED
4) الصق sketch من الدروس السابقة
5) Run — Serial + Plotter
6) Share → انسخ الرابط لـ Mesue Learn

**رسم Fritzing** (اختياري): diagram احترافي — Fritzing.org

**تحضير المشروع النهائي — اختر مساراً:**

**A) مصباح مكتب ذكي:** LDR + LED PWM — يشتعل في الظلام بسطوع متدرّج
**B) تنبيه حرارة:** TMP36/Pot + LED/Buzzer — يومض فوق عتبة

**Deliverables للدرس 10:**
• رابط Wokwi **أو** فيديو/صور hardware
• sketch .ino مع تعليقات عربية
• README: ماذا يفعل + العتبات + السلامة

  • Wokwi = تجربة بلا شراء hardware
  • شارك رابط المشروع للمراجعة
  • اختر A (مصباح) أو B (حرارة)
  • README جزء من التسليم

صورة ذهنية

 [Wokwi Editor]
  Uno + sensors + LED
        |
        v
   Run · Share link

مختبر: دائرة كاملة

ابنِ في Wokwi: Uno + LDR + LED + 220Ω — sketch أتمتة من الدرس 7 — شغّل 2 دقيقة بلا أخطاء.

مهمة عملية

سلّم رابط Wokwi تجريبي (أو screenshot) + اختيار A أو B للمشروع النهائي.

اختبر فهمك

Wokwi مفيد أساساً لـ...

10. المشروع النهائي — مصباح ذكي أو تنبيه حرارة

الهدف: تسلّم مشروع IoT يعمل بمنطق مستشعر → قرار → مُفعّل.

**المطلوب (اختر A أو B):**

**A — مصباح مكتب ذكي:**
• LDR يقيس الضوء
• LED (PWM) يضيء في الظلام — سطوع أعلى كلما زاد الظلام
• Serial يطبع raw + حالة «LAMP ON/OFF»
• hysteresis بسيط

**B — تنبيه حرارة:**
• TMP36 أو Potentiometer كمحاكاة
• LED يرمش (أو buzzer) فوق 28°C (عاير!)
• Serial: درجة الحرارة كل ثانية
• رسالة «OK» تحت العتبة

**معايير النجاح:**
✓ يعمل على Wokwi **أو** Arduino حقيقي
✓ sketch منظّم: setup / دوال readTemp readLight / loop
✓ تعليقات عربية للعتبات
✓ README.md: عنوان، صورة/رابط، wiring، سلامة
✓ (اختياري) فيديو 30–60 ثانية

**مثال README:**
```
# مصباح مكتب Mesue
- LDR على A0، LED على 9
- ON إذا raw > 650
- Wokwi: https://wokwi.com/...
```

commit أخير (إن Git): «IoT final: smart desk lamp ready»

  • مستشعر → منطق → مُفعّل = IoT كامل
  • Wokwi أو hardware — كلاهما مقبول
  • README + رابط = محفظة Mesue Learn
  • السلامة مذكورة في README

صورة ذهنية

 Sensor → Arduino → LED
        |
        v
  Wokwi link / Photo
        |
        v
   [Mesue Learn ✓]

مختبر: العرض النهائي

اعرض المشروع على زميل — هل فهم ماذا يقيس وماذا يفعل من README دون شرحك؟

مهمة عملية

سلّم مشروع A أو B + README + رابط Wokwi — شارك في تعليق Mesue Learn إن رغبت.

اختبر فهمك

أفضل دليل على نجاح مشروع IoT للمبتدئ؟

مشروع IoT جاهز للعرض

صوّر مشروعك وشاركه — أو تابع مسار الروبوتات للمنطق والخوارزميات.