في هذا المشروع سنتعلم فكرة عمل المرحل وكيفية استعماله للتحكم في تشغيل و ايقاف محرك التيار المستمر والتحكم أيضا في عكس اتجاه حركته. يمكن استخدامه للتحكم في اتجاه الروبوت، مثل روبوت متتبع المسار .
المكونات المطلوبة
المرحل Relay
المرحل هو عبارة عن مفتاح كهروميكانيكي، بمعنى انه مفتاح كأي مفتاح ميكانيكى يتكون من نقاط تلامس، إلا أنه يحتوي على ملف كهربي. فائدة هذا الملف هو التحكم في توصيل وفصل نقاط التلامس للتحكم في فصل وتشغيل المرحل.
مكونات المرحل
- ملف كهربي
- نقاط توصيل مغلقة و مفتوحة
لماذا يتم استخدام المرحل؟
لا يمكننا توصيل محرك تيار مستمر بشكل مباشرة مع الاردوينو، لأن المحرك يحتاج الى تيار عالي لا يستطيع الاردوينو اعطاءه له. لذلك نستخدم المرحل كواجهة بين الاردوينو الذي يعمل بتيارات صغيرة وبين المحرك الذي يحتاج الى تيارات عالية .
محرك التيار المستمر DC Motor
هو عبارة عن جهاز يقوم بتحويل الطاقة من صورة كهربائية الى صورة ميكانيكية بمعنى اننا نقوم بتوصيل التيار الكهربي اليه لنحصل على عزم دوراني. يمكن استخدامة مع اي جسم ليتم تحريكه. مثلا في الروبوت نحتاج الى محرك تيار مستمر كي يتم تحريك الروبوت او استخدامه في صنع المراوح الكهربية او حتى صنع مضخات المياه.
توصيل الدارة :
قم بتوصيل الدارة كما هو موضح بالصورة أدناه :
التوصيل :
الأردوينو | المرحل |
طرفى المحرك | طرفى COM |
طرف البطارية الموجب | طرفى NO |
طرف البطارية السالب | طرفى NC |
Vcc | Vcc |
Gnd | GND |
منفذ 12 | IN1 |
منفذ 13 | IN2 |
كيفية عمل الدارة
بالنسبة للاردوينو، يتم التحكم عن طريق المخارج الرقمية. بمعنى اننا سنقوم بتوصيل طرفى المرحل على مخارج من النوع الرقمي في الاردوينو. سنقوم بإعطاء قيمة HIGH على المخرج الأول وقيمة LOW على المخرج الثاني، لجعل المحرك يدور مع اتجاه عقارب الساعة. ويقوم بالدوران عكس عقارب الساعة عند عكس هذه العملية. ولجعله يتوقف سيتم إعطاء كلا الطرفين قيمة LOW .
الكود البرمجى :
يدور المحرك في الاتجاه الاول لمدة 3 ثوان ثم يتوقف مدة 3 ثوان و يدور فى الاتجاه المضاد لمده 3 ثوان ثم يتوقف مدة 3 ثوان اخرى وهكذا حتى يتم فصل التيار الكهربائي
#define MOTOR_IN1 12 #define MOTOR_IN2 13 void motor_forward(void); // a function that will be called to rotate it clockwise void motor_reverse(void); // a function that will be called to totate it counter-clockwise void motor_stop(void); // a function that will be called to stop the rotation void setup() { pinMode(MOTOR_IN1, OUTPUT); // set the first pin of the relay as output pinMode(MOTOR_IN2, OUTPUT); // set the 2nd pin of the relay as output } void loop() { motor_forward(); // move forward/clockwise delay(3000); // keep rotating cw for 3 seconds motor_stop(); // stop rotating delay(3000); // stand still for 3 seconds motor_reverse(); // reverse the rotation direction/ccw delay(3000); // keep rotating ccw for 3 seconds motor_stop(); // stop rotating delay(3000); // stand still for 3 seconds } void motor_forward(void) // the function that will cause the motor to rotate cw { digitalWrite(MOTOR_IN1, HIGH); digitalWrite(MOTOR_IN2, LOW); } void motor_reverse(void) // the function that will cause the motor to rotate ccw { digitalWrite(MOTOR_IN1, LOW); digitalWrite(MOTOR_IN2, HIGH); } void motor_stop(void) // the function that will cause the motor to stop rotating { digitalWrite(MOTOR_IN1, LOW); digitalWrite(MOTOR_IN2, LOW); }
شرح الكود البرمجي
هنا قمنا بضبط المخارج الموصولة على الدارة المتكاملة IN1 & IN2 كمخرج :
void setup() { pinMode(MOTOR_IN1, OUTPUT); // set the first pin of the relay as output pinMode(MOTOR_IN2, OUTPUT); // set the 2nd pin of the relay as output }
في البداية قمنا باستدعاء الدالة ()motor_forward . تقوم هذه الدالة بتشغيل المحرك مع اتجاه عقارب الساعة لمدة 3 ثوان (delay(3000) ) . ثم نقوم باستخدام الدالة ()motor_stop ، لإيقاف المحرك عن العمل لمدة 3 ثوان. ثم يتم عكس اتجاه حركة المحرك باستخدام الدالة ()motor_reverse لمدة 3 ثوان. ومن ثم يعود ليكرر نفس هذه المهمة من البداية مرة أخرى.
void loop() { motor_forward(); // move forward/clockwise delay(3000); // keep rotating cw for 3 seconds motor_stop(); // stop rotating delay(3000); // stand still for 3 seconds motor_reverse(); // reverse the rotation direction/ccw delay(3000); // keep rotating ccw for 3 seconds motor_stop(); // stop rotating delay(3000); // stand still for 3 seconds }
الدلة ()motor_forward، تقوم بتحريك المحرك بإتجاه عقارب الساعة. تتم هذه العملية عن طريق جعل قيمة IN1 للمرحل HIGH والطرف الآخر LOW .
void motor_forward(void) // the function that will cause the motor to rotate cw { digitalWrite(MOTOR_IN1, HIGH); digitalWrite(MOTOR_IN2, LOW); }
تعمل هذه الدالة ()motor_reverse بشكل مشابه للدالة السابقة، إلا أنها تعكس اتجاه دوران المحرك. تتم هذه العملية عن طريق جعل قيمة IN2 للمرحل HIGH، وIN1 قيمة LOW .
void motor_reverse(void) // the function that will cause the motor to rotate ccw { digitalWrite(MOTOR_IN1, LOW); digitalWrite(MOTOR_IN2, HIGH); }
دالة ()motor_stop، تقوم بإيقاف المحرك تماما عن الحركة، عن طريق جعل قيمة كلا الطرفين LOW فلا يصل التيار للمحرك فيتوقف.
void motor_stop(void) // the function that will cause the motor to stop rotating { digitalWrite(MOTOR_IN1, LOW); digitalWrite(MOTOR_IN2, LOW); }