Indicateur tension batterie lithium Arduino
Répondre à la discussion
Affichage des résultats 1 à 11 sur 11

Indicateur tension batterie lithium Arduino



  1. #1
    JS7777

    Indicateur tension batterie lithium Arduino


    ------

    Bonjour à tous,


    Les Indicateurs de tension batterie lithium sont un peu cher pour ce qui sont donc j'aimerais en fabriquer un, d'abord pour les tests avec un arduino Uno, après avec un attiny85 ou attiny2313.

    J'aimerais que quand on appuie sur un bouton une des 3 leds s'allume pour 5 secondes, mais les leds doit s'allumer en fonction de la tension de la batterie c'est à dire :

    led 1 : >4.05V

    led 2 : <4.04V

    led 3 : <3.70V

    J'ai réussi le code pour allumer une led pour 5sec avec un bouton et pour mesurer la tension d'une batterie.


    allumer une led pour 5sec :

    Code:
    void setup()
    {
     pinMode(10, INPUT); // button
     pinMode(11, OUTPUT); // LED
     digitalWrite(11, LOW);
    }
    
    int pinState = LOW;
    const int x = 5000; // 500ms delay
    
    void loop()
    {
     int newState = digitalRead(5);
     if (pinState != newState) // button state differs from last recorded state?
     {
       pinState = newState;
       if (pinState == LOW) // button newly pressed?
         delay(x);
       digitalWrite(11, pinState); // set LED HIGH if button LOW and vice versa
     }
    }

    Mesurer la tension d'une batterie :

    Code:
    int analogInput = 0;
    float vout = 0.0;
    float vin = 0.0;
    float R1 = 100000.0; // resistance of R1 (100K) -see text!
    float R2 = 10000.0; // resistance of R2 (10K) - see text!
    int value = 0;
    
    void setup(){
       pinMode(analogInput, INPUT);
       Serial.begin(9600);
       Serial.println("INPUT V= ");
       digitalWrite(11, LOW);
       digitalWrite(10, LOW);
       digitalWrite(9, LOW);
    }
    
    void loop(){
       // read the value at analog input
       value = analogRead(analogInput);
       vout = (value * 5.0) / 1024.0; // see text
       vin = vout / (R2/(R1+R2)); 
       if (vin<0.09) {
       vin=0.0;//statement to quash undesired reading !
    } 
    
    
    
    Serial.println(vin);
    
    delay(1000);
    
    if (vin>4.05) 
    {
    digitalWrite(11, HIGH);
    digitalWrite(10, LOW);
    digitalWrite(9, LOW);
    }
    
     if (vin<4.04)
    {
      digitalWrite(11, LOW);
      digitalWrite(10, HIGH);
      digitalWrite(9, LOW);
    }
    
     if (vin<3.70)
    {
      digitalWrite(11, LOW);
      digitalWrite(10, LOW);
      digitalWrite(9, HIGH);
    }
    
    }
    Il faut fusionner ces deux codes pour obtenir ce que je veut , j'ai essayé, j'ai passé des heures mais j'arrive pas (Par exemple : Les leds restent allumé à l'infini et quand j'appuie sur le bouton la tension n'est pas mesuré si une pile est relié.)


    Merci d'avance

    -----
    Dernière modification par JS7777 ; 11/07/2015 à 15h32.
    Ce que les entreprises jettent : Du matériel neuf

  2. #2
    invite1d577638

    Re : Indicateur tension batterie lithium Arduino

    ...et si tu nous le donnais, ce fameux code qui ne fonctionne pas ,

  3. #3
    JS7777

    Re : Indicateur tension batterie lithium Arduino

    Voilà le code qui ne fonctionnent pas :

    Code:
    int analogInput = 0;
    float vout = 0.0;
    float vin = 0.0;
    float R1 = 100000.0; // resistance of R1 (100K) -see text!
    float R2 = 10000.0; // resistance of R2 (10K) - see text!
    int value = 0;
    
    
    
    void indication (void)
    {
    
    Serial.println(vin);
    
    delay(1000);
    
    if (vin>4.05) 
    {
    digitalWrite(11, HIGH);
    digitalWrite(10, LOW);
    digitalWrite(9, LOW);
    
    }
    
     if (vin<4.04)
    {
      digitalWrite(11, LOW);
      digitalWrite(10, HIGH);
      digitalWrite(9, LOW);
     
    }
    
     if (vin<3.70)
    {
      digitalWrite(11, LOW);
      digitalWrite(10, LOW);
      digitalWrite(9, HIGH);
    
    }
     
    
     
     }
    
    void setup()
    {
     pinMode(5, INPUT); // button
     pinMode(11, OUTPUT); // LED
     digitalWrite(11, LOW);
     pinMode(analogInput, INPUT);
       Serial.begin(9600);
       Serial.println("INPUT V= ");
       digitalWrite(11, LOW);
       digitalWrite(10, LOW);
       digitalWrite(9, LOW);
    }
    
    int pinState = LOW;
    const int x = 5000; // 500ms delay
    
    
    
    void loop()
    {
     
     int newState = digitalRead(5);
     
     value = analogRead(analogInput);
       vout = (value * 5.0) / 1024.0; // see text
       vin = vout / (R2/(R1+R2)); 
       if (vin<0.09) {
       vin=0.0;//statement to quash undesired reading !
       
     if (pinState != newState) // button state differs from last recorded state?
     {
       pinState = newState;
       if (pinState == LOW) // button newly pressed?
    
         delay(x);
       //digitalWrite(11, pinState); // set LED HIGH if button LOW and vice versa
     indication();
     
     
    }
    
     }
     
    }
    Dernière modification par JS7777 ; 11/07/2015 à 19h44.
    Ce que les entreprises jettent : Du matériel neuf

  4. #4
    invite1d577638

    Re : Indicateur tension batterie lithium Arduino

    Vire la sub indication() qui ne sert qu'à surcharger le code, et place les trois tests sur vin directement à l'endroit qui correspond à l'appui sur le bouton.

    Il marche correctement ton code du bouton ? ça ressemble plus à une bascule qu'autre chose... (cf la ligne if (pinState != newState) )

    Le coup du test si vin < 0.09 est aussi un poil étrange.

    Moi je ferais :
    Teste l'appui sur le bouton. Si appui, alors récupère la valeur de la tension, effectue les calculs de conversion, et affiche la led concernée ensuite. Fin Si.

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

    Re : Indicateur tension batterie lithium Arduino

    Vire la sub indication() qui ne sert qu'à surcharger le code, et place les trois tests sur vin directement à l'endroit qui correspond à l'appui sur le bouton.
    J'avais déjà fait et ça change rien

    Il marche correctement ton code du bouton ?
    Oui, on appuie sur le bouton et cela allume une led par exemple pour 5sec

    Moi je ferais :
    Teste l'appui sur le bouton. Si appui, alors récupère la valeur de la tension, effectue les calculs de conversion, et affiche la led concernée ensuite. Fin Si.
    Moi aussi mais j'arrive pas.
    Ce que les entreprises jettent : Du matériel neuf

  7. #6
    JS7777

    Re : Indicateur tension batterie lithium Arduino

    J'ai réussi avec ce code !!


    Code:
    int switchPin =5 ;
    int analogInput = 0;
    float vout = 0.0;
    float vin = 0.0;
    float R1 = 100000.0; // resistance of R1 (100K) -see text!
    float R2 = 10000.0; // resistance of R2 (10K) - see text!
    int value = 0;
    
    void setup()
    {
      pinMode(switchPin, INPUT);
      pinMode(analogInput, INPUT);
      pinMode(9, OUTPUT);
      pinMode(10, OUTPUT);   
      pinMode(11, OUTPUT);   
       Serial.begin(9600);
       Serial.println("INPUT V= ");
       
       digitalWrite(11, LOW); //annimation au démarrage
       digitalWrite(10, LOW);
       digitalWrite(9, LOW);
       delay(500);
       digitalWrite(11, HIGH);
       digitalWrite(10, HIGH);
       digitalWrite(9, HIGH);
       delay(500);
       digitalWrite(11, LOW);
       digitalWrite(10, LOW);
       digitalWrite(9, LOW);
       delay(500);
       digitalWrite(11, HIGH);
       digitalWrite(10, HIGH);
       digitalWrite(9, HIGH);
       delay(500);
       digitalWrite(11, LOW);
       digitalWrite(10, LOW);
       digitalWrite(9, LOW);
       
    }
    
    void loop()
    {
      if (digitalRead(switchPin) == HIGH)
      {
        //digitalWrite(ledPin, HIGH);
        value = analogRead(analogInput);
       vout = (value * 5.0) / 1024.0; // see text
       vin = vout / (R2/(R1+R2)); 
       //if (vin<0.09) {
       //vin=0.0;//statement to quash undesired reading !
       
       Serial.println(vin);
    
    delay(500);
    
    if (vin>4.05) 
    {
    digitalWrite(11, HIGH);
    digitalWrite(10, LOW);
    digitalWrite(9, LOW);
    }
    
     if (vin<4.04)
    {
      digitalWrite(11, LOW);
      digitalWrite(10, HIGH);
      digitalWrite(9, LOW);
    }
    
     if (vin<3.70)
    {
      digitalWrite(11, LOW);
      digitalWrite(10, LOW);
      digitalWrite(9, HIGH);
      
    }
      delay(5000);
      digitalWrite(11, LOW);
      digitalWrite(10, LOW);
      digitalWrite(9, LOW);
      }
     
    }
    Si il y a quelque chose qui peut être optimisé dites-le moi.

    Merci Yoruk !
    Dernière modification par Antoane ; 11/07/2015 à 22h01. Motif: Remplacement balises quote par code
    Ce que les entreprises jettent : Du matériel neuf

  8. #7
    invite7a12b6cc

    Re : Indicateur tension batterie lithium Arduino

    par exemple essaie avec ça
    digitalWrite(11, HIGH);
    au lieu de

    digitalWrite(11, HIGH);
    digitalWrite(10, LOW);
    digitalWrite(9, LOW);
    comme tu remet tes leds a zéro la fin pas besoin de les mettre a zéro au début de la boucle puisqu'elles sont déjà éteintes (tu gagneras 6 lignes )

  9. #8
    JS7777

    Re : Indicateur tension batterie lithium Arduino

    Oui c'est vrai, merci !
    Dernière modification par JS7777 ; 12/07/2015 à 00h33.
    Ce que les entreprises jettent : Du matériel neuf

  10. #9
    invite1d577638

    Re : Indicateur tension batterie lithium Arduino

    A part ça, pour alléger plus, tu peux si ça t'amuse créer une sub qui permet d’appeler tes trois leds en une fois, genre :

    Leds(high, low, low) et qui bascule sur un truc du genre :
    Code:
    void leds(led1 as bool, led2 as bool, led3 as bool)
    {
    
      digitalWrite(11, led1);
      digitalWrite(10, led2);
      digitalWrite(9, led3);
    
    }
    Qui est utilisable pour ton animation du début, tes tests sur la tension...
    (non testé, rédigé de tête. A mon avis tel quel ça ne marche pas)

  11. #10
    JS7777

    Re : Indicateur tension batterie lithium Arduino

    Un instant j'ai essayé de programmer ce code sur un attiny85 :

    Quand j'appuie sur le bouton une des leds restent bien allumé pour 5sec(ça doit être la première mais c'est la dernière qui s'allume) mais quand on relie une batterie les leds ne change pas et rien dans le moniteur série(normalement quand j'appuie sur le bouton je devrais avoir la tension qui s'affiche)

    Au démarrage dans le moniteur il y a : ÿÿÿ (normalement c'est ça qui s'affiche au démarrage : INPUT V=)

    Il y a écrit ça sur un site :

    ...and turn it into a 10-bit representation of that voltage.

    https://learn.sparkfun.com/tutorials...ny85-use-hints

    Merci d'avance
    Dernière modification par JS7777 ; 12/07/2015 à 18h02.
    Ce que les entreprises jettent : Du matériel neuf

  12. #11
    JS7777

    Re : Indicateur tension batterie lithium Arduino

    Problème réglée :

    You may notice, on the listing of special pin functions there are no UART RX’s or TX’s. That’s because the ATtiny85 doesn’t have a built in hardware UART. If you try to compile any Arduino code with Serial.begin(9600)’s or Serial.print()’s you’ll get an error.

    Attiny85 ne peut pas envoyer recevoir des infos à/de l'arduino.

    Il fallait juste enlever tout ce qui est "Serial.begin et "Serial.print", de toute façon cela ne sert plus à rien car ça sera sans arduino Uno.

    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    par exemple essaie avec ça
    digitalWrite(11, HIGH);
    au lieu de

    digitalWrite(11, HIGH);
    digitalWrite(10, LOW);
    digitalWrite(9, LOW);
    comme tu remet tes leds a zéro la fin pas besoin de les mettre a zéro au début de la boucle puisqu'elles sont déjà éteintes (tu gagneras 6 lignes )

    J'avais comme même un doute : je peut pas enlever ces lignes (sauf les deux premières) car si la tension est moins de 3.70V la led1 et led2 s'allume, pourquoi ? Car juste en dessus il y a "if (vin<4.04)" donc la led 2 s'allume aussi.

    Voilà, le circuit marche parfaitement ! Un indicateur de batterie lithium avec un Attiny85 est possible. (Je pourrais même mettre un buzzer mais il n'y a pas assez de broche, je laisse tomber Attiny85 sachant qu'il n'y a pas assez de place : J'ai testé)

    Merci !
    Ce que les entreprises jettent : Du matériel neuf

Discussions similaires

  1. batterie lithium
    Par invite0bf1d155 dans le forum Électronique
    Réponses: 11
    Dernier message: 19/03/2015, 22h50
  2. Batterie lithium
    Par invitea756be5a dans le forum Chimie
    Réponses: 17
    Dernier message: 14/02/2015, 20h54
  3. Recharger batterie Lithium via tension USB
    Par invitee572534e dans le forum Électronique
    Réponses: 5
    Dernier message: 21/02/2014, 18h38
  4. Batterie lithium-ion
    Par invite9ba27926 dans le forum Matériel - Hardware
    Réponses: 14
    Dernier message: 04/08/2011, 19h40
  5. Indicateur batterie
    Par invite94a9587d dans le forum Électronique
    Réponses: 7
    Dernier message: 22/01/2008, 08h33
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...