Cómo usar el MOSFET optoacoplado HW-532 para controlar la velocidad de un motor de CC de hasta 30 V o una carga con Arduino
Esta guía del proyecto muestra cómo construir un versátil controlador de velocidad de motor de CC usando un Arduino y el módulo MOSFET optoacoplado HW-532. El MOSFET puede serFR120N, LR7843 o D4184.Esto le permite controlar la velocidad y el estado de encendido/apagado de un motor de corriente continua con tensiones de hasta 30 V. El módulo HW-532 ofrece protección y aislamiento, lo que lo hace más seguro y fiable que conectar el motor directamente al Arduino.

Este proyecto es valioso para diversas aplicaciones. Aquí hay algunos ejemplos:
- Controlar con precisión la velocidad de un brazo robótico
- Construcción de un ventilador de velocidad variable para sistemas de refrigeración
- Creación de maquinaria automatizada con movimiento ajustable
- Desarrollando un control de válvulas motorizado para sistemas de fluidos
Hardware/Componentes
Los componentes principales son el Arduino, el módulo MOSFET optoacoplado HW-532 (con opciones de MOSFET como D4184, LR7843 o FR120N), un motor de corriente continua (tensión ≤ 30V), cables de conexión y, opcionalmente, un potenciómetro y un pulsador para control avanzado (en el video en 19:34).
La elección del MOSFET dentro del módulo HW-532 depende de tus requisitos de corriente (en el video en 01:24). El video ofrece una comparación detallada de los distintos MOSFETs (en el video en 06:50) y su idoneidad para diversas aplicaciones (en el video en 09:45). Recuerda incluir un diodo para cargas inductivas como motores de corriente continua para proteger el módulo (en el video en 06:00 y 22:02).
Guía de cableado
La conexión básica conecta el terminal positivo del motor a la salida del HW-532, el terminal negativo del motor a la masa del HW-532, y el pin de control del HW-532 a un pin digital del Arduino (en el video a las 11:16).

Explicación del código
El código proporcionado ofrece tres niveles de control:

- Control de encendido/apagado:Este código simple (en el vídeo a las 15:05) usa un pin digital para encender y apagar el motor. La parte configurable por el usuario es la
MOTOR_OUT_PINconstante, que define qué pin de Arduino controla el módulo HW-532. - Control de velocidad PWM:Este código (en el video a las 15:39) utiliza Modulación por Ancho de Pulso (PWM) para controlar la velocidad del motor. El usuario puede ajustar
SPEED_MAXySPEED_MINpara establecer los límites superior e inferior del control de velocidad, y elmotorControl()ystopMotor()Las funciones se utilizan para controlar el motor y detenerlo, respectivamente. - Control mediante potenciómetro y pulsador:Este código (en el video en 22:12) permite controlar la velocidad del motor con un potenciómetro y arrancarlo/detenerlo con un pulsador. Las partes configurables por el usuario incluyen
POT_PIN(patilla del potenciómetro),MOTOR_OUT_PIN(pin de control PWM),START_STOP_PIN(pasador del botón pulsador),SPEED_MAX, ySPEED_MIN.
Proyecto/Demostración en vivo
El vídeo muestra el funcionamiento de los tres ejemplos de código. El control de encendido/apagado se muestra (en el vídeo a las 11:41), seguido del control de velocidad por PWM (en el vídeo a las 16:53) y, finalmente, el control mediante potenciómetro y botón pulsador (en el vídeo a las 23:02).
Capítulos
- [00:00] Introducción y visión general del proyecto
- [01:24] Opciones del módulo HW-532 y de los MOSFET
- [03:23] Esquema del circuito y explicación
- [05:11] Detalles del componente
- [06:50] Análisis de la hoja de datos del MOSFET
- [11:16] Cableado básico y demostración de encendido y apagado
- [15:05] Código Arduino para control de encendido/apagado
- [15:39] Código Arduino para control de velocidad PWM
- [19:34] Cableado con potenciómetro y pulsador
- [22:12] Código de Arduino con potenciómetro y pulsador
/*
* Lección 108-1: En esta lección, aprenderemos a usar el módulo con FR120N, LR7843 y MOSFET D4184 para encender y apagar cargas de CC de hasta 10 A. El HW-532 está aislado ópticamente de 5 V a 30 V, con una carga de hasta 10 A, según el módulo. Se muestra el esquema, se explica el diagrama de cableado y se muestran diferentes métodos de cableado con pulsador y potenciómetro.
*
* Video: https://youtu.be/eqXaqRFAWrA
*
* Escrito por Ahmad Shamshiri para RoboJax.com
* // Publicado el 25 de agosto de 2022 en Aajx, Ontario, Canadá.
*
* Proyecto 1: Encendido/Apagado de un motor o carga (este proyecto)
* Proyecto 2: Control de velocidad con código Arduino
* Proyecto 3: Control de velocidad con potenciómetro y pulsador
*
* Vea el video con instrucciones para este código: https://youtu.be/eqXaqRFAWrA
*
* Este código forma parte del curso paso a paso de Arduino, que comienza aquí: https://youtu.be/-6qSrDUA5a8
*
* Para acceder a la biblioteca de este código, visite http://robojax.com/
*
* Si este tutorial le resultó útil, por favor, apóyeme para que pueda seguir creando contenido como este. Haga una donación con PayPal o tarjeta de crédito: https://bit.ly/donate-robojax
*
* Este código se proporciona "tal cual", sin garantía ni responsabilidad. Uso gratuito siempre que conserve esta nota intacta.*
* Este código se ha descargado de Robojax.com.
* Este programa es software libre: puede redistribuirlo y/o modificarlo bajo los términos de la Licencia Pública General de GNU publicada por la Free Software Foundation, ya sea la versión 3 de la Licencia o (a su elección) cualquier versión posterior.
*
* Este programa se distribuye con la esperanza de que sea útil, pero SIN GARANTÍA ALGUNA; ni siquiera la garantía implícita de COMERCIABILIDAD o IDONEIDAD PARA UN PROPÓSITO PARTICULAR. Consulte la Licencia Pública General de GNU para obtener más detalles.
*
* Debería haber recibido una copia de la Licencia Pública General de GNU junto con este programa. De no ser así, consulte <https://www.gnu.org/licenses/>.
*/
const int MOTOR_OUT_PIN=2;
void setup() {
// Robojax MOSFET Motor driver code
Serial.begin(9600);
Serial.println("Robojax LR7834 , Arduino");
pinMode(MOTOR_OUT_PIN, OUTPUT);
digitalWrite(MOTOR_OUT_PIN, HIGH);
}
// the loop routine runs over and over again forever:
void loop() {
// Robojax XY-GMOS MOSFET Motor driver code
} // loop end
# include <Arduino_LSM6DS3.h>
/*
* Lesson 108-2: In this lesson we learn how to use the module with FR120N , LR7843 and D4184 MOSFET to turn ON/OFF DC load up to up to 10A. HW-532 optically isolated from 5V to 30V load up to 10A depending on the module. Schematic shown, wiring diagram explained, different
* method of wiring with push button and potentiometer also shown.
* Video https://youtu.be/eqXaqRFAWrA
* Get code for this project from https://robojax.com/RJT797
*
* Written by Ahmad Shamshiri for RoboJax.com
* // Published on Aug 25, 2022 in Aajx, ON, Canada.
*
*
* Project 1: Turning ON/OFF a motor or load (this project)
* Project 2: Controlling Speed using Arduino code
* Project 3: Controlling Speed using potentiometer and a push button
* Watch Video instruction for this code:https://youtu.be/eqXaqRFAWrA
*
* This code is part of Arduino Step by Step Course which starts here: https://youtu.be/-6qSrDUA5a8
*
* for library of this code visit http://robojax.com/
*
* If you found this tutorial helpful, please support me so I can continue creating
* content like this. Make a donation using PayPal by credit card https://bit.ly/donate-robojax
* * 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 download 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/>.
*/
const int MOTOR_OUT_PIN = 3;
const int SPEED_MAX = 100; // in %
const int SPEED_MIN = 0; // in %
const int STOP=0;
const int RUN=1;
int motorState=RUN;
int motorSpeed = 0; // between 0 to 100%.
// video instruction https://youtu.be/eqXaqRFAWrA
void setup() {
// Robojax XY-GMOS MOSFET Motor driver code
Serial.begin(9600);
Serial.println("Robojax XY-GMOS Motor, Arduino");
pinMode(MOTOR_OUT_PIN, OUTPUT);
} // setup ends
// the loop routine runs over and over again forever:
void loop() {
// video https://youtu.be/eqXaqRFAWrA
motorControl(50); // run motor at 50%
delay(5000); // keep it running for 5000ms or 5 seconds
stopMotor(); // stop the motor
delay(3000); // keep it stopped for 5000ms or 5 seconds
for(int i=0; i<100; i++)
{
motorControl(i);
delay(200);
}
stopMotor(); // stop motor
delay(3000); // keep it stopped for 5000ms or 5 seconds
for(int i=100; i >0; i--)
{
motorControl(i);
delay(200);
}
// Robojax LR7843 MOSFET Motor driver code
} // loop end
/*
* motorControl(int s)
* @brief controls the motor with the value s
* @param return nothing
* @param "type" is character
* on May 08, 2020 at 02:36 in Ajax, Ontario, Canada
*/
void motorControl(int s)
{
// Robojax LR7843 MOSFET Motor driver code
// 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);
} // motorControl
/*
* stopMotor()
* @brief stops the motor
* @param return nothing
* @param
* on May 08, 2020 at 02:36 in Ajax, Ontario, Canada
*/
void stopMotor(){
// Robojax XY-GMOS MOSFET Motor driver code
analogWrite( MOTOR_OUT_PIN, 0);
Serial.println("STOPPED");
} // stopMotor()
/*
* Lección 108-3: Control de velocidad del motor mediante una resistencia variable (potenciómetro) y un pulsador de arranque/parada con Arduino.
*
* En esta lección, aprenderemos a usar el módulo con FR120N, LR7843 y MOSFET D4184 para encender y apagar una carga de CC de hasta 10 A. El HW-532 está aislado ópticamente de 5 V a 30 V, con una carga de hasta 10 A, según el módulo. Se muestra el esquema, se explica el diagrama de cableado y se muestran diferentes métodos de cableado con pulsador y potenciómetro.
*
* Video: https://youtu.be/eqXaqRFAWrA
* Obtén los códigos para este proyecto en https://robojax.com/RJT797
* Escrito por Ahmad Shamshiri para RoboJax.com
* // Publicado el 25 de agosto de 2022 en Aajx, Ontario, Canadá.
*
* Proyecto 1: Encendido/Apagado de un motor o carga
* Proyecto 2: Control de velocidad con código Arduino
* Proyecto 3: Control de velocidad con potenciómetro y pulsador (este proyecto)
*
* Vea el video con instrucciones para este código: https://youtu.be/eqXaqRFAWrA
*
* Este código forma parte del curso paso a paso de Arduino, que comienza aquí: https://youtu.be/-6qSrDUA5a8
*
* Para acceder a la biblioteca de este código, visite http://robojax.com/
*
* Si este tutorial le resultó útil, por favor, apóyeme para que pueda seguir creando contenido como este. Haga una donación con PayPal o tarjeta de crédito: https://bit.ly/donate-robojax
*
* Este código se proporciona "TAL CUAL", sin garantía ni responsabilidad. Uso gratuito siempre que conserve esta nota intacta.*
* Este código se ha descargado de Robojax.com.
* Este programa es software libre: puede redistribuirlo y/o modificarlo bajo los términos de la Licencia Pública General de GNU publicada por la Free Software Foundation, ya sea la versión 3 de la Licencia o (a su elección) cualquier versión posterior.
*
* Este programa se distribuye con la esperanza de que sea útil, pero SIN GARANTÍA ALGUNA; ni siquiera la garantía implícita de COMERCIABILIDAD o IDONEIDAD PARA UN PROPÓSITO PARTICULAR. Consulte la Licencia Pública General de GNU para obtener más detalles.
*
* Debería haber recibido una copia de la Licencia Pública General de GNU junto con este programa. De no ser así, consulte <https://www.gnu.org/licenses/>.
*/
const int POT_PIN =A0; // can change
const int MOTOR_OUT_PIN = 3; // ~
const int START_STOP_PIN=2; // for push button switch
const int SPEED_MAX = 100; // in %
const int SPEED_MIN = 0; // in %
// video instruction https://youtu.be/eqXaqRFAWrA
const int STOP=0;
const int RUN=1;
int motorState=RUN;
int motorSpeed = 0; // between 0 to 100%.
void pushButton();
void setup() {
// Robojax XY-GMOS MOSFET Motor driver code
Serial.begin(9600);
Serial.println("Robojax XY-GMOS Motor, Arduino");
pinMode(START_STOP_PIN, INPUT_PULLUP);
pinMode(MOTOR_OUT_PIN, OUTPUT);
// video instruction https://youtu.be/eqXaqRFAWrA
}
// the loop routine runs over and over again forever:
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 Motor driver code
// video instruction https://youtu.be/eqXaqRFAWrA
} // loop end
/*
* motorControl(int s)
* @brief controls the motor with the value s
* @param return nothing
* @param "type" is character
* on May 08, 2020 at 02:36 in Ajax, Ontario, Canada
*/
void motorControl(int s)
{
// Robojax LR7843 MOSFET Motor driver code
// video instruction 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);
} // motorControl
/*
* stopMotor()
* @brief stops the motor
* @param return nothing
* @param
* on May 08, 2020 at 02:36 in Ajax, Ontario, Canada
*/
void stopMotor(){
// Robojax XY-GMOS MOSFET Motor driver code
// video instruction https://youtu.be/eqXaqRFAWrA
analogWrite( MOTOR_OUT_PIN, 0);
Serial.println("STOPPED");
} // stopMotor()
/*
* pushButton()
* @brief reads the push button
* @param return nothing
* @param
* on May 08, 2020 at 02:36 in Ajax, Ontario, Canada
*/
void pushButton()
{
// Robojax XY-GMOS MOSFET Motor driver code
// video instruction https://youtu.be/eqXaqRFAWrA
if(digitalRead(START_STOP_PIN) ==LOW)
{
motorState =!motorState;
delay(100);
}
} // pushButton()
Cosas que podrías necesitar
-
AmazonasCompra HW-532 en Amazonamzn.to
-
eBay
-
AliExpressCompra el controlador de motor FR120N en AliExpress.s.click.aliexpress.com
Recursos y referencias
Aún no hay recursos.
Archivos📁
Hoja de datos (pdf)
-
infineon-IRLR7843 LR7843 hoja de datos MOSFET
infineon-irlr7843-datasheet-en.pdf0.37 MB
Archivo de Fritzing
-
HW-532B Módulo Mosfot
HW-532B.fzpz0.01 MB
Otros archivos
-
infineon-irfr120n-datasheet-en
infineon-irfr120n-datasheet-en.pdf0.39 MB -
alpha-y-Omega-AOD4184A_ficha técnica
alpha-and-Omega-AOD4184A_datasheet.pdf0.43 MB