Tabla de contenido:

Control de posición angular del motor paso a paso 28BYJ-48 con joystick analógico y Arduino: 3 pasos
Control de posición angular del motor paso a paso 28BYJ-48 con joystick analógico y Arduino: 3 pasos

Video: Control de posición angular del motor paso a paso 28BYJ-48 con joystick analógico y Arduino: 3 pasos

Video: Control de posición angular del motor paso a paso 28BYJ-48 con joystick analógico y Arduino: 3 pasos
Video: MOTOR PASO A PASO 28BYJ-48 UNIPOLAR controlado con ULN2003 por y microcontrolador o ARDUINO 2024, Noviembre
Anonim
Control de posición angular del motor paso a paso 28BYJ-48 con joystick analógico y Arduino
Control de posición angular del motor paso a paso 28BYJ-48 con joystick analógico y Arduino

Este es un esquema de control para el motor paso a paso 28BYJ-48 que he desarrollado para usar como parte de mi proyecto de tesis de último año. No había visto esto antes, así que pensé en subir lo que descubrí. ¡Espero que esto ayude a alguien más!

El código básicamente permite que un motor paso a paso "copie" la posición angular de un joystick analógico, es decir, si empuja el joystick hacia adelante, el motor apunta hacia el "norte". empuje el joystick hacia el oeste, el motor gira para apuntar en la misma dirección.

Para mi implementación, requiero que si se suelta el joystick, es decir, no tiene una posición angular, el motor regresa a la dirección "inicial". La dirección de inicio está orientada hacia el este, y el motor (o al menos cualquier puntero / dispositivo que haya conectado al eje de salida) también debe estar orientado en esta dirección cuando se enciende.

Suministros

Arduino Uno o similar

tablero y selección de cables de puente (macho a macho, macho a hembra)

Fuente de alimentación 5V

Módulo de joystick analógico (idealmente con una función de botón pulsador momentáneo, esto facilita el descanso de la posición "inicial"

Motor paso a paso 28BYJ-48 y controlador paso a paso ULN2003

Bolígrafo, papel y blu-tac (¡o cualquier otro dispositivo puntero para conectar al motor!)

Paso 1: Paso 1: Configuración

Conecte el motor paso a paso al controlador paso a paso y conecte los pines de la siguiente manera:

IN1 - Pin 8 de Arduino

IN2 - Pin 9 de Arduino

IN3 - Pin 10 de Arduino

IN4 - Pin 11 de Arduino

Conecte su fuente de alimentación de 5v a los rieles de suministro en su tablero y conecte las entradas ULN2003 5v a los rieles de suministro. conecte el riel de tierra al suelo en su Arduino.

para el joystick, conéctelo de la siguiente manera:

Pin de interruptor - Pin 2 de Arduino

Eje X - Arduino A0 (Analógico en 0)

Eje Y - Arduino A1

+ 5V - Salida Arduino 5V

GND - Arduino GND

Finalmente, conecte la tierra de su placa de pruebas al otro pin Arduino GND

Paso 2: Paso 2: Explicación del código

He incluido el código completo de Arduino para que lo descargues y utilices. Pero haré todo lo posible para explicar las partes pertinentes aquí.

La teoría detrás de este código es que el espacio ocupado por el joystick se divide en un gráfico, con 0, 0 en el centro. sin embargo, las entradas del joystick descansan en (aproximadamente) 512 en el centro, por lo que para superar esto, se utilizan dos funciones para "poner a cero" el valor leído en los ejes X e Y. Dependiendo de la fuente de alimentación que utilice, es posible que deba modificar los valores en las funciones ZeroX y ZeroY para que su joystick dé una lectura confiable de 0 en reposo.

Cuando se leen los valores X, Y, primero se convierten a radianes usando la función atan2 () en la biblioteca math.h. Explicar esta función está fuera del alcance de este instructivo, pero por favor, búsquelo, ¡es un truco de geometría bastante simple!

Finalmente, para hacer la vida más fácil para aquellos de nosotros que solíamos trabajar en grados en lugar de rads, el valor de rad calculado por atan2 () se convierte en grados.

En la parte superior del bucle hay un pequeño fragmento de código que le permite hacer clic en el botón momentáneo del joystick para mover la ubicación "casa". Esto fue increíblemente útil mientras probaba el código, pero lo dejé porque puedo ver cómo podría ser útil en algunos casos.

¡Ahora a la mayor parte del código! Comenzamos leyendo las coordenadas X, Y del joystick dos veces separadas por un retraso de 10 ms y luego verificamos si son iguales: descubrí que el joystick ocasionalmente emitía lecturas esporádicas, y este ligero retraso fue suficiente para detener el motor en función de estos. También es un retraso lo suficientemente corto como para que no parezca interferir con las entradas intencionales.

El resto del código se explica por sí mismo y he hecho todo lo posible por documentarlo; Una serie de declaraciones IF comparan el ángulo actual del joystick con el ángulo del motor y mueven el motor a ese ángulo. El 28BYJ-48 tiene 5.689 pasos por grado, por eso multiplicamos el movimiento requerido por este número aparentemente impar.

La única parte del código que requiere más explicación es lo que he denominado "caso envolvente". Incluso en el caso de que el joystick y el motor estuvieran en p. Ej. + 175 °, y el joystick se movió posteriormente a -175 ° (un movimiento de solo 10 ° en el joystick, desde el norte del oeste hasta el sur del oeste), el motor se movería EN LA DIRECCIÓN INCORRECTA 350 °. para dar cuenta de esto, se escribió el caso especial.

La carcasa envolvente comienza verificando que el motor y el joystick tengan signos opuestos, es decir, el motor es positivo y el joystick negativo, o viceversa. También comprueba que la suma de los valores absolutos (es decir, positivos) del joystick y el motor sea superior a 180 °.

Si ambas afirmaciones son verdaderas, la función comprueba si el motor debe moverse en el sentido de las agujas del reloj (el valor del motor es negativo) o en sentido contrario (si el valor del motor es positivo).

Los valores absolutos del ángulo del motor y el ángulo del joystick se suman y se restan de 360 ° para determinar la distancia a mover. Finalmente, el ángulo del motor (que ahora refleja el ángulo del joystick) se actualiza como tal.

Paso 3: ¡TERMINADO

Entonces, ¡todo lo que queda por hacer es cargar el código en su Arduino y ejecutarlo! Vea el video de arriba para tener una buena idea de cómo funciona el proyecto. ¡Esto sería útil para cardanes de cámara, brazos robóticos y muchas otras aplicaciones!

Si usa el código, hágamelo saber y, si ve algún lugar en el que se pueda mejorar el código, me encantaría escuchar sus comentarios.

Recomendado: