Voltmètre Arduino Incohérence

Bonjour à tous.

Je vous présente brièvement mon projet.

J’essaye de créer une gestion électrique pour site isolé équipé de panneaux solaires.
Je mesure la tension de mes batteries, si elles sont chargées a 100% (plus de 26.5V) j’enclenche des relaie pour actionné différent appareil, qui vont consommé l’électricité fournie par les panneaux qui serait autrement perdu.

Mon problème : plus j’actionne de relais, plus ma mesure de tension devient fausse.

J’ai essayé d’alimenter mes relais via une alimentation séparée. La mesure est moins faussée, mais n’est toujours pas juste.

J’ai essayé d’alimenté mon Arduino en 12V au lieu de seulement 5V en USB. Même remarque que précédemment.

J’ai donc supposé que le problème venait d’une chute de tension dans la carte quand je tire trop de jus.

J’ai donc cherché comment avoir la tension d’alimentation de l’Ardiono pour le faire influencé ma mesure.

Miracle ma mesure et plutôt juste. Mais varie très vite et parfois mesure n’importe quoi quelques secondes avant de redevenir cohérente.

Ma question : Trouvé vous normal que ce soit si compliqué d’avoir une mesure juste ?
J’ai souvenir avoir fait une ou deux boulettes avec cette carte (mini court-circuit…) pensez vous que ma carte puisse être endommagée ce qui provoquerait ces problèmes ?

Résumé de mon montage :

Mesure d’une tension de 2 batteries 12V en série.

Pont diviseur constitué de deux résistances de 2MH et 10MH (ce qui divise ma tension par 6)

Par avance merci pour votre aide.

Code :

unsigned int analogReadReference(void) {//calcule la tension dans la carte trouvée sur internet

/* Elimine toutes charges résiduelles */
ADMUX = 0x4F;
delayMicroseconds(5);

/* Sélectionne la référence interne à 1.1 volts comme point de mesure, avec comme limite haute VCC */
ADMUX = 0x4E;
delayMicroseconds(200);

/* Active le convertisseur analogique → numérique */
ADCSRA |= (1 << ADEN);

/* Lance une conversion analogique → numérique */
ADCSRA |= (1 << ADSC);

/* Attend la fin de la conversion */
while(ADCSRA & (1 << ADSC));

/* Récupère le résultat de la conversion */
return ADCL | (ADCH << 8);
}

void checkVoltage(){ //ma fonction de mesure de la tension
int valeur = analogRead(A0);
float tension_alim = (1023 * 1.1) / analogReadReference(); //Patch pour prendre enn compte la tension de la carte

float tensionB = valeur * (tension_alim / 1024);
tension = tensionB/2*12;//transforme ma mesure en 5V en mesure en 24V (multiplie par 6)
}

2 résistances de 10MΩ et 2MΩ : tu y vas un peu fort.
Le bruit augmente avec l'impédance.

Je mesure couramment des tensions de batterie sur des montages alimentés par LITHIUM-ION avec la référence interne 1.1V.
J'utilise un pont 1MΩ + 330KΩ, ce qui occasionne une perte de 2.8µA seulement.

Utiliser également des résistances à film métallique 1%, moins bruyantes.

Ensuite la référence interne 1.1V est précise à 10%. J'espère que tu l'as mesurée au préalable.
Sa stabilité en température est plutôt mauvaise.

J'ai essayé d'alimenté mon Arduino en 12V au lieu de seulement 5V en USB. Même remarque que précédemment.

Si tu mesures la tension 24V à l'aide de la référence 5V l'USB est un mauvais choix.
Le 5V du régulateur de la carte n'est pas extraordinaire, mais est quand même préférable.

L'idéal est d'utiliser une référence externe du type TL431, ou mieux.

Tu peux également faire une moyenne sur 100 échantillons, ou plus.

Pour éviter d'avoir des smileys dans le code :confused:

Mon problème : plus j'actionne de relais, plus ma mesure de tension devient fausse.

Je vois un problème de corruption de masse.

Principe de base : quand on fait une mesure de tension on sépare la masse "mesure" de la masse "puissance".

  • un fil de cuivre est et sera toujours résistant ==> Comme U=RI il y aura toujours des chutes de tensions ==> on obtient alors ce qu'on appelle des "masses flotantes", pas vraiment terrible.
  • le circulation d'un courant élevé induit des phénomènes difficilement maîtrisables.

Ces deux masses doivent bien évidement être connectées mais en 1 seul point.
Idéalement ce point doit être l'arduino.

Quel est le schéma de ton installation et comment sont gérées les connections "0V" ?