Bonsoir,
voilà je me suis lancé dans la réalisation d'un tracker solaire avec Arduino et pour la circonstance j'utilise deux moteurs pas à pas de niveau de tension tout à fait différent (5V ? et 12 V (TEAC 14769070)). Je ne connais pas non plus le nombre de pas pour une révolution de ces derniers. Et pour cela j'ai utilisé le code ci-dessous pour pouvoir faire mes tests :
int motorPin1 = 8;
int motorPin2 = 9;
int motorPin3 = 10;
int motorPin4 = 11;
int delayTime = 500;
void setup () {
pinMode (motorPin1, OUTPUT);
pinMode (motorPin2, OUTPUT);
pinMode (motorPin3, OUTPUT);
pinMode (motorPin4, OUTPUT);
}
void loop ()
{
//backward.
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, HIGH);
delay(500);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, HIGH);
digitalWrite(11, LOW);
delay(500);
digitalWrite(8, LOW);
digitalWrite(9, HIGH);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
delay(500);
digitalWrite(8, HIGH);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
delay(500);
}
Je trouve que ce code est avantageux pour moi dans la mesure où je ne connais pas le nombre de pas du moteur.
Alors comme dit au début, j'aimerais avec ces deux moteurs monté un système de tracker solaire. J'ai donc écrit le code ci-dessous juste pour un seul moteur en attendant de faire le reste après :
int ldr1 = A0;
int ldr2 = A1;
int ldr3 = A2;
int ldr4 = A3;
int left = 0;
int right = 0;
int top = 0;
int bottom = 0;
void setup ()
{
pinMode(ldr1, INPUT);
pinMode(ldr2, INPUT);
pinMode(ldr3, INPUT);
pinMode(ldr4, INPUT);
}
void loop ()
{
left = analogRead(ldr1);
Serial.println(left);
right = analogRead(ldr2);
Serial.println(right);
top = analogRead(ldr3);
Serial.println(top);
bottom = analogRead(ldr4);
Serial.println(ldr4);
// FORWARD
while (left > right)
{
digitalWrite(4, HIGH);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
left = analogRead(ldr1);
right = analogRead(ldr2);
if (left > right){
digitalWrite(4, LOW);
digitalWrite(5, HIGH);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
}
else {
if (left == right)
{
stopMoteur1 ();
}
}
left = analogRead(ldr1);
right = analogRead(ldr2);
if (left > right){
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, HIGH);
digitalWrite(7, LOW);
}
else {
if (left == right)
{
stopMoteur1 ();
}
}
left = analogRead(ldr1);
right = analogRead(ldr2);
if (left > right){
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, HIGH);
}
else {
if (left == right)
{
stopMoteur1 ();
}
}
}
// BACKWARD
while (left < right)
{
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, HIGH);
left = analogRead(ldr1);
right = analogRead(ldr2);
if (left < right){
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, HIGH);
digitalWrite(7, LOW);
}
else {
if (left == right)
{
stopMoteur1 ();
}
}
left = analogRead(ldr1);
right = analogRead(ldr2);
if (left < right){
digitalWrite(4, LOW);
digitalWrite(5, HIGH);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
}
else {
if (left == right)
{
stopMoteur1 ();
}
}
left = analogRead(ldr1);
right = analogRead(ldr2);
if (left < right){
digitalWrite(4, HIGH);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
}
else {
if (left == right);
{
stopMoteur1 ();
}
}
}
while (left == right)
{
stopMoteur1 ();
}
}
// Stop function for motor 1
void stopMoteur1 ()
{
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
}
Ma logique est la suivante :
- Au départ qu'on lis la valeur des quatre photorésistances
- Ensuite on stock la valeur de chaque photorésistance dans des variables.
- On a ensuite trois cas :
- Tant que left > right,
- on avance d'un pas,
- on lis a nouveau les valeurs
- si c'est encore supérieur alors on avance d'un pas et on lit à nouveau les valeurs
- (cela va se faire tout en alimentant les bobines une à une) ensuite on repart testé la condition "tant que"
- Tant que left < right
- là on recule d'un pas à chaque test (!=)
- tant que left == right
- stopMoteur1
Comme vous l'aurez remarquer je veux juste qu'à chaque pas, on lis les valeurs, on test la condition et on fait une action correspondante.
J'aimerais donc que vous me dites si j'ai bon dans le code que j'ai écrit où s'il y a des inconvénients assez visibles. Restez dans la logique du code précédent !!!
Merci !