شرح متحكم PID وكيفية برمجته باستخدام Arduino

نظام التحكم الأكثر استخداماً في الدرونز والروبوتات لتحقيق الاستقرار التام

يُعد متحكم PID (Proportional-Integral-Derivative) أحد أهم الخوارزميات المستخدمة في الأنظمة الميكانيكية ذاتية التحكم. يهدف هذا النظام إلى تقليل الخطأ بين القيمة المطلوبة (Setpoint) والقيمة الفعلية (Measured Value) عبر الزمن.

Output(t) = Kp·e(t) + Ki·∫e(t)dt + Kd·de(t)/dt

مكونات المتحكم الثلاثة

1. التناسب (Proportional - P)

يعمل بناءً على الخطأ الحالي. فكلما زاد الخطأ، زادت قوة التصحيح. لكن الاعتماد عليه وحده يؤدي للاهتزاز (Overshoot).

2. التكامل (Integral - I)

يعمل على تراكم الخطأ عبر الزمن. وظيفته الأساسية هي إزالة الخطأ الثابت (Steady-state error) الذي قد يفشل المكون P في معالجته.

3. التفاضل (Derivative - D)

يعمل على معدل تغير الخطأ. وظيفته هي التنبؤ بالخطأ القادم وكبحه، مما يؤدي إلى هبوط سلس ومنع الاهتزازات السريعة.

المكونات المطلوبة للتجربة

💻
لوحة Arduino Uno
🔌
أسلاك توصيل
🕹️
محركات تيار مستمر DC
📐
مستشعر MPU6050

الكود البرمجي (Arduino C++)

إليك تطبيق عملي بسيط يوضح كيفية حساب مخرجات PID يدوياً داخل الكود:

pid_controller.ino
/* 
 * PID Control Algorithm - basic implementation 
 * Built for SparkLab التعليمي
 */

double Kp = 1.0, Ki = 0.05, Kd = 0.25;
double error, lastError, cumError, rateError;
double setPoint = 0, input, output;
unsigned long currentTime, previousTime;
double elapsedTime;

void setup() {
  Serial.begin(9600);
}

void loop() {
  input = readSensor(); // قراءة الحساس
  
  output = computePID(input);
  
  applyControl(output); // تطبيق القوة على المحركات
  
  delay(10);
}

double computePID(double inp) {
  currentTime = millis();
  elapsedTime = (double)(currentTime - previousTime);
  
  error = setPoint - inp;                 // الحساب التناسبي
  cumError += error * elapsedTime;        // الحساب التكاملي
  rateError = (error - lastError) / elapsedTime; // الحساب التفاضلي
  
  double out = Kp*error + Ki*cumError + Kd*rateError;
  
  lastError = error;
  previousTime = currentTime;
  
  return out;
}

جدول تأثير المعاملات

المعامل زيادته تؤدي إلى نقصانه يؤدي إلى
Kp استجابة أسرع، تذبذبات أكثر استجابة أبطأ، استقرار أفضل
Ki إزالة الخطأ المتبقي، قد يسبب تجاوز خطأ متبقي طويل المدى
Kd تقليل التذبذبات، منع الاهتزاز تذبذبات أكثر، حساسية للضوضاء
نصيحة ذهبية: عند ضبط الدرون، ابدأ دائماً بقيم صغيرة جداً للمعاملات وزدها تدريجياً. ابدأ بالمعامل Kp حتى يستجيب النظام، ثم Kd لتهدئة الاهتزازات، وأخيراً Ki لإزالة أي ميل ثابت.
خطأ متبقي طويل المدى Kd تقليل التذبذبات، قد يبطئ الاستجابة تذبذبات أكثر، حساسية للضوضاء

تحسينات على الكود

الكود المقدم يتضمن بعض التحسينات المهمة:

التطبيقات العملية

يُستخدم متحكم PID في العديد من المشاريع:

معلومة: لمشروع روبوت التوازن، القيم الجيدة للبداية عادة تكون:
Kp = 15-40, Ki = 0.1-1.0, Kd = 0.5-3.0
لكن هذا يعتمد على وزن وحجم روبوتك، لذا الضبط التجريبي ضروري!

نصائح مهمة

الخلاصة

متحكم PID هو أداة قوية جداً للتحكم في الأنظمة الديناميكية. مع الفهم الصحيح والضبط الدقيق للمعاملات، يمكنك تحقيق تحكم دقيق ومستقر في مشاريعك. تذكر أن ضبط المعاملات يحتاج إلى صبر وتجربة، لكن النتيجة تستحق الجهد!