Partage
  • Partager sur Facebook
  • Partager sur Twitter

probleme de lecture de courant sur arduino

Sujet résolu
    20 décembre 2024 à 17:45:24

    bonsoir, je sollicite votre aide pour faire fonctioner un arduino avec un ACS712. Lorsque je run un bout de prg avec L'ACS712 ca fonctionne lorsque que je le met en fonction "calcul_ courant, il me sors tjs 0.00A je me tors le peu de méninge qui me reste mais sans résultat, je jouns le code complet, il s'agit d'automatiser une porte de garage, ouverture fermeture en controlant le courant qui passe dans le moteur 24v, celà fonctionne mais le courant reste désespérément à 0

    merci pour votre aide

     #include <ACS712.h>
    
    /* Connection de la carte BTS7960: 
     BTS7960 Pin 1 (RPWM) vers Arduino pin 5(RPWM)vert 4 de H8
     BTS7960 Pin 2 (LPWM) vers Arduino pin 6(LPWM)blanc 3 de H8
     
     BTS7960 Pin 3 (R_EN) vers Arduino pin 5v (R_EN)rouge
     BTS7960 Pin 4 (L_EN) vers Arduino pin 5v (L_EN)rouge
     BTS7960 Pin 5 (R_IS)NC
     BTS7960 Pin 6 (L_IS)NC
     BTS7960 Pin 7 (VCC) vers Arduino pin 5V rouge
     BTS7960 Pin 8 (GND) vers Arduino pin GND noir
     
    */
    
    
    
    float Val_Acs=0,Echantillon=0,Moy_Val_Acs=0,Acs_712=0;
    unsigned long timer;
    const float sensibilite=100;//capteur 5A/185mv 20A/100mv 30A/66mv
    int x;
    float adc;
    int ValVitesse;
    int lumiere=7;//pin commande auto de l'eclairage à l'ouverture et fermeture
    int RPWM= 5;//pin commande moteur ouverture 
    int LPWM= 6;//pin commande moteur fermeture
     
    int Bp_Ouv=2;//pin commande manuelle ouv bouton poussoir ouverture
    int Bp_Fer=4;//pin commande manuelle fer bouton poussoir fermeture
    int Bp_lumiere_auto=3;//pin commande lumiere auto
    int Bp_lumiere_manu=10;//pin commande manuelle lumiere bouton poussoir à la fermeture
    
    int Cde_lum_auto;
    int Cde_lum_manu;
    int Etat_lum=0;
    
    int FDC_ouv=8;//pin fin de course ouverture
    int FDC_fer=9;//pin fin de course fermeture
    int Cde_Ouv; //bouton commande ouverture
    int Cde_Fer;// bouton commande fermeture
    int Cde_FDC_ouv;
    int Cde_FDC_fer;
    
    float Courant_sup=10.0;
    float Courant_inf=0.25;
    
    
    //******************************************************void setup***************************************
    void setup()
    {
    // initialisation de la communication série
    
     Serial.begin(9600);
     pinMode(A0, INPUT);
     pinMode(lumiere, OUTPUT);
     pinMode(Bp_Ouv, INPUT_PULLUP);
     pinMode(Bp_Fer, INPUT_PULLUP);
     pinMode(Bp_lumiere_manu, INPUT_PULLUP);
     pinMode(Bp_lumiere_auto,INPUT_PULLUP);
     pinMode (FDC_ouv, INPUT_PULLUP);
     pinMode (FDC_fer, INPUT_PULLUP);
     pinMode(RPWM, OUTPUT);
     pinMode(LPWM, OUTPUT);
    //init du moteur à l'arret 
     analogWrite(RPWM,0); 
     analogWrite(LPWM,0);
     digitalWrite(lumiere,0);
    }
    //***********************************************************void loop************************************************************  
    void loop()
    {
      Cde_Ouv= digitalRead (Bp_Ouv);
      Cde_Fer= digitalRead (Bp_Fer);  
      
      while ((Cde_Ouv ==1)and (Cde_Fer==1)){
        Cde_Ouv= digitalRead (Bp_Ouv);
        Cde_Fer= digitalRead (Bp_Fer);
        Serial.print("Attente ouv : ");
        Serial.println(Cde_Ouv);
        Serial.print("Attente fer : ");
        Serial.println(Cde_Fer);
        Cde_lum_auto= digitalRead (Bp_lumiere_auto);
        Cde_lum_manu= digitalRead (Bp_lumiere_manu);
        Cde_FDC_ouv= digitalRead (FDC_ouv);
        Cde_FDC_fer= digitalRead (FDC_fer);
        if (Cde_lum_manu==0){
         Etat_lum=1;
         digitalWrite(lumiere,Etat_lum);}
         else if (Cde_lum_manu==1 && Cde_lum_auto==1 ){
         Etat_lum=0;}
        digitalWrite(lumiere,Etat_lum);
        
      }
       //***************************************************************************************************************************  
      Cde_Ouv= digitalRead (Bp_Ouv);
      if (Cde_Ouv ==0){
     Serial.print("Cde_Ouv : ");
     Serial.println (Cde_Ouv);
     Cde_ouverture_porte();
    }
      //***************************************************************************************************************************
    Cde_Fer= digitalRead (Bp_Fer);
    if (Cde_Fer==0){
     Serial.print("Cde_Fer : ");
     Serial.println (Cde_Fer);
    Cde_fermeture_porte();
    }
    } 
    //**************************************************commande ouverture grande vitesse **********************
    void Cde_ouverture_porte(){
    Cde_FDC_ouv= digitalRead (FDC_ouv);
      if (Cde_FDC_ouv==0){
      analogWrite(RPWM,0);
      return;
      }
     Cde_lum_auto= digitalRead (Bp_lumiere_auto);
      if (Cde_lum_auto==0){
      Etat_lum=1;
      digitalWrite(lumiere,Etat_lum); 
      }
     ValVitesse=255;
     for (int i = 0; i <= 50; i++){
      analogWrite(RPWM,ValVitesse);
      Serial.println("ouverture de porte");
      delay (3000);
      Calcul_Courant();
      Serial.print ("grande vitesse  ");
      Serial.println( ValVitesse);
      
      }
     //*******************************************commande ouverture petite vitesse**********************************************
      ValVitesse=100;
      analogWrite(RPWM,ValVitesse);
     Cde_FDC_ouv= digitalRead (FDC_ouv);
     while (Cde_FDC_ouv==1){
      analogWrite(RPWM,ValVitesse);
     // Calcul_Courant();
      delay(10);
      Serial.print( "petite vitesse : ");
      Serial.println( ValVitesse);
      Cde_FDC_ouv= digitalRead (FDC_ouv);
      Serial.println(Cde_FDC_ouv);
      }
     Serial.println("la porte est ouverte ");
     analogWrite(RPWM,0);
     Cde_lum_auto= digitalRead (Bp_lumiere_auto);
    // Cde_FDC_ouv= digitalRead (FDC_ouv);
     delay (1000);
      if(Cde_lum_auto==0){
        Etat_lum=1;
        digitalWrite(lumiere,Etat_lum);}
     
     }
    
    
    //**************************************************commande fermeture grandevitesse**********************²
    void Cde_fermeture_porte(){
    
    
    Cde_lum_auto= digitalRead (Bp_lumiere_auto);
     if(Cde_lum_auto==0){
      Etat_lum=0;
      digitalWrite(lumiere,Etat_lum);}
      
    Cde_FDC_fer= digitalRead (FDC_fer);
      if (Cde_FDC_fer==0){
      analogWrite(LPWM,0);
      return;
      }
      delay(3000);
      ValVitesse=255;
      Serial.println("Fermeture de porte"); 
      for (int i = 0; i <= 50; i++){
      analogWrite(LPWM,ValVitesse);
      Calcul_Courant();
      delay (100);
      }   
     //*******************************************commande fermeture petite vitesse**********************************************
      ValVitesse=100;
      analogWrite(LPWM,ValVitesse);
     Cde_FDC_fer= digitalRead (FDC_fer);
      while (Cde_FDC_fer==1){
      analogWrite(LPWM,ValVitesse);
      Calcul_Courant();
      delay(10);
      Serial.print( "petite vitesse : ");
      Serial.println( ValVitesse);
      Cde_FDC_fer= digitalRead (FDC_fer);
      Serial.println(Cde_FDC_fer);
      }
     delay(200);
     Serial.println("la porte est fermee ");
     analogWrite(LPWM,0);
     
     }
    //************************************************************calcul du courant**********************************************
    
    void Calcul_Courant(){
    
       int compteur=80;
      for ( x = 0; x <= compteur; x++){ //Get 100 Echantillon
       adc = analogRead(A0);     //Read current sensor values
       delay (5); // let ADC settle before next sample 3ms   
       Echantillon = Echantillon + adc;  //Add Echantillon together
    }
      adc=Echantillon/compteur;
      Acs_712 = ((2.5 - (adc * (5.0 / 1023.0))) /sensibilite);
      Acs_712=abs(Acs_712);
      Echantillon=0,adc=0;
      Serial.print( "courant ");
      Serial.println( Acs_712);
      
      if (Acs_712 < Courant_inf){
        Acs_712=0.0;
        }
          while ((Acs_712 >Courant_sup)) {
          ValVitesse=0;
          analogWrite(RPWM,ValVitesse);
          analogWrite(LPWM,ValVitesse);
          Serial.print( "depassement_courant arret moteur ");
          Serial.println( Acs_712);
         delay (3000);
          return;
           }
         }
    
    
    
      



    • Partager sur Facebook
    • Partager sur Twitter
      21 décembre 2024 à 18:33:59

      bonsoir, j'ai trouvé mon erreur ...

      Désolé d'avoir posté

      • Partager sur Facebook
      • Partager sur Twitter
        22 décembre 2024 à 10:59:40

        Bonjour Claudio,

        Content que tu aies trouvé mais peux-tu nous dire où était l'erreur?

        • Partager sur Facebook
        • Partager sur Twitter
        Le 25 juillet 2016, j'ai essayé une Ford Mustang.
          20 janvier 2025 à 10:33:24

          oui, avec du retard, c'était la déclaration de la variable adc!
          • Partager sur Facebook
          • Partager sur Twitter
            20 janvier 2025 à 12:04:43

            Merci de l'info.

            Jamais trop tard pour bien faire, ça peut servir à d'autres.

            • Partager sur Facebook
            • Partager sur Twitter
            Le 25 juillet 2016, j'ai essayé une Ford Mustang.

            probleme de lecture de courant sur arduino

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            • Editeur
            • Markdown