Infrared stepper motor control with speed control
In this project, we will learn how to control a 28BYJ-48 stepper motor using an infrared remote controller and an Arduino.
Components and supplies
1
Arduino Mini Pro - ATmega168 5V
Apps and platforms
1
rogerbit.
Project description
Code
Source code
c
Source code
1#include <IRremote.h> 2#include <Stepper.h> 3// Pines del motor paso a paso 4#define IN1 6 5#define IN2 7 6#define IN3 8 7#define IN4 9 8// Configuración del motor 9const int pasosPorRevolucion = 2048; // Pasos para una revolución completa 10Stepper motor(pasosPorRevolucion, IN1, IN3, IN2, IN4); 11// Pines del receptor IR 12const int receptorIR = 2; 13// Variables para el control remoto 14IRrecv irrecv(receptorIR); 15decode_results resultados; 16// Códigos IR para las funciones (ajusta estos códigos según tu control remoto) 17unsigned long codigoDerecha = 0x7EC31EF7; // Cambia estos códigos por los de tu control 18unsigned long codigoIzquierda = 0xC101E57B; 19unsigned long codigoStop = 0x5B83B61B; 20unsigned long codigoAumentarVelocidad = 0xF63C8657; // Código para aumentar la velocidad 21unsigned long codigoDisminuirVelocidad = 0x2A89195F; // Código para disminuir la velocidad 22// Variables de control 23enum EstadoMotor { PARADO, GIRANDO_DERECHA, GIRANDO_IZQUIERDA }; 24EstadoMotor estadoActual = PARADO; 25int velocidad = 6; // Velocidad inicial, valor entre 1 y 12 26void setup() { 27 Serial.begin(9600); 28 irrecv.enableIRIn(); // Iniciar receptor IR 29 motor.setSpeed(velocidad); // Ajusta la velocidad inicial del motor 30} 31void loop() { 32 // Leer señal del control remoto 33 if (irrecv.decode(&resultados)) { 34 unsigned long codigo = resultados.value; 35 Serial.print("Código IR recibido: "); 36 Serial.println(codigo, HEX); // Mostrar el código en hexadecimal 37 if (codigo == codigoDerecha) { 38 estadoActual = GIRANDO_DERECHA; 39 Serial.println("Cambiar a giro hacia la derecha"); 40 } else if (codigo == codigoIzquierda) { 41 estadoActual = GIRANDO_IZQUIERDA; 42 Serial.println("Cambiar a giro hacia la izquierda"); 43 } else if (codigo == codigoStop) { 44 estadoActual = PARADO; 45 Serial.println("Detener motor"); 46 } else if (codigo == codigoAumentarVelocidad) { 47 cambiarVelocidad(true); // Aumentar velocidad 48 } else if (codigo == codigoDisminuirVelocidad) { 49 cambiarVelocidad(false); // Disminuir velocidad 50 } 51 irrecv.resume(); // Preparar el receptor para la próxima señal 52 } 53 // Ejecutar acción según el estado actual 54 switch (estadoActual) { 55 case GIRANDO_DERECHA: 56 motor.step(1); // Mover en pasos pequeños en dirección derecha 57 break; 58 case GIRANDO_IZQUIERDA: 59 motor.step(-1); // Mover en pasos pequeños en dirección izquierda 60 break; 61 case PARADO: 62 // No hacer nada, el motor está detenido 63 break; 64 } 65} 66void cambiarVelocidad(bool aumentar) { 67 if (aumentar && velocidad < 12) { 68 velocidad++; 69 Serial.print("Aumentar velocidad: "); 70 } else if (!aumentar && velocidad > 1) { 71 velocidad--; 72 Serial.print("Disminuir velocidad: "); 73 } 74 motor.setSpeed(velocidad); // Actualizar velocidad del motor 75 Serial.println(velocidad); 76}
Comments
Only logged in users can leave comments