برمجة المحرك العادي

برمجة المحرك العادي

image001

طالما لعبنا بالمحركات الكهربائية المتواجدة بكثرة في مختلف الأجهزة اﻹليكترونية. نريد اليوم أن نتعامل معها بشكل أرقى من خلال برمجتها. كما يمكنك عن طريق هذا المقال أن تصنع كنترولور المحرك بنفسك عوض أن تشتريه.


المحرك DC

 

المحركات DC هي المحركات الأكثر شيوعا واستعمالا. تجدها في الطائرات وفي المروحيات وفي المذياع وفي العديد من الأجهزة اليومية.

 

وهذا المحرك رغم بساطته إلا أن له دور كبير في صناعة الروبوتات بشتى أنواعها.

 

وللعلم فإنه توجد ثلاثة أنواع من المحركات: المحرك DC والمحرك سيرفو والمحرك الخطوي. ونسعى في هذه المقالات المخصصة لبرمجة المحركات إلى تقديم مختلف الطرق البرمجية لهذه الأنواع الثلاثة حتى تصبح مرجعا لنا عندما نتكلم عن صنع أي جهاز ذكي.

 

بالنسبة للمحرك DC فسنتطرق إلى 3 طرق لبرمجته: باستعمال الترنزستور و باستعمال القنطرة H (أي H-bridge) و باستعمال المرحل (أيrelay ). تدعى هذه الوسائل الثلاثة بـكنترولور المحرك.

image002

 


التحكم بواسطة الترنزستور

 

تقديم

الترنزستور، ذلك المركب البسيط الذي تجده بسهولة في شتى أنواع الاجهزة الكهربائية. سيكون هذا العنصر هو المركب الاليكتروني الأساسي في صناعة كنترولور المحرك DC بكل بساطة.

 

يوجد نوعين من الترنزستورات : NPN و PNP.

 

سنتعمل ترنزستورا يدعى TIP120 من فئة NPN. صمم لأجل التعامل مع الأجهزة التي تتطلب تيار كهربائي عالي كالمصباح والمحرك مثلا. يجب إيصال قاعدته بأحد مخارج الميكروكنترولور، والباعث بالأرضية (أي القطب السالب للتيار) أم القاعدة فتوصل بالجهاز (محرك، مصباح ...) ويوصل الطرف الآخر للجهاز بمنبع التيار الكهربائي.

 

ملاحظة: يمكنك استعمال الترنستور IRF510 أو الترنزستور IRF520 MOSFET عوض TIP120.

image003

 

الدارة الكهربائية

 

بالنسبة للدارة الكهربائية سنحتاج للمركبات التالية:

l        بطاقة Arduino

l        بطاقة بلاستيكية مساعدة (breadboard)

l        مقاومة متغيرة 10 كيلوأوم

l        صمام ثنائي

l        بطارية

l        ترنزستور TIP120

l        محرك كهربائي DC أو مصباح

image004

معظم المحركات تحتاج لشدة كهربائية (الأمبير) أكثر من ما يستطيع الميكروكنترولور أن يزوده.

انتبه لما قلناه سابقا بأن المحرك يجب أن يوصل بالجامع C للترنزستور.

ضف صماما ثنائيا بين الحامغ والباعث للترنزستور. هذا لحماية الترنستور من انعكاس اتجاه التيار الكهربائي المولد من طرف المحرك لاسيما عندما يقوم المحرك بالدوران العكسي أو يقع خطأ تقني فيه. تأكد 100% من أنك أضفت الصمام في الاتجاه الصحيح له. ستجد قرصا أبيضا محاطا في رأسه لتسهيل الأمر عليك. بهذا نكون قد أكملنا صناعة كنترولور المحرك DC بالاستعانة بالترنزستور TIP120.

 

برمجة 

الشيفرة التالية تقوم بتشغيل المحركة لمدة ثانية واحدة وإيقافة لمدة ثانية أخرى وهكذا دواليك.

 

const int transistorPin=9;  


void setup()

{
   // لتكن قاعدة الترنزستور مخرجا
  
pinMode(transistorPin,OUTPUT);
 
}

void loop()

{
  
digitalWrite(transistorPin,HIGH);
  
delay(1000);
  
digitalWrite(transistorPin,LOW);
  
delay(1000);
 }

 

أما الشيفرة التالية فتمكنك من زيادة أو نقصان سرعة ادوران المحرك باستخدام المقاومة المتغيرة.

 

const int transistorPin = 9;   

void setup()

{
 
  // لتكن قاعدة الترنزستور مخرجا
   pinMode(
transistorPin, OUTPUT);
 }

void loop()

{
   // لنقرأ قيمة المقاومة المتغيرة
  
int sensorValue = analogRead(A0);
   // تحويل قيمة القيمة المقروءة إلى قيمة في المجال 0 و 255
  
int outputValue = map(sensorValue,0,1023,0,255);
 
 // نطبق القيمة المحولة على المحرك من خلال ارسالها عبر الترنستور
   analogWrite(
transistorPin,outputValue);
 }

 


التحكم بواسطة المرحل (أيRelay أو Relais)

 

ما هو المرحل؟

يقوم المرحل بالسماح لتيار كهربائي ضعيف قادم من الميكروكنترولور بتشغيل أو إيقاف جهاز كهربائي يعمل بجهد كهربائي عالي.

لهذا المركب الاليكتروني 4 مرابط:

l        مربط 1 للتيار الكهربائي (الموجب)

l        مربط 2 للأرضية (أي السالب)

l        مربط 3 لتنشيط المركب نفسه أو إيقافه.

l        مربط 4 يسمح بخروج التيار الكهربائي الذي سيزود به الجهاز الذي تريد التحكم به (محرك، مصباح ...).

 

قم بالحصول على مرحل (Relay أو Relais électromécanique ) قادر على التعامل مع 5 فولط إذا كان المحرك يستخدم 5 فولط أيضا.

image005

 

الدارة الكهربائية 

بالنسبة للدارة الكهربائية سنحتاج للمركبات التالية:

l        بطاقة Arduino

l        بطاقة بلاستيكية مساعدة (breadboard) (ويمكنك أن تنجز الدارة بدونها كذلك)

l        مقاومة كهربائية 10 كيلوأوم

l        زر كهربائي

l        المرحل (Relay أو Relais électromécanique )

image006

 

في هذه الصورة قمنا بإيصال المربط 3 للمرحل (أعلى يسار المركب) بالمربط 13 للبطاقة. والمربط 2 بالأرضية GND. والمربط 1 للمركب بالمربط Vin للبطاقة، وأخيرا المربط 4 للمركب بالقطب الموجب للمحرك الكهربائي. والقطب السالب للمحرك يوصل بالأرضية (التيار السالب).

أما بالنسبة للزر الكهربائي، فصل مربطا من مرابطه بـ 5V والمربط الآخر يوصل بالمربط 2 للبطاقة وبالمقاومة الكهربائية لتوصل هذه الآخيرة بالأرضية.

 

برمجة 

int buttonPin = 2;

int relayPin = 13;

int state = 0;

 

void setup()

{

  pinMode(buttonPin, INPUT);

  pinMode(relayPin, OUTPUT);

}

 

void loop()

{

  state = digitalRead(buttonPin);

  if(state==HIGH) digitalWrite(relayPin, HIGH);

  else                      digitalWrite(relayPin, LOW);

 

  delay(100);

}

 

 


التحكم بواسطة الدارة H-bridge

 

لماذا الدارة H-bridge؟ 

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

الاعتماد على الترنزستور وحده قد لا يمكنك من التحكم باتجاه دوران المحرك، وبالتالي فإن استعمال المركب المسمى H-bridge أو القنطرة H مخصص لهذا الغرض بالضبط.

يوجد العديد من أصناف القنطرة H، سنستعمل صنفا بسيطا منها في هذا المقال: المركب L293NE أو المركب SN754410.

 

كيف يعمل المركب L293NE أو SN754410؟ 

للمركب L293NE و SN754410 قنطرتي H: واحدة في اليسار والأخرى في اليمين، ويمكنه أن يتحكم بمحركين اثنين في آن واحد. ويمكن أن يتحمل شدة تيار كهربائي تبلغ 1 أمبيرمتر، وجهد كهربائي بين 4.5 و 36 فولط. وبالتالي فإن اختيار المحركات يجب أن يكون ضمن هذه الاعتبارات.

 

للقنطرة L293NE و SN754410 الامتيازات التالية:

image007

image008 

وهذا هو جدول الحقيقة الذي يبين مختلف حالات التحكم بواسطة القنطرة L293NE و SN754410.

 

المربط EN

المربط 1A

المربط 2A

الدور

مرتفع

منخفض

مرتفع

دوران نحو اليمين

مرتفع

مرتفع

منخفض

دوران نحو اليسار

مرتفع

منخفض

منخفض

توقف سريع للمحرك

مرتفع

مرتفع

مرتفع

توقف سريع للمحرك

منخفض

أيا كان

أيا كان

توقف سريع للمحرك

 

مرتفع

HIGH

منخفض

LOW

 

الدارة الكهربائية

 

بالنسبة للدارة الكهربائية سنحتاج للمركبات التالية:

l        بطاقة Arduino

l        بطاقة بلاستيكية مساعدة (breadboard(ويمكنك أن تنجز الدارة بدونها كذلك)

 

l        مقاومة 10 كيلوأوم

l        قاطع التيار (switch)

l        بطارية 12 فولط

l        القنطرةL293NE أو SN754410

l        محرك كهربائي DCذي 12 فولط

 image009

 image010

يمكنك استعمال أيا من الدارتين أعلاه. الصورة الثانية نقول عنها أننا نستعمل طاقة كهربائية خارجية بحكم أن التيار الكهربائي يأتي عبر البطاقة البرمجية. في هذه الحالة يمكنك استعمال أي محرك كهربائي DC يتراوح جهد الكهربائي من 9 إلى 15 فولط. لكن لا تستعمل بطارية 9 فولط لتشغيل محرك 3 فولط مثلا!

 

إذا احترت في أي مرابط المركب  L293NE أو SN754410 التي تم إيصال مربطي المحرك بها فقم بالرجوع مرة أخرى إلى أسماء مرابط المركب أعلاه.

 

أما المبدل الكهربائي فبواسطته سنقوم بالتحكم باتجاه دوران المحرك.

 

image011

إذا حدث وقام الميكروكنترولور بإعادة تشغيل نفسه كلما تم تشغيل المحرك، فيمكنك حينها إضافة مكثف بين القطب الموجب (السلك الأحمر) والقطب السالب (أي الأرضية أو السلك الأسود) للتيار الكهربائي. سيقوم هذا المكثف بجعل حركة التيار الكهربائي سلسة. يسمى هذا الاستعمال بـ decoupling capacitor. قم باختيار مكثف ذي سعة تتراوح بين 10uF و 100uF.

 

برمجة

// نوصل مربط المبدل الكهربائي بالمربط 2 للبطاقة

const int switchPin = 2;   

/* نوصل المربط 1A للقنطرة بالمربط 3 للبطاقة*/

const int motor1Pin = 3

/* نوصل المربط 2A للقنطرة بالمربط 4 للبطاقة*/

const int motor2Pin = 4

/* نوصل المربط EN للقنطرة بالمربط 9 للبطاقة*/

const int enablePin = 9;

 

voidsetup()

{
   // قم بجعل مربط المبدل الكهربائي مدخلا
   pinMode(switchPin, INPUT);

   // بما أننا سنرسل الأوامر إلى المحرك فقم بجعل جميع مرابط الخاصة بالقنطرة مخارج
   pinMode(motor1Pin, OUTPUT);
   pinMode(motor2Pin, OUTPUT);
   pinMode(enablePin, OUTPUT);
   pinMode(ledPin, OUTPUT);

   // قم بتشغيل المحرك
   digitalWrite(enablePin, HIGH);
}

 

voidloop()

{
   // إذا كانت قيمة المبدل الكهربائي مرتفعة سيكون دوران المحرك في الاتجاه الأول
   if(digitalRead(switchPin) ==HIGH)

   {
    digitalWrite(motor1Pin, LOW); 
    digitalWrite(motor2Pin, HIGH);
   }
   // إذا كانت قيمة المبدل الكهربائي منخفظة فسيكون دوران المحرك في الاتجاه المعاكس
   else

  {
    digitalWrite(motor1Pin, HIGH);  
    digitalWrite(motor2Pin, LOW);  

  }
}

 


تحرير محمد السهلي 

 


المراجع

 

http://itp.nyu.edu/physcomp/Tutorials/HighCurrentLoads

http://itp.nyu.edu/physcomp/Labs/DCMotorControl

http://quarkstream.wordpress.com/2009/12/11/arduino-8-relays/

http://quarkstream.wordpress.com/2010/01/07/arduino-8-the-h-bridge/

http://ar.wikipedia.org/wiki/%D9%85%D8%B1%D8%AD%D9%84

http://en.wikipedia.org/wiki/Relay

http://fr.wikipedia.org/wiki/Relais_%C3%A9lectrom%C3%A9canique


 

 

التعليقات   

 
فؤاد
+2 # فؤاد 2015-06-05 18:22
السلام عليكم و رحمة الله تعالى و بركاته
أنا محتاج جدا للتحكم بموتور 24 فولت و قد فشلت معي المتكاملة N298 حيث توقفت عن العمل رغم أن التيار لا يتعدى النصف أمبير عند التشغيل
و أنا أريد التحكم بسرعته من خلال عرض النبضة من 0 الى 255 كما أنا محتاج برمجيا و ليس يدويا باستخدام المقاومة المتغيرة

فهل أستطيع ذلك باستخدام الدارة الكهرباية أعلاه مع واحد من الترنزيستورات اللي نعاماس اقترحت
و أتحكم بسرعته برمجيا طبعا
و الله ولي التوفيق
رد | رد مع اقتباس | اقتباس | تقرير إلى المدير
 

أضف تعليق


كود امني
تحديث


Go to top