Clusterbot ! (9 / 11 étapes)

Étape 9: Fil vers le haut le code pour votre première série de tests et d’Arduino

Connectez les fils de raccordement et de votre Arduino pour le montage d’essai mini sur votre protoshield.  Utiliser l’image de l’étape précédente pour aider à accomplir ceci.

En ce qui concerne les broches e/s sur l’Arduino, connectez-les au pilote de moteur comme suit :

PW101 se connecte à la broche 3 sur l’Arduino.
AIN1 se connectera à la broche 0 sur l’Arduino.
AIN2 se connectera à la broche 1 sur l’Arduino.
PWMB se connecte à la broche 5 sur l’Arduino.
BIN1 se connectera à la broche 2 sur l’Arduino.
BIN2 se connecte à la borne 4 sur l’Arduino.
STBY est connectée à la broche 6 sur l’Arduino.

Dans le code ci-dessous, j’ai écrit quelques fonctions pour le rendre plus facile de contrôler le robot.  La section de code principal ressemble beaucoup à l’ancien langage de programmation Logo.

J’ai dû passer un peu de temps se ClusterBot à suivre tout droit.  Je n’ai aucun moyen physique de le faire un alignement frontal sur le robot, j’ai peaufiné les fonctions goForward() et goBackward() en changeant les valeurs PWM jusqu'à ce que le bot sur chenilles relativement simples.  Il ne faut pas qu’il est parfait avec ce robot, mais quand j’ai couru d’abord ClusterBot, il déménagerait à arcs au lieu des lignes.  Je ne sais pas si le robot effectue le suivi pas tout droit parce qu’il est physiquement tordu, le poids est inégalement réparti, les signaux PWM sont distinguent par les deux broches de l’Arduino, ou si c’est simplement une question de caractéristiques de performances différentes des deux moteurs à bas prix-o.  Probablement une combinaison de l’ensemble de ce qui précède.

J’ai également pris quelques mesures rugueux de la distance angulaire parcourue lors de la rotation gauche et droite, donc je pourrais facilement faire le robot tourner à environ 90 degrés, 180 degrés, etc..  Le problème est que comme les batteries se déchargent, les déplacements angulaires diminuera également.  C’est juste une estimation approximative.  Il ne pourrait pas être sur ce bot, mais je dois avoir des encodeurs sur mes roues à un moment donné, ou simplement utiliser des moteurs pas à pas.  Roues codées sera probablement la réponse cependant.

Le code :

#define PW101 3
#define AIN1 0
#define AIN2 1
#define PWMB 5
#define BIN1 2
#define BIN2 4
#define STBY 6

/ * Robot fait 27 rotations en une minute et
10 pieds en 25 secondes.  Suivi de droite actuel est 233 à gauche, à droite 255. */

void setup() {}
Mettez votre code de programme d’installation ici, pour exécuter une fois :
pinMode(PWMA,OUTPUT) ;
pinMode(AIN1,OUTPUT) ;
pinMode(AIN2,OUTPUT) ;
pinMode(PWMB,OUTPUT) ;
pinMode(BIN1,OUTPUT) ;
pinMode(BIN2,OUTPUT) ;
pinMode(STBY,OUTPUT) ;

}

void loop() {}

startUp() ;
goForward() ;
Delay(5500) ;
turnAround() ;
goForward() ;
Delay(5500) ;
turnAround() ;
goBackward() ;
Delay(5500) ;
rotateLeft() ;
Delay(560) ;
rotateRight() ;
Delay(560) ;
goForward() ;
Delay(3000) ;
applyBrakes() ;
Delay(2000) ;
}

goForward Sub ()
{
digitalWrite (AIN1, élevé) ;
digitalWrite (AIN2, faible) ;
analogWrite(PWMA,234) ;
digitalWrite (BIN1, élevé) ;
digitalWrite (BIN2, faible) ;
analogWrite(PWMB,255) ;
}

Sub goBackward ()
{
digitalWrite (AIN1, basse) ;
digitalWrite (AIN2, élevé) ;
analogWrite(PWMA,233) ;
digitalWrite (BIN1, faible) ;
digitalWrite (BIN2, élevé) ;
analogWrite(PWMB,255) ;
}

Sub rotateRight ()
{
digitalWrite (AIN1, élevé) ;
digitalWrite (AIN2, faible) ;
analogWrite(PWMA,255) ;
digitalWrite (BIN1, faible) ;
digitalWrite (BIN2, élevé) ;
analogWrite(PWMB,255) ;
}

Sub rotateLeft ()
{
digitalWrite (AIN1, basse) ;
digitalWrite (AIN2, élevé) ;
analogWrite(PWMA,255) ;
digitalWrite (BIN1, élevé) ;
digitalWrite (BIN2, faible) ;
analogWrite(PWMB,255) ;
}

Sub veerLeft ()
{
digitalWrite (AIN1, élevé) ;
digitalWrite (AIN2, faible) ;
analogWrite(PWMA,190) ;
digitalWrite (BIN1, élevé) ;
digitalWrite (BIN2, faible) ;
analogWrite(PWMB,255) ;
}

Sub veerRight ()
{
digitalWrite (AIN1, élevé) ;
digitalWrite (AIN2, faible) ;
analogWrite(PWMA,255) ;
digitalWrite (BIN1, élevé) ;
digitalWrite (BIN2, faible) ;
analogWrite(PWMB,190) ;
}

Sub applyBrakes ()
{
digitalWrite (AIN1, élevé) ;
digitalWrite (AIN2, élevé) ;
analogWrite(PWMA,255) ;
digitalWrite (BIN1, élevé) ;
digitalWrite (BIN2, élevé) ;
analogWrite(PWMB,255) ;
}

Sub démarrage ()
{
digitalWrite(STBY,HIGH) ;
}

Sub turnAround()
{
rotateLeft() ;
Delay(1370) ;
}

Arrêt Sub ()
{
digitalWrite(STBY,LOW) ;
}

Articles Liés