#include <Arduino.h>
// Configuration de l'ADC (GPIO 34)
const int ADC_PIN = 34;
const float V_IN = 3.3; // Tension d'entrée
const float R2 = 10000.0; // Résistance connue (10kΩ)
const float FACTEUR_CORRECTION = 1.07; // Facteur de correction pour l'ADC
const int ADC_MAX = 4095; // Résolution 12 bits (0-4095)
const float V_REF = 3.3; // Tension de référence de l'ADC
// Fonction pour lire la moyenne des valeurs ADC
float lire_adc_moyenne(int n = 10) {
long somme = 0;
for (int i = 0; i < n; i++) {
somme += analogRead(ADC_PIN);
delay(10); // Délai entre les lectures pour réduire le bruit
}
return (float)somme / n;
}
// Fonction pour convertir la valeur ADC en tension
float lire_vout() {
float valeur_adc = lire_adc_moyenne(10); // Lire la moyenne des valeurs ADC
float V_out = (valeur_adc * (V_REF / ADC_MAX)) * FACTEUR_CORRECTION; // Appliquer le facteur de correction
return V_out;
}
// Fonction pour calculer la résistance inconnue
float lire_resistance() {
float V_out = lire_vout();
if (V_out >= V_IN) {
Serial.println("Erreur : V_out >= V_IN. Vérifiez le circuit.");
return -1; // Retourne une valeur invalide en cas d'erreur
}
return R2 * (V_out / (V_IN - V_out)); // Calcul de la résistance
}
void setup() {
Serial.begin(115200);
analogReadResolution(12); // Résolution 12 bits (0-4095)
}
void loop() {
float V_out = lire_vout();
float R_mesuree = lire_resistance();
// Afficher les résultats
Serial.print("V_out mesuré : ");
Serial.print(V_out, 2);
Serial.println(" V");
if (R_mesuree >= 0) { // Afficher la résistance uniquement si elle est valide
Serial.print("Résistance mesurée : ");
Serial.print(R_mesuree, 2);
Serial.println(" Ω");
}
delay(1000); // Attendre 1 seconde avant la prochaine lecture
}