Pages: [1]   Go Down
Author Topic: Savoir si un capteur est branché  (Read 1108 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Full Member
***
Karma: 0
Posts: 207
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 !
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 43
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.... smiley-wink
« Last Edit: August 03, 2009, 05:31:12 am by yannick » Logged

0
Offline Offline
Full Member
***
Karma: 0
Posts: 207
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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é.
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 43
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

0
Offline Offline
Full Member
***
Karma: 0
Posts: 198
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Sophia-Antipolis (06)
Offline Offline
God Member
*****
Karma: 4
Posts: 618
Rejoignez le club !
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 43
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 ?
Logged

0
Offline Offline
Full Member
***
Karma: 0
Posts: 207
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 ?
Logged

Sophia-Antipolis (06)
Offline Offline
God Member
*****
Karma: 4
Posts: 618
Rejoignez le club !
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 43
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Sophia-Antipolis (06)
Offline Offline
God Member
*****
Karma: 4
Posts: 618
Rejoignez le club !
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Sophia-Antipolis (06)
Offline Offline
God Member
*****
Karma: 4
Posts: 618
Rejoignez le club !
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hey ! on est déjà demain, donc j'ai une solution smiley
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:
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.
« Last Edit: August 03, 2009, 05:18:05 pm by julien@pobot.org » Logged

Pages: [1]   Go Up
Jump to: