Étape 6: Moteurs et cellules photoélectriques
les moteurs. Tapez le code suivant, vérifier et transférez-le sur l’Arduino. Une fois cela fait, essayez de dissimuler les photocellules un à la fois.
• Quand vous couvrez la photocellule du haut, le moteur gauche doit tourner vers la gauche
et le moteur droit doit tourner vers la droite.
• Quand vous couvrez la photocellule vers le bas, le moteur gauche doit tourner vers la droite
et le moteur droit doit tourner vers la gauche.
• Quand vous couvrez la photocellule de gauche, les deux moteurs devraient tourner
dans le sens antihoraire.
• Quand vous couvrez la photocellule droite, les deux moteurs doivent tourner vers la droite.
/*
À l’aide de cellules photoélectriques à deux moteurs pas à pas
avec un Arduino par le biais EasyDriver v4.3 de Sparkfun
CC-GNU GPL par Ben Leduc-Mills et Fab Roberts
Créé : 2010.06
*/
#include //import bibliothèque de stepper
#define 200 étapes / / 360/1.8 (angle de pas) = 200 pas/tour
déclarer les nouveaux objets de moteurs pas à pas de la bibliothèque de stepper (un par moteur)
Stepper right_motor (marches, 6, 7) ; 6 = DIR, 7 = ÉTAPE
Stepper left_motor (marches, 11, 12) ; 11 = DIR, 12 = ÉTAPE
distance de l’int ; jusqu’où doivent aller moteurs
int le plus bas ; variable pour stocker la valeur de la cellule photoélectrique plus faible
int i ; pour une boucle
variables pour 4 valeurs de cellule photoélectrique
int photo_up ;
int photo_down ;
int photo_left ;
int photo_right ;
void setup() {}
Serial.Begin(9600) ; lancer imprimé série alors nous pouvons voir les choses
régler les vitesses du moteur (en tr/min)
right_motor.setSpeed(200) ;
left_motor.setSpeed(200) ;
}
void loop() {}
lire et imprimer toutes les valeurs de cellule photoélectrique des broches analogiques 0-3
photo_up = analogRead(0) ;
Serial.Print("up") ;
Serial.println(photo_up) ;
photo_down = analogRead(1) ;
Serial.Print("Down") ;
Serial.println(photo_down) ;
photo_left = analogRead(2) ;
Serial.Print("left") ;
Serial.println(photo_left) ;
photo_right = analogRead(3) ;
Serial.Print("Right") ;
Serial.println(photo_right) ;
Delay(1000) ; Donnez-moi le temps de les lire dans le moniteur
stocker les valeurs de cellule dans un tableau
int photoValues [] = {photo_down, photo_left, photo_up, photo_right} ;
plus bas = 9999 ; Ceci réglé plus haut que les valeurs de cellule photo-électrique possible
boucle pour trouver la plus petite valeur de la cellule photoélectrique
pour (i = 0; j’ai 4 <; i ++) //4 = nombre de cellules photoélectriques
{
Serial.println(photoValues[i]) ; imprime les photoValue tableau
assigner des cellule réelle valeur à la variable « plus basse » si elle est inférieure
que tout ce qui est « plus bas » est défini sur (commence à 9999)
Si (le plus bas > = photoValues [i]) {}
plus bas = photoValues [i] ;
}
Imprimez-le pour confirmer que la valeur la plus faible est sélectionnée
Serial.Print("lowest:") ;
Serial.println(lowest) ;
Delay(1000) ; attendre une seconde avant une boucle de sorte que nous pouvons lire les valeurs
} //end pour
distance = plus bas ; Set de voyage distance variable = valeur la plus basse
trouver le capteur qui correspondait à l’aller plus bas, cette direction
Voir ci-dessous pour ce que le haut, bas, gauche, droite fonctions faire
Si (plus bas == {photoValues[0])}
(distance) ;
}
ElseIf (plus bas == {photoValues[1])}
vers le bas (à distance) ;
}
ElseIf (plus bas == {photoValues[2])}
gauche (distance) ;
}
ElseIf (plus bas == {photoValues[3])}
droit (à distance) ;
}
} //end boucle
/*
Voici les fonctions directionnelles. Taille de boucle = distance.
Numéros de mesure positive sont dans le sens horaire, négatif dans le sens antihoraire
*/
Sub (distance int) {}
pour (i = 0; i < distance; i ++) {}
right_motor.Step(10) ;
left_motor.Step(-10) ;
}
}
Sub vers le bas (distance int) {}
pour (i = 0; i < distance; i ++) {}
right_motor.Step(-10) ;
left_motor.Step(10) ;
}
}
vide laissé (distance int) {}
pour (i = 0; i < distance; i ++) {}
right_motor.Step(-10) ;
left_motor.Step(-10) ;
}
}
Sub droit (distance int) {}
pour (i = 0; i < distance; i ++) {}
right_motor.Step(10) ;
left_motor.Step(10) ;
}
}