📚 برمجة وميض الدايودات المشعة للضوء
المفاهيم الأساسية
منطق الدائرة: الكود البرمجي الذي يتحكم في تشغيل وإيقاف الدايودات المشعة للضوء (LEDs) لجعلها تومض.
خريطة المفاهيم
```markmap
تطبيقات على المتحكمات الدقيقة
إنشاء تطبيق سحابي لإنترنت الأشياء
أهداف التعلم
#### • استخدام البايثون وبروتوكول PyFirmata لبرمجة الأردوينو.
برمجة الأردوينو بالبايثون (pyfirmata)
الخطوات البرمجية الأساسية
#### 1. تثبيت حزمة pyfirmata
##### • الأمر في Terminal: pip install pyfirmata
#### 2. استدعاء المكتبة في الكود
##### • import pyfirmata
#### 3. تحديد منفذ الاتصال
##### • communication_port = "COM4" (يختلف حسب الجهاز)
#### 4. إجراء الاتصال والوصول للأطراف
##### • board = pyfirmata.Arduino(communication_port)
##### • it = pyfirmata.util.Iterator(board)
##### • it.start()
#### 5. استخدام حلقة لا نهائية
##### • while True:
##### • # كتابة الأوامر هنا
ملاحظة تقنية
#### • يشغل البرنامج على الحاسوب، وليس على الأردوينو، مما يتيح الوصول إلى وظائف قد لا تتوفر في جهاز التحكم الدقيق.
الوظيفة الأساسية: board.get_pin()
#### • وظيفتها: قراءة وكتابة القيم للأطراف التناظرية والرقمية.
#### • معاملاتها: ثلاثة أحرف تفصل بينها نقطتان رأسيتان (a:d:5)
##### • المعامل الأول: نوع الطرف
###### • 'a': طرف تناظري (analog)
###### • 'd': طرف رقمي (digital)
##### • المعامل الثاني: رقم الطرف
###### • الأطراف الرقمية: من 0 إلى 12
###### • الأطراف التناظرية: من A0 إلى A5
##### • المعامل الثالث: طريقة التعامل
###### • للأطراف الرقمية:
####### • 'i': input (مدخلات)
####### • 'o': output (مخرجات)
###### • للأطراف التناظرية:
####### • 'i': input (مدخلات)
####### • 'p': Pulse Width Modulation (تضمين عرض النبضة)
تضمين عرض النبضة (PWM)
#### • تعريف: تعديل إشارة رقمية لمحاكاة إشارة تناظرية متغيرة القوة.
#### • دورة العمل (Duty Cycle): النسبة المئوية للزمن الذي تكون فيه الإشارة عالية (5v) خلال فترة زمنية واحدة.
##### • analogWrite(0): 0% دورة عمل (إشارة منخفضة دائمًا)
##### • analogWrite(64): 25% دورة عمل
##### • analogWrite(127): 50% دورة عمل
##### • analogWrite(191): 75% دورة عمل
##### • analogWrite(255): 100% دورة عمل (إشارة عالية دائمًا)
التفاعل مع الأطراف الرقمية
#### • قراءة قيمة من طرف رقمي (مثال: الطرف 10)
##### • digital_pin = board.get_pin("d:10:i")
##### • pin_value = digital_pin.read()
#### • كتابة قيمة إلى طرف رقمي (مثال: الطرف 10)
##### • digital_pin = board.get_pin("d:10:o")
##### • digital_pin.write(1) # قيمة HIGH
##### • digital_pin.write(0) # قيمة LOW
التفاعل مع الأطراف التناظرية
#### • قراءة قيمة من طرف تناظري (مثال: الطرف 4)
##### • analog_pin = board.get_pin("a:4:i")
##### • pin_value = analog_pin.read()
#### • كتابة قيمة إلى طرف تناظري (مثال: الطرف 4)
##### • analog_pin = board.get_pin("a:4:p")
##### • analog_pin.write(0.75)
ملاحظة عامة
#### • يتطلب كل مستشعر أو مشغل قيماً مختلفة ليعمل بصورة صحيحة.
مشروع تطبيقي: مشروع أردوينو مبسط مع PyFirmata
الهدف
#### • إنشاء مشروع مبسط لاستخدام مكتبة PyFirmata.
#### • برمجة دايود مشع للضوء خارجي وآخر مدمج ليومضا بالتناوب باستخدام بايثون.
خطوات التنفيذ
#### 1. محاكاة الدائرة في Tinkercad Circuits.
المكونات المطلوبة
#### • لوحة أردوينو أونو R3.
#### • لوحة توصيل الدوائر الصغيرة (Breadboard).
#### • دايود مشع للضوء (LED).
#### • مقاومة (Resistor).
تحميل المكونات في Tinkercad
#### 1. البحث عن "لوحة أردوينو أونو R3" في مكتبة المكونات (Components) وسحبها وإفلاتها في مساحة العمل.
#### 2. البحث عن "لوحة توصيل الدوائر الصغيرة" في مكتبة المكونات (Components) وسحبها وإفلاتها في مساحة العمل.
توصيل الأردوينو
#### • الخطوة 1: توصيل طرف GND (الأرضي) للأردوينو بالعمود السالب في لوحة التوصيل، باستخدام سلك أسود.
#### • الخطوة 2: وضع المقاومة (Resistor) من مكتبة المكونات على لوحة التوصيل.
#### • الخطوة 3: توصيل الطرف الرقمي 12 (pin 12) بالطرف 1 (Terminal 1) للمقاومة، باستخدام سلك أحمر.
توصيل الدايود المشع للضوء (LED)
#### 1. البحث عن LED من مكتبة المكونات ووضعه على لوحة التوصيل.
#### 2. توصيل الطرف 2 من المقاومة بالدايود مشع للضوء.
#### 3. توصيل هبوط الدايود المشع للضوء بالعمود السالب في لوحة التوصيل.
الدائرة بشكلها النهائي
#### • يتم عرض الدائرة النهائية في شكلين:
##### • شكل 4.11: يوضح التوصيل الفعلي على لوحة التجارب مع الأردوينو.
##### • شكل 4.12: يوضح الدائرة النهائية في بيئة محاكاة Tinkercad.
الدائرة المادية (Physical Circuit)
#### • شكل 4.13: صورة الدائرة الفعلية
##### • مكونات الدائرة:
###### • دايود مشع للخارج
###### • دايود مشع مدمج
##### • تفاصيل الصورة:
###### • LED أحمر موصل بالطرف الرقمي 13 في الأردوينو.
###### • مقاومة متصلة على التوالي مع الـ LED.
###### • لوحة أردوينو أونو R3.
###### • لوحة توصيل (Breadboard) لتجميع الدائرة.
برمجة الأردوينو للومض
#### • الهدف: برمجة دايودين مشعين (داخلي وخارجي) ليومضا بالتناوب بفارق ثانية.
#### • توصيل الأطراف:
##### • الدايود المشع المدمج: الطرف الرقمي 13.
##### • الدايود المشع الخارجي: الطرف الرقمي 12.
#### • الخوارزمية: تكرار لانهائي لتبادل إشارات التشغيل والإيقاف بين الدايودين كل ثانية.
#### • الكود البرمجي:
##### • استيراد المكتبات:
###### • import pyfirmata
###### • import time
##### • إعداد منفذ الاتصال:
###### • communication_port = 'COM4'
##### • إعداد الاتصال:
###### • board = pyfirmata.Arduino(communication_port)
###### • it = pyfirmata.util.Iterator(board)
###### • it.start()
##### • تعيين الأطراف:
###### • external_led = board.get_pin("d:12:o")
###### • internal_led = board.get_pin("d:13:o")
#### • منطق الدائرة لتشغيل وميض الدايودات المشعة للضوء
##### • while True:
###### • external_led.write(1)
###### • internal_led.write(0)
###### • time.sleep(1)
###### • external_led.write(0)
###### • internal_led.write(1)
###### • time.sleep(1)
```
نقاط مهمة
- يتم كتابة منطق الدائرة باستخدام حلقة `while True:` لإنشاء تكرار لا نهائي.
- داخل الحلقة، يتم استخدام الدالة `.write()` لتعيين حالة الدايودات المشعة للضوء (1 = تشغيل / HIGH، 0 = إيقاف / LOW).
- يتم استخدام `time.sleep(1)` لإنشاء تأخير لمدة ثانية واحدة بين تغيير الحالات، مما يخلق تأثير الوميض.
- يوضح الشكل 4.15 إرسال إشارة رقمية من الأردوينو إلى الأطراف.