كود البحث

الدرس 2 من 10: أساسيات بايثون لقيادة عدة سيارة ذكية رباعية الدفع Raspberry Pi Pico 4WD

الدرس 2 من 10: أساسيات بايثون لقيادة عدة سيارة ذكية رباعية الدفع Raspberry Pi Pico 4WD

في هذا الدرس الثاني من دورة Robojax لسيارة Raspberry Pi Pico الذكية ذات الدفع الرباعي، نتعمق في مفاهيم برمجة بايثون الأساسية التي ستمكنك من التحكم في الروبوت الخاص بك. صُمم هذا الدليل ليأخذك من خبرة برمجية صفرية إلى كتابة نصوص برمجية تتحكم في الأجهزة بثقة. بدلاً من مجرد حفظ الصياغة، سنستكشف "السبب" وراء كل مفهوم، مما يمنحك الأدوات اللازمة لبناء وتخصيص مشاريعك الخاصة. بنهاية هذا الدرس، سيكون لديك فهم قوي للمتغيرات، والتحكم في التدفق، والدوال، والقوائم—وهي اللبنات الأساسية لجميع المشاريع المستقبلية. هذه المعرفة ليست فقط لسيارة ذكية. المبادئ التي ستتعلمها هنا هي نفسها المستخدمة في عدد لا يحصى من التطبيقات الواقعية. يمكنك تطبيق هذه المهارات على:
  • أتمتة دفيئة منزلية للتحكم في المراوح والمضخات والأضواء بناءً على بيانات الاستشعار.
  • بناء نظام أمان مخصص يطلق الإنذارات أو يرسل إشعارات.
  • إنشاء تركيبات فنية تفاعلية تستجيب للبيئة.
  • تطوير سلوكيات روبوت مخصصة تتجاوز تلك المبرمجة مسبقًا.

الأجهزة/المكونات

لمتابعة الأمثلة المتعلقة بالأجهزة في هذا الدرس، ستحتاج إلى المكونات التالية. جميعها جزء من مجموعة SunFounder Raspberry Pi Pico 4WD Smart Car Kit، ولكن يمكن شراؤها بشكل فردي للتجارب المستقلة.

  • Raspberry Pi Pico: عقل المتحكم الدقيق للمشروع.
  • مصباح LED: يُستخدم لتوضيح التحكم في الإخراج الرقمي.
  • مقاوم (150Ω - 330Ω): للحد من التيار وحماية مصباح LED.
  • أسلاك توصيل: لإجراء الاتصالات على لوحة التجارب.
  • لوحة تجارب: لنمذجة الدائرة الكهربائية.

دليل التوصيل

للتجربة العملية على الأجهزة في هذا الدرس، سنبني دائرة بسيطة للتحكم في مصباح LED باستخدام Raspberry Pi Pico. التوصيل واضح ومباشر وهو خطوة أولى كلاسيكية في الحوسبة الفيزيائية. المفتاح هو استخدام مقاوم للحد من التيار لمنع احتراق مصباح LED. يُوصَل المقاوم على التوالي مع مصباح LED. الساق الطويلة لمصباح LED (الأنود) هي الاتصال الموجب، والساق القصيرة (الكاثود) هي الاتصال السالب.

في الفيديو، يستخدم المدرب مقاومًا متصلًا بدبوس الأرضي والساق القصيرة لمصباح LED. الساق الطويلة متصلة بدبوس GPIO رقم 22. هذا الإعداد يسمح لـ Pico بإرسال إشارة عالية (3.3 فولت) إلى الدبوس لتشغيل مصباح LED وإشارة منخفضة (0 فولت) لإيقاف تشغيله.

ملاحظة: مخطط التوصيل موضح في الفيديو. يرجى الرجوع إلى الدليل المرئي للتحديد الدقيق للمواضع.

شرح الكود

يركز هذا الدرس على الصياغة والمنطق الأساسي لبايثون، وهو أمر ضروري للتحكم في الروبوت الخاص بك. دعنا نحلل المفاهيم الرئيسية المغطاة في الفيديو. أمثلة الكود مكتوبة بلغة MicroPython، وهي نسخة من بايثون مصممة للعمل على المتحكمات الدقيقة مثل Raspberry Pi Pico.

المتغيرات وأنواع البيانات

المتغيرات تشبه الصناديق المسمى التي تخزن فيها المعلومات. في بايثون، لا تحتاج إلى الإعلان عن نوع المتغير؛ يتم استنتاجه من القيمة التي تعينها. (في الفيديو عند 03:33)


age = 23  # هذا عدد صحيح
name = "Ahmad"  # هذا نص (سلسلة)
pi = 3.14  # هذا رقم عشري

يمكنك استخدام هذه المتغيرات في العمليات الحسابية وطباعة قيمها. على سبيل المثال، لحساب عدد الأيام في عمر معين، يمكنك استخدام days = age * 365. تُستخدم دالة print() لعرض المخرجات على وحدة التحكم.

الجمل الشرطية (إذا/وإلا)

الجمل الشرطية تسمح لرمزك باتخاذ القرارات. هذا أمر حاسم لكي يتفاعل الروبوت مع بيئته، مثل التوقف عند اكتشاف عائق. (في الفيديو عند 07:39)


age = 16
if age >= 17:
    print("يمكنك القيادة")
else:
    print("صغير جدًا على القيادة")

تتحقق جملة if من شرط. إذا كان الشرط صحيحًا، يتم تنفيذ كتلة الكود ذات المسافة البادئة أسفلها. إذا كان خاطئًا، يتم تشغيل الكود الموجود تحت جملة else. المسافة البادئة (المسافات في بداية السطر) حاسمة في بايثون؛ فهي تحدد أي كود ينتمي إلى أي كتلة.

الحلقات (For و While)

تُستخدم الحلقات لتكرار كتلة من الكود. هذا مثالي لمهام مثل فحص قيم المستشعرات أو تحريك محرك عبر سلسلة من الخطوات. (في الفيديو عند 09:04)

حلقة For: تتكرر هذه الحلقة عددًا محددًا من المرات.


for x in range(5):  # ستكون x: 0، 1، 2، 3، 4
    print(x)

حلقة While: تستمر هذه الحلقة طالما أن الشرط صحيح. هذا مفيد لإنشاء حلقة برنامج رئيسية تعمل إلى الأبد حتى يحدث حدث معين. (في الفيديو عند 12:13)


x = 9
while x > 5:
    print("قيمة x هي:", x)
    x = x - 1  # إنقاص x
print("انتهت الحلقة")

كن حذرًا مع حلقات while True:. ستعمل إلى الأبد ما لم تستخدم جملة break للخروج من الحلقة أو توقف البرنامج.

الدوال

الدوال هي كتل كود قابلة لإعادة الاستخدام تؤدي مهمة محددة. تساعد في الحفاظ على تنظيم الكود ومنع التكرار. (في الفيديو عند 14:52)


def calculate_days(years):
    days = years * 365
    return days

# الآن يمكننا استخدام هذه الدالة عدة مرات
days_in_10_years = calculate_days(10)
print("الأيام في 10 سنوات:", days_in_10_years)

هنا، calculate_days هي دالة تأخذ وسيطًا (years) وتُرجع قيمة. هذا أكثر كفاءة من كتابة نفس العملية الحسابية مرارًا وتكرارًا. يوضح الفيديو أيضًا كيف يمكن لدالة أن تستدعي دالة أخرى، مما يتيح لك بناء عمليات معقدة من أجزاء بسيطة وقابلة للاختبار.

القوائم

تُستخدم القوائم لتخزين مجموعة مرتبة من العناصر. هذا مثالي لتخزين تسلسل من الأوامر لروبوتك، مثل "forward" و"back" و"left" و"right". (في الفيديو عند 19:15)


move = ["forward", "back", "left", "right", "stop"]
print(len(move))  # يطبع عدد العناصر في القائمة (5)
print(move[0]) # يطبع العنصر الأول، "forward"

# يمكنك إضافة عناصر
move.append("cliff")
# يمكنك إزالة عناصر
move.pop()  # يزيل "cliff"
# يمكنك تغيير عناصر
move[2] = "fly"  # يغير العنصر الثالث إلى "fly"

القوائم مفهرسة من الصفر، مما يعني أن العنصر الأول في الفهرس 0. دالة len() تعطيك طول القائمة، ويمكنك استخدام حلقة for للتكرار عبر جميع العناصر. كما يتم تقديم دالة enumerate()، التي تعطيك كلًا من الفهرس والقيمة أثناء الحلقة، وهو مفيد للعمل مع دبابيس أو مستشعرات متعددة.

العمل مع الدبابيس والوقت

هنا تقوم بربط منطق بايثون بالعالم المادي. تستخدم مكتبة machine للتحكم في دبابيس GPIO الخاصة بـ Pico. (في الفيديو عند 25:16)


from machine import Pin
import time

# إعداد الدبوس 22 كمخرج
led = Pin(22, Pin.OUT)

# تشغيل وإيقاف تشغيل LED
led.on()
time.sleep(1)
led.off()
time.sleep(1)

يمكنك أيضًا القراءة من دبوس عن طريق تعيينه كمدخل باستخدام Pin(2, Pin.IN). مكتبة time ضرورية لإضافة تأخيرات (time.sleep()) ولقياس الوقت المنقضي باستخدام time.ticks_ms() أو التحويل بين تنسيقات الوقت باستخدام time.localtime() وtime.mktime(). هذا أمر حاسم للمنطق القائم على التوقيت، مثل إنشاء إشارة تعديل عرض النبضة (PWM) للتحكم في سرعة المحرك.

مشروع/عرض توضيحي مباشر

في الفيديو، يقدم المدرب عرضًا توضيحيًا مباشرًا لهذه المفاهيم. يبدأ بعرض عبارات print() بسيطة وتعيينات متغيرات في مترجم بايثون. ثم ينتقل إلى أمثلة أكثر تعقيدًا، موضحًا بصريًا كيف تغير عبارات if تدفق البرنامج بناءً على قيمة متغير.

ثم يقدم المدرب مثالًا عمليًا على الأجهزة من خلال توصيل LED بـ Raspberry Pi Pico. يكتب سكربت MicroPython بسيطًا يقوم بتشغيل وإيقاف تشغيل LED مع تأخير لمدة ثانية واحدة، مما يظهر النتيجة المباشرة للتحكم في مخرج مادي بالكود. هذا المثال العملي يعزز العلاقة بين منطق البرمجة والإجراء الواقعي. يختتم الدرس بإظهار كيفية استخدام enumerate لإدارة دبابيس متعددة وكيفية استخدام وحدة time لعمليات توقيت وجدولة أكثر تقدمًا.

الفصول

  • [00:00] مقدمة إلى دورة سيارة Raspberry Pi Pico الذكية
  • [01:31] نظرة عامة على الدورة وقدرات المجموعة
  • [03:33] المتغيرات وأنواع البيانات في بايثون
  • [07:39] العبارات الشرطية (إذا/وإلا)
  • [09:04] فهم حلقات For
  • [12:13] استكشاف حلقات While
  • [14:52] تعريف واستخدام الدوال
  • [19:15] العمل مع القوائم وهياكل البيانات
  • [25:16] التحكم في دبابيس GPIO باستخدام MicroPython
  • [29:54] مثال عملي: وميض LED
  • [31:15] تحكم متقدم في الدبابيس باستخدام Enumerate
  • [31:24] العمل مع دوال الوقت
لا يوجد رمز مرفق.

الموارد والمراجع

لا توجد موارد حتى الآن.

ملفات📁

لا توجد ملفات متاحة.