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?
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
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."
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.
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