Código de búsqueda

Lección 52-1: Código básico: Controlar un motor de corriente continua con un relé utilizando Arduino

Lección 52-1: Código básico: Controlar un motor de corriente continua con un relé utilizando Arduino

En esta lección, aprenderemos cómo controlar la dirección de un motor de corriente continua utilizando dos relés y un Arduino. Al cambiar la polaridad de la tensión suministrada al motor, podemos invertir su dirección. Este proyecto es sencillo e ideal para principiantes que desean comprender el control de relés con Arduino. Asegúrate de ver el video para obtener información y demostraciones adicionales (en el video a las 00:00).

En este tutorial, utilizaremos dos relés para cambiar la polaridad de la fuente de alimentación del motor. Cuando un relé se activa, permite que la corriente fluya en una dirección, haciendo que el motor gire en una dirección. Cuando se activa el otro relé, invierte el flujo de corriente, haciendo que el motor gire en la dirección opuesta. Los relés actúan como interruptores que son controlados por el Arduino.

módulo de relé de 2 canales
módulo de relé de 2 canales
Módulo de relé de disparo de nivel alto de 5V
Módulo de relé de disparo de nivel alto de 5V

Hardware Explicado

Los componentes principales de este proyecto incluyen una placa Arduino, dos relés, un motor de corriente continua y una fuente de alimentación. La placa Arduino es el cerebro de la operación, enviando señales a los relés para controlar la dirección del motor. Cada relé tiene tres terminales: común (COM), normalmente cerrado (NC) y normalmente abierto (NO). Al ser activado, el relé conecta el terminal COM ya sea al terminal NC o al terminal NO, conmutando efectivamente el circuito.

cableado-batería-motor-CCW

La imagen arriba muestra cómo conectar los cables de un motor a una batería; el motor gira, por ejemplo, en dirección contraria a las agujas del reloj (CCW).

batería de motor cableado CC

La imagen de arriba muestra que si conectas los cables + y - a diferentes terminales del motor, gira por ejemplo en la dirección de las agujas del reloj (CW).

cableado-batería-motor-2

No podemos conectar un relé directamente a las placas de Arduino, ESP32 o Raspberry Pi, ya que el motor necesita una corriente muy alta para funcionar.

batería de motor cableado 3

Necesitamos un controlador de motor entre el Arduino y el motor.

Los relés son importantes porque permiten que el Arduino controle dispositivos de alta potencia como motores sin estar conectados directamente a ellos. Esto es crucial ya que los pines de salida del Arduino solo pueden manejar una corriente limitada. Al usar relés, podemos controlar de manera segura el funcionamiento del motor desde el Arduino.

batería-motor-cableado-5

podemos conectar dos relés como se muestra arriba para controlar la dirección de rotación del motor. Relé-1 si está ENCENDIDO y Relé-2 si está APAGADO. ahora el motor gira en dirección horaria

batería-motor-cableado-6

La imagen de arriba muestra la trayectoria de la corriente.

batería-motor-cableado-7

podemos conectar dos relés como se muestra arriba para controlar la dirección de rotación del motor. Relé-1 si está APAGADO y Relé-2 si está ENCENDIDO. ahora el motor gira en dirección CCW. Mira la flecha arriba del motor.

cableado-de-batería-de-motor-8

La imagen arriba muestra el camino de la corriente.

Detalles de la hoja de datos

Fabricante Songle
Número de parte SRD-05VDC-SL-C
Voltaje de la bobina 5 V (CC)
Clasificación de contacto 10 A / 250 VAC
Corriente alterna 15 A máx
Voltaje de conmutación 30 V CC / 250 V CA
Resistencia de contacto ≤ 100 mΩ
Resistencia de aislamiento ≥ 1000 MΩ
Temperatura de operación -40 a +70 °C
Paquete Módulo de relé con 2 relés

  • Asegúrese de que los relés estén clasificados para el voltaje y la corriente del motor.
  • Utiliza un punto en común entre el Arduino y el módulo de relé.
  • Utilice diodos de retroceso apropiados si es necesario para proteger el Arduino de la EMI de retroceso.
  • Mantenga las longitudes de los cables cortas para minimizar la resistencia y la interferencia.
  • Verifica las conexiones del relé antes de encender el sistema.
  • Prueba el circuito con voltajes más bajos antes de aplicar la potencia completa al motor.
  • Etiqueta los cables para facilitar la identificación durante la solución de problemas.

Instrucciones de cableado

dual_relay_motor_wrring_bb
single_relay_motor_wrring_bb

Ejemplos de código y guía paso a paso

En el código, definimos dos pines para los relés usandoint relay1 = 2;yint relay2 = 3;. Estos pines controlarán el funcionamiento de los relés. Elsetup()la función inicializa estos pines como salidas y mantiene el motor apagado al establecer ambos relés en alto.

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); 
}

En elloop()función, controlamos la dirección del motor. Para girar el motor en sentido antihorario (CCW), configuramosrelay1a bajo yrelay2demasiado alto. Esto permite que la corriente fluya en una dirección.

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

Para detener el motor, apagamos ambos relés volviéndolos a activar. Luego invertimos la dirección cambiando los estados de los relés, lo que permite que el motor gire en el sentido de las agujas del reloj (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

El código completo de este proyecto se carga debajo del artículo. Asegúrate de ver el video para una explicación detallada del código (en el video a las 00:00).

Demostración / Qué Esperar

Cuando la configuración esté completa y el código se haya cargado, el motor primero girará en sentido antihorario durante tres segundos, luego se detendrá durante dos segundos, seguido de una rotación en sentido horario durante otros tres segundos, y finalmente se detendrá nuevamente. Este ciclo se repetirá continuamente. Los errores comunes incluyen el cableado incorrecto de los relés o conectar el motor directamente al Arduino, lo que puede dañar la placa. Consulta el video para una confirmación visual del comportamiento esperado (en el video a :00).

Tiempos de video

  • 00:00 Introducción
  • 04:27 ¿Cómo funciona?
  • 08:05 Explicación de cableado
  • 11:45 Explicación del Código Básico
  • 15:25 Código avanzado explicado
  • 18:40 Demostración con dos relés simples
  • 19:43 Demostración con un módulo de relé dual

Imágenes

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)
Idioma: 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

Cosas que podrías necesitar

Archivos📁

No hay archivos disponibles.