Paso 6: Ejecutar el steppers
Los pasos de 28YBJ-48 es una bobina de 4 paso a paso con un cociente del engranaje alto (citado como 64:1). Hay algunos tutoriales útiles aquí:
http://42bots.com/tutorials/28byj-48-Stepper-motor...
https://Arduino-info.wikispaces.com/SmallSteppers
Y un gran, general paso a paso Instructable aquí:
Que se conectan a la Arduino a través de un tablero de conductor del ULN2003 (el cable de paso a paso conecta de una manera solamente, así que no se preocupa de conseguir el cableado incorrecto). Puede ejecutar estos motores con el integrado biblioteca paso a paso en Arduino. Esto activa cada bobina en secuencia, el rotor en movimiento a través de 4 posiciones para hacer una rotación. Esto es muy simple, pero limita la velocidad de los pasos. Si las bobinas cambiar demasiado rápido, no puede mantener el rotor y el motor se congela (oirá un zumbido con algunas vibraciones). Hemos utilizado la biblioteca de AccelStepper , que permite el control más sofisticado del motor. Permite utilizar una secuencia de 8 pasos para mover el rotor en semitonos, haciéndolo más fácil para él, y por lo tanto llegar a velocidades más rápidas. También le permite utilizar la aceleración, que también aumenta la velocidad máxima. Tratando de conseguir el rotor para pasar inmediatamente a la velocidad final de resto hará que el rotor se atasque. Aceleración hasta la velocidad final permite el impulso del rotor para construir, lo que le permite llegar a velocidades más rápidos finales. La biblioteca de AccelStepper toma un poco acostumbrarse, pero que nos permitió ejecutar los motores significativamente más rápido. Usted tendrá que descargar la librería desde el enlace dado e instalarlo.
Configurar
include <AccelStepper.h> // Motor pin definitions #define motorPin1 38 // IN1 on the ULN2003 driver #define motorPin2 40 // IN2 on the ULN2003 driver #define motorPin3 42 // IN3 on the ULN2003 driver#define motorPin4 44 // IN4 on the ULN2003 driverdefine motorPin5 39 // IN1 on the ULN2003 driver#define motorPin6 41 // IN2 on the ULN2003 driver#define motorPin7 43 // IN3 on the ULN2003 driver#define motorPin8 45 // IN4 on the ULN2003 driver // Define Parameters for Steppers #define HALFSTEP 8#define STEPS_PER_MOTOR_REVOLUTION 32#define STEPS_PER_OUTPUT_REVOLUTION 32*64 // =2048AccelStepper stepperX(HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4);AccelStepper stepperY(HALFSTEP, motorPin5, motorPin7, motorPin6, motorPin8);Stepper stepper_X(STEPS_PER_MOTOR_REVOLUTION, 38, 42, 40, 44);Stepper stepper_Y(STEPS_PER_MOTOR_REVOLUTION, 39, 43, 41, 45); int Position1 = 0;int Position2 = 0;
Los puertos de salida de Arduino que conectan con las tarjetas de conductor del motor deben ser definidos. Cada motor de pasos se conecta a un tablero de conductor que modula la salida de Arduino y la convierte en la secuencia correcta de pulsos a los electroimanes de los pasos.
El mecanismo de paso de 8 se define como HALFSTEP como un parámetro para controlar los motores paso a paso. Esto proporciona la información a codificar para la rotación de los motores paso a paso a través del mecanismo de paso de 8. El ángulo de paso en la secuencia de 8 pasos (como mucho un solo paso gira los engranajes) es 5.625˚ (64 pasos por revolución). La relación de transmisión es 1/64, por lo que son 64 x 64 (4096) pasos por revolución del eje de salida del motor. También se definen las posiciones de los motores paso a paso como 0 en su posición inicial. Position1 es la variable de posición de stepper1; Position2 es la variable de la posición de paso a paso 2. Location define la columna en la microplaca que el sensor está por encima de (1-12), que es controlado por stepperX; PositionY define la fila en la microplaca que el sensor está por encima de (A-H), que es controlado por stepperY. En la posición inicial ambas variables de posición son 0, que equivale al sensor de la mentira sobre el pocillo A1
// Set stepper speed and acceleration void setup(){stepper1.setMaxSpeed(3000.0);stepper1.setAcceleration(500.0);stepper2.setMaxSpeed(3000.0);stepper2.setAcceleration(500.0);}
La configuración está encerrada en llaves: {...}. Se define la velocidad y la aceleración de los motores para ambos motores. Estas variables fueron solicitadas a ser dentro de las capacidades de los motores paso a paso para evitar el estancamiento, pero lo suficientemente rápido como para el programa de excesiva longitud. La velocidad, 3000 (pasos por segundo), equivale a 44 rpm; la aceleración, 500, equivale a 7.3 rpm ^ 2
Mover la mesa
delay (2000); //Take reading of A1
Antes de mover los motores se produce un retraso de 2000ms (2 segundos) para permitir que la primera muestra (A1) para analizar
stepper1.runToNewPosition(stepper1.currentPosition() +52406);Position1 = Position1 +1; delay(5000); // Stepper1 with delays between each turn
Paso a paso 1 está rotado 52406, que equivale a mover la microplaca 9mm entre dos muestras adyacentes. Una vez que el paso a paso se ha trasladado al pozo adyacente, la variable Location se incrementa en una unidad para definir que la columna que el sensor se encuentra por encima en la microplaca se ha incrementado en uno (por ejemplo, desde el pocillo A1 a A2). El paso a paso se detiene para permitir que el pozo a analizar.
if (Position1 == 11){ //after 11 turns of stepper 1 (at A12)stepper2.runToNewPosition(stepper2.currentPosition() +52406); Position2 = Position2 +1; delay(2000); stepper1.runToNewPosition(0); //return motor 1 to A1 Position1 = 0; delay(2000);}
Por lo tanto se moverá la microplaca para pozo adyacente está por debajo del sensor, pausa y repetir hasta que el sensor está por encima de la columna 12 (Location = 11). En este punto, la cláusula de if() ordena que stepperY cambia de puesto la microplaca hacia abajo para que el sensor está por encima de la fila siguiente (de la columna A fila B etc.), hay una pausa y la microplaca es devuelto por lo que el sensor se encuentra por encima de la primera columna.
if (Position2 == 8){ //after 7 turns of motor 2 (row H)stepper1.runToNewPosition(0); //return motor 1 to H1 Position1 = 0; delay(2000); stepper2.runToNewPosition(0); //return to A1 while(1){}}}
El segundo if() cláusula comandos de ambos motores para volver a sus posiciones originales (con la muestra A1 debajo del sensor) una vez la primera cláusula del if() se ha repetido 8 veces. En este punto se ha analizado cada pocillo de la microplaca para que esta cláusula sólo restablece la posición de la microplaca para el próximo uso. El código while(1) {} ordena esta cláusula sólo se repita una vez. Esto significa que una vez que la microplaca ha sido analizada y vuelto a A1 bien las paradas del lazo y la microplaca permanezca inmóvil.