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 :

Lire une Tension variable Arduino


Sujet :

Arduino

  1. #1
    Nouveau Candidat au Club
    Lire une Tension variable Arduino
    Bonjour tout le monde
    J’ai une question, pour mon travail, j’ai besoin de mesurer la tension de batteries certaines en 12v et d'autre en 24v et d’envoyer ces données avec un Webservice. (Donc il me faut un arduino avec connexion WiFi)

    L'histoire du WebService est réglé mais je ne vois pas comment faire avec des tensions dont je ne connais pas à l'avance la valeurs maximum

    Quelqu’un a une idée pour faire ce petit système ?

    Bien à vous Benjamin.

  2. #2
    Membre éprouvé
    Est-ce que les batteries peuvent être déchargées ?

    Sinon vous dimensionnez la capteur pour 24v (ou un peu plus) et si vous voyez le Max c’est une 24V si vous voyez près de la moitié c’est une 12v

  3. #3
    Responsable Modération

    Bonsoir et bienvenue sur DVP

    C'est facile ou pas en fonction de ce que l'on veut.

    Il faut dimensionner un pont diviseur de mesure pour la tension la plus élevée qui est prévue. Selon la précision du convertisseur ADC et de celle que l'on souhaite, il peut être possible de faire toutes les mesures. Par exemple avec un Arduino Uno et un circuit dimensionné pour des batteries de 24V nominal, il reste une précision de presque 1% sur des batteries de 6V nominal.
    En cas de risque de branchement de batterie dépassant la tension maximale prévue, il faut dimensionner une protection de surtension, par exemple avec une diode zener de 5.1V en sortie du diviseur de tension (si réf à 5V). Dans ce cas le courant circulant dans les résistances et la Zener devront être calculés pour s'assurer de ne pas dépasser les puissances maximales de ces composants. Par exemple, on pourrait ainsi dimensionner une protection jusqu'à 60V (batterie de 48V) ou 120V (batterie de 96V) pour un 24V nominal.

    Si la précision de cette manière n'est pas suffisante, il faut faire un ampli à gain variable. Le plus simple (mais pas forcement le plus précis) c'est un ampli op et des résistances commutées à la masse par l'Arduino. Ou mettre plusieurs diviseurs de tension pour entrer sur les différentes voies de l'ADC (entrée 1 nominal de 24V, entrée 2 nominal de 12V, entrée 3 nominal de 6V, etc...), mais attention à dimensionner proprement toutes les protections de surtension, car elles serviront en fonctionnement normal !

    Et il y a probablement encore d'autres pistes...

    Ah j'oublie un truc, avec cela on quitte le monde simplifié d'Arduino et on rentre dans la réalité de la conception électronique.

    Bonne suite

    Delias

  4. #4
    Membre actif
    Bonjour,

    La mesure de tension d'une batterie est particulière...

    Elle doit être précise (cela dépend de la technologie de la batterie)

    Un Arduino a un ADC sur 10 bits, il peut théoriquement mesurer quelque chose sur une échelle de 1024 points, ce n'est pas terrible.

    Sur ces 10 bits le ou les bits de poids faible peuvent être "non significatif" et en pratique on peut avoir une résolution exploitable (c'est à dire fiable) de 8 bits, soit 256 points. C'est peu pour une mesure digne de ce nom.

    Il faut un circuit analogique précis pour "dilater l'échelle".

    Autrement dit, pour la batterie 24V il faut mesurer une tension entre 22V et 30V, ainsi, les 256 points de mesure seront répartis entre 22V et 30V et pas entre 0V et 30V. La précision sera meilleure.

    Si la tension est sous 22V ou au dessus de 30V la batterie a un gros problème, ça ne sert à rien de mesurer au delà, il suffit de savoir que les valeurs mini ou maxi sont dépassées.

    Pour la batterie 12V, il faut viser une plage de mesure allant de 11V à 15V

    A bientôt

  5. #5
    Membre expérimenté
    Bonjour elecrtoremy

    Pourquoi ne pas "manger" le maximum de volts "inutiles" avec des diodes zenner, respectivement 22V et 11V.
    Pour la batterie de 24 V, il resterai 8V à traiter, qui seraient recalibrés au moyen d'un diviseur résistif de 0 à 5V.
    Pour la batterie de 12V, il resterai 4V à traiter, donc "dans les cordes" Arduino.
    Pour augmenter la précision à 16 bits, il y a ces petits modules i2C a base de ADS1115.

    Cordialement
    jpbbricole
    L'expérience est la seule chose qu'il ne faut acheter que d'occasion!

  6. #6
    Nouveau Candidat au Club
    Merci à vous tous pour vos réponses plus pertinante les unes que les autres, je continu de creuser en attendant de mieux comprendre certains termes.
    Bien à vous, Percroy

  7. #7
    Membre éprouvé
    A quoi doit servir le programme ? dire si la batterie connectée est une 24V ou une 12V ? est-ce la seule information que vous souhaitez avoir en sortie ? ou alors juste dire la tension lue ?

    (un petit article à lire éventuellement, ou encore ici le web en regorge de similaires)

    on trouve sinon aussi des composants tout faits de mesure de la tension

  8. #8
    Nouveau Candidat au Club
    Hello, en fait, ce programme doit pouvoir mesurer la tension d'une batterie de camion, ce module sera connecter à la batterie, et, dès que je détecte un signal WiFi, j'envoi la donnée mesurée à un WebService.
    Cela permettrai de récupérer la donnée de plusieurs dizaines de camions qui rentre au dépôt chaque soir dans un de mes logiciels.
    Je suis parti sur un pont diviseur de tension mais cela m'inquiète car l'intensité d'une telle baterie atteint de haute valeur (Intensité au démarrage 1000A ou Capacité total 200Ah), je me demande si un simple pont diviseur de tension suffirais ?

    Bien à vous, Percroy

  9. #9
    Modérateur

    Bonjour,
    C'est un poil plus complexe qu'un pont diviseur.

    Quand l'alternateur va être en fonction la tension sera bien supérieure à celle de la batterie (sur une voiture on monte facilement à un peu plus de 14V). Il peut y avoir des pics de tension dépassant les 40V voir 60V sur une voiture, par exemple lors d'une réparation dans l'atelier où on déconnecte rapidement la batterie avec le moteur en route ; l'alternateur se retrouve à vide est la tension peut montrer très fortement. Si jamais c'est le "moins" de la batterie qu'on a retiré le pauvre pont diviseur dimensionné pour 24V va se demander ce qu'il se passe avec 60V.

    Peut être que mesurer la tension batterie une fois le moteur éteint ?

    Mettre des protections plus élaborés dans le hardware ?
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  10. #10
    Membre actif
    Citation Envoyé par jpbbricole Voir le message
    Bonjour elecrtoremy

    Pourquoi ne pas "manger" le maximum de volts "inutiles" avec des diodes zenner, respectivement 22V et 11V.
    Pour la batterie de 24 V, il resterai 8V à traiter, qui seraient recalibrés au moyen d'un diviseur résistif de 0 à 5V.
    Pour la batterie de 12V, il resterai 4V à traiter, donc "dans les cordes" Arduino.
    Pour augmenter la précision à 16 bits, il y a ces petits modules i2C a base de ADS1115.

    Cordialement
    jpbbricole
    Attention à la précision...

    Il vaudrait mieux un circuit à base d'AOP et d'une référence de tension stabilisée en température. Ces composants ne coûtent presque rien aujourd'hui

    Méfiance pour les ADC 16 bits, les bits de poids faible sont-ils significatifs ? Et surtout, le circuit analogique qui va alimenter l'entrée de l'ADC devrait être de bonne qualité. Bien éplucher la datasheet

    Il existe pas mal de circuits spécialisés pour la mesure de tension, à chercher de ce côté là.
    Il y a même des circuits spécialisés pour la mesure de tension de batterie.

    Si le but final est de surveiller la santé des batteries, il faudrait mesurer :
    - la tension
    - le courant (avec sonde à effet hall, pas besoin de shunt)
    - la température de la batterie
    - la température ambiante

    Seule la tension demande une très bonne précision.

    Si le courant consommé peut varier très rapidement c'est un peut plus ennuyeux car pour que les mesures soient pertinentes il faut une fréquence de mesure élevée ou bien un circuit capable de faire une moyenne. Sinon les résultats seront complètements farfelus et aléatoires (typiquement mesure de tension pile au moment où la batterie subit un pic de courant)

    La mesure des températures ne posera pas de problème car l'inertie thermique des capteurs et des objets mesurés fait déjà office de filtre passe bas.
    Pour la mesure de tension et de courant, il faudra un passe bas qui fera une moyenne, la fréquence de coupure devra respecter le théorème de Shannon (fréquence de coupure du passe bas au maximum 2 fois inférieure à la fréquence de mesure, ne pas hésiter à prendre un facteur plus élevé comme 10)

    Avec tous ces paramètres on peut estimer le niveau de charge, la durée de vie restante de la batterie, anticiper une panne, mais aussi évaluer précisément les besoins de l'appareil alimenté par la batterie, c'est fort instructif pour avoir un retour d'expérience et améliorer un produit.

    A bientôt

  11. #11
    Membre éclairé
    Simplifier
    Bonjour,

    Le WIFI en roulant, sauf à équiper chaque camion d'un téléphone portable portable déclaré en point d'accès, il vaut mieux oublier.

    Ça tombe bien car le niveau de parasites d'un véhicule en marche et, comme l'a fait remarquer Vincent, les variations de tensions imposées par l'alternateur sont plutôt dissuasifs et incitent à attendre l'arrêt du véhicule.

    Il faudra quand même protéger l'animal durant la chevauchée sauvage (déconnexion par relais ? Comme dans un frigo allumé quand c'est éteint).

    Pour la mesure, on peut doter le microcontrôleur d'un convertisseur 16 bits et ne pas avoir à imaginer des adaptations (automatiques ?) à des batteries de diverses tensions pour avoir une précision suffisante.

    Il faudra prévoir également la localisation précise du montage pour éviter des dérives dues à des conditions thermiques extrêmes (cabine à l'ombre par exemple).

    Je présume qu'il y a une phase d'identification du camion (soit côté microcontrôleur soit côté application).

    Encore un problème apparemment simple qui mérite réflexions.

    Bon courage
    Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better. (Samuel Beckett)

  12. #12
    Nouveau Candidat au Club
    Ta réponse est pertinente, en effet, le projet parait simple au premier abord mais pas mal de petits paramètres sont à réfléchir, pour le WiFi, la donnée ne sera pas envoyé pendant que le véhicule est en déplacement mais quand celui-ci sera arrêté dans le dépôt lorsqu'une connexion connu (et configurer en amont dans le programme) est disponible proche du véhicule, en effet nous ne ferons qu'une mesure par jour et donc la version M2M avec abonnement ne nous intéresse pas.
    Pour la température, je pensais à mettre du scotch thermique autour avec des petits dissipateurs thermiques pour réguler la température de la bête.
    Les batteries à mesurer serait entre 12v pour la plupart et 24v pour certains véhicules.

    Pour le calcul de la tension j'ai toruvé ce petit module qui a l'air d'être parfait pour mon utilisation : https://www.amazon.fr/gp/product/B07RNJQSL8?pf_rd_r=63BVFN03NNYERW8G18W0&pf_rd_p=70373c30-7461-4a24-bb1f-f3fde4f2df3a
    En enlevant quelque composants pour gagner en place et en reliant 2 résistances dessus cela devrais faire le boulot. (cf Image Attaché)
    Pour le moment, je suis parti sur un Arduino Wemos D1 Mini
    Pour la parti logiciel, je ne me suis pas trop cassé la tête, je vais utiliser le firmware Tasmota pour collecter mes données. (https://tasmota.github.io/docs/)

    Qu'en pensez vous ?
    Bien à vous, Percroy

  13. #13
    Modérateur

    Citation Envoyé par Percroy Voir le message
    Pour le calcul de la tension j'ai toruvé ce petit module qui a l'air d'être parfait pour mon utilisation : https://www.amazon.fr/gp/product/B07RNJQSL8?pf_rd_r=63BVFN03NNYERW8G18W0&pf_rd_p=70373c30-7461-4a24-bb1f-f3fde4f2df3a
    Il ne monte pas assez haut en tension pour une batterie de 24V.

    Si il y a des mécanos là où tu travailles demandes leur la tension d'une batterie 24V chargée (un simple voltmètre sur la batterie avec le moteur à l'arrêt) et ensuite demandes leur la tension que délivre l'alternateur (un simple voltmètre sur la batterie avec le moteur route.) Sur une voiture un batterie 12V chargée fait entre 12,5V et 13.5V (moteur éteind). Si elle est à 12V - tension nominale - alors est cuite, souvent elle lâche sous 1 an. Quand on met le moteur en route l'alternateur délivre une tension entre 13,5V et 14.8V (environ) pour charger la batterie. Sur un camion, ça doit être la même chose.


    Citation Envoyé par Percroy Voir le message
    En enlevant quelque composants pour gagner en place et en reliant 2 résistances dessus cela devrais faire le boulot. (cf Image Attaché)
    Oui un pont diviseur conviendra mais pas comme sur l'image, 2 raisons à ça :

    - Il faut connaitre la tension maxi, donc alternateur en route, pour calculer un pont diviseur.

    - La formule d'un pont diviseur ne fonctionne qu'à vide, c'est à dire tant qu'on ne tire pas du courant sur le pont diviseur, hors l'ADC (sur la broche A0) tire du courant et le fait d'avoir mit une résistance de 1MΩ ne va rien arranger.



    ****************************************************************************************

    Explication expresse !
    Le schéma de ta WEMOS D1 Mini montre qu'il y a déjà un pont diviseur de tension (R1 et R2 à droite du schéma ci dessous) entre la broche A0 et l'entrée de l'ADC du ESP8266. La maigre doc du ESP8266 dit qu'il ne faut pas dépasser 1V sur l'entrée de son ADC.

    Pour que la formule d'un pont diviseur reste valable, il faut que le courant qui passe dans le pont diviseur (flèches rouges) soit très grand devant le courant tiré sur le pont par l'ADC (flèche violette). Quand je dis très grand c'est par exemple 10x plus grand.

    Calculer le courant qui passe dans le pont (flèche rouge) c'est super simple. C'est la tension batterie / (R1 + R2)

    Pour connaître le courant qu'on tire sur le pont (flèche violette) il faut lire la doc du composant qui y est connecté sauf que quand ce sont des trucs chinois, il ne les donne pas La plus part du temps dans les docs des ADC il ne donne pas le courant consommé mais l'impédance vu de l'ADC ce qui est une autre manière de voir le problème. Sur un Arduino UNO c'est clairement noté, c'est 10kΩ.
    Page 244 states: "The ADC is optimized for analog signals with an output impedance of approximately 10 kΩ or less. If such a source is used, the sampling time will be negligible."
    Citation Envoyé par Traduction sauvage
    Le truc qui attaque l'ADC doit avoir une impédance de 10kΩ ou moins sinon il y aura une différence entre le calcul théorique du pont diviseur et la valeur mesurée par l'ADC
    C'est rien on va extrapoler avec le hardware existant en parlant d'impédance.

    L'impédance du pont diviseur revient à mettre les résistances en parallèle
    = 1 / (1/R1 + 1/R2)
    = 1 / (1/220kΩ + 1/100k&#937
    = 68,750kΩ

    L'ADC voit une impédance de 68,750k&#937; dans le schéma original. J'imagine que ceux qui ont fait ce schéma avait une bonne raison de choisir cette impédance (< 100k&#937. Donc si j'ajoute une résistance de 1M&#937;, comme dans la photo de ton dernier message, en série avec la 220k&#937; = 1,22M&#937; je vais me retrouver avec une sacrée impédance pour attaquer l'ADC

    Le mieux c'est d'abaisser d'un facteur 10, 100 ou plus, les résistances R1 et R2 (2.2k&#937; et 1k&#937; par exemple) plutôt que d'ajouter une super grosse résistance à celles existantes.

    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  14. #14
    Nouveau Candidat au Club
    Citation Envoyé par Vincent PETIT Voir le message

    Si il y a des mécanos là où tu travailles demandes leur la tension d'une batterie 24V chargée (un simple voltmètre sur la batterie avec le moteur à l'arrêt) et ensuite demandes leur la tension que délivre l'alternateur (un simple voltmètre sur la batterie avec le moteur route.) Sur une voiture un batterie 12V chargée fait entre 12,5V et 13.5V (moteur éteind). Si elle est à 12V - tension nominale - alors est cuite, souvent elle lâche sous 1 an. Quand on met le moteur en route l'alternateur délivre une tension entre 13,5V et 14.8V (environ) pour charger la batterie. Sur un camion, ça doit être la même chose.
    Tout d'abord merci pour ta réponse plus que complète, je me suis renseigné au prés du garage pour obtenir les mesures nécessaire à l'avancé de mon projet, une batterie 24v chargé serait entre 26 et 28v et en ce qui concerne la tension délivrais par l'alternateur se serais 30v.

    Aussi je voulais rebondir sur le schema que j'avais mis dans mon précedent poste, celui-ci concernait des batteries de 12v.

  15. #15
    Modérateur

    Si on résume !

    - La plage de mesure est grande si on prend les deux extrêmes ; 12V (batterie morte moteur éteint) ~ 30V (alternateur en route sur un batterie 24V)

    - La précision de la mesure doit atteindre ; je dirais à 100mV histoire de mesurer quelque chose de significatif.

    - La pleine échelle de l'ADC est minuscule ; 1V

    Par exemple, si on s'arrange pour avoir 1V sur l'ADC (le max) quand la tension de la batterie est à 30V (le max) en passant par un pont diviseur bien sur, alors :

    30Vbatt -> 1.00Vadc (sachant la résolution est de ~ 1mV/bit, ADC = 0x3FF)
    28Vbatt -> 0.93Vadc (sachant la résolution est de ~ 1mV/bit, ADC = 0x3B7)
    26Vbatt -> 0.86Vadc (sachant la résolution est de ~ 1mV/bit, ADC = 0x36F)
    24Vbatt -> 0.80Vadc (sachant la résolution est de ~ 1mV/bit, ADC = 0x332)
    15Vbatt -> 0.50Vadc (sachant la résolution est de ~ 1mV/bit, ADC = 0x1FF)
    14Vbatt -> 0.46Vadc (sachant la résolution est de ~ 1mV/bit, ADC = 0x1D6)
    13Vbatt -> 0.43Vadc (sachant la résolution est de ~ 1mV/bit, ADC = 0x1B7)
    12Vbatt -> 0.40Vadc (sachant la résolution est de ~ 1mV/bit, ADC = 0x199)

    On s'aperçoit que l'ADC est très mal utilisé, sur les 10 bits 40% ne seront pas utilisé car aucune batterie 12V ne descendra en dessous de cette tension. Cela eut été parfait si on avait mesuré une batterie allant de 0V à 30V, là nous aurions utilisé toute la dynamique de l'ADC, de 0x000 à 0x3FF. Mais ça peut quand même le faire, il faut essayer !

    Pour que la mesure soit stable il faut attaquer l'ADC avec une impédance assez faible < 100k&#937; sinon la tension va chuter à chaque fois que l'ADC va vouloir lire la tension sur le pont. Déjà qu'on a que 1V

    Il faut retirer R1 et R2 avec un fer à souder, ça se fait bien, et mettre les valeurs calculé ci dessous. Si tu veux prendre une marge, 40V au lieu de 30V tu peux aussi.



    Calcul du pont diviseur R1 et R2.

    Je fixe R2 à 1k&#937;. Je prends 30V max en entrée sur le pont et 1V max en sortie du pont. Je vous épargne la sortie de R1 dans la formule classique Vout = R2/(R1+R2)*Vin

    R1 = 1k&#937; * (30V / 1V) - 1k&#937;
    R1 = 29k&#937;


    Calcul de l'impédance du pont diviseur

    Pour un pont c'est simple, on met en parallèle les deux résistances et met ça en regard de ce que préconise l'ADC (un ATMEGA328P dit qu'il faut qu'il soit attaqué par une impédance de 10k&#937; pour tourner correctement, un ADC101C021 de chez Texas Instruments dit que son ADC délivrera d'excellente performance si l'impédance de source, ou d'attaque, est de 100&#937;, pour le ADS1115 c'est différent il faut calculer avec les composants qu'on a mis autour car l'ADC n'est pas du même type)

    Zpont = 1 / (1/29k&#937; + 1/k&#937 = 966&#937; ~ 1k&#937;

    Avec une telle impédance, la mesure sera nettement plus stable, si elle est trop haute ça oscille ou ça varie anormalement.


    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  16. #16
    Membre éclairé
    Ajustements
    Bonjour,


    J'ai ajusté les valeurs de Vincent pour retomber sur les séries normalisées communes. Un couple 27 kOhm, 820 Ohm aurait pu faire l'affaire également.

    Par ailleurs, j'ai ajouté un condensateur car l'environnement est très parasité. C'est plus à titre de protection de l'entrée que pour stabiliser la mesure (d'autant si celle-ci a lieu moteur arrêté). La valeur n'est pas très critique mais j'éviterais de descendre en deçà de 1uF. La diode est certainement superfétatoire (ceinture et bretelles) comme sécurité mais...

    Salutations
    Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better. (Samuel Beckett)

  17. #17
    Modérateur

    Excellente idée la capa + la diode

    La diode écrêtera toute tension supérieure à 3.3V + VFdiode. On peut aussi écrêter à une tension plus basse comme 1V + VFdiode




    Concernant la capa, on peut la calculer en fonction de la fréquence des mesures de l'ADC et le courant consommé par l'ADC. Son rôle sera d'atténuer la petite chute de tension causée par l'ADC.
    ps : Je pense qu'elle peut être de l'ordre de la 10aine de nF

    A+

    Pleins d'excellentes remarques dans ce sujet, AOP, protections etc...
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman