Paso 2: Controlar un paso a paso con palillo de alegría
A continuación tenemos que controlar un motor paso a paso el potenciómetro en el joystick.
Hardware:
Joystick -> Arduino (análogo en) -> Arduino (salida digital) -> paso a paso driver -> motor paso a paso
Esto corrí con EasyDriver de Sparkfun por www.SchmalzHaus.com/EasyDriver
Está bien etiquetado y puede funcionar un motor paso a paso de tamaño medio de la alimentación USB. (en este ejemplo estoy utilizando un NEM17 de tecnología Keling).
El escudo de tornillo es por ZachHoeken: http://reprap.org/bin/view/Main/Arduino_Breakout_1_4
Código para el control de motor paso a paso del potenciómetro de la palanca de mando
/////////////////////// Arduino ///////////////////////
OLLA para controlar una velocidad de paso a paso y dirección *** / /
declarar pines
int potPin = 1;
int Step_X = 13;
int Dir_X = 12;
int Enable_X = 8;
declarar los valores
int Speed_X = 0; velocidad de paso (demora entre los pasos)
int val = 0;
int j = 0;
void setup() {}
pinMode (Step_X, salida);
pinMode (Dir_X, salida);
pinMode (Enable_X, salida);
Serial.Begin(9600); Observe que eso comm serial se puede utilizar para depurar
Pero reducir el código y retrasar mucho el motor paso a paso
(y ser confuso para mí)
}
void loop() {}
Val = analogRead(potPin); leer el valor del sensor
j = val - 517; ¿517 es centro - cuán lejos del centro?
j = abs(j); valor absoluto
Speed_X = 70000/j; Esta matemática invierte el valor y escala según se necesite
(valor que se encuentra a través de ensayo y error)
La demora entre los pasos determinará la velocidad del motor
Por lo tanto, retrasar hasta = velocidad abajo
Si (val > = 520) {}
digitalWrite(Enable_X,LOW); permiten
digitalWrite (Dir_X, alto); Sistema de dirección
digitalWrite(Step_X,HIGH);
delayMicroseconds(2);
digitalWrite(Step_X,LOW);
delayMicroseconds(Speed_X);
}
Si (val < = 510) {}
digitalWrite(Enable_X,LOW); / / habilitar
digitalWrite (Dir_X, bajo); Otra dirección
digitalWrite(Step_X,HIGH);
delayMicroseconds(2);
digitalWrite(Step_X,LOW);
delayMicroseconds(Speed_X);
}
Si (val < = 520 & & val > = 510) {}
digitalWrite(Enable_X,HIGH); desactivar el motor paso a paso si el joystic está en el centro
}
}