Como usar o MOSFET optoacoplado HW-532 para controlar a velocidade de um motor DC de até 30V ou uma carga usando o Arduino
Este guia de projeto demonstra como construir um versátil controlador de velocidade para motor DC usando um Arduino e o módulo MOSFET optocoplado HW-532. O MOSFET pode serFR120N, LR7843 ou D4184.Isto permite controlar a velocidade e o estado ligado/desligado de um motor de corrente contínua com tensões de até 30V. O módulo HW-532 oferece proteção e isolamento, tornando-o mais seguro e mais confiável do que conectar o motor diretamente ao Arduino.

Este projeto é valioso para várias aplicações. Aqui estão alguns exemplos:
- Controlando com precisão a velocidade de um braço robótico
- Construção de um ventilador de velocidade variável para sistemas de arrefecimento
- Criando máquinas automatizadas com movimento ajustável
- Desenvolvendo um controle motorizado de válvula para sistemas de fluidos
Hardware/Componentes
Os componentes principais são o Arduino, o módulo MOSFET optoacoplado HW-532 (com opções de MOSFET como D4184, LR7843 ou FR120N), um motor CC (classificação de tensão ≤ 30V), fios de conexão e, opcionalmente, um potenciômetro e um interruptor push-button para controle avançado (no vídeo aos 19:34).
A escolha do MOSFET no módulo HW-532 depende dos seus requisitos de corrente (no vídeo em 01:24). O vídeo fornece uma comparação detalhada dos diferentes MOSFETs (no vídeo em 06:50) e sua adequação para várias aplicações (no vídeo em 09:45). Lembre-se de incluir um diodo para cargas indutivas, como motores DC, para proteger o módulo (no vídeo em 06:00 e 22:02).
Guia de Fiação
A fiação básica conecta o terminal positivo do motor à saída do HW-532, o terminal negativo do motor ao terra do HW-532 e o pino de controle do HW-532 a um pino digital do Arduino (no vídeo em 11:16).

Explicação do código
O código fornecido oferece três níveis de controle:

- Controle Liga/Desliga:Este código simples (no vídeo, aos 15:05) usa um pino digital para ligar e desligar o motor. A parte configurável pelo usuário é a
MOTOR_OUT_PINconstante, que define qual pino do Arduino controla o módulo HW-532. - Controle de velocidade PWM:Este código (no vídeo em 15:39) usa Modulação por Largura de Pulso (PWM) para controlar a velocidade do motor. O usuário pode ajustar
SPEED_MAXeSPEED_MINdefinir os limites superior e inferior do controle de velocidade, e omotorControl()estopMotor()Funções são usadas para controlar o motor e pará-lo, respectivamente. - Controle por potenciômetro e botão de pressão:Este código (no vídeo em 22:12) permite controlar a velocidade do motor com um potenciômetro e ligá-lo/desligá-lo com um botão de pressão. As partes configuráveis pelo usuário incluem
POT_PIN(pino do potenciômetro),MOTOR_OUT_PIN(pino de controle PWM),START_STOP_PIN(pino do botão de pressão),SPEED_MAX, eSPEED_MIN.
Projeto ao Vivo/Demonstração
O vídeo demonstra o funcionamento dos três exemplos de código. O controle liga/desliga é mostrado (no vídeo em 11:41), seguido pelo controle de velocidade por PWM (no vídeo em 16:53) e, finalmente, o controle por potenciômetro e botão (no vídeo em 23:02).
Capítulos
- [00:00] Introdução e Visão Geral do Projeto
- [01:24] Módulo HW-532 e opções de MOSFET
- [03:23] Esquema do circuito e explicação
- [05:11] Detalhes do Componente
- [06:50] Análise da ficha técnica do MOSFET
- [11:16] Fiação Básica e Demonstração de Liga/Desliga
- [15:05] Código Arduino para Controle Liga/Desliga
- [15:39] Código Arduino para controle de velocidade por PWM
- [19:34] Fiação com potenciômetro e botão de pressão
- [22:12] Código Arduino com Potenciômetro e Botão de Pressão
/*
* Aula 108-1: Nesta aula, aprendemos a usar o módulo com FR120N, LR7843 e D4184 MOSFET para ligar/desligar uma carga DC de até 10A. HW-532 opticamente isolado de 5V a 30V com carga de até 10A, dependendo do módulo. Esquema mostrado, diagrama de fiação explicado, diferentes métodos de fiação com botão de pressão e potenciômetro também mostrados. Vídeo https://youtu.be/eqXaqRFAWrA
*
* Escrito por Ahmad Shamshiri para RoboJax.com
* // Publicado em 25 de agosto de 2022 em Aajx, ON, Canadá.
*
* Projeto 1: Ligando/desligando um motor ou carga (este projeto)
* Projeto 2: Controlando a velocidade usando código Arduino
* Projeto 3: Controlando a velocidade usando potenciômetro e um botão de pressão
*
* Assista ao vídeo de instrução para este código: https://youtu.be/eqXaqRFAWrA
*
* Este código é parte do Curso Arduino Passo a Passo que começa aqui: https://youtu.be/-6qSrDUA5a8
*
* Para a biblioteca deste código, visite http://robojax.com/
*
* Se você achou este tutorial útil, por favor, me apoie para que eu possa continuar criando conteúdo como este. Faça uma doação usando PayPal por cartão de crédito https://bit.ly/donate-robojax
*
* Este código é "COMO ESTÁ" sem garantia ou responsabilidade. Livre para ser usado desde que você mantenha esta nota intacta.*
* Este código foi baixado do Robojax.com
* Este programa é um software livre: você pode redistribuí-lo e/ou modificá-lo
* sob os termos da Licença Pública Geral GNU conforme publicada pela
* Free Software Foundation, seja a versão 3 da Licença, ou
* (à sua escolha) qualquer versão posterior.
*
* Este programa é distribuído com a esperança de que seja útil,
* mas SEM QUALQUER GARANTIA; sem mesmo a garantia implícita de
* COMERCIALIZAÇÃO ou ADEQUAÇÃO A UM PROPÓSITO ESPECÍFICO. Veja a
* Licença Pública Geral GNU para mais detalhes.
*
* Você deve ter recebido uma cópia da Licença Pública Geral GNU
* juntamente com este programa. Se não, veja <https://www.gnu.org/licenses/>.
*/
const int MOTOR_OUT_PIN=2;
void setup() {
// Código do controlador de motor MOSFET Robojax
Serial.begin(9600);
Serial.println("Robojax LR7834 , Arduino");
pinMode(MOTOR_OUT_PIN, OUTPUT);
digitalWrite(MOTOR_OUT_PIN, HIGH);
}
// a rotina de loop executa-se repetidamente para sempre:
void loop() {
// Código do driver de motor Robojax XY-GMOS MOSFET
} // fim do loop
# include <Arduino_LSM6DS3.h>
/*
* Aula 108-2: Nesta aula, aprendemos como usar o módulo com FR120N, LR7843 e D4184 MOSFET para ligar/desligar cargas DC de até 10A. HW-532 isolado opticamente de 5V a 30V, carga de até 10A, dependendo do módulo. Esquema mostrado, diagrama de fiação explicado, diferentes métodos de fiação com botão de pressão e potenciômetro também mostrados. Vídeo https://youtu.be/eqXaqRFAWrA Obtenha o código para este projeto em https://robojax.com/RJT797
*
* Escrito por Ahmad Shamshiri para RoboJax.com
* // Publicado em 25 de agosto de 2022 em Aajx, ON, Canadá.
*
* Projeto 1: Ligar/desligar um motor ou carga (este projeto)
* Projeto 2: Controlando a Velocidade usando código Arduino
* Projeto 3: Controlando a Velocidade usando potenciômetro e um botão de pressão
* Assista à instrução em vídeo para este código: https://youtu.be/eqXaqRFAWrA
*
* Este código faz parte do Curso Arduino Passo a Passo que começa aqui: https://youtu.be/-6qSrDUA5a8
*
* Para a biblioteca deste código, visite http://robojax.com/
*
* Se você achou este tutorial útil, por favor, me apoie para que eu possa continuar criando
* conteúdo como este. Faça uma doação usando PayPal por cartão de crédito https://bit.ly/donate-robojax
* * Este código é "COMO ESTÁ" sem garantia ou responsabilidade. Livre para uso desde que você mantenha esta nota intacta.*
* Este código foi baixado do Robojax.com
* Este programa é software livre: você pode redistribuí-lo e/ou modificá-lo
* de acordo com os termos da Licença Pública Geral GNU, conforme publicado pela
* Free Software Foundation, seja a versão 3 da Licença, ou
* (a sua escolha) qualquer versão posterior.
*
* Este programa é distribuído na esperança de que seja útil,
* mas SEM QUAISQUER GARANTIAS; sem mesmo a garantia implícita de
* COMERCIALIZAÇÃO ou ADEQUAÇÃO A UMA FINALIDADE PARTICULAR. Veja a
* Licença Pública Geral GNU para mais detalhes.
*
* Você deve ter recebido uma cópia da Licença Pública Geral GNU
* junto com este programa. Se não, veja <https://www.gnu.org/licenses/>.
*/
const int MOTOR_OUT_PIN = 3;
const int SPEED_MAX = 100; // em %
const int SPEED_MIN = 0; // em %
const int STOP=0;
const int RUN=1;
int motorState=RUN;
int motorSpeed = 0; // entre 0 a 100%.
// instrução em vídeo https://youtu.be/eqXaqRFAWrA
void setup() {
// Código do driver de motor MOSFET Robojax XY-GMOS
Serial.begin(9600);
Serial.println("Robojax XY-GMOS Motor, Arduino");
pinMode(MOTOR_OUT_PIN, OUTPUT);
} // configuração termina
// a rotina de loop executa repetidamente para sempre:
void loop() {
// video https://youtu.be/eqXaqRFAWrA
motorControl(50); // execute o motor a 50%
delay(5000); // mantenha-o funcionando por 5000ms ou 5 segundos
stopMotor(); // desligue o motor
delay(3000); // mantenha-o parado por 5000ms ou 5 segundos
for(int i=0; i<100; i++)
{
motorControl(i);
delay(200);
}
stopMotor(); // parar motor
delay(3000); // mantenha-o parado por 5000ms ou 5 segundos
for(int i=100; i >0; i--)
{
motorControl(i);
delay(200);
}
// Código do driver de motor MOSFET Robojax LR7843
} // fim do loop
/*
* motorControl(int s)
* @brief controla o motor com o valor s
* @param não retorna nada
* @param "tipo" é carácter
* em 08 de maio de 2020 às 02:36 em Ajax, Ontário, Canadá
*/
void motorControl(int s)
{
// Código do driver de motor MOSFET Robojax LR7843
// 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);
} // controleMotor
/*
* stopMotor()
* @breve para de motor
* @param não retorna nada
* @param
* em 08 de maio de 2020 às 02:36 em Ajax, Ontário, Canadá
*/
void stopMotor(){
// Código do driver de motor MOSFET Robojax XY-GMOS
analogWrite( MOTOR_OUT_PIN, 0);
Serial.println("STOPPED");
} // stopMotor()
/*
* Aula 108-3: Controle de Velocidade do motor usando Resistor Variável (potenciômetro) e usando botão de Início/Parada com Arduino.
*
* Nesta aula, aprendemos como usar o módulo com FR120N, LR7843 e D4184 MOSFET para ligar/desligar carga DC de até 10A. HW-532 opticamente isolado de 5V a 30V, carga de até 10A dependendo do módulo. Esquema mostrado, diagrama de fiação explicado, diferentes métodos de fiação com botão de pressão e potenciômetro também mostrados.
* Vídeo https://youtu.be/eqXaqRFAWrA
* Obtenha os códigos para este projeto em https://robojax.com/RJT797
* Escrito por Ahmad Shamshiri para RoboJax.com
* // Publicado em 25 de agosto de 2022 em Aajx, ON, Canadá.
*
* Projeto 1: Ligando/desligando um motor ou carga
* Projeto 2: Controlando a velocidade usando código Arduino
* Projeto 3: Controlando a velocidade usando potenciômetro e um botão de pressão (este projeto)
*
* Assista a instrução em vídeo para este código: https://youtu.be/eqXaqRFAWrA
*
* Este código é parte do Curso Arduino Passo a Passo que começa aqui: https://youtu.be/-6qSrDUA5a8
*
* para a biblioteca deste código visite http://robojax.com/
*
* Se você achou este tutorial útil, por favor me apoie para que eu possa continuar criando conteúdo como este. Faça uma doação usando PayPal com cartão de crédito https://bit.ly/donate-robojax
*
* Este código é "COMO ESTÁ" sem garantia ou responsabilidade. Livre para ser usado desde que você mantenha esta nota intacta.*
* Este código foi baixado de Robojax.com
* Este programa é software livre: você pode redistribuí-lo e/ou modificá-lo sob os termos da Licença Pública Geral GNU, conforme publicado pela Free Software Foundation, seja a versão 3 da Licença, ou (a seu critério) qualquer versão posterior.
*
* Este programa é distribuído na esperança de que seja útil, mas SEM QUALQUER GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou ADEQUAÇÃO A UM PROPÓSITO ESPECÍFICO. Veja a Licença Pública Geral GNU para mais detalhes.
*
* Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este programa. Se não, veja <https://www.gnu.org/licenses/>.
*/
const int POT_PIN =A0; // pode mudar
const int MOTOR_OUT_PIN = 3; // ~
const int START_STOP_PIN=2; // para interruptor de botão pressionado
const int SPEED_MAX = 100; // em %
const int SPEED_MIN = 0; // em %
// instrução em vídeo https://youtu.be/eqXaqRFAWrA
const int STOP=0;
const int RUN=1;
int motorState=RUN;
int motorSpeed = 0; // entre 0 a 100%.
void pushButton();
void setup() {
// Código do driver de motor 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);
// instrução em vídeo https://youtu.be/eqXaqRFAWrA
}
// a rotina do loop é executada repetidamente para sempre:
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);
// Código do driver de motor Robojax XY-GMOS MOSFET
// instrução em vídeo https://youtu.be/eqXaqRFAWrA
} // fim do loop
/*
* motorControl(int s)
* @brief controla o motor com o valor s
* @param não retorna nada
* @param "type" é um caractere
* em 08 de maio de 2020 às 02:36 em Ajax, Ontário, Canadá
*/
void motorControl(int s)
{
// Código do driver de motor MOSFET Robojax LR7843
// instrução em vídeo 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);
} // controle de motor
/*
* stopMotor()
* @brief para o motor
* @param não retorna nada
* @param
* em 08 de maio de 2020 às 02:36 em Ajax, Ontário, Canadá
*/
void stopMotor(){
// Código do driver de motor Robojax XY-GMOS MOSFET
// instrução em vídeo https://youtu.be/eqXaqRFAWrA
analogWrite( MOTOR_OUT_PIN, 0);
Serial.println("STOPPED");
} // stopMotor()
/*
* pushButton()
* @breve lê o botão de pressão
* @param retorna nada
* @param
* em 08 de maio de 2020 às 02:36 em Ajax, Ontario, Canadá
*/
void pushButton()
{
// Código do driver de motor Robojax XY-GMOS MOSFET
// instrução em vídeo https://youtu.be/eqXaqRFAWrA
if(digitalRead(START_STOP_PIN) ==LOW)
{
motorState =!motorState;
delay(100);
}
} // pushButton()
Coisas que você pode precisar
-
AmazonasCompre HW-532 na Amazonamzn.to
-
eBay
-
AliExpressCompre o Driver de Motor FR120N no AliExpresss.click.aliexpress.com
Recursos e referências
Ainda não há recursos.
Arquivos📁
Folha de dados (pdf)
-
infineon-IRLR7843 LR7843 MOSFET ficha técnica
infineon-irlr7843-datasheet-en.pdf0.37 MB
Arquivo Fritzing
-
Módulo Mosfot HW-532B
HW-532B.fzpz0.01 MB
Outros arquivos
-
infineon-irfr120n-datasheet-en
infineon-irfr120n-datasheet-en.pdf0.39 MB -
alpha-and-Omega-AOD4184A_datasheet
alpha-and-Omega-AOD4184A_datasheet.pdf0.43 MB