Etape 2: Contrôler un moteur pas à pas avec le bâton de joie
Ensuite, nous devons contrôler un moteur pas à pas le potentiomètre sur la manette.
Matériel :
Manette de jeu -> Arduino (analogique à) -> Arduino (sortie numérique) -> Stepper pilote -> moteur pas a pas
J’ai couru ce à l’aide de la EasyDriver de Sparkfun par www.SchmalzHaus.com/EasyDriver
Il est bien marquée et peut exécuter un moteur moyen moteur pas à pas de la taille du bloc d’alimentation USB. (dans cet exemple, j’utilise un NEM17 de Keling Technology).
Le bouclier de la vis est de ZachHoeken : http://reprap.org/bin/view/Main/Arduino_Breakout_1_4
Code pour contrôler le moteur pas à pas de potentiomètre de levier de commande
/////////////////////// Arduino ///////////////////////
POT pour contrôler un moteur pas à pas vitesse et la direction *** / /
déclarer les épingles
int potPin = 1 ;
int Step_X = 13 ;
int Dir_X = 12 ;
int Enable_X = 8 ;
déclarer les valeurs
int Speed_X = 0 ; Vitesse de l’étape (délai entre les étapes)
int val = 0 ;
int j = 0 ;
void setup() {}
pinMode (Step_X, sortie) ;
pinMode (Dir_X, sortie) ;
pinMode (Enable_X, sortie) ;
Serial.Begin(9600) ; Notez que serial comm peut être utilisé pour déboguer
mais il ralentit le code et ralentir le moteur pas à pas beaucoup
(et être source de confusion pour moi)
}
void loop() {}
Val = analogRead(potPin) ; lire la valeur de la sonde
j = val - 517 ; 517 est positions centrales - Comment loin du centre ?
j = abs(j) ; valeur absolue
Speed_X = 70000/j ; Ce math inverse la valeur et évolue selon les besoins
(valeur trouvée par essais et erreurs)
Le délai entre les étapes permettra de déterminer la vitesse du moteur
Ainsi, retarder jusqu'à = vitesse vers le bas
Si (val > = 520) {}
digitalWrite(Enable_X,LOW) ; Enable
digitalWrite (Dir_X, élevé) ; Jeu de direction
digitalWrite(Step_X,HIGH) ;
delayMicroseconds(2) ;
digitalWrite(Step_X,LOW) ;
delayMicroseconds(Speed_X) ;
}
Si (val < = 510) {}
digitalWrite(Enable_X,LOW); / / activer
digitalWrite (Dir_X, basse) ; Autre sens
digitalWrite(Step_X,HIGH) ;
delayMicroseconds(2) ;
digitalWrite(Step_X,LOW) ;
delayMicroseconds(Speed_X) ;
}
Si (val < = 520 & & val > = 510) {}
digitalWrite(Enable_X,HIGH) ; désactiver le moteur pas à pas si le joystic est situé dans le centre
}
}