How to use Mosfet Optocoupled HW-532 to control up to 30V DC Motor Speed or load using Arduino
This project guide demonstrates how to build a versatile DC motor speed controller using an Arduino and the HW-532 optocoupled MOSFET module. The mosfet may be FR120N , LR7843 or D4184. This allows you to control the speed and on/off state of a DC motor with voltages up to 30V. The HW-532 module offers protection and isolation, making it safer and more reliable than directly connecting the motor to the Arduino.

This project is valuable for various applications. Here are a few examples:
- Precisely controlling the speed of a robotic arm
- Building a variable-speed fan for cooling systems
- Creating automated machinery with adjustable movement
- Developing a motorized valve control for fluid systems
Hardware/Components
The core components are the Arduino, the HW-532 optocoupled MOSFET module (with MOSFET options like D4184, LR7843, or FR120N), a DC motor (voltage rating ≤ 30V), connecting wires, and optionally, a potentiometer and push-button switch for advanced control (in video at 19:34).
The choice of MOSFET within the HW-532 module depends on your current requirements (in video at 01:24). The video provides a detailed comparison of the different MOSFETs (in video at 06:50) and their suitability for various applications (in video at 09:45). Remember to include a diode for inductive loads like DC motors to protect the module (in video at 06:00 and 22:02).
Wiring Guide
The basic wiring connects the motor's positive terminal to the HW-532's output, the motor's negative terminal to the HW-532's ground, and the HW-532's control pin to an Arduino digital pin (in video at 11:16).

Code Explanation
The provided code offers three levels of control:

- On/Off Control: This simple code (in video at 15:05) uses a digital pin to switch the motor on and off. The user-configurable part is the
MOTOR_OUT_PINconstant, which defines which Arduino pin controls the HW-532 module. - PWM Speed Control: This code (in video at 15:39) uses Pulse Width Modulation (PWM) to control the motor's speed. The user can adjust
SPEED_MAXandSPEED_MINto set the upper and lower limits of the speed control, and themotorControl()andstopMotor()functions are used to control the motor and stop it, respectively. - Potentiometer and Push-Button Control: This code (in video at 22:12) allows controlling the motor speed with a potentiometer and starting/stopping it with a push button. User-configurable parts include
POT_PIN(potentiometer pin),MOTOR_OUT_PIN(PWM control pin),START_STOP_PIN(push button pin),SPEED_MAX, andSPEED_MIN.
Live Project/Demonstration
The video demonstrates the operation of all three code examples. The on/off control is shown (in video at 11:41), followed by PWM speed control (in video at 16:53), and finally, the potentiometer and push-button control (in video at 23:02).
Chapters
- [00:00] Introduction and Project Overview
- [01:24] HW-532 Module and MOSFET Options
- [03:23] Circuit Schematic and Explanation
- [05:11] Component Details
- [06:50] MOSFET Datasheet Analysis
- [11:16] Basic Wiring and On/Off Demonstration
- [15:05] Arduino Code for On/Off Control
- [15:39] Arduino Code for PWM Speed Control
- [19:34] Wiring with Potentiometer and Push Button
- [22:12] Arduino Code with Potentiometer and Push Button
/*
* Урок 108-1: В этом уроке мы изучим, как использовать модуль с MOSFET FR120N, LR7843 и D4184 для включения/выключения постоянной нагрузки до 10А. HW-532 оптически изолирован от 5V до 30V, нагрузка до 10А в зависимости от модуля. Схема показана, объяснена схема подключения, также показаны различные методы подключения с помощью кнопки и потенциометра. Видео https://youtu.be/eqXaqRFAWrA
*
* Автор: Ахмад Шамшир для RoboJax.com
* // Опубликовано 25 августа 2022 года в Айдже, Онтарио, Канада.
*
* Проект 1: Включение/выключение мотора или нагрузки (этот проект)
* Проект 2: Управление скоростью с помощью кода Arduino
* Проект 3: Управление скоростью с помощью потенциометра и кнопки
*
* Смотрите видеоинструкцию для этого кода: https://youtu.be/eqXaqRFAWrA
*
* Этот код является частью курса Arduino "Шаг за шагом", который начинается здесь: https://youtu.be/-6qSrDUA5a8
*
* Для библиотеки этого кода посетите http://robojax.com/
*
* Если вы нашли этот учебник полезным, пожалуйста, поддержите меня, чтобы я мог продолжать создавать такой контент. Сделать пожертвование с помощью PayPal по кредитной карте https://bit.ly/donate-robojax
*
* Этот код предоставляется "КАК ЕСТЬ" без гарантий или обязательств. Свободно использовать при условии, что вы сохраните эту заметку нетронутой.*
* Этот код был загружен с Robojax.com
* Эта программа является бесплатным программным обеспечением: вы можете перераспределять и/или изменять ее на условиях Общей публичной лицензии GNU, опубликованной Фондом свободного программного обеспечения, либо версии 3 этой лицензии, либо (по вашему выбору) любой более поздней версии.
*
* Эта программа распространяется в надежде, что она будет полезной, но БЕЗ ЛЮБЫХ ГАРАНТИЙ; даже без подразумеваемой гарантии ПРОДОВОЛЬСТВЕННОГО ИСПОЛЬЗОВАНИЯ или ПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ. Смотрите Общую публичную лицензию GNU для получения дополнительных сведений.
*
* Вы должны были получить копию Общей публичной лицензии GNU вместе с этой программой. Если нет, смотрите <https://www.gnu.org/licenses/>.
*/
const int MOTOR_OUT_PIN=2;
void setup() {
// Код драйвера моторов MOSFET Robojax
Serial.begin(9600);
Serial.println("Robojax LR7834 , Arduino");
pinMode(MOTOR_OUT_PIN, OUTPUT);
digitalWrite(MOTOR_OUT_PIN, HIGH);
}
// цикл выполняется снова и снова навсегда:
void loop() {
// Код драйвера мотора Robojax XY-GMOS MOSFET
} // конец цикла
# include <Arduino_LSM6DS3.h>
/*
* Урок 108-2: В этом уроке мы учимся использовать модуль с MOSFET FR120N, LR7843 и D4184 для включения/выключения постоянной нагрузки до 10A. HW-532 оптически изолирован от нагрузки 5V до 30V до 10A в зависимости от модуля. Схема показана, диаграмма проводки объяснена, показаны различные методы подключения с кнопкой и потенциометром. Видео https://youtu.be/eqXaqRFAWrA Получите код для этого проекта на https://robojax.com/RJT797
*
* Написано Ахмадом Шамширом для RoboJax.com
* // Опубликовано 25 августа 2022 года в Ааджиксе, Онтарио, Канада.
*
* Проект 1: Включение/выключение мотора или нагрузки (этот проект)
* Проект 2: Управление скоростью с использованием кода Arduino
* Проект 3: Управление скоростью с использованием потенциометра и кнопки
* Смотрите видеоинструкцию для этого кода: https://youtu.be/eqXaqRFAWrA
*
* Этот код является частью курса Arduino "Шаг за шагом", который начинается здесь: https://youtu.be/-6qSrDUA5a8
*
* для библиотеки этого кода посетите http://robojax.com/
*
* Если вы нашли этот учебник полезным, пожалуйста, поддержите меня, чтобы я мог продолжать создавать такой контент. Сделайте пожертвование через PayPal кредитной картой https://bit.ly/donate-robojax
* * Этот код предоставляется "КАК ЕСТЬ" без каких-либо гарантий. Свободно используется при условии сохранения этой заметки.*
* Этот код был загружен с Robojax.com
* Эта программа является бесплатным программным обеспечением: вы можете распространять и/или изменять её в соответствии с условиями GNU General Public License, опубликованной Фондом свободного программного обеспечения, либо версии 3 Лицензии, либо (по вашему выбору) любой более поздней версии.
*
* Эта программа распространяется в надежде, что она будет полезной, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; без даже подразумеваемой гарантии ТОРГОВОЙ ПРИГОДНОСТИ или ПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ. См. GNU General Public License для получения более подробной информации.
*
* Вы должны были получить копию GNU General Public License вместе с этой программой. Если нет, смотрите <https://www.gnu.org/licenses/>.
*/
const int MOTOR_OUT_PIN = 3;
const int SPEED_MAX = 100; // в %
const int SPEED_MIN = 0; // в %
const int STOP=0;
const int RUN=1;
int motorState=RUN;
int motorSpeed = 0; // от 0 до 100%.
// видеоинструкция https://youtu.be/eqXaqRFAWrA
void setup() {
// Robojax XY-GMOS MOSFET драйвер мотора код
Serial.begin(9600);
Serial.println("Robojax XY-GMOS Motor, Arduino");
pinMode(MOTOR_OUT_PIN, OUTPUT);
} // настройка завершена
// цикл выполняется снова и снова бесконечно:
void loop() {
// video https://youtu.be/eqXaqRFAWrA
motorControl(50); // запустите мотор на 50%
delay(5000); // держите его включенным в течение 5000 мс или 5 секунд
stopMotor(); // остановите двигатель
delay(3000); // держите его выключенным в течение 5000 мс или 5 секунд
for(int i=0; i<100; i++)
{
motorControl(i);
delay(200);
}
stopMotor(); // остановить двигатель
delay(3000); // держите его выключенным в течение 5000 мс или 5 секунд
for(int i=100; i >0; i--)
{
motorControl(i);
delay(200);
}
// Рободжакс LR7843 MOSFET драйвер двигателя код
} // конец цикла
/*
* управлениеMotor(int s)
* @кратко управляет мотором со значением s
* @параметр ничего не возвращает
* @параметр "тип" — символ
* 8 мая 2020 года в 02:36 в Аякс, Онтарио, Канада
*/
void motorControl(int s)
{
// Рободжакс LR7843 MOSFET драйвер двигателя код
// video https://youtu.be/eqXaqRFAWrA
int k = map(s, SPEED_MIN, SPEED_MAX, 0, 255);
Serial.print("Speed: "); Serial.print(s);Serial.println("%");
analogWrite(MOTOR_OUT_PIN, k);
} // моторное управление
/*
* stopMotor()
* @краткое описание останавливает двигатель
* @param ничего не возвращает
* @param
* 8 мая 2020 года в 02:36 в Ajax, Ontario, Canada
*/
void stopMotor(){
// Robojax XY-GMOS MOSFET драйвер мотора код
analogWrite( MOTOR_OUT_PIN, 0);
Serial.println("STOPPED");
} // остановитьДвигатель()
/*
* Урок 108-3: Управление скоростью мотора с помощью переменного сопротивления (потенциометра) и с использованием кнопки запуска/остановки с Arduino.
*
* В этом уроке мы научимся использовать модуль с FR120N, LR7843 и D4184 MOSFET для включения/выключения нагрузки постоянного тока до 10A. HW-532 оптически изолирован для нагрузок от 5V до 30V до 10A в зависимости от модуля. Схема показана, схема подключения объяснена, также показаны различные методы подключения с кнопкой и потенциометром.
* Видео https://youtu.be/eqXaqRFAWrA
* Получите коды для этого проекта с https://robojax.com/RJT797
* Написано Ахмадом Шамшири для RoboJax.com
* // Опубликовано 25 августа 2022 года в Aajx, Онтарио, Канада.
*
* Проект 1: Включение/выключение мотора или нагрузки
* Проект 2: Управление скоростью с помощью кода Arduino
* Проект 3: Управление скоростью с помощью потенциометра и кнопки (этот проект)
*
* Смотрите видеоинструкцию для этого кода: https://youtu.be/eqXaqRFAWrA
*
* Этот код является частью курса Arduino Шаг за Шагом, который начинается здесь: https://youtu.be/-6qSrDUA5a8
*
* для библиотеки этого кода посетите http://robojax.com/
*
* Если вы нашли этот учебник полезным, пожалуйста, поддержите меня, чтобы я мог продолжать создавать
* контент вроде этого. Сделайте пожертвование с помощью PayPal кредитной картой https://bit.ly/donate-robojax
*
* Этот код предоставляется "КАК ЕСТЬ" без каких-либо гарантий или обязательств. Бесплатно для использования, пока вы сохраняете это уведомление нетронутым.*
* Этот код был скачан с Robojax.com
* Эта программа является бесплатным программным обеспечением: вы можете перераспределять ее и/или изменять
* ее в соответствии с условиями Общей публичной лицензии GNU, опубликованной
* Фондом свободного программного обеспечения, версии 3 Лицензии или
* (по вашему выбору) любой последующей версии.
*
* Эта программа распространяется с надеждой, что она будет полезной,
* но БЕЗ ЛЮБЫХ ГАРАНТИЙ; даже без предполагаемой гарантии
* ТОРГОВОЙ СЛАБОСТИ или ПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ. См.
* Общую публичную лицензию GNU для получения подробной информации.
*
* Вы должны были получить копию Общей публичной лицензии GNU
* вместе с этой программой. Если нет, см. <https://www.gnu.org/licenses/>.
*/
const int POT_PIN =A0; // может измениться
const int MOTOR_OUT_PIN = 3; // ~
const int START_STOP_PIN=2; // для кнопочного переключателя
const int SPEED_MAX = 100; // в %
const int SPEED_MIN = 0; // в %
// видео инструкция https://youtu.be/eqXaqRFAWrA
const int STOP=0;
const int RUN=1;
int motorState=RUN;
int motorSpeed = 0; // от 0 до 100%.
void pushButton();
void setup() {
// Код драйвера мотора Robojax XY-GMOS MOSFET
Serial.begin(9600);
Serial.println("Robojax XY-GMOS Motor, Arduino");
pinMode(START_STOP_PIN, INPUT_PULLUP);
pinMode(MOTOR_OUT_PIN, OUTPUT);
// видео инструкция https://youtu.be/eqXaqRFAWrA
}
// рутинная петля выполняется снова и снова вечно:
void loop() {
pushButton();
int potValue =analogRead(POT_PIN);
int speedPercent = map(potValue, 0, 1023, 0, 100);
if(motorState ==RUN)
{
motorControl(speedPercent);
}else{
stopMotor();
}
delay(500);
// Код драйвера мотора Robojax XY-GMOS MOSFET
// видео инструкция https://youtu.be/eqXaqRFAWrA
} // конец цикла
/*
* motorControl(int s)
* @brief управляет двигателем со значением s
* @param ничего не возвращает
* @param "type" - это символ
* 8 мая 2020 года в 02:36 в Эйджаксе, Онтарио, Канада
*/
void motorControl(int s)
{
// Код драйвера мотора MOSFET Robojax LR7843
// видео инструкция https://youtu.be/eqXaqRFAWrA
int k = map(s, SPEED_MIN, SPEED_MAX, 0, 255);
Serial.print("Speed: "); Serial.print(s);Serial.println("%");
analogWrite(MOTOR_OUT_PIN, k);
} // моторное управление
/*
* stopMotor()
* @краткое описание остановить двигатель
* @param ничего не возвращает
* @param
* 08 мая 2020 года в 02:36 в Ajax, Ontario, Canada
*/
void stopMotor(){
// Код драйвера мотора Robojax XY-GMOS MOSFET
// видео инструкция https://youtu.be/eqXaqRFAWrA
analogWrite( MOTOR_OUT_PIN, 0);
Serial.println("STOPPED");
} // stopMotor()
/*
* pushButton()
* @brief считывает кнопку
* @param ничего не возвращает
* @param
* 8 мая 2020 года в 02:36 в Ajax, Онтарио, Канада
*/
void pushButton()
{
// Код драйвера мотора Robojax XY-GMOS MOSFET
// видео инструкция https://youtu.be/eqXaqRFAWrA
if(digitalRead(START_STOP_PIN) ==LOW)
{
motorState =!motorState;
delay(100);
}
} // проверкаКнопки()
Вещи, которые могут вам понадобиться
-
АмазонкаКупите HW-532 на Amazonamzn.to
-
eBay
-
АлиЭкспрессКупите моторный драйвер FR120N на AliExpresss.click.aliexpress.com
Ресурсы и ссылки
Ресурсов пока нет.
Файлы📁
Технический паспорт (pdf)
-
инфинион-IRLR7843 LR7843 MOSFET технический паспорт
infineon-irlr7843-datasheet-en.pdf0.37 MB
Файл Fritzing
-
HW-532B Mosfot Модуль
HW-532B.fzpz0.01 MB
Другие файлы
-
infineon-irfr120n-datasheet-en
infineon-irfr120n-datasheet-en.pdf0.39 MB -
alpha-and-Omega-AOD4184A_datasheet
alpha-and-Omega-AOD4184A_datasheet.pdf0.43 MB