شرح متحكم 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 لإزالة أي ميل ثابت.