Mesure en millivolt sur une carte esp32

Bonjour,
Etant débutant dans la programmation ,j'ai fais un programme pour mesurer du millivolts sur la pin 34 sur mon esp32 wroom mais cela ne fonctionne pas .J'ai installer le capteur 2 fils sur la pin 34 et le gnd .
voici le programme:

const int analogPin = 34; // Broche analogique où la tension est mesurée (GPIO34)
const float referenceVoltage = 3300.0; // Tension de référence en millivolts (3.3V pour l'ESP32)

void setup() {
  Serial.begin(9600); // Initialiser la communication série
}

void loop() {
  int analogValue = analogRead(analogPin); // Lire la valeur analogique brute (0-4095)
  float voltage = (analogValue * referenceVoltage) / 4095.0; // Convertir en tension en millivolts

  // Afficher sur le moniteur série
  Serial.print("Valeur brute: ");
  Serial.println(analogValue);
  
  Serial.print("Tension: ");
  Serial.print(voltage, 2); // Afficher la tension avec deux décimales
  Serial.println(" mV");

  delay(1000); // Attendre 1 seconde avant la prochaine mesure
}

Sur mon multimètre j'ai bien la valeur qui bouge mais pas sur le moniteur série.
J'ai essayer sur un arduino uno ,ca fonctionne mais la valeur n'est pas aussi précise.
est ce qu'il y aurai quelqu'un pour résoudre mon problème?

Cordialement,

Bonsoir,

ne manquerait-il pas

pinMode(analogPin, INPUT);

dans le setup() pour déclarer la borne comme entrée ?

non désoler sa ne fonctionne toujours pas .
j'ai vue sur un site que l'on pouvait réduire la plage de mesure

du coup j'ai essayé cela mais toujours rien .

const int analogPin = 34; // Broche analogique où le capteur est connecté (GPIO34)
const float referenceVoltage = 1000.0; // Tension de référence en millivolts (1V pour l'ESP32)
const int resolution = 4095; // Résolution de l'ADC (12 bits)

void setup() {
  Serial.begin(115200); // Initialiser la communication série
  pinMode(analogPin, INPUT); // Configurer la broche en entrée (bien que ce soit implicite pour la lecture analogique)
  analogSetPinAttenuation(analogPin, ADC_0db); // Configurer l'atténuation de la broche analogique pour la plage 0-1V
  analogReadResolution(12); // Configurer la résolution de lecture analogique à 12 bits
}

void loop() {
  int analogValue = analogRead(analogPin); // Lire la valeur analogique brute (0-4095)
  
  {
    float voltage = (analogValue * referenceVoltage) / resolution; // Convertir en tension en millivolts

    // Afficher sur le moniteur série
    Serial.print("Valeur brute: ");
    Serial.println(analogValue);

    Serial.print("Tension: ");
    Serial.print(voltage, 3); // Afficher la tension avec trois décimales
    Serial.println(" mV");
  }

  delay(1000); // Attendre 1 seconde avant la prochaine mesure
}

Je me demande si ma carte est vraiment fonctionnelle

Bonsoir;

Qu'est ce que tu appelle des milivolts, c'est 1, 10, 100 mV?
Pour l'esp32, j'ai lu sur le site arduino que pour beneficier du 12bits, il fallait utiliser
*" *The default analogRead() resolution for these boards is 10 bits, for compatibility. You need to use analogReadResolution() to change it to a higher resolution."

et qu'il fallait utiliser les pins "A0 to A7".

Pour avoir des réponses précises, il faut donner des informations détaillées

Quel capteur?

Quelle tension délivre ton capteur?

La justesse d'un Arduino Uno est-elle équivalente à celle de ton voltmètre ?
rien que la définition de l'ADC 10bits est de 4mV.

Comme l'a indiqué @jef59 quel valeur essaye tu de comparer ?

Il y a un article parmi tant d'autre sur ce sujet qui me parais intéressant pour toi. Notamment le graphique sur la partie 0-0.5V concernant l'ESP32

Bonjour mon capteur mesure une tension de 0 a 60 mV .c'est un capteur de flux radiatif permet de mesurer l'échange radiatif même en présence de convection.
Je voulais passer a l'esp32 car il y avait une résolution de 4095 alors que l'arduino nano en a que 1023.

Oui mais en fait, l'ESP32 n'est pas un très bon choix coté ADC la linéarité n'est pas bonne et en plus dans le haut et dans le bas de la courbe c'est carrément la misère.
A la limite, un ATmega en utilisant la référence interne est peut-être meilleur.
Tu as toujours la solution d'un ADC externe. Et si tu n'as pas peur de mettre les mains dans le cambouis, l'ATmega2560 a des entrées avec du gain lorsqu'on les met en mode différentiel.

justement j'ai une elegoo mega2560 dont je me suis jamais servi ,tu crois que cela vas être compliqué ?

Je crois que l'on peut baisser l'atténuation sur l'ESP32, mais cela ne doit pas régler les problèmes au extrêmes, ni la fluctuation de la justesse.
Il doit surement être possible en plus de décaler le tension matériellement pour la faire rentrer dans la partie la moins pire?
Mais cela vaut-il le coup par rapport à utiliser un ADC convenable :slight_smile:

@leweb60 que veut tu faire des données ?

la linéarité de l'ADC de l'ESP32 est meilleure avec les attenuations autres que celle par défaut
image

La mauvaise réputation de cet ADC repose en grande partie sur l'une des 4 options et sur l'absence de calibration de Vref des premiers lots

Quand je trouverais le temps je ferai des tests avec l'attenuation 0dB, pleine échelle 1,1V

je crois avoir lu que le S3, n'a pas ce soucis de mauvaise calibration.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.