Sonde logique.......illogique.

Bonjour à tous.

Je me bricole sur une arduino nano, une sonde logique.
Ce n’est qu’une ébauche et surtout un apprentissage de la programmation.

Grâce à une sonde (pointe de touche), elle doit pouvoir détecter un état haut et un état bas avec affichage des tensions sur le moniteur série.
Elle allume également une led rouge et verte pour visualiser l’état.
Tension > à 3.5 v la led rouge s’allume.
Tension < à 3.5 v la led verte s’allume.

Après avoir téléchargé le programme, je rencontre un bien étrange phénomène.
Sur le moniteur série, je vois la tension augmenter progressivement de 0 v à 5 v puis diminuer de façon lente et ceci continuellement mais sur ma pointe de touche (sonde), j’ai toujours 2.19 v tout le temps.
J'avoue y perdre mon latin et mon grec ancien

Je vous joins le code.
Merci d’avance pour votre aide.

Cordialement

//
// Ce programme 
// affiche sur le moniteur serie la tension captée par la sonde.
// Il allume une led rouge etat haut.
// Il allume une led verte etat bas.
//
// la sonde est branché sur la broche analogique A0
int sonde = 0;

//variable pour stocker la valeur lue après conversion
int valeurLue;

//convertit cette valeur en une tension " float " pour les variable à vigule.
float tension;

int ledRouge=2;
int ledVerte=3;
 
void setup()
{
    //liaison série
    Serial.begin(9600);
    // Variable led.
    pinMode (ledRouge,OUTPUT);
    pinMode (ledVerte,OUTPUT);
}
 
void loop()
{
    //convertit en nombre binaire la tension lue en de la sonde
    valeurLue = analogRead(sonde); // lit se qui sort de la sonde
    
    //traduit la valeur brute en tension
    tension = valeurLue * 5.0 / 1023;
    // condition
    if (tension > 3.5)
    {
      digitalWrite ( ledRouge,HIGH);
    }
      else
    {
      digitalWrite (ledRouge,LOW);
    }  
   if (tension < 3.5)
   {
      digitalWrite (ledVerte,HIGH);
   }
   else
   {
     digitalWrite ( ledVerte, LOW );
   }
      
    //affichage de la valeur lue entre 0 et 1023
    Serial.print("valeurLue = ");
    Serial.println(valeurLue);
    
    //affichage de la tension entre 0 et 5
    Serial.print("Tension = ");
    Serial.print(tension,1); // le chiffre après la , de tension nous intique le nombre de décimale.
    Serial.println(" V");
    
    //on saute une ligne entre deux affichages
    Serial.println();
    
    //on attend une demi-seconde pour que l'affichage ne soit pas trop rapide
    delay(500);
}

Bonjour,

Comment est ce que tu sais que ta tension de 2.19V ne varie pas? Si c'est avec un multimètre tu ne peux pas voir de variation rapide à cause du filtrage de la mesure.
Elle vient d'où ta tension de 2.19V. La masse est bien reliée?

Bonjour.

Pour la tension de 2.19 v, je l'ai relevé entre la pin A0 (sonde) et le GND de la carte.

Sur mon multimètre, il s'affiche bien 2.19 v de façon stable et sur mon moniteur série je vois défiler la variation de tension varier de 0 v à 5 v lentement ce qui allume mes led alternativement tout en ayant la sonde dans le vide.

Moi qui croyais que c'était un montage simple.

Cordialement

Le Monsieur a posé une question :

kamill:
La masse est bien reliée?

tout en ayant la sonde dans le vide

une sonde dans le vide n'est pas a un potentiel défini. Il faut la relier à une vrai source de tension. Tu dois bien avoir une pile qui traine quelque part.

Bonjour à tous.

Je vous remercie d'avoir pris sur votre temps pour m'aider dans ce petit projet de débutant.

J'ai fait une bourde.

J'ai programmé ma carte nano puis j'ai fait les essais sur celle-ci et non pas sur un autre montage.

Je comprends mieux le sens de la question de Kamill "La masse est bien reliée ? ".

J'ai refait les tests en testant ce coup-ci sur un autre montage, les mesures sont bonnes: led rouge quand c'est haut, led verte quand c'est bas. Affichage parfait des tensions.

Mais aussitôt que je quitte la mesure, le cycle infernal de la variation de tension recommence ainsi que le battement lent des led, puisque ma sonde est en l'air.

Auriez vous une astuce, soit électronique ou de programmation pour éviter ce phénomène ?

En vous remerciant.

Cordialement

Lorsque la sonde n'est pas connectée à un point de mesure, il ne faut pas qu'elle soit en l'air. Le plus simple serait de monter une résistance élevée (100k par exemple) entre la sonde de mesure et la masse. Ainsi elle afficherait 0 lorsque rien n'est connecté.
Sinon si tu veux le faire à l'économie, tu peux exploiter la résistance de tirage interne à l'ATmega. Mais dans ce cas l'entrée sera "tirée" au +5V et donc elle indiquera +5V lorsque la pointe de touche sera en l'air.
ATTENTION de ne pas connecter à un potentiel supérieur à la tension d'alimentation.

Bonjour

et mille fois merci fdufnews pour ton aide.
Je vais mettre en pratique l'astuce de la résistance sur la masse et je te tiens au courant du résultat.

Concernant ta recomendation:

fdufnews:
ATTENTION de ne pas connecter à un potentiel supérieur à la tension d'alimentation.

Ma carte arduino est alimentée en 5v, cela veux dire que je ne peux tester que des montages avec une tension de 5 v maximum ?

Cordialement.

Il ne faut pas appliquer de tension supérieure à la tension d'alimentation sur les entrées du circuit.
Si tu dois mesurer des tensions supérieures à 5V, il faut utiliser un diviseur de tension pour ramener celle-ci dans la fourchette admissible.

Bonjour.

Merci fdufnews pour ton astuce de la résistance branchée sur la masse, ça fonctionne parfaitement.

Merci aussi pour ta mise en garde sur la tension à ne pas dépasser, je crois que j'aurais fait une bêtise sans toi.

J'ai cherché sur le net, et je trouve curieux que personne n'ai pensé à réaliser une sonde logique avec un arduino.

Encore merci pour ton aide.

Cordialement.