Étape 16 : Code pour toutes les pièces
Voici tous le jamed code ensemble. Maintenant nous pouvons lancer le moteur pas à pas en arrière le long de la piste, soulever et abaisser la griffe et ouvrir et fermer la pince.
Je reçois un crissement pich haute de quelque part... Je vais juste attention fumée pour l’instant.
ARDUINO CODE / / /
2 manettes de jeu avec des POTS pour contrôler un stepper et DC deux moteurs vitesse et direction *** / /
NOTE : modifié pour exécuter pas à pas NEM23 avec Stepper Motor Driver v1.2 de RepRap
déclarer des épingles pour moteurs pas à pas
int potPin_X = 1 ;
int Step_X = 13 ;
int Dir_X = 12 ;
int Enable_X = 8 ;
déclarer les valeurs pour moteurs pas à pas
int Speed_X = 0 ; Vitesse de l’étape (délai entre les étapes)
int val_X = 0 ;
int h = 0 ;
déclarer les épingles pour moteur DC A
int potPin_A = 2 ; Sélectionnez l’entrée pin pour le potentiomètre
int val_A = 0 ; variable pour stocker la valeur provenant de la sonde
Déclarer des variables pour DC A
int j = 0 ;
int Dir_A = 4 ;
int Speed_A = 5 ;
déclarer les épingles pour moteur à courant continu B / / griffe ouvrir/fermer
int potPin_B = 3 ; Sélectionnez l’entrée pin pour le pot
int val_B = 0 ; variable pour stocker la valeur provenant de la sonde
Déclarer des variables pour moteur DC B
int k = 0 ;
int Dir_B = 7 ;
int Speed_B = 6 ; PWM
void setup() {}
Configuration des broches de stepper
pinMode (Step_X, sortie) ;
pinMode (Dir_X, sortie) ;
pinMode (Enable_X, sortie) ;
Configuration des broches moteur A DC
pinMode (Dir_A, sortie) ;
pinMode (Speed_A, sortie) ;
Configuration des broches moteur B DC
pinMode (Dir_B, sortie) ;
pinMode (Speed_B, 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() {}
LECTURE DE STEPPER ET CONTROLL / / /
lire la position du levier de commande et calculer les valeurs pour moteur pas à pas
val_X = analogRead(potPin_X) ; lire la valeur de la sonde
h = val_X - 517 ; 517 est positions centrales - Comment loin du centre ?
h = abs(h) ; valeur absolue
Speed_X = 70000/h ; Ce math inverse la valeur et échelles que nécessaire (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
Remarque : Speed_X = 70000/h a bien fonctionné pour cette combinaison : EasyDriver -> stepper NEM17
Speed_X = 160000/h ; NOTE : Calcul de la vitesse pour Stepper Motor Driver V1-2 (RepRap) -> pas à pas NEM23
commande du moteur pas à pas / /
REMARQUE :
pour EasyDriver : HIGH = disable
pour RepReap Stepper pilote v1.2 : faible = Disable
Si (val_X > = 530) {}
digitalWrite(Enable_X,HIGH) ; Enable
digitalWrite (Dir_X, élevé) ; Jeu de direction
digitalWrite(Step_X,HIGH) ;
delayMicroseconds(2) ;
digitalWrite(Step_X,LOW) ;
delayMicroseconds(Speed_X) ;
}
Si (val_X < = 500) {}
digitalWrite(Enable_X,HIGH); / / activer
digitalWrite (Dir_X, basse) ; Autre sens
digitalWrite(Step_X,HIGH) ;
delayMicroseconds(2) ;
digitalWrite(Step_X,LOW) ;
delayMicroseconds(Speed_X) ;
}
Si (val_X < = 530 & & val_X > = 500) {}
digitalWrite(Enable_X,LOW) ; désactiver le moteur pas à pas si le joystic est situé dans le centre
pour EasyStepper : HIGH = disable
pour RepReap Stepper pilote v1.2 : faible = Disable
}
A MOTEUR DC - LIRE ET CONTRÔLER / / /
Lire l’emplacement du joystick et de calculer la distance et du centre
val_A = analogRead(potPin_A) ; lire la valeur de la sonde
j = val_A - 517 ; 517 est positions centrales - Comment loin du centre
j = abs(j) ; valeur absolue
mettre quelques limites sur j pour garder les valeurs PWM utile
inférieur à 100, le moteur ne se déplacent et PWM maximum est de 255
Si (j > = 510) {}
j = 510 ; le plus la goupille PWM peut faire est de 255
}
Si (j < = 200 & & j > = 10) {}
j = 200 ; au-dessous de 100 PWM, le moteur fait un pich élevé son et ne bouge pas
}
Si (j < = 10) {}
j = 0 ; inférieur à 10, le joystick est très proche de centre
}
Exécuter le moteur de C.C A basé sur les entrées analogiques de la manette de jeu
Si (val_A > = 530) {}
digitalWrite (Dir_A, élevé) ; autre sens
analogWrite (Speed_A, j/2) ; PWM à (diviser par 2 parce que max est de 255)
}
Si (val_A < = 500) {}
digitalWrite (Dir_A, basse) ; //
analogWrite (Speed_A, j/2) ; //
}
Si (val_A < = 530 & & val_A > = 500) {}
analogWrite (Speed_A, 0) ; Mettez hors tension si le joystick se trouve dans le centre
}
DC MOTEUR B - LIRE ET CONTRÔLER / / /
Lire l’emplacement du joystick et de calculer la distance et du centre
val_B = analogRead(potPin_B) ; lire la valeur de la sonde
k = val_B - 517 ; 517 est positions centrales - Comment loin du centre
k = abs(k) ; valeur absolue
mettre quelques limites sur j pour garder les valeurs PWM utile
inférieur à 100, le moteur ne se déplacent et PWM maximum est de 255
Si (k > = 510) {}
k = 510 ; le plus la goupille PWM peut faire est de 255
}
Si (k < = 200 & & k > = 10) {}
k = 200 ; au-dessous de 100 PWM, le moteur fait un pich élevé son et ne bouge pas
}
Si (k < = 10) {}
k = 0 ; inférieur à 10, le joystick est très proche de centre
}
Exécuter le moteur à courant continu B en fonction des entrées analogiques de la manette de jeu
Si (val_B > = 530) {}
digitalWrite (Dir_B, élevé) ; autre sens
analogWrite (Speed_B, k/2) ; PWM à (diviser par 2 parce que max est de 255)
}
Si (val_B < = 500) {}
digitalWrite (Dir_B, basse) ; //
analogWrite (Speed_B, k/2) ; //
}
Si (val_B < = 530 & & val_B > = 500) {}
analogWrite (Speed_B, 0) ; Mettez hors tension si le joystick se trouve dans le centre
}
imprimer les valeurs pour le débogage
Serial.Print(val_A) ; Envoyer des numéros à PC, ainsi vous pouvez voir ce que ça va
Serial.Print(",") ;
Serial.println(j) ;
}