Étape 3: Faire deux choses en même temps !
La prochaine chose à faire descend doit enclenchez les contrôles pour le moteur pas à pas et le moteur à courant continu, donc vous pouvez contrôler tous les deux à la fois.
Si vous examinez le code dans les étapes previus, vous verrez que j’ai utilisé différentes broches et les noms de variables pour chaque ensemble de code de test. Cela nous permet de leur enclenchez sans beaucoup de modification.
J’ai lu qu’il y a beaucoup meilleures façons de combiner des blocs de code, mais je suis encore à apprendre, donc tout ce que j’ai fait est des programmes de coupe-et-passé les deux ensemble.
J’ai incrased les valeurs qui sont utilisées comme la position de « centre » de la manette. Cela contribue à vous empêcher de rotation du moteur mal accidentellement.
Ce dernier nous allons devoir coller dans un autre lot du code pour commander le moteur pour ouvrir et fermer la pince !
Voici le code de l’Arduino pour contrôler un moteur pas à pas et un moteur à courant continu (DC étiquetée moteur A, parce que nous allons ajouter B ce dernier)
/////////////////////// ARDUINO CODE //////////////////////////
joystickj avec 2 POTS pour contrôler un moteur pas à pas et la vitesse du moteur DC et la direction *** / /
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 ;
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) ;
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 évolue selon les besoins
70000 valeur trouvée par essais et Erreurs
Le délai entre les étapes permettra de déterminer la vitesse du moteur
/ / Si, retard jusqu'à = vitesse vers le bas
commande du moteur pas à pas / /
Si (val_X > = 530) {}
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_X < = 500) {}
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_X < = 530 & & val_X > = 500) {}
digitalWrite(Enable_X,HIGH) ; désactiver le moteur pas à pas si le joystic est situé dans le centre
}
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
}
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) ;
}