Problème programme suiveur solaire
Répondre à la discussion
Affichage des résultats 1 à 5 sur 5

Problème programme suiveur solaire



  1. #1
    G4NYM3D3

    Problème programme suiveur solaire


    ------

    Bonjour,
    Je fais un projet où j'ai besoin d'un suivi solaire, que je manœuvre avec deux servomoteurs programmés via Arduino (je me suis inspiré de ce projet : https://ouiaremakers.com/posts/tutor...racker-solaire). J'utilise également 4 ldr (résistance qui varie avec la lumière pour les novices ). Jusque là tout va bien. Le hic c'est que quand je le teste IRL (malheureusement pour l'instant sans le support final), il n'y a qu'un seul servo qui réagit (alors que je les commande pareillement) et il vibre essentiellement (or je souhaite avoir une stabilité optimale). On dirait qu'il ne bouge pas en fonction de la lumière que je fais varier.
    Comment est-ce que je pourrais l'améliorer afin qu'il fonctionne ?

    Code:
    #include <Servo.h>
    
    Servo SERVO1; // servo moteur horizontal
    Servo SERVO2; //servo moteur vertical
    
    int Servo1=90;  // Variable de position du servo1, de 0 à 179°
    int Servo2=90;  // Variable de position du servo2, de 0 à 179°
    
    int  ldr1=0;
    int  ldr2=0;
    int  ldr3=0;
    int  ldr4=0;
    
    int ecart = 0000011110; // écart permis entre les photoresistances sans qu'il y ai d'ajustement des servo (ne pas hesiter a jouer avec cette valeur selon la source lumineuse)
    
    // Photorésistances sur A0, A1, A2 et A3
    #define LDR1 A0 //haut-droite
    #define LDR2 A1 //bas-droite
    #define LDR3 A2 //bas-gauche
    #define LDR4 A3 //haut-gauche 
    bool mouvement = false; //condition pour mouvement des servo, cela permet d'avoir un mouvement continu
    //tant que nous ne somme pas a l'equilibre +/- ecart et d'avoir une tempo lorsque nous avons l'équilibre
    //(les servos cherchent moins souvent)
    
    void setup()
    {
      Serial.begin(9600);  // Moniteur série
      SERVO1.attach(11);   // Servo1 sur la broche 11
      SERVO2.attach(8);    // Servo2 sur la broche 8
      
      // Servos en position initiale
      SERVO1.write(Servo1);
      delay (1000);
      SERVO2.write(Servo2);
      delay (1000);
    }
    
    
    void loop()
    {
      mouvement=false;
    
      // On lit les photoresistances
      ldr1 = analogRead(LDR1);
      ldr2 = analogRead(LDR2);
      ldr3 = analogRead(LDR3);
      ldr4 = analogRead(LDR4);  
    
    //N.B.: plus une ldr est exposée à la lumière, plus sa résistance diminue
    if ((ldr1<ldr2+ecart) && (ldr1<ldr4+ecart)) //il y a plus de soleil sur la ldr1 que sur la ldr2 et ldr4
        {
          if (Servo1<179)
          {
            Servo1++;
            SERVO1.write(Servo1);
            mouvement=true;
          }
          if (Servo2<179)
          {
            Servo2++;
            SERVO2.write(Servo2);
            mouvement=true;
          }
        }
      if ((ldr2<ldr1+ecart) && (ldr2<ldr3+ecart)) //il y a plus de soleil sur la ldr2 que sur la ldr1 et ldr3
        {
          if (Servo1<179)
          {
            Servo1++;
            SERVO1.write(Servo1);
            mouvement=true;
          }
          if (Servo2>0)
          {
            Servo2--;
            SERVO2.write(Servo2);
            mouvement=true;
          }
        }  
      if ((ldr3<ldr2+ecart) && (ldr3<ldr4+ecart)) //il y a plus de soleil sur la ldr3 que sur la ldr2 et ldr4
        {
          if (Servo1>0)
          {
            Servo1--;
            SERVO1.write(Servo1);
            mouvement=true;
          }
          if (Servo2>0)
          {
            Servo2--;
            SERVO2.write(Servo2);
            mouvement=true;
          }
        }
      if ((ldr4<ldr1+ecart) && (ldr4<ldr3+ecart)) //il y a plus de soleil sur la ldr4 que sur la ldr1 et ldr3
        {
          if (Servo1>0)
          {
            Servo1--;
            SERVO1.write(Servo1);
            mouvement=true;
          }
          if (Servo2<179)
          {
            Servo2++;
            SERVO2.write(Servo2);
            mouvement=true;
          }
        }
      if (mouvement == false)
      {
        delay(1000); //si on suit le soleil on peut mettre un long delay, sinon pour plus de reactivité, un faible delay
      }
    }
    Le circuit :
    Nom : circuit.PNG
Affichages : 522
Taille : 89,0 Ko

    Merci beaucoup du temps que vous m'avez déja accordé et peut être au temps que vous m'accorderez !

    -----

  2. #2
    goaoute

    Re : Problème programme suiveur solaire

    A-tu mis des cloisons opaques entres les LDR ? (longueurs des cloisons à tester)
    Note que les systèmes "solaires" ne fonctionnent qu'en présence du plein soleil

  3. #3
    G4NYM3D3

    Re : Problème programme suiveur solaire

    Oui bien sûr. J'ai fais un support (imprimé en 3D) avec des caches de 3cm de haut il me semble et les ldr sont relativement proches donc cela fonctionne plutôt bien . Aussi je suis d'accord sur le fait que ça ne marche pas avec des nuages ou autre mais pour l'instant je suis en phase expérimentale donc ça ne résout pas trop mon problème... ^^'

  4. #4
    goaoute

    Re : Problème programme suiveur solaire

    Sinon, tu a là un forum de spécialistes en Arduino: https://forum.arduino.cc/index.php?board=33.0

  5. A voir en vidéo sur Futura
  6. #5
    G4NYM3D3

    Re : Problème programme suiveur solaire

    Super merci ^^

Discussions similaires

  1. Suiveur solaire
    Par houss-123 dans le forum Physique
    Réponses: 2
    Dernier message: 11/10/2015, 18h53
  2. programme de robot suiveur de ligne (PIC asm)
    Par inviteb298d239 dans le forum Électronique
    Réponses: 12
    Dernier message: 01/05/2012, 17h35
  3. suiveur solaire
    Par narakphysics dans le forum Archives
    Réponses: 0
    Dernier message: 18/04/2012, 21h46
  4. suiveur solaire
    Par inviteb17dad1d dans le forum Électronique
    Réponses: 9
    Dernier message: 23/02/2011, 19h13
  5. Suiveur solaire
    Par inviteed63aef3 dans le forum Électronique
    Réponses: 7
    Dernier message: 15/02/2007, 21h34