شِفر (کود) جستجو

درس 52-1: شِفر (کود) پایه: کنترل یک موتور DC با یک ریلی با استفاده از آردوینو

درس 52-1: شِفر (کود) پایه: کنترل یک موتور DC با یک ریلی با استفاده از آردوینو

در این درس، یاد خواهیم گرفت که چگونه با استفاده از دو ریلی و یک آردوینو، جهت یک موتور DC را کنترل کنیم. با تغییر قطبیت ولتاژ تامین شده به موتور، می‌توانیم جهت آن را معکوس کنیم. این پروژه ساده است و برای مبتدیانی که به دنبال درک کنترل ریلی با آردوینو هستند، ایده‌آل می‌باشد. حتماً ویدئو را برای بینش‌های اضافی و Demonstrations تماشا کنید (در ویدئو در 00:00).

در این دوره آموزشی، ما از دو ریلی برای تغییر قطبیت منبع برق به موتور استفاده خواهیم کرد. وقتی یک ریلی فعال می‌شود، اجازه می‌دهد تا جریان در یک جهت جریان پیدا کند و موتور در یک جهت بچرخد. وقتی ریلی دیگری فعال می‌شود، جریان معکوس می‌شود و باعث می‌شود موتور در جهت مخالف بچرخد. ریلی‌ها به عنوان سوییچ‌هایی عمل می‌کنند که توسط آردوینو کنترل می‌شوند.

ماجیول ریلی ۲ کاناله
ماجیول ریلی ۲ کاناله
ماجیول ریلی با تریگر سطح بالای ۵ ولت
ماجیول ریلی تریگر سطح بالای 5 ولت

توضیحاتی درباره سخت‌افزار

اجزای اصلی این پروژه شامل یک برد آردوینو، دو ریلی، یک موتور DC و یک منبع تغذیه است. برد آردوینو مغز عملیات است که سیگنال‌هایی به ریلی‌ها ارسال می‌کند تا جهت موتور را کنترل کند. هر ریلی سه پایه دارد: مشترک (COM)، معمولاً بسته (NC) و معمولاً باز (NO). هنگامی که فعال می‌شود، ریلی پایه COM را به یکی از پایه‌های NC یا NO متصل می‌کند و در واقع مدار را قطع و وصل می‌کند.

و wiring باتری موتور - CCW

تصویر بالا نشان می‌دهد که چگونه سیم‌های یک موتور را به یک باتری متصل کنیم، موتور به عنوان مثال در جهت خلاف عقربه‌های ساعت (CCW) چرخش می‌کند.

کابل‌کشی‌باتری‌موتور‌ساعت‌گرد

تصویر بالا نشان می‌دهد که اگر سیم‌های + و - را به پایه‌های مختلف موتور وصل کنید، به عنوان مثال در جهت عقربه‌های ساعت (CW) می‌چرخد.

باتری-موتور-سیم‌کشی-2

ما نمی‌توانیم ریلی را به صورت مستقیم به بوردهای آردوینو، ESP32 یا Raspberry Pi متصل کنیم زیرا موتور برای کار کردن به جریان بسیار بالایی نیاز دارد.

کابل‌کشی باتری موتور-۳

ما به یک درایور موتور نیاز داریم که بین آردوینو و موتور قرار گیرد.

ریلی‌ها مهم هستند زیرا به آردوینو اجازه می‌دهند تا دستگاه‌های پرقدرت مانند موتور‌ها را بدون اتصال مستقیم به آن‌ها کنترل کند. این موضوع حیاتی است زیرا پایه‌های خروجی آردوینو تنها می‌توانند جریان محدودی را تحمل کنند. با استفاده از ریلی‌ها، ما می‌توانیم به‌طور ایمن عملیات موتور را از آردوینو کنترل کنیم.

باتری-موتور-wirنگی-5

ما می‌توانیم دو ریلی را همانطور که در بالا نشان داده شده به هم متصل کنیم تا جهت چرخش موتور را کنترل کنیم. اگر ریلی-۱ روشن و ریلی-۲ خاموش باشد، در این صورت موتور در جهت ساعت‌گرد (CW) می‌چرخد.

کابل‌کشی-باتری-موتور-۶

تصویر بالا مسیر جریان را نشان می‌دهد.

باتری-موتور-سیم‌کشی-۷

ما می‌توانیم دو ریلی را همان‌طور که در بالا نشان داده شده است، متصل کنیم تا جهت چرخش موتور را کنترل کنیم. ریلی-۱ اگر OFF باشد و ریلی-۲ اگر ON باشد. اکنون موتور در جهت عکس‌گرد (CCW) می‌چرخد. به فلشی که بالای موتور است نگاه کنید.

باتری-موتور-سیم‌کشی-۸

تصویر بالا مسیر جریان را نشان می‌دهد.

جزئیات برگه داده

سازنده سونگل
شماره قطعه SRD-05VDC-SL-C
ولتاژ کویل ۵ ولت (DC)
رتبه تماس ۱۰ آمپر / ۲۵۰ ولت AC
جریان متناوب ۱۵ A حداکثر
ولتاژ سوئیچینگ ۳۰ ولت دی‌سی / ۲۵۰ ولت ای‌سی
مقاومت تماس ≤ ۱۰۰ میلی‌اهم
مقاومت عایق ≥ 1000 مگا اهم
دمای عملیاتی -40 تا +70 درجه سانتی‌گراد
پکج ماجیول ریلی با ۲ ریلی

  • اطمینان حاصل کنید که ریلی‌ها برای ولتاژ و جریان موتور مناسب هستند.
  • از یک زمین مشترک بین آردوینو و ماجیول ریلی استفاده کنید.
  • در صورت لزوم از دیودهای فلیک بک مناسب استفاده کنید تا آردوینو را از EMF برگشتی محافظت کنید.
  • طول سیم‌ها را کوتاه نگه‌دارید تا مقاومت و تداخل کاهش یابد.
  • قبل از روشن کردن سیستم، اتصالات ریلی را دوباره بررسی کنید.
  • با ولتاژهای پایین، مدار را امتحان کنید قبل از اینکه توان کامل را به موتور اعمال کنید.
  • کابل‌ها را برای شناسایی آسان در حین عیب‌یابی برچسب‌گذاری کنید.

دستورالعمل‌های سیم‌کشی

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()عملکرد، ما جهت موتور را کنترل می‌کنیم. برای چرخش موتور به سمت چپ (CCW)، ما تنظیم می‌کنیم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).

زمان‌بندی ویدئوها

  • ۰۰:۰۰ مقدمه
  • چطور کار می‌کند :27
  • 08:05 توضیحاتی در مورد سیم‌کشی
  • ۱۱:۴۵ توضیح شِفر (کود) پایه
  • شِفر (کود) پیشرفته توضیح داده شده 15:25
  • ۱۸:۴۰ نمایش با دو ریلی تک‌تایی
  • ۱۹:۴۳ نمایش با ماجیول ریلی دوگانه

تصاویر

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

مواردی که ممکن است به آن‌ها نیاز داشته باشید

فایل‌ها📁

هیچ فایلی موجود نیست.