كود البحث

الدرس 52-1: الشيفرة الأساسية: التحكم في محرك تيار مستمر باستخدام مرحل مع أردوينو

الدرس 52-1: الشيفرة الأساسية: التحكم في محرك تيار مستمر باستخدام مرحل مع أردوينو

في هذا الدرس، سنتعلم كيفية التحكم في اتجاه محرك التيار المستمر باستخدام مرحلتين وArduino. من خلال تغيير قطبية الجهد المقدم إلى المحرك، يمكننا عكس اتجاهه. هذا المشروع بسيط ومثالي للمبتدئين الذين يرغبون في فهم التحكم في المرحلات باستخدام Arduino. تأكد من مشاهدة الفيديو للحصول على رؤى وعروض إضافية (في الفيديو عند :00).

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

وحدة ترحيل قناتين
وحدة تخزين رلي بقناتين
وحدة ريليه بمستوى عالٍ 5 فولت
وحدة رلي تحكم عالية المستوى 5 فولت

شرح الأجهزة

تشمل المكونات الرئيسية لهذا المشروع لوحة Arduino، واثنين من المرحلات، ومحرك تيار مستمر، ومصدر طاقة. لوحة Arduino هي العقل المدبر للعملية، حيث ترسل إشارات إلى المرحلات للتحكم في اتجاه المحرك. يحتوي كل مرحل على ثلاثة أطراف: مشترك (COM)، مغلق عادةً (NC)، ومفتوح عادةً (NO). عند تفعيله، يتصل المرحل بالطرف المشترك (COM) إما بالطرف المغلق عادةً (NC) أو الطرف المفتوح عادةً (NO)، مما يؤدي بشكل فعال إلى تبديل الدائرة.

بطارية-محرك-أسلاك-عكسي

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

توصيل بطارية المحرك - اتجاه عقارب الساعة

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

أسلاك بطارية المحرك 2

لا يمكننا توصيل ريليه مباشرة إلى لوحات Arduino أو ESP32 أو Raspberry Pi حيث يحتاج المحرك إلى تيار مرتفع جداً للعمل.

المحرك-بطارية-أسلاك-3

نحتاج إلى سائق محرك ليكون بين الأردوينو والمحرك.

تعتبر المرحلات مهمة لأنها تسمح لـ Arduino بالتحكم في أجهزة قوية مثل المحركات دون الحاجة للتوصيل المباشر بها. هذا أمر حيوي لأن دبابيس الإخراج في Arduino يمكن أن تتحمل تيارًا محدودًا فقط. من خلال استخدام المرحلات، يمكننا التحكم بأمان في تشغيل المحرك من Arduino.

بطارية المحرك توصيل 5

يمكننا توصيل رليين كما هو موضح أعلاه للتحكم في اتجاه دوران المحرك. رلي 1 إذا كان ON ورلي 2 إذا كان OFF. الآن يدور المحرك في اتجاه عقارب الساعة.

بطارية المحرك والأسلاك - 6

توضح الصورة أعلاه مسار التيار.

بطارية المحرك - الأسلاك - 7

يمكننا توصيل مرحلتين كما هو موضح أعلاه للتحكم في اتجاه دوران المحرك. المرحلة-1 إذا كانت OFF والمرحلة-2 إذا كانت ON. الآن يدور المحرك في الاتجاه المعاكس عقرب الساعة. انظر إلى السهم فوق المحرك.

أسلاك بطارية المحرك - 8

الصورة أعلاه تظهر مسار التيار.

تفاصيل ورقة البيانات

الصانع سنجل
رقم الجزء SRD-05VDC-SL-C
جهد الملف 5 فولت (تيار مستمر)
تصنيف الاتصال 10 أ / 250 فولت تيار متردد
التيار المتردد 15 أ كحد أقصى
جهد التبديل 30 فولت تيار مستمر / 250 فولت تيار متردد
مقاومة الاتصال ≤ ١٠٠ مΩ
مقاومة العزل ≥ 1000 مΩ
درجة حرارة التشغيل من -40 إلى +70 درجة مئوية
حزمة وحدة التحكم بالتتابع مع مفتاحين تتابعيات

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

تعليمات التوصيل

dual_relay_motor_wrring_bb
single_relay_motor_wrring_bb

أمثلة التعليمات البرمجية وشرح الخطوات

في الكود، نحدد دبوسين للريلايات باستخدامint relay1 = 2;وint relay2 = 3;. ستتحكم هذه الدبابيس في تشغيل المرحلات. الـsetup()تقوم الدالة بتهيئة هذه الأرجل كمخارج وتبقي المحرك مطفئًا عن طريق ضبط كلا المرحلين على وضع التشغيل العالي.

void setup() {
    pinMode(relay1, OUTPUT); // set pin as output for relay 1
    pinMode(relay2, OUTPUT); // set pin as output for relay 2
    digitalWrite(relay1, HIGH); 
    digitalWrite(relay2, HIGH); 
}

في الـloop()نتحكم في اتجاه المحرك. لدوار المحرك في الاتجاه المعاكس لعقارب الساعة، نقوم بتعيينrelay1إلى منخفض وrelay2إلى الأعلى. وهذا يسمح بتدفق التيار في اتجاه واحد.

digitalWrite(relay1, LOW); // turn relay 1 ON
digitalWrite(relay2, HIGH); // turn relay 2 OFF  
Serial.println("Rotating in CCW");  
delay(3000); // wait for 3 seconds

لإيقاف المحرك، نقوم بإيقاف كلا المرحلات عن طريق إعادة ضبطهما على الحالة العالية مرة أخرى. ثم نقوم بعكس الاتجاه عن طريق تغيير حالات المرحلات، مما يسمح للمحرك بالدوران في اتجاه عقارب الساعة (CW).

digitalWrite(relay1, HIGH); // turn relay 1 OFF
digitalWrite(relay2, LOW); // turn relay 2 ON 
Serial.println("Rotating in CW");  
delay(3000); // wait for 3 seconds

تم تحميل الكود الكامل لهذا المشروع أسفل المقال. تأكد من مشاهدة الفيديو للحصول على شرح تفصيلي للكود (في الفيديو عند 00:00).

عرض / ماذا تتوقع

عند الانتهاء من الإعداد ورفع الكود، سيبدأ المحرك بالدوران عكس اتجاه عقارب الساعة لمدة ثلاث ثوانٍ، ثم يتوقف لمدة ثانيتين، تليها دورة في اتجاه عقارب الساعة لمدة ثلاث ثوانٍ أخرى، وأخيراً سيتوقف مرة أخرى. ستتكرر هذه الدورة بشكل مستمر. تشمل الأخطاء الشائعة توصيل الأسلاك بشكل غير صحيح أو توصيل المحرك مباشرةً بالاردوينو، مما قد يؤدي إلى تلف اللوحة. الرجاء الرجوع إلى الفيديو للحصول على تأكيد بصري للسلوك المتوقع (في الفيديو عند 00:00).

طُرق الفيديو

  • 00:00 مقدمة
  • 04:27 كيف يعمل
  • 08:05 شرح التوصيلات
  • 11:45 شرح الكود الأساسي
  • 15:25 شرح الكود المتقدم
  • ١٨:٤٠ عرض مع مرحلين مفردين اثنين
  • 19:43 عرض مع وحدة تتابع مزدوجة

الصور

5V HIGH-level trigger relay module
5V HIGH-level trigger relay module
2 chanel relay module
2 chanel relay module
dual_relay_motor_wrring_bb
dual_relay_motor_wrring_bb
motor-battery-wiring-8
motor-battery-wiring-8
motor-battery-wiring-7
motor-battery-wiring-7
motor-battery-wiring-6
motor-battery-wiring-6
motor-battery-wiring-5
motor-battery-wiring-5
motor-battery-wiring-4
motor-battery-wiring-4
motor-battery-wiring-3
motor-battery-wiring-3
motor-battery-wiring-2
motor-battery-wiring-2
motor-battery-wiring-CW
motor-battery-wiring-CW
motor-battery-wiring-CCW
motor-battery-wiring-CCW
single_relay_motor_wrring_bb
single_relay_motor_wrring_bb
492-Lesson 52: Control a DC motor with a relay using Arduino (two projects)
اللغة: C++
++
/*
* Lesson 52: Control a DC motor with Relay using Arduino | Arduino Step By Step Course
Basic code
 * Arduino code to change the direction of rotation 
 * of a DC motor with 2 relays.
 
 * 
 * This is basic code. I have advanced code which can be used in both 
 * for Low-level trigger and High-level trigger relay with clean code.
Please watch video explaining this code: https://youtu.be/2n0vUa0cZOI

 * 
 * Written by Ahmad Shamshiri for Robojax.com on 
 * Sunday, August 18, 2019 
 * at 20:22 in Ajax, Ontario, Canada
 * 

This code is available at http://robojax.com/course1/?vid=lecture52
 
with over 100 lectures free on YouTube. Watch it here: http://robojax.com/L/?id=338
Get the code for the course: http://robojax.com/L/?id=339  


or make a donation using PayPal: http://robojax.com/L/?id=64
* 
 * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.
 * This code has been downloaded from Robojax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */


int relay1 = 2;
int relay2 = 3;


void setup() {

    pinMode(relay1, OUTPUT);// set pin as output for relay 1
    pinMode(relay2, OUTPUT);// set pin as output for relay 2


    // keep the motor off by keeping both HIGH
    digitalWrite(relay1, HIGH); 
    digitalWrite(relay2, HIGH); 

 
  
  Serial.begin(9600);// initialize serial monitor with 9600 baud
  Serial.println("Robojax Motor Direction of Rotation");
  Serial.println("Using 2 Relays");  
  delay(2000);
}

void loop() {

 // Rotate in CCW direction
  digitalWrite(relay1, LOW);// turn relay 1 ON
  digitalWrite(relay2, HIGH);// turn relay 2 OFF  
  Serial.println("Rotating in CCW");  
  delay(3000);// wait for 3 seconds

 // stop the motor
  digitalWrite(relay1, HIGH);// turn relay 1 OFF
  digitalWrite(relay2, HIGH);// turn relay 2 OFF
  Serial.println("Stopped");  
  delay(2000);// stop for 2 seconds
  
 // Rotate in CW direction
  digitalWrite(relay1, HIGH);// turn relay 1 OFF
  digitalWrite(relay2, LOW);// turn relay 2 ON 
  Serial.println("Rotating in CW");  
  delay(3000);// wait for 3 seconds

 // stop the motor
  digitalWrite(relay1, HIGH);// turn relay 1 OFF
  digitalWrite(relay2, HIGH);// turn relay 2 OFF
  Serial.println("Stopped");  
  delay(2000);// stop for 2 seconds 
  
 Serial.println("===============");

          
}// loop end

الأشياء التي قد تحتاجها

ملفات📁

لا توجد ملفات متاحة.