Soporte giratorio basado en pasos controlado por diálogo en serie
Componentes y suministros
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 4 |
Herramientas y máquinas necesarias
| ||||
|
Acerca de este proyecto
Historia completa aquí:http://www.cesarebrizio.it/Arduino/Turntable.html
Este proyecto trata sobre una plataforma giratoria basada en un motor paso a paso.
El modelo paso a paso es 28BYJ48, controlado a través del controlador de motor paso a paso X113647 (basado en el IC ULN2003A) que normalmente se compra con el paso a paso.
La plataforma puede girar en ambas direcciones y se controla mediante un monitor en serie o Tera Term.
Se implementan los siguientes comandos:
- R =Girar en el sentido de las agujas del reloj continuamente (es decir, durante varios giros)
- r =Girar 360 grados; en el sentido de las agujas del reloj
- L =Girar en sentido antihorario continuamente (es decir, durante varias vueltas)
- l =Girar 360 grados; en sentido antihorario
- S =Dejar de girar
Desde el punto de vista mecánico, el montaje es muy sencillo:solo se necesita un cuadrado de madera contrachapada o material similar, de unas 15cmx15cm, para la mesa base.
El centro de la mesa se encontrará en el cruce de las diagonales; se perforará un orificio de 6 mm exactamente en ese punto.
El cubo del paso a paso está descentrado:al pegar el cubo en el orificio de 6 mm, se puede dibujar el contorno del paso a paso con un lápiz.
Luego, se cortará un orificio redondo lo más apretado posible alrededor del contorno del paso a paso con una sierra de marquetería, de modo que los dos orificios de fijación del paso a paso se asienten firmemente en la madera de la mesa, de modo que puedan usarse para fijar el paso a paso al mesa.
Se necesitan almohadillas de goma de 10 mm de alto para permitir el espacio necesario (el paso a paso se pegará un poco debajo de la mesa).
La placa giratoria se fijará al paso a paso gracias a un cubo de montaje de aluminio universal Pololu para eje de 5 mm.
Fuentes de información:
Control paso a paso pequeño:http://arduino-info.wikispaces.com/SmallSteppers
En realidad utilicé 4 pines diferentes, sin embargo, la siguiente ilustración del circuito reproduce con precisión las conexiones. Mirando la foto de arriba (el cable rojo de Arduino reemplaza a "Rosa"):
#define motorPin1 4 // Azul - 28BYJ-48 pin 1 # define motorPin2 5 // Rosa - 28BYJ-48 pin 2 # define motorPin3 6 // Amarillo - 28BYJ-48 pin 3 # define motorPin4 7 / / Naranja - 28BYJ-48 pin 4 // Rojo - 28BYJ-48 pin 5 (VCC) // Azul - 28BYJ-48 pin GND #define STEPS_PER_TURN 2048 // número de pasos en 360deg;
Código
- El boceto completo en Arduino
El boceto completo en Arduino Arduino
Una descripción completa del software con comentarios/ * Soporte giratorio basado en pasos controlado por diálogo en serie Circuito y comentarios:Ver http://www.cesarebrizio.it/Arduino/Turntable.html El circuito es como se ilustra aquí:https:// www.tdegypt.com/wp-content/uploads/2017/08/stepper-motor-wiring.png la única excepción es que el boceto usa salidas digitales 4-5-6-7 mientras que el diagrama de Fritzing creado el 23 de diciembre de 2017 modificado --- - por Cesare Brizio Este código de ejemplo es de dominio público. Este boceto controla una plataforma giratoria basada en un motor paso a paso. El modelo paso a paso es 28BYJ48, controlado a través del controlador de motor paso a paso X113647 (basado en el IC ULN2003A) que normalmente se compra con el motor paso a paso. La plataforma puede girar en ambas direcciones y se controla a través de Serial Monitor o Tera Term. Se implementan los siguientes comandos:R =Girar en sentido horario continuamente (es decir:para varias vueltas) r =Girar 360 grados; en sentido horario L =Girar en sentido antihorario continuamente (es decir, durante varias vueltas) l =Girar 360 grados; anti-clockwiseS =Dejar de rotar Fuentes de información:Pequeño control paso a paso:http://arduino-info.wikispaces.com/SmallSteppers*//*----- (Importar las bibliotecas necesarias) ----- * / # include/ * ----- (Declarar constantes y números de pin) ----- * // * NUNCA PONER; DESPUÉS de una declaración #define !!!! * /// pines del motor # define motorPin1 4 // Azul - 28BYJ-48 pin 1 # define motorPin2 5 // Rosa - 28BYJ-48 pin 2 # define motorPin3 6 // Amarillo - 28BYJ-48 pin 3 # define motorPin4 7 / / Naranja - 28BYJ-48 pin 4 // Rojo - 28BYJ-48 pin 5 (VCC) // Azul - 28BYJ-48 pin GND #define STEPS_PER_TURN 2048 // número de pasos en 360deg; int motorSpeed =500; // Las velocidades altas (800 y superiores) pueden causar un comportamiento errático en 28BYJ-48int motorAccel =400; // Como arriba:mejor evitar aceleraciones extremasint myPos =0; // se utilizará para definir un punto de partida para 360deg; rotacionesint LeftTurnUp =0; // Par de banderas para determinar la dirección de rotaciónint RightTurnDown =0; // Par de banderas para determinar la dirección de rotaciónint Continuous =0; // se utiliza a continuación para discriminar comandos de rotación única en inputByte =0; // para datos en serie entrantes / * ----- (Objetos para control paso a paso) ----- * /// Configure el paso a paso como bipolar de 4 cables en el pin 4, 5, 6, 7 // NOTA:El la secuencia 1-3-2-4 es necesaria para la secuenciación adecuada del paso a paso 28BYJ48AccelStepper (4, motorPin1, motorPin3, motorPin2, motorPin4); configuración vacía () {Serial.begin (9600); stepper.setMinPulseWidth (20); // Configuración aconsejable para evitar que los pulsos de Arduino // sean demasiado rápidos para ser decodificados stepper.setMaxSpeed (motorSpeed); stepper.setSpeed (motorSpeed); stepper.setAcceleration (motorAccel); // las siguientes dos líneas restablecen el "paso cero" a la posición actual stepper.setCurrentPosition (stepper.currentPosition ()); stepper.runToPosition (); Serial.println ("Comandos disponibles:"); Serial.println ("R =rotación continua en el sentido de las agujas del reloj"); Serial.println ("r =360deg; rotación en el sentido de las agujas del reloj"); Serial.println ("L =rotación continua en sentido antihorario"); Serial.println ("l =360deg; rotación en sentido antihorario"); Serial.println ("S =detener la rotación");} void loop () {if (Serial.available ()> 0) {entranteByte =Serial.read (); {if (entranteByte =='R') {Serial.println ("recibido« R »- activando la rotación continua en el sentido de las agujas del reloj"); // Las dos líneas que siguen permiten enviar comandos en cualquier secuencia:// antes de la ejecución, se realiza una parada rápida stepper.stop (); // Deténgase lo más rápido posible:establece un nuevo objetivo stepper.runToPosition (); // Ahora se detiene después de la parada rápida // El siguiente par de banderas determina la dirección de rotación LeftTurnUp =1; RightTurnDown =0; Continuo =1; // se usa a continuación para discriminar comandos de rotación simple stepper.setCurrentPosition (stepper.currentPosition ()); // Establecer el paso 0 "aquí" stepper.setSpeed (motorSpeed); // Los comandos anteriores han restablecido la velocidad} if (entranteByte =='L') {Serial.println ("recibido« L »- activando la rotación continua en sentido antihorario"); // Las dos líneas que siguen permiten enviar comandos en cualquier secuencia:// antes de la ejecución, se realiza una parada rápida stepper.stop (); // Deténgase lo más rápido posible:establece un nuevo objetivo stepper.runToPosition (); // Ahora se detiene después de la parada rápida // El siguiente par de banderas determina la dirección de rotación RightTurnDown =1; LeftTurnUp =0; Continuo =1; // se usa a continuación para discriminar comandos de rotación simple stepper.setCurrentPosition (stepper.currentPosition ()); // Establecer el paso 0 "aquí" stepper.setSpeed (motorSpeed); // Los comandos anteriores han restablecido la velocidad} if (entranteByte =='r') {Serial.println ("recibido« r »- activando una sola rotación en el sentido de las agujas del reloj"); // Las dos líneas que siguen permiten enviar comandos en cualquier secuencia:// antes de la ejecución, se realiza una parada rápida stepper.stop (); // Deténgase lo más rápido posible:establece un nuevo objetivo stepper.runToPosition (); // Ahora se detiene después de la parada rápida // El siguiente par de banderas determina la dirección de rotación LeftTurnUp =1; RightTurnDown =0; Continuo =0; // se usa a continuación para discriminar comandos de rotación simple stepper.setCurrentPosition (stepper.currentPosition ()); // Establecer el paso 0 "aquí" stepper.setSpeed (motorSpeed); // Los comandos anteriores han restablecido la velocidad // Como tendré que avanzar 2047 pasos, guardo mi posición actual // como punto de inicio de la rotación myPos =stepper.currentPosition (); } if (entranteByte =='l') {Serial.println ("recibido« l »- activando una sola rotación en sentido antihorario"); // Las dos líneas que siguen permiten enviar comandos en cualquier secuencia:// antes de la ejecución, se realiza una parada rápida stepper.stop (); // Deténgase lo más rápido posible:establece un nuevo objetivo stepper.runToPosition (); // Ahora se detiene después de la parada rápida // El siguiente par de banderas determina la dirección de rotación RightTurnDown =1; LeftTurnUp =0; Continuo =0; // se usa a continuación para discriminar comandos de rotación simple stepper.setCurrentPosition (stepper.currentPosition ()); // Establecer el paso 0 "aquí" stepper.setSpeed (motorSpeed); // Los comandos anteriores han restablecido la velocidad // Como tendré que retroceder 2047 pasos, guardo mi posición actual // como punto de inicio de la rotación myPos =stepper.currentPosition (); } if (entranteByte =='S') {Serial.println ("recibido« S »- deteniendo la rotación"); // Restablecer las banderas que determinan la dirección de rotación LeftTurnUp =0; RightTurnDown =0; stepper.stop (); // Deténgase lo más rápido posible:establece un nuevo objetivo stepper.runToPosition (); // Ahora se detiene después de la parada rápida}}} if (Continuous ==1) // rotación continua {if (LeftTurnUp ==1) // giro a la izquierda {stepper.moveTo (10000); // mueve muchos pasos - más de los necesarios mecánicamente} if (RightTurnDown ==1) // giro a la derecha {stepper.moveTo (-10000); // mueve muchos pasos - más de los necesarios mecánicamente} stepper.run (); } if (Continuous ==0) // rotación continua {if (LeftTurnUp ==1) // giro a la izquierda {stepper.moveTo (myPos + STEPS_PER_TURN); // 1 giro =2048 pasos} if (RightTurnDown ==1) // giro a la derecha {stepper.moveTo (myPos-STEPS_PER_TURN); // 1 turno =2048 pasos}} paso a paso.run ();}
Esquemas
El circuito completo realizado en FritzingProceso de manufactura
- Motores paso a paso
- Los controladores integrados facilitan el diseño del motor paso a paso
- Ventilador de temperatura controlada
- Prototipo de Raspoulette
- Torreta centinela Nerf autónoma
- Biblioteca de motores paso a paso bipolares
- Juguete controlado por Android con Raspberry Motor Shield
- Swiper - Auto Tinder / Bumble Swiper
- Brazo de robot Arduino DIY:controlado por gestos con las manos
- ¿Qué es un motor lineal?
- ¿Qué es un servomotor?