Урок 52-1: Основной код: Управление DC мотором с помощью реле на Arduino
В этом уроке мы научимся контролировать направление постоянного мотора с помощью двух реле и Arduino. Меняя полярность напряжения, подаваемого на мотор, мы можем изменить его направление. Этот проект простой и идеально подходит для начинающих, которые хотят понять управление реле с помощью Arduino. Обязательно посмотрите видео для дополнительных сведений и демонстраций (в видео на 00:00).
В этом учебном пособии мы будем использовать два реле для переключения полярности источника питания мотора. Когда одно реле активируется, оно позволяет току течь в одном направлении, заставляя мотор вращаться в одном направлении. Когда активируется другое реле, ток меняет направление, заставляя мотор вращаться в противоположную сторону. Реле действуют как переключатели, которые контролируются Arduino.
Объяснение аппаратного обеспечения
Основные компоненты этого проекта включают плату Arduino, два реле, DC-двигатель и источник питания. Плата Arduino - это "мозг" операции, отправляющий сигналы на реле для управления направлением движения двигателя. Каждое реле имеет три терминала: общий (COM), нормально замкнутый (NC) и нормально разомкнутый (NO). Когда реле активируется, оно соединяет общий терминал с либо нормально замкнутым, либо нормально разомкнутым терминалом, эффективно переключая цепь.
На изображении выше показано, как подключить провода мотора к батарее, мотор вращается, например, против часовой стрелки (CCW).
На изображении выше показано, что если вы подключите провода + и - к разным клеммам мотора, он вращается, например, в часовом направлении (CW).
Мы не можем подключить реле напрямую к платам Arduino, ESP32 или Raspberry Pi, так как двигатель требует очень высокого тока для работы.
Нам нужен драйвер мотора между Arduino и мотором.
Реле важны, потому что они позволяют Arduino управлять высокомощными устройствами, такими как двигатели, не будучи напрямую к ним подключёнными. Это особенно актуально, поскольку выходные контакты Arduino могут обрабатывать только ограниченный ток. Используя реле, мы можем безопасно управлять работой двигателя с помощью Arduino.
мы можем соединить два реле, как показано выше, чтобы контролировать направление вращения мотора. Реле-1, если ВКЛ, и Реле-2, если ВЫКЛ. теперь мотор вращается в направлении CW
На изображении выше показан путь тока.
мы можем подключить два реле, как показано выше, чтобы управлять направлением вращения мотора. Реле-1 в положении ВЫКЛ, а Реле-2 в положении ВКЛ. Теперь мотор вращается в против часовой стрелки. Посмотрите на стрелку над мотором.
Изображение выше показывает путь тока.
Характеристики таблицы данных
| Производитель | Сонгл |
|---|---|
| Номер детали | SRD-05VDC-SL-C |
| Напряжение катушки | 5 В (постоянный ток) |
| Контактный рейтинг | 10 A / 250 ВАC |
| Переменный ток | 15 A макс |
| Напряжение переключения | 30 В постоянного тока / 250 В переменного тока |
| Контактное сопротивление | ≤ 100 мΩ |
| Сопротивление изоляции | ≥ 1000 МОм |
| Рабочая температура | -40 до +70 °C |
| Пакет | Релейный модуль с 2 реле |
- Убедитесь, что реле имеют рейтинг по напряжению и току мотора.
- Используйте общий провод между Arduino и модулем реле.
- Используйте соответствующие диоды обратной связи, если это необходимо, чтобы защитить Arduino от обратной ЭДС.
- Сохраняйте короткие длины проводов, чтобы минимизировать сопротивление и помехи.
- Перед включением системы дважды проверьте соединения реле.
- Проверьте цепь с более низкими напряжениями перед подачей полного питания на двигатель.
- Подписывайте провода для легкой идентификации во время устранения неполадок.
Инструкции по подключению


Примеры кода и руководство
В коде мы определяем два пина для реле, используя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);
}В theloop()функция, мы контролируем направление мотора. Чтобы вращать мотор против часовой стрелки (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).
Демонстрация / Что ожидать
Когда настройка завершена и код загружен, мотор сначала будет вращаться против часовой стрелки в течение трех секунд, затем остановится на две секунды, после чего начнет вращение по часовой стрелке еще на три секунды и наконец снова остановится. Этот цикл будет повторяться постоянно. Распространенные ошибки включают неправильное подключение реле или непосредственное соединение мотора с Arduino, что может повредить плату. Смотрите видео для визуального подтверждения ожидаемого поведения (в видео на 00:00).
Временные метки видео
- 00:00 Введение
- 04:27 Как это работает
- 08:05 Объяснение проводки
- 11:45 Основы кода объяснены
- 15:25 Объяснение продвинутого кода
- 18:40 Демонстрация с двумя одиночными реле
- 19:43 Демонстрация с двойным релейным модулем
Изображения
++
/*
* 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
Вещи, которые могут вам понадобиться
-
eBay
Ресурсы и ссылки
-
Внешний
-
Внешний
-
Внешний
-
Внешний
Файлы📁
Нет доступных файлов.