IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

Tension d'alimentation Vin


Sujet :

Arduino

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2020
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Décembre 2020
    Messages : 56
    Par défaut Tension d'alimentation Vin
    Bonjour,

    Pour alimenter des pompes d'arrosage j'utilise un minuteur mm/ss programmable via un clavier. Lorsque le minuteur arrive à 0 un mosfet est rendu non passant et coupe l'autoalimentation de l'arduino et par le fait de la pompe. Quand la tension de la batterie li-ion (12,6V) est en dessous de 10,5V il y a une alerte sur l'afficheur et au bout de 2 sec. l'arduino s’éteint.

    Ça fonctionne sauf que si je paramètre dans le if <10,5V en début de loop alors que la tension est encore à 11,8V c'est vu comme une tension faible.
    Je ne vois pas où est le problème ou alors j'ai loupé quelque chose..

    Si vous avez une idée je suis preneur

    Merci pour vos avis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
     
     
    #include <Arduino.h>
    #include <U8g2lib.h>
    #include <U8x8lib.h>
     
    #define I2C_ADDRESS 0x3C
    U8X8_SH1106_128X64_NONAME_HW_I2C u8x8(/* reset=*/ U8X8_PIN_NONE);
    U8G2_SH1106_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
     
    #define ENTREE_ANALOGIQUE 6
    int tensionLue = 0;
    int valeurLue = 0;
     
    #include <Keypad.h>
    const byte ROWS = 4;
    const byte COLS = 3;
    char keys[ROWS][COLS] = {
      {'1', '2', '3'},
      {'4', '5', '6'},
      {'7', '8', '9'},
      {'*', '0', '#'}
    };
    byte rowPins[ROWS] = {2, 3, 4, 5};
    byte colPins[COLS] = {8, 9, 10};
     
     
    Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
     
    String action;
    long timein[6], countdown_time = 0, initialsecond = 0;
    int i = 0;
    const byte mosfet = 15;
    const byte led = 13;
     
     
    void setup() {
      analogReference (INTERNAL);
     
      pinMode  (mosfet, OUTPUT);
      pinMode  (led, OUTPUT);
      digitalWrite(mosfet, LOW);
      digitalWrite(led, LOW);
     
      u8g2.begin();
      u8x8.begin();
     
      for (int i = 0; i < 3; i++) {
        u8x8.setFont(u8x8_font_8x13B_1x2_r);
        u8x8.setCursor (1, 0);
        u8x8.print("Saisir  mn/sec");
        delay(250);
        u8x8.clear();
        delay (250);
      }
     
      u8x8.setFont(u8x8_font_profont29_2x3_n);
      u8x8.setCursor (3, 4);//colonne/rangée
      u8x8.print("00:00");
      u8x8.setFont(u8x8_font_8x13B_1x2_r);
      u8x8.setCursor (1, 2);
      u8x8.print("------**------");
     
      u8x8.setCursor (1, 0);
      u8x8.print("Saisir  mn/sec");
    }
     
    void loop() {
      int valeurLue = analogRead (ENTREE_ANALOGIQUE);
      float tensionLue = (valeurLue * 12.25 / 1024.0);
      if (tensionLue < 10.5) {
        u8x8.setFont(u8x8_font_8x13B_1x2_r);
        u8x8.clear();
        u8x8.setCursor (3, 1);
        u8x8.print ("Battterie");
        u8x8.setCursor (5, 4);
        u8x8.print ("faible");
        delay(2000);
        digitalWrite (mosfet , HIGH);
      }
      char key = keypad.getKey();
      if (key) {
        switch (key) {
     
          case '*'  :
            u8x8.setCursor (3, 4);
            action = "set_time";
            i = 2;
            break;
     
          case '#'  :
            action  = "start_countdown";
            u8x8.clear();
            break;
          default :
            u8x8.setFont(u8x8_font_profont29_2x3_n);
            if (action == "set_time") {
              i++;
              int c = i - 1;
              timein[c] = key - 48;
              initialsecond = 0;
              long hour = (timein[0] * 10) + timein[1];
              long minute = (timein[2] * 10) + timein[3];
              long second = (timein[4] * 10) + timein[5]; //second
              countdown_time = (hour * 3600) + (minute * 60) + second;
     
              u8x8.print(key);
     
              if (i % 2 == 0 && i < 6) {
     
                u8x8.print(":");
     
              }
              break;
           }
        }
      }
     
     
      if (action  == "start_countdown") {
        if (initialsecond == 0) {
          initialsecond = millis() / 1000;
        }
        long countdowntime_seconds = countdown_time - (millis() / 1000) + initialsecond;
        if (countdowntime_seconds >= 0) {
          long countdown_hour = countdowntime_seconds / 3600;
          long countdown_minute = ((countdowntime_seconds / 60) % 60);
          long counddown_sec = countdowntime_seconds % 60;
     
          u8x8.setFont(u8x8_font_profont29_2x3_n);
          u8x8.setCursor (0, 4);
     
          if (countdown_hour < 10) {
            u8x8.print("0");
          }
          u8x8.print(countdown_hour);
     
          u8x8.print(":");
     
          if (countdown_minute < 10) {
            u8x8.print("0");
     
          }
          u8x8.print(countdown_minute);
     
          u8x8.print(":");
     
          if (counddown_sec < 10) {
            u8x8.print("0");
          }
     
          u8x8.setFont(u8x8_font_profont29_2x3_n);
          u8x8.print(counddown_sec);
     
          int valeurLue = analogRead (ENTREE_ANALOGIQUE);
          float tensionLue = (valeurLue * 12.25 / 1024.0);
     
     
          u8x8.setFont(u8x8_font_8x13B_1x2_r);
          u8x8.setCursor (37, 0);
          u8x8.print (tensionLue);
          u8x8.setCursor (0, 0);
          u8x8.print ("Bat:");
          u8x8.setCursor (43, 0);
          u8x8.print ("Volts");
     
     
          if ( counddown_sec < 1 && countdown_minute == 0 && countdown_hour == 0) {
            digitalWrite (mosfet , HIGH);
            digitalWrite (led , HIGH);
            u8x8.setFont(u8x8_font_8x13B_1x2_r);
          }
        }
      }
    }

  2. #2
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 658
    Par défaut Infos SVP
    Bonjour,

    Il faut déjà bien comprendre le problème. Le mosfet alimente la pompe et l'Arduino (enfin un régulateur qui fournit le 5 Volts) ? La mise en marche consiste à court-circuiter temporairement ce mosfet ?

    C'est quoi ces 12.6 Volts pour des accus Li-ion ? Avec des éléments à 3.6V ou 3.7V, 3 éléments en série donnent un nominal à 10.8 V ou 11.1 V et 4 éléments donnent entre et 14.4 V et 14.8 V. Il y a un convertisseur ? Ou ce ne sont pas des LI-ion (mais 10 NIMH à 1.2 V de nominal ne font pas non plus 12.5 V).
    Si les 12.6 sont un maxi, il correspondent à 3 éléments en fin de charge (3x4.2 V) donc à une tension nominale entre 10.8 et 11.1 V pour un minimum absolu de 7.5 V soit avec une marge de sécurité 9 V si le reste du montage le supporte. Le 10.5 V semble très (trop ?) proche de la valeur nominale.

    Comment est prise la tension ? Pont diviseur pour fournir au max 1.1 V ? Quelles valeurs de résistances ? Y a t-il une capacité de filtrage sur ce pont ? Si oui qu'elle est sa valeur ?

    Un schéma de câblage serait utile.

    Salutations

  3. #3
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2020
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Décembre 2020
    Messages : 56
    Par défaut
    Le mosfet alimente l'arduino ainsi que 2 récepteurs 433Mhz mais pas directement les pompes.. Je mets le schéma mais je ne pense pas que ça apportera grand chose au sketch, le but étant de mettre la pin 6 au niveau haut de façon à bloquer le mosfet quand la tension mesurée passe en dessous de 10,8V. Je ne les décharge pas en dessous de 3,6V par élément.
    Quand je paramètre 10,8V en début de loop alors que la tension de la batterie est bien au dessus la pin 6 passe à l'état haut donc l'ensemble n'est plus alimenté. Il faut que je paramètre le seuil à 10V voir moins pour qu'elle reste à l'état bas


    La tension est prise via un pont diviseur, je ne me souviens plus des valeurs de résistance mais c'est autour de 7/8K pour l'une et 800 ohms pour l'autre et 10 Nano pour le condensateur.

    Pour info la tension affichée pendant le décompte est stable à 1 ou 2 centièmes et correspond à la valeur mesurée avec un métrix

    PS: Les 12,6V évoqués c'est la tension des 3S en sortie de chargeur.
    Images attachées Images attachées  

  4. #4
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 658
    Par défaut
    Bonsoir,

    Je ne suis pas sûr que les explications soient en phase avec le croquis (inversion de 15 et 6 apparemment.

    Les 12.6 Volts correspondent à la fin de charge. Cette tension n'est pas maintenue très longtemps avant que la batterie atteigne son niveau nominal qui avec 3S donnera entre 10.8 et 11.1 selon la batterie.

    De plus, dans ce montage, cette tension est réduite par la perte ohmique dans le second mosfet. Or c'est cette tension plus faible qui est mesurée. Il n'est donc pas étonnant que cela soit limite.

    Je conseillerai donc de mettre de l'ordre de 9 V comme seuil car le but n'est pas de rester exactement à la tension nominale mais d'arrêter le tout quand on quitte sensiblement cette valeur afin d'éviter d'atteindre la valeur critique de 7.5 V (2.5 pour un élément). On conseille en général de prévoir une sécurité en prenant 3 V (de plus en 3S, 7.5 V ne garantirait pas que l'un des éléments soit en dessous de 2.5 V).

    Salutations

  5. #5
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2020
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Décembre 2020
    Messages : 56
    Par défaut
    Oui désolé la broche 15 et la 6 sont inversées dans l'explication
    Pour ce qui est de la perte dans le mosfet elle est négligeable, inférieure au dixième de volt, Ce qui n'explique pas le fait que quand le seuil programmé est à 10,8V et la tension de la batterie à 11,9V le résultat du if est vu comme tension inférieure à 10,8V
    Je peux mettre 9V comme seuil mais si la batterie est encore à 10V il y a quand même une alerte. Pour être tranquille je mets 8V mais c'est pas bien normal tout ça

    Bonne soirée

  6. #6
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 922
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 922
    Par défaut
    Citation Envoyé par Fermor Voir le message
    Ce qui n'explique pas le fait que quand le seuil programmé est à 10,8V et la tension de la batterie à 11,9V le résultat du if est vu comme tension inférieure à 10,8V
    Affichez le résultat du calcul - le if ne ment pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    float tensionLue = (valeurLue * 12.25 / 1024.0);
    Comment avez vous calculé cette formule ? D’où vient le 12.5? les résistances du pont ont probablement une tolérance de 5% si vous n’avez pas de bol…

    1023 correspond à 1.1V derrière le pont diviseur et cette Vref du CAN c’est 1.1 (vous n’en tenez pas compte dans la formule??) vaut 1,1 V +/- 0,1 V selon les lots de fabrication (près de 10% d’écart)

    Avez vous mesuré cette valeur interne? Elle est présente sur la broche Aref quand on sélectionne la référence interne. Il faudrait étalonner sans doute pour tenir compte des approximations un peu partout

Discussions similaires

  1. Réponses: 8
    Dernier message: 23/12/2016, 19h06
  2. WINDOWS 7 CMD tension alimentation
    Par philippe13 dans le forum Windows
    Réponses: 0
    Dernier message: 14/09/2015, 21h24
  3. [PC fixe] Allumage du PC quand l'alimentation est mise sous tension
    Par flamme34 dans le forum Ordinateurs
    Réponses: 13
    Dernier message: 26/02/2013, 17h49
  4. [Alimentation] Alimentation en panne avec PC hors tension
    Par katoyi dans le forum Composants
    Réponses: 5
    Dernier message: 12/01/2009, 14h04
  5. tension d'alimentation pour une carte vidéo G4 MX440-T8X
    Par dirty_boy dans le forum Composants
    Réponses: 3
    Dernier message: 30/03/2006, 17h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo