انتقل إلى المحتوى

06 · TK-101 · المشاريع

لوحة تحكم بمحرك سيرفو بلغة Python و Tkinter بمقياس دائري

واجهة سطح مكتب بـ Tkinter فيها شريط تمرير من 0 إلى 180 درجة وأزرار للزوايا 0 و 90 و 180 ومقياس دائري بإبرة، ترسل الزاوية إلى Arduino عبر pySerial، والبرنامج على اللوحة يرفض أي زاوية خارج المدى.

رسم توضيحي: لوحة Tkinter بمقياس دائري ترسل زاوية السيرفو إلى Arduino
التقنيات
PythonTkinterpySerialArduinoServo

المشكلة

بعد بناء واجهات التحكم بـ VB.NET، الخطوة التالية هي واجهة بلغة أخرى أوضح بصرياً: المشغّل يريد أن يرى الزاوية الحالية بنظرة، لا أن يقرأ رقماً فقط.

الحل وطريقة العمل

  • الواجهة: نافذة Tkinter بعنوان Servo Control Interface، فيها شريط Scale من 0 إلى 180، وأزرار للزوايا 0° و 90° و 180°، وتسمية تعرض الزاوية الحالية.
  • المقياس الدائري: صنف CircularGauge مبني على Canvas يرسم قوساً بنصف دائرة وإبرة، ويحوّل القيمة إلى زاوية رسم ثم إلى إحداثيات بـ cos و sin.
  • الإرسال: الزاوية تُرسل نصاً منتهياً بسطر جديد عبر pySerial بسرعة 9600، ولا تُرسل إذا كانت خارج 0 إلى 180.
  • اللوحة: برنامج Arduino يقرأ الرقم بـ Serial.parseInt ويتحقق من المدى مرة ثانية قبل myServo.write، ويرد برسالة خطأ إن كانت الزاوية خارجه.

التنفيذ والتحديات

التحقق من المدى في الطرفين يمنع أمراً خاطئاً من تحريك السيرفو إلى نهايته الميكانيكية، حتى لو أُرسل من برنامج آخر. ويُغلق المنفذ التسلسلي عند إغلاق النافذة حتى لا يبقى محجوزاً. هذا تمرين شخصي ضمن الدراسة على لوحة Arduino ومحرك سيرفو صغير.

المهارات المكتسبة

بناء واجهات Tkinter وعناصر رسم مخصصة على Canvas، الاتصال التسلسلي بـ pySerial، التحكم بالسيرفو، والتحقق من الحدود في الطرفين.