Bonjour, j'ai un Arduino Uno et pour l'alimenter j'utilise l'alimentation externe branché sur une pile 9V. J'aimerais savoir comment récuperer la tension aux bornes de l'alimentation pour pouvoir afficher un message si elle est inférieure a un certain nombre ...
Utiliser un pont diviseur de tension et le rentrer sur un analogIn, ou bien utiliser un circuit intégré spécifique à cette fonction (on en a parlé il y a pas très longtemps dans un topic) ou bien encore faire un comparateur avec un ampli-op et brancher la sortie sur un port digital.
Je n'ais pas tout compris mais si je relie le pin Voltage Input a un Analog je pourrais récupérer sa tension ? et ça ne va pas abimer l'arduino d'entrer du 9V dans un analog ? Quel est le code pour récupérer la tension aux bornes d'un Analog ?
et ça ne va pas abimer l'arduino d'entrer du 9V dans un analog ?
Si justement et c'est pour cela que B@tto préconise l'utilisation d'un pont diviseur pour abaisser les 9V à une tension compatible avec l'arduino.
Pour faire simple un diviseur de tension avec 2 résistances identiques (qq kilohms) donnera une division par 2. La tension sur Vin passera donc de 9V à 4,5V compatible avec les entrées analogiques de ta carte arduino.
Comme je sens que tu vas demander ce qu'est un pont diviseur je te propose d'aller voir là: Arduino Playground - HomePage le "Tutorial on rolling your own voltage dividers"
pierreyves258:
Un coté d'une résistance de 1K sur GND
Un coté d'une résistance de 1K sur Vin(+9V)
Le deuxième coté des 2 résistances sur Analog0
Me renvoie bien (la moitié je sais pas il faudrait que je revérifie) Un plus bas voltage (testé avec un voltmètre).
Mais aussi Vin ne me donne pas la tension sur la batterie ! donc il faut que je branche direct sur le + de la pile...
Mais si non la valeur de analogRead divisée par 100 avec cette façon m'a l'air bien...
(exemples:
broche sur le +5 ---> Valeur (brute): ~489
Vin (Avec alim USB): ~511
+3.3V: ~340)
...
si tu mets les bonnes résistances ca doit fonctionner, mon script qui fonctionne sur mon webserver remis en serial pour toi
R1 3.3K R2 1K
////------test batterie
int batMonPin = 0; // input pin for the divider
int val = 0; // variable for the A/D value
float pinVoltage = 0; // variable to hold the calculated voltage
float batteryVoltage = 0;
float ratio = 3.94; // Change this to match the MEASURED ration of the circuit
void setup(){
Serial.begin(115000);
}
void loop(){
val = analogRead(batMonPin); // read the voltage on the divider
pinVoltage = val * 0.00488; // Calculate the voltage on the A/D pin
batteryVoltage = pinVoltage * ratio;
Serial.print(batteryVoltage);
}
Avec 2 résistances identiques la tension est divisée par 2. Il faut donc transformer une valeur reçut entre 0 et 1023 en une valeur entre 0 et 10.
Comme ça par exemple:
const int batteryPin = 0; // +V from battery is connected to analog pin 0
void setup()
{
Serial.begin(9600);
}
void loop()
{
float val = analogRead(batteryPin);
map (val,0,1023,0,10);
Serial.println(val);
}
Ok, mais pourquoi entre 0 et 10 ???
eu ... non je ne suis pas sur de la précision de mon voltmètre ... c'est un multimètre a 5€ ^^
EDIT:
Ah mais c'est parce que j'avais pas récupérer la valeur du map... et en la récuperant ça me met pas un float
Donc en divisant par 102.3 ça me donne la meme valeur que sur le multimètre !
Parce que tu doit mesurer la tension d'une pile 9 V; une échelle entre 0 et 10V me parait approprié.
C'est surtout parce que la référence de l'ATmega est à 5V et que l'on a proposé de mettre une division par 2 sur l'entrée analogique.
Maintenant pour la précision du résultat, il faut considérer:
la valeur exacte de la tension de référence de l'ATmega. On a dit 5V mais un port USB peut délivrer de 4,85V à 5,25V.
la valeur exacte de l'atténuation apportée par le pont diviseur. Les résistances font-elles exactement 1k?
Le plus simple c'est de faire une calibration avec une tension connue (ou vérifiée avec un voltmètre de bonne qualité) et d'en déduire le coefficient qui va bien pour faire la conversion.
Et puis c'est toujours pareil plus il y a de bits dans le convertisseur analogique-digital plus on veut de précision. Mais as-tu vraiment besoin de connaitre la tension de ta batterie à 100 ou 200mV près?
Pour avoir la valeur image de la tension rentrée dans le convertisseur Analogique/numérique de l'Arduino, il n'y a qu'une seule méthode/solution.
En effet, comme marqué dans la datasheet du composant, la tension de référence pleine échelle du convertisseur (c.a.d la tension maximum admissible, qui égalera la valeur de 1023pts), est de 5V.
Pour avoir la valeur d'un point, vous divisez donc la tension de référence, par la pleine échelle : 5/1024 = 4.883mV/pt
Il ne reste plus qu'à multiplier la valeur obtenu via AnalogRead par la valeur du point pour avoir la tension.
ex : si val = 340, alors la tension mesurée est de 1.66V.
Ok Merci de votre aide
c'est bon la valeur me convient en effet je n'ais pas besoin de précision a 200mV près ^^
les résistance font 1K mais pas exactement je pense, ça doit varier de 10 mili-ohms...
Mais si j'avais voulu mesurer du 18V il aurais fallu faire comment ?
1 resistance de 1K l'autre de 2K ? et faire un map de 0 a 20 ?