Étape 4: Code Arduino - calibrage de la sonde
Ligne après le script de calibrage de capteurs robot
Bouba
***/
/*
COMMENT UTILISER :
Télécharger ce script.
Arduino doit rester connecté à l’ordinateur.
Capteurs doivent avoir leur tension fournie.
Placer le robot intégralement sur son blanc surface en cours d’exécution
sans doute qu’y a donc une ligne noire sur sa gauche,
mais pas de l’avis de capteurs.
Presser le bouton reset arduinos.
Après 2 secondes pin 13 à bord LED doit s’allumer.
Mesures de calibration surface blanche s’effectuent alors que le voyant s’allume - 2 secondes environ.
LED s’éteindra après cela.
Après 2 secondes délai la LED s’allume à nouveau.
Maintenant, vous avez 5 secondes pour déplacer le robot sur le côté sur une ligne noire.
Ligne doit se trouver sur la gauche face à la même manière que le robot va s’exécuter.
Vous devez déplacer le robot à sa gauche et approximativement à angle droit sur la ligne.
Au cours de ce mouvement, que les valeurs maximales sont prises qui se produisent lorsqu’un seul capteur est directement au-dessus de la ligne.
Pas pressé, mais tous les capteurs doivent être sur la ligne quand LED s’éteint après 5 secondes.
Après un autre 2sec retard la LED s’allume une fois de plus.
Maintenant vous devez déplacer le robot sur la ligne, à l’opposé de ce que vous faisiez dans la dernière étape.
Cela signifie que pendant le robot coup sec 5 retour à droite au-dessus de la ligne.
Important : ce robot de temps doit se déplacer à droite - droite capteur doit passer sur la ligne tout d’abord !
Pendant ce sont pris des mesures que dire, comment peu faire les capteurs côte à côte deux aller, lorsque la ligne est exactement entre les deux.
Mesures fin lorsque la LED s’éteint après 5 sec.
Démarrez l’analyseur de la série.
Arrêter le défilement automatique et copier les valeurs de correction de tout trois lignes successives aux robots script d’équitation.
*/
/ * entrée sonde broches * /
const int [] sensorPins = {A0, A1, A2} ; droite, Centre, gauche
/ * bord LED pin * /
const int indicatorPin = 13 ;
/ * baies pour le stockage des données calculées et capteur
trois capteurs dans chaque tableau :
0 - DROITE, GAUCHE 1 - CENTRE, 2 - * /
lectures de flotteur [3] ; lectures du capteur
char averageReadings [3] = {0, 0, 0} ; lectures moyennes
char whitePoints [3] = {0, 0, 0} ; lecture sur la surface blanche
int blackPoints [3] = {0, 0, 0} ; lecture tout en passant sur la ligne noire maximale
flotteur unitSteps [3] ; différence entre blanc et noir divisé par 100
int corrections [3] ; points blancs en tant qu’int
char peakDetect [3] = {0, 0, 0} ;
char betweenReadings [2] = {1024, 1024} ; lectures en ligne est inbetween deux capteurs, centre-droit, centre-gauche
betweenState booléen [3] = {false, false, false} ; aide pour savoir quel minimum pour stocker
/ * boucle d’assistance variables * /
int i ;
int j ;
void setup() {}
Serial.Begin(9600) ; Démarrez l’analyseur de série de données de sortie après mesures
pinMode (indicatorPin, sortie) ; Set nboard conduit broche pour indiquer l’état de mesure
/ * commencer l’étalonnage après retard de 2 sec * /
Delay(2000) ;
/ * MESURER SUR LA SURFACE BLANCHE PENDANT ENVIRON 2 SECONDES SUPPOSÉS * /
digitalWrite (indicatorPin, HIGH) ; à bord LED s’allume
pour (i = 0; j’ai < 125; i ++) {//125 lectures de chaque capteur
pour (j = 0; j < = 2; j ++) {//loop par le biais de chaque capteur
lectures [j] = analogRead(sensorPins[j]) ; obtenir la valeur
/ * calculer moyenne capteur valeurs * /
whitePoints [j] = (whitePoints [j] * j + readings[j]) / (j + 1) ; moyenne de toutes les mesures prises à ce jour
Delay(2) ;
}
Delay(10) ;
}
digitalWrite (indicatorPin, basse) ; à bord del s’éteint
Delay(2000) ; retard de 2 sec
/ * VA SUR LE CÔTÉ SUR LA LIGNE NOIRE DANS LES 5 SECONDES QUI SUIVENT SUPPOSÉS * /
digitalWrite (indicatorPin, HIGH) ; à bord LED s’allume
pour (i = 0; j’ai < 320; i ++) {//320 lectures de chaque capteur
pour (j = 0; j < = 2; j ++) {//loop par le biais de chaque capteur
lectures [j] = analogRead(sensorPins[j]) ; obtenir la valeur
Si (lectures [j] > blackPoints[j]) {//if valeur actuelle est râpe qu’un olready sauvé
blackPoints [j] = lectures [j] ; stocker si aplicable
}
Delay(2) ;
}
Delay(10) ;
}
digitalWrite (indicatorPin, basse) ; à bord del s’éteint
/ * calculer « pas d’unité » - 1/100e de la différence entre le blanc et le noir pour chaque capteur
et transformer les points blancs en int (corrections) * /
pour (j = 0; j < = 2; j ++) {}
unitSteps [j] = (blackPoints [j] - whitePoints [j]) / 1000 ;
services correctionnels [j] = (int) (whitePoints [j] + 0,5) ;
}
Delay(2000) ; retard de 2 sec
/ * VA SUR LE CÔTÉ (À DROITE)!!! SUR LA LIGNE NOIRE DANS LES 5 SECONDES QUI SUIVENT SUPPOSÉ * /
digitalWrite (indicatorPin, HIGH) ; à bord LED s’allume
pour (j = 0; j < = 2; j ++) {//to réutiliser ce tableau, mis tout à 0
blackPoints [j] = 0 ;
}
pour (i = 0; j’ai < 320; i ++) {//320 lectures de chaque capteur
pour (j = 0; j < = 2; j ++) {//loop par le biais de chaque capteur
lectures [j] = (analogRead(sensorPins[j]) - corrections[j]) / unitSteps [j] ; obtenir la valeur pour chacun en unités finales
}
pour (j = 0; j < = 2; j ++) {//loop par le biais de trois lectures du capteur
Si (lectures [j] > blackPoints[j]) {//if actuelle de lecture est supérieur à maxima stockée
blackPoints [j] = lectures [j] ; stocker si applicable
}
ElseIf (lectures [j] + 30 < blackPoints[j]) {//if lecture diminue (stockée est supérieure à l’actuel)
betweenState [j] = true ; indiquer cette variable que le capteur a déménagé sur une période maximale de lecture (ligne)
}
Si (betweenState [0] == true & & betweenState [1] == false) {//if première lecture de la sonde a transmis son maxima et deuxième n’a pas
Si (betweenReadings [0] > lectures [0] + readings[1]) {somme stockée //if des deux lectures du capteur est plus grand que la somme des courants
betweenReadings [0] = lectures [0] + lectures [1] ; magasin le cas échéant
}
}
ElseIf (betweenState [1] == true & & betweenState [2] == false) {//if deuxième lecture de la sonde a transmis son maxima et troisième n’a pas
Si (betweenReadings [1] > lectures [1] + readings[2]) {somme stockée //if des deux lectures du capteur est plus grand que la somme des courants
betweenReadings [1] = lectures [1] + lectures [2] ; magasin le cas échéant
}
}
Delay(2) ;
}
Delay(10) ;
}
digitalWrite (indicatorPin, basse) ; à bord del s’éteint
} / / / installation
void loop() {}
/ * imprimer les résultats dans serial monitor * /
Serial.Print ("const int corrections [3] = {") ;
Serial.Print(corrections[0]) ;
Serial.Print(",") ;
Serial.Print(corrections[1]) ;
Serial.Print(",") ;
Serial.Print(corrections[2]) ;
Serial.println("};") ;
Serial.Print ("const char unitSteps [3] = {") ;
Serial.Print(unitSteps[0]) ;
Serial.Print(",") ;
Serial.Print(unitSteps[1]) ;
Serial.Print(",") ;
Serial.Print(unitSteps[2]) ;
Serial.println("};") ;
Serial.Print ("const char betweenReadings [2] = {") ;
Serial.Print(betweenReadings[0]) ;
Serial.Print(",") ;
Serial.Print(betweenReadings[1]) ;
Serial.println("};") ;
Serial.println("") ;
} / / / loop