Étape 3: Combiner les moteurs et les capteurs de la photocellule
DescriptionDans cette étape nous prendre les trois capteurs de photocellule et en les utilisant pour conduire les vitesses du moteur. Dans notre code, nous allons être référant les moteurs à moteur A ou B de moteur, basé sur où ils sont branchés sur le flasque arrière du moteur, et les capteurs seront Sensor 3, Sensor 4 et 5 capteur, basé sur où ils sont attachés à la lecture analogique. Capteur 3 et 4 capteurs seront les capteurs directionnels et capteur 5 sera le capteur de lumière ambiante.
Algorithme de
Pour commander les moteurs, nous obtiendrons la base de la lecture de tous les trois capteurs premiers (ceux-ci sont stockés dans photocellReading #).
Ensuite, nous prennent les différences entre le capteur 3 et 5 capteur (et stockez-la dans photocellDifference1) ainsi que la différence entre capteur 4 et 5 de capteur (et stockez-le dans photocellDifference2). Il nous dira comment beaucoup plus lumineux les capteurs directionnels sont du capteur ambiant. Puisque la lumière va être shinning sur ces capteurs, les lectures de la différence devraient nous dire la quantité de lumière est dirigé à chaque capteur.
Nous avons ensuite soustraire photocellDifference1 et photocellDifference2 les uns des autres et stockez-le dans lrValue. En prenant cette différence, nous sommes en mesure de dire combien plus de lumière de chaque capteur directionnel est détection. Si ce nombre est négatif, que signifie Sensor 4 a moins de lumière que le capteur 3 et plus de vitesse doivent être adressées à moteur B. Si le lrValue est positif que cela signifie que le capteur 3 a plus de lumière que le capteur 4 et plus de vitesse doivent être adressées à moteur A.
Code
/*
int photocellReading3 ; l’analogue de lecture à partir du diviseur de résistance analogiques
int photocellReading4 ; l’analogue de lecture à partir du diviseur de résistance analogiques
int photocellReading5 ; l’analogue de lecture à partir du diviseur de résistance analogiques
int photocellDifference1 ;
int photocellDifference2 ;
int lrValue ;
void setup(void) {}
Serial.Begin(9600) ;
pinMode (sortie 12,) ; Broche initiés moteur canal
pinMode (sortie 9) ; Broche initiés frein canal
pinMode (13, sortie) ; Goupille d’initiés moteur canal B
pinMode (sortie 8) ; Goupille d’initiés frein canal B
digitalWrite (13, faible) ; Établit l’orientation vers l’avant du canal A
digitalWrite (8, faible) ; Débloquer le frein de chaîne A
digitalWrite (12, faible) ; Établit l’orientation vers l’avant du canal B
digitalWrite (9, faible) ; Débloquer le frein pour le canal B
}
void loop(void) {}
photocellReading3 = analogRead(3) ; lumière de lecture de base
photocellReading4 = analogRead(4) ; lumière de lecture de base
photocellReading5 = analogRead(5) ; lumière de lecture de base
obtenir des différences entre les capteurs pour les moteurs et capteur de lumière ambiante
photocellDifference1 = (photocellReading3 - photocellReading5) ;
photocellDifference2 = (photocellReading4 - photocellReading5) ;
obtenir la différence entre les deux lectures
lrValue = photocellDifference2 - photocellDifference1 ;
contrôler la vitesse de chaque moteur basé sur lrValue
Si (lrValue < = -120) {}
analogWrite (11, 255) ;
analogWrite (3, 100) ;
} ElseIf (lrValue < = -90) {}
analogWrite (11, 224) ;
analogWrite (3, 100) ;
} ElseIf (lrValue < = -60) {}
analogWrite (11, 193) ;
analogWrite (3, 100) ;
} ElseIf (lrValue < = -40) {}
analogWrite (11, 162) ;
analogWrite (3, 100) ;
} ElseIf (lrValue < = -25) {}
analogWrite (11, 131) ;
analogWrite (3, 100) ;
} ElseIf (lrValue < 25) {}
analogWrite (11, 100) ;
analogWrite (3, 100) ;
} ElseIf (lrValue < 40) {}
analogWrite (11, 100) ;
analogWrite (3, 131) ;
} ElseIf (lrValue < 60) {}
analogWrite (11, 100) ;
analogWrite (3, 162) ;
} ElseIf (lrValue < 90) {}
analogWrite (11, 100) ;
analogWrite (3, 193) ;
} ElseIf (lrValue < 120) {}
analogWrite (11, 100) ;
analogWrite (3, 224) ;
} else {}
analogWrite (11, 100) ;
analogWrite (3, 255) ;
}
}
Vidéo des capteurs contrôlant les moteurs
Décomposent la vitesse
Dans le code, vous pouvez le voir nous avons une longue liste d’if instructions else contrôlant la vitesse de chaque moteur. Ce code fonctionne pour notre serpent et notre combinaison de capteur/moteur photocellule. Si vous avez modifié les matériaux pour votre serpent ou constate que ces valeurs ne fonctionnent pas pour vous, alors n’hésitez pas à modifier les valeurs jusqu'à ce que vous trouverez le régulateur de vitesse qui fonctionne pour vous. Notre serpent est censé travailler en basse lumière et à une vitesse assez rapide. Si vous souhaitez que votre serpent plus lent, par exemple, vous pouvez élargir votre gamme de lrValues dans le cas des instructions else, ainsi qu’il faudra une grande puissance lumière dirigée vers un capteur avant les moteurs atteignent la vitesse plus élevée.
Nous avons également constaté que chaque moteur nécessaires une valeur minimum de vitesse (la nôtre était 100) pour être en mesure de tirer le poids du serpent. Il ne pourrait jamais être une valeur de vitesse de 0 à un moteur. Si un moteur s’arrêter complètement, il faudrait alors trop de travail pour obtenir le moteur se déplaçant à nouveau.
Nous avons trouvé que c’était plus facile de planifier les contrôles de vitesse dans un tableau avant d’écrire des instructions else if. Il s’agissait de notre table :
Moteur moteur A B
lrValue Analog 3 analogique 11
-∞ →-120 225 100
-119 →-90 224 100
-89 →-60 193 100
-59 →-40 162 100
-39 →-25 131 100
-24 → 24 100 100
25 → 39 100 131
→ 40 59 100 162
→ 60 89 100 193
90 → 119 100 224
∞ → 120 100 225