Arduino - Motor de CC - Interruptor de fin de carrera

En este tutorial de Arduino, vamos a aprender a usar Arduino para controlar un motor de corriente continua mediante un interruptor de límite y un controlador L298N. En detalle, vamos a aprender:

Acerca del motor de corriente continua y del interruptor de fin de carrera

Si no conoces el motor de corriente continua y el interruptor de límite (diagrama de pines, cómo funciona, cómo programarlo ...), aprende sobre ellos en los siguientes tutoriales:

Diagrama de Cableado

Este tutorial proporciona los códigos de Arduino para dos casos: un motor DC + un interruptor de límite, un motor DC + dos interruptores de límite.

  • Diagrama de cableado entre el motor de corriente continua y un interruptor de fin de carrera
Diagrama de cableado para Arduino, motor DC y interruptor de límite

This image is created using Fritzing. Click to enlarge image

  • Diagrama de cableado entre el motor de corriente continua y dos interruptores de fin de carrera
Diagrama de cableado de Arduino para motor DC y dos interruptores de límite

This image is created using Fritzing. Click to enlarge image

Código de Arduino - Detener un motor DC mediante un interruptor de fin de recorrido

El código a continuación hace que un motor DC gire indefinidamente y se detenga de inmediato cuando se active un interruptor de fin de carrera.

/* * Este código de Arduino fue desarrollado por es.newbiely.com * Este código de Arduino se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino/arduino-dc-motor-limit-switch */ #include <ezButton.h> #define ENA_PIN 7 // The Arduino pin connected to the EN1 pin L298N #define IN1_PIN 6 // The Arduino pin connected to the IN1 pin L298N #define IN2_PIN 5 // The Arduino pin connected to the IN2 pin L298N ezButton limitSwitch(A1); // create ezButton object that attach to pin A1 void setup() { Serial.begin(9600); limitSwitch.setDebounceTime(50); // set debounce time to 50 milliseconds // initialize digital pins as outputs. pinMode(ENA_PIN, OUTPUT); pinMode(IN1_PIN, OUTPUT); pinMode(IN2_PIN, OUTPUT); digitalWrite(ENA_PIN, HIGH); // max speed digitalWrite(IN1_PIN, HIGH); // control motor A spins clockwise digitalWrite(IN2_PIN, LOW); // control motor A spins clockwise } void loop() { limitSwitch.loop(); // MUST call the loop() function first if (limitSwitch.isPressed()) { Serial.println(F("The limit switch: TOUCHED")); digitalWrite(IN1_PIN, LOW); // stop motor digitalWrite(IN2_PIN, LOW); // stop motor } }

Pasos R\u00e1pidos

  • Conecta Arduino a la PC mediante un cable USB
  • Abre Arduino IDE, selecciona la placa y el puerto correctos
  • Navega hasta el Bibliotecas ícono en la barra izquierda del Arduino IDE.
  • Busca “ezButton”, luego encuentra la biblioteca de botones de ArduinoGetStarted.com
  • Haz clic en el botón Instalar para instalar la biblioteca ezButton.
Biblioteca de botones para Arduino
  • Copia el código anterior y ábrelo con Arduino IDE
  • Haz clic en el botón Subir en Arduino IDE para subir el código a Arduino
  • Si el cableado es correcto, verás que el motor gira en sentido horario.
  • Toca el interruptor de límite
  • Verás que el motor se detiene de inmediato.
  • El resultado en el Monitor Serial se muestra a continuación.
COM6
Send
The limit switch: TOUCHED The DC motor is STOPPED The DC motor is STOPPED The DC motor is STOPPED The DC motor is STOPPED
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Explicación del código

Puedes encontrar la explicación en la línea de comentarios del código Arduino anterior.

Código de Arduino - Cambiar la dirección de un motor de corriente continua mediante un interruptor de fin de carrera

El código que se muestra a continuación hace que un motor de corriente continua gire indefinidamente y cambie su dirección cuando se toca un interruptor de fin de carrera.

/* * Este código de Arduino fue desarrollado por es.newbiely.com * Este código de Arduino se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino/arduino-dc-motor-limit-switch */ #include <ezButton.h> #define DIRECTION_CCW -1 #define DIRECTION_CW 1 // constants won't change #define ENA_PIN 7 // The Arduino pin connected to the EN1 pin L298N #define IN1_PIN 6 // The Arduino pin connected to the IN1 pin L298N #define IN2_PIN 5 // The Arduino pin connected to the IN2 pin L298N ezButton limitSwitch(A1); // create ezButton object that attach to pin A1 int direction = DIRECTION_CW; void setup() { Serial.begin(9600); limitSwitch.setDebounceTime(50); // set debounce time to 50 milliseconds // initialize digital pins as outputs. pinMode(ENA_PIN, OUTPUT); pinMode(IN1_PIN, OUTPUT); pinMode(IN2_PIN, OUTPUT); digitalWrite(ENA_PIN, HIGH); // max speed digitalWrite(IN1_PIN, HIGH); // control motor A spins clockwise digitalWrite(IN2_PIN, LOW); // control motor A spins clockwise } void loop() { limitSwitch.loop(); // MUST call the loop() function first if (limitSwitch.isPressed()) { Serial.println(F("The limit switch: TOUCHED")); direction *= -1; // change direction Serial.print(F("The direction -> ")); if (direction == DIRECTION_CW) { Serial.println(F("CLOCKWISE")); digitalWrite(IN1_PIN, HIGH); // control motor A spins clockwise digitalWrite(IN2_PIN, LOW); // control motor A spins clockwise } else { Serial.println(F("ANTI-CLOCKWISE")); digitalWrite(IN1_PIN, LOW); // control motor A spins anti-clockwise digitalWrite(IN2_PIN, HIGH); // control motor A spins anti-clockwise } } }

Pasos R\u00e1pidos

  • Copia el código anterior y ábrelo con Arduino IDE
  • Haz clic en el botón Subir en Arduino IDE para subir el código al Arduino
  • Si el cableado es correcto, verás que el motor gira en sentido horario.
  • Toca el interruptor de límite
  • Verás que la dirección del motor DC cambia a antihorario
  • Toca de nuevo el interruptor de límite
  • Verás que la dirección del motor DC cambia a horario
  • El resultado en el Monitor Serial se ve como se muestra a continuación
COM6
Send
The limit switch: TOUCHED The direction -> ANTI-CLOCKWISE The limit switch: TOUCHED The direction -> CLOCKWISE
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Código de Arduino - Cambiar la dirección de un motor de corriente continua mediante dos interruptores de fin de carrera

El código de abajo hace que un motor de corriente continua gire indefinidamente y cambie su dirección cuando se toque uno de dos interruptores de límite.

/* * Este código de Arduino fue desarrollado por es.newbiely.com * Este código de Arduino se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino/arduino-dc-motor-limit-switch */ #include <ezButton.h> #define DIRECTION_CCW -1 #define DIRECTION_CW 1 #define ENA_PIN 7 // The Arduino pin connected to the EN1 pin L298N #define IN1_PIN 6 // The Arduino pin connected to the IN1 pin L298N #define IN2_PIN 5 // The Arduino pin connected to the IN2 pin L298N ezButton limitSwitch_1(A0); // create ezButton object that attach to pin A0 ezButton limitSwitch_2(A1); // create ezButton object that attach to pin A1 int direction = DIRECTION_CW; int prev_direction = DIRECTION_CW; void setup() { Serial.begin(9600); limitSwitch_1.setDebounceTime(50); // set debounce time to 50 milliseconds limitSwitch_2.setDebounceTime(50); // set debounce time to 50 milliseconds // initialize digital pins as outputs. pinMode(ENA_PIN, OUTPUT); pinMode(IN1_PIN, OUTPUT); pinMode(IN2_PIN, OUTPUT); digitalWrite(ENA_PIN, HIGH); // max speed digitalWrite(IN1_PIN, HIGH); // control motor A spins clockwise digitalWrite(IN2_PIN, LOW); // control motor A spins clockwise } void loop() { limitSwitch_1.loop(); // MUST call the loop() function first limitSwitch_2.loop(); // MUST call the loop() function first if (limitSwitch_1.isPressed()) { direction *= -1; // change direction Serial.println(F("The limit switch 1: TOUCHED")); } if (limitSwitch_2.isPressed()) { direction *= -1; // change direction Serial.println(F("The limit switch 2: TOUCHED")); } if (prev_direction != direction) { Serial.print(F("The direction -> ")); if (direction == DIRECTION_CW) { Serial.println(F("CLOCKWISE")); digitalWrite(IN1_PIN, HIGH); // control motor A spins clockwise digitalWrite(IN2_PIN, LOW); // control motor A spins clockwise } else { Serial.println(F("ANTI-CLOCKWISE")); digitalWrite(IN1_PIN, LOW); // control motor A spins anti-clockwise digitalWrite(IN2_PIN, HIGH); // control motor A spins anti-clockwise } prev_direction = direction; } }

Pasos R\u00e1pidos

  • Copie el código anterior y ábralo con Arduino IDE
  • Haga clic en el botón Subir en Arduino IDE para subir el código al Arduino
  • Si el cableado es correcto, verá que el motor gira en sentido horario.
  • Toque el interruptor de límite 1
  • Verá que la dirección del motor DC cambia a sentido antihorario
  • Toque el interruptor de límite 2
  • Verá que la dirección del motor DC cambia a sentido horario
  • El resultado en el Monitor Serial se ve a continuación
COM6
Send
The limit switch 1: TOUCHED The direction -> ANTI-CLOCKWISE The limit switch 2: TOUCHED The direction -> CLOCKWISE
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Video Tutorial

Estamos considerando crear tutoriales en video. Si considera que los tutoriales en video son importantes, suscríbase a nuestro canal de YouTube para motivarnos a crear los videos.

※ NUESTROS MENSAJES

  • No dude en compartir el enlace de este tutorial. Sin embargo, por favor no use nuestro contenido en otros sitios web. Hemos invertido mucho esfuerzo y tiempo en crear el contenido, ¡por favor respete nuestro trabajo!