Go Down

Topic: Savoir si un capteur est branché (Read 1 time) previous topic - next topic

KiliYaBB

Bonjour,

Je voudrais que le programme soit capable de détecter si un capteur est branché (aussi bien pour une entrée numérique que analogique)

Le capteur ne renvoie par forcément une tension, il peut selon ses états être à 0, 1023, 524 (pour de l'analogique)

Je ne peux donc pas me baser sur la valeur de lINPUT

Y aurait il une autre moyen de savoir si le capteur est branché ?

Merci !

yalefe

#1
Aug 03, 2009, 11:51 am Last Edit: Aug 03, 2009, 12:31 pm by yannick Reason: 1
J'avoue que je ne comprends pas ton exemple....

tu cites ( 0, 1023, 524) pour de l'analogique ....

mais 1023 ou 524 quoi ????

Si c'est de l'analogique, tu as obligatoirement une notion d'unité attachée à ta valeur , ( volts, amperes, litres, km/h, metres, °C, ....)

ce qui ne change rien d'ailleurs à ton pb.... ;)

KiliYaBB

supposons que jai un jack (interprété comme un INPUT par larduino) qui me permet de brancher un capteur analogique

ce capteur n'a pas de plage particulière, il peut très bien fournir 0 volts (donc 0 pas) ou 5 volts (pas de 1023) ou tout autre valeur.

Et je veux savoir comme il serait possible que l'arduino détecte quil y a un capteur de branché.

yalefe

a ma connaissance, un capteur ( quel qu'il soit) est défini par l'information qu'il délivre...

ex : Tu branches un compteur de vitesse sur ta roue de velo ; tu sauras que ta roue tourne si le compteur indique une valeur

ex : tu branches un capteur analogique sur une entrée de l'Arduino. tu ne sauras qu'il est alimenté que s'il renvoie une valeur à l'Arduino

Je vois pas trop comment tu veux connaitre l'etat d'un capteur ( alimenté ou non ) sans tester sa valeur de sortie.....

ou alors, monter un capteur de courant qui lui meme mesurera le courant d'alimentation qui va vers ton premier capteur ...

Mais dans ce cas-là ca s'appelle une usine à gaz :o

Vincent

Si tu regardes juste si la valeur renvoyée est supérieure à 0 ? en gros, si tu as une valeur en entrée, c'est que le capteur est branché. Sinon je comprend pas trop.

Luj06

Tu peux aussi utiliser les pull-in et pull-out du port analogique : si le port réponds en entrée aux pull-in que tu fais (digitalWrite(14,LOW) puis analogRead(0) et digitalWrite(14,HIGH) suivi de analogRead(0)), c'est qu'il n'y a rien de branché, right ?

Je vais essayer ce soir, je dis ça juste comme ça.

En tout cas je pense que c'est possible, puisque j'utilise les ports de l'Arduino en capteur capacitif en mesurant le temps avant que le port ne soit complètement chargé : je pense que ce temps varie selon ce qui y est branché.

Tu peux m'en dire plus sur le capteur que tu utilises ? Je testerai en conditions similaires.

yalefe

Luj06 , j'aie pas trop compris ce que tu fais ...

digitalWrite(14,LOW) et digitalWrite(14,HIGH) , ca revient à alimenter le port 14 , en supposant que le capteur est branché sur le port 14 ?

KiliYaBB

par exemple un cpateur de température LM135

je pense que ta méthode marchera dans ce cas

mais par contre sur un capteur "numerique" au sens ouvert ou fermé, un interrupteur a lame souple par exemple, il n'a que deux états 0 ou 1

alors comment savoir que l'ILS est braché au jack ou non ?

Luj06

digital 14 = analog 0
digital 15 = analog 1
etc...

Sur un port en sortie, effectivement digitalWrite met le port à HIGH ou le port à LOW mais sur un port en entrée, cela revient à positionner des résistances de tirage haut ou bas (en anglais, des "pull-up" et des "pull-down").

Si un capteur est connecté et applique une tension nulle, alors la pull-up n'aura pas d'effet sur lui (le capteur est "plus fort" que la résistance de tirage). Si un capteur est connecté et applique une tension maximum, alors la pull-down n'aura pas d'effet sur lui. On aura ainsi détecté qu'il y a un capteur connecté.

Bon, ça c'est la théorie, je passe à la pratique après le diner :)

yalefe

ok compris donc ca ne fonctionne que si le composant à une resistance propre...
ce qui n'aura aucune incidence sur un interrupteur

Luj06

Bon, les premiers résultats sont pas très probants, je continue demain.

Luj06

#11
Aug 04, 2009, 12:13 am Last Edit: Aug 04, 2009, 12:18 am by julien@pobot.org Reason: 1
Hey ! on est déjà demain, donc j'ai une solution :)
Juste une dernière tentative avant d'aller me coucher et ça a marché.

En rouge le signal, et en vert la connection. Lecture de droite à gauche. J'ai débranché le capteur et je l'ai rebranché, d'où le creux.

Le capteur utilisé est un softpot linéaire (tout ce que j'avais sous la main en fait).



Donc le code :

Code: [Select]

void setup()
{
 // liaison série pour le debug
 Serial.begin(115200);  
 // patte analogique 0 (= digital 14) en entrée
 pinMode(14,INPUT);
 // résistance de tirage haut (pull-up) adapté au capteur analogique Softpot
 digitalWrite(14,HIGH);  
}

void loop()
{  
 // première ligne (en rouge), la valeur du capteur
 Serial.print(analogRead(0));
 Serial.print(" ");
 // seconde ligne (en vert), le test de connection
 Serial.print(isConnected()?500:0);
 Serial.print(" ");
 // troisième valeur non signifiante, pour garder l'oscillo 3D en fonction
 Serial.print(0);
 Serial.print(" ");
 Serial.println();
 delay(50);  
}

/**
* Test de connection d'un capteur sur l'entrée analogique 0
* à adapter selon votre capteur (risque de boucle infinie dans le while)
*/
boolean isConnected(void)
{
 int count = 0;
 // mettre à zéro volts la patte analog 0
 pinMode(14,OUTPUT);
 digitalWrite(14,LOW);
 // puis repasser en entrée avec pull-up
 pinMode(14,INPUT);  
 digitalWrite(14,HIGH);
 // et plus qu'à compter la "charge" de la patte 0
 // comme avec un capteur capacitif
 while (digitalRead(14) != HIGH) {
   count++;
   // ici, rajouter une sortie lorsque le compteur est supérieur à ... selon vos tests
   if (count > 10) return true;
 }
 // on remarque que lorsque le capteur est débranché, c'est immédiat,  
 // donc count = 0 mais si le capteur est branché, on a une valeur non nulle
 // on ne test le compteur que lorsqu'il y a un doute sur la connection
 return analogRead(0) != 1023 || count != 0;
}


Voilà, donnez vos résultats et vos idées pour améliorer.

Go Up