التحكم بالمروحة باستخدام الاردوينو

مبتدئ

image_pdf

في هذا المشروع سنتعلم فكرة عمل المرحل وكيفية استعماله للتحكم في تشغيل مروحة تعمل على محرك تيار مستمر و ايضا عكس اتجاه حركتها.

التحكم-فى-تشغيل-و-اتجاه-دوران-مروحة-باس


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

arduino uno r3

Arduino Uno

Relay module 5v

Relay Module 5v

Raspberry pi fans

DC Fan

9VDC 1000mA regulated switching power adapter

DC Power Supply

Full size breadboard 830

Breadboard

Breadboard Jumper Wire 65 pcs

Wires

المرحل Relay

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

التحكم-فى-تشغيل-و-اتجاه-دوران-مروحة-باس

مكونات المرحل

  1. ملف كهربائي
  2.   نقاط توصيل مغلقة ومفتوحة

لماذا يتم استخدام المرحل؟

لا يمكن توصيل مروحة التيار المستمر بشكل مباشر مع الاردوينو. وذلك بسبب احتياج المروحة إلى تيار عالي لا يستطيع الاردوينو اعطاءه لها. لذلك، نستخدم المرحل (Relay) كدائرة بين الاردوينو الذي يعمل بتيار صغير وبين المروحة التي تختاج إلى تيارات عالية.

التحكم-فى-تشغيل-و-اتجاه-دوران-مروحة-باس

مروحة التيار المستمر (DC Fan) :

هي عبارة عن محرك تيار مستمر مثبت عليه ريش ليعمل كمروحة. يتم التحكم بها بشكل مشابه للتحكم بمحرك التيار المستمر. يتم تشغيلها عن طريق امدادها بتيار مستمر، ولعكس حركتها سنقوم بعكس توصيل اطرافها أي عكس الاقطاب لتدور في الاتجاه المعاكس.

التحكم-فى-تشغيل-و-اتجاه-دوران-مروحة-باس

توصيل الدارة :

يتم توصيل الدارة كما هو موضح بالصورة التالية :

التحكم-فى-تشغيل-و-اتجاه-دوران-مروحة-باس

التوصيلات :

التحكم-فى-تشغيل-و-اتجاه-دوران-مروحة-باس

 

طرفى المحرك  طرفى COM للRelay Module
طرف البطارية الموجب  طرفى NO للRelay Module
طرف البطارية السالب  طرفى NC للRelay Module
طرف Vcc للArduino  طرف Vcc لل Relay Module
طرف Gnd للArduino  طرف GND للRelay Module
طرف 12 للArduino  طرف IN1 للRelay Module
طرف 13 للArduino  طرف IN2 للRelay Module

كيفية عمل الدارة

  سيتم وصل طرفى المرحل (Relay) على منافذ من النوع الرقمي. لجعل المروحة تدور مع اتجاه عقارب الساعة، نقوم بجعل قيمة المخرج الأول HIGH والثاني LOW . ولدورانها عكس عقارب الساعة نقوم بعكس العملية السابقة. اما لجعلها تتوقف نقوم بجعل كلا الطرفان LOW .

الكود البرمجي :

قم بكتابة الكود البرمجي كما يلي :

#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);
}

شرح الكود البرمجي :

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

الشرح مفصلا :

يتم ضبط المنافذ الموصله مع المرحل 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
}

في دالة الـ ()loop ، نقوم باستدعاء الدالة ()motor_forward لتشغيل المروحة مع اتجاه عقارب الساعة. ثم نقوم باستخدام الدالة (delay(3000 لإضافة تأخير زمني مدته 3 ثوان تظل المروحة خلاله تدور في نفس الاتجاه. ثم يتم استخدام الدالة ()motor_stop لإيقاف المروحة عن العمل لمدة 3 ثوان. ثم بإستدعاء الدالة ()motor_reverse نقوم بعكس اتجاه الحركة للمروحة. يتم تكرار هذه العملية حتى يتم فصل التيار.

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 تقوم بتشغيل المروحة مع اتجاه عقارب الساعة. فهي تقوم بجعل أحد الأطراف 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  بشكل مشابه للدالة السابقة motor_forward ، ولكن تعكس المخرجات على الأطراف فالطرف الذي تم إخراج قيمة HIGH عليه يتم جعله LOW والطرف الأخر HIGH . فينتج دوران باتجاه معاكس لإتجاه عقارب الساعة.

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);
}

X
Product added to the cart