quel composant ? deux interrupteurs quatre états

bonjour a tous,
je sais pas si il existe un composant permettant de raccorder deux interrupteurs analogique et lire avec un seul pin l'état de ces deux portes ? (soit les quatre états).

Au pire j'ai pensé à un système de résistances sur chaque interrupteurs de valeurs différentes... me permettant d'en déduire les "portes" en fonction du voltage entrant... mais si il existent un composant permettant de faire ce type de "logique" je suis preneur !

En faisant un diviseur de tension avec les interrupteurs et des résistances, on peut lire plusieurs inter sur une entrée analogique.

Un montage là (cliquer sur l'image):

edit:
J'ai même retrouvé un fil sur la partie française du forum
http://arduino.cc/forum/index.php/topic,49877.0.html

c'est exactement ce que j'avais en tête, une valeur de résistance différente sur chaque switch, mais en fait j'ai beau réfléchir et plus j'y pense et plus je crois qu'il vaut mieux que chaque switch soit connecté indépendamment, cela permettra en fait de rendre le système plus "souple", et c'est les résultats que l'on regroupera (je pense utiliser des CD4067 )

merci pour ton aide.

Bonjour,

Regarde du côté du CD4067 (multiplexeur analogique), du CD4021 (INPUT numériques SPI) ou du PCF8574 (I/O numériques I2C) :wink:

plus j'y pense et plus je crois qu'il vaut mieux que chaque switch soit connecté indépendamment, cela permettra en fait de rendre le système plus "souple",

Je ne vois pas très bien ce que tu entends par plus souple.
Si tu as 2 inter cela fais 4 états possibles. Si les résistances sont de valeurs différentes tu peux récupérer 4 tensions différentes sans aucun problème. Et il n'y a pas d’ambiguïté dans la tension retournée.
Je ne vois pas comment tu pourrais faire plus souple. Ou alors tu n'as pas tout dit de ton besoin au départ.

Avec seulement 2 entrées la solution de fdufnews est la plus simple et n'utilise qu'une pin.
Pour l'autre solution (mux, pcf , etc ) je pencherais pour un PCF8574 car l'I2C n'utilisera jamais plus de 2 sorties.

Les multiplexeurs ça peut être trompeur : dans tout les cas faut il compter les sorties pour la commande du mux et l'entrée pour tester la sortie du mux.
Donc
entrées cde du mux sortie gain en signaux
2 1 1 0
3 2 1 0
4 2 1 1
5 3 1 1
6 3 1 2
7 3 1 3
8 3 1 4
9 4 1 4

Le mux est certes plus simple à gérer que l'I2C mais reste moins intéressant en termes de nbres de sorties utilisées.

fdufnews:
Je ne vois pas très bien ce que tu entends par plus souple.

en fait mon programme va etre en deux parties. Une partie "sensor" qui vont stocker toutes les informations des capteurs, et une partie "dynamique", des "modules" que tu vas ajouter a foison et paramètrer comme tu veux. Et ce sont eux qui vont donc utiliser les valeurs des différents sensors et effectuer une action.
Par exemple pour notre cas de ce post, j'ai pensé déduire l'état de la porte du garage : ouverte, fermée, en sécurité. J'ai donc différents état que deux interrupteurs peuvent sans mal déduire.
Ma reflexion était en fait de savoir si ces deux interrupteurs devaient être analysé séparément (comme deux sensors indépendant) ou alors tel qu'un seul et même interrupteur... du coup je sais plus quoi faire :wink:

il est vrai qu'on parle "d'une même porte de garage", donc la logique voudrait que cela soit qu'un seul "wire"...

Rebonjour fred133084, décidément aujourd'hui je tombe sur tous tes posts...

Utiliser des valeurs analogiques pour gérer plusieurs inters sur 1 entrée fonctionne très bien, mais si j'ai bien compris tu risques d'avoir un peu de longueur de câble entre le capteur et l'Arduino et là tu prends des risques d'avoir pas mal de fausses lectures.

Tu te souviens de ce que j'avais proposé dans mon post domotique : I2C plus adaptateurs longue distance pour le bus, me paraît et plus fiable et plus "souple" (au moins 8 entrées sur un node, possibilité de positionner plusieurs nodes sur le réseau, …)

De mon coté pas avancé (toujours pris par des développements sur Picaxe au boulot) mais j'ai commandé et reçu le matos pour faire les tests, me manque plus que le temps (je sais tu es plus pressé que moi). Je te tiens au courant

salut et merci de ta réponse !! je vais voir tout cela ... je sens surtout qu'il va falloir que je manipule pour comprendre "un peu plus" :wink: ahhh le temps de la chataigne quand on touche le fil rouge est bien loin ! lol

si j'ai bien compris tu risques d'avoir un peu de longueur de câble entre le capteur et l'Arduino et là tu prends des risques d'avoir pas mal de fausses lectures

Il est toujours possible de mettre un petit condensateur à l'entrée de l'arduino pour filtrer les perturbations captées par la ligne.

Quote
si j'ai bien compris tu risques d'avoir un peu de longueur de câble entre le capteur et l'Arduino et là tu prends des risques d'avoir pas mal de fausses lectures

Il est toujours possible de mettre un petit condensateur à l'entrée de l'arduino pour filtrer les perturbations captées par la ligne.

Regardons et comprenons ce qui se passe : les oscillations dont je parle ne sont pas des rebonds mécaniques mais électriques.
Des fils longs présentent une inductance non négligeable contrairement aux liaisons courtes qui ne dépassent pas quelques cm.
Il y a des capacités aux deux extrémités des fils, soit que l'on a placé pour masquer les rebonds mécaniques, soit tout simplement parce qu'elles sont présentes aux entrées du micro-controleur.

On ne va pas faire de calculs inutiles et compliqués il suffit de se rappeler des choses simples :

  • une inductance avec un condensateur forment un circuit du 2nd ordre.
  • ce circuit peut présenter des sur-oscillations si le facteur d'amortissement est de faible valeur.
  • une résistance en série avec les fils augmente très rapidement le facteur d'amortissement.

L'impédance des entrées analogique est très grande >100 millions d'ohms.
Les résistances câblées avec les boutons poussoirs sont de l'ordre de 5k à 50k ohms selon la configuration.

Avec une résistance de 100 ohms en série avec les fils on est sur d'amortir suffisamment le circuit RLC sans risquer de créer un diviseur potentiométrique.

Ci dessous en rouge un circuit non amorti et en noir le même circuit avec une résistance en série.

path2987.png

merci !!

bon j'ai commencé a testé.
pas concluant. ou plus exactement j'ai deux problèmes.

  1. si le garage est fermée, donc aucun des deux inter n'est ouvert donc aucun courant dans les résistances en // = l'arduino s'affole il analyse n'importe quoi comme valeur dans l'analogread (normal selon la doc). Du coup comment faire pour contourner le problème (rajouter une troisieme resistance en // en direct pour quelle soit passante ?).

  2. porte du garage ouverte, ben cela consomme... étrange non ? :wink: que puis-je faire pour réduire au maximum l'intensité (donc la consommation edf lol) adin de pouvoir continuer a tester les différents états ?
    En fait cette question est plus générale et concerne la globalité de mon projet afin de réduire la consommation générale des sensors "switch" (j'ai une alimentation en découpage conçu spécialement pour mes différents niveau de puissance -fait par mon oncle je vous rassure !).

merci de votre aide.

Tu as fais ton installation sans faire de schéma ?

Si tu nous le communiquait cela serait plus facile pour comprendre.

  1. il faut mettre des résistances de pull up ou de pull down (comme y'a pas de schéma je suppose ...)
  2. librairie sleep.h et interruptions

yes pas de schemas pour cela.

deux inters ILS en //, chacun sa résistance.

La porte de garage fermée = aucun switch activé
La porte de garage ouverte = 1 switch activé avec sa résistance
La porte de garage en sécurité = le second switch activé avec sa valeur de resistance

Pour le moment je teste dans mon coin tranquilou afin de me familiariser avec l'arduino et les composants. Donc, j'ai fait au plus simple... sachant que les deux switch ne peuvent pas être simultané (dans notre cas présent !). La version finale sera mieux étudier et gèrera plus d'état.

B@tto : pour les interruptions je suis contre. Du moins je n'en vois pas l'utilité dans mon cas. D'autant que je vais quasi utiliser les 54 pins du mega donc les interruptions sont un luxe que je ne peux me permettent pour le temps machine (réponse/interaction).
Je pense plutôt mettre un delay de rafraichissement de l'information personnalisable pour chaque "sensor" connecté. Je commence a réflechir a l'ui.

Question bête, mais il y a t il une limite de mA pour que l''arduino soit capable de lire avec analogRead ?

Pourtant, un shema ne serait pas du luxe, quand on lit cela

deux inters ILS en //, chacun sa résistance.

on craint le pire :astonished:

L'Arduino ne mesure pas des mA mais des Volts. Il faut transformer le courant a mesurer en tension. Par exemple avec une resistance ou un shunt.

Explique nous un peu plus ce que tu veux mesurer, alors on pourra t'aider.

Jacques

Bonjour et merci de ta réponse,
voici mon "schéma" eagle.

Le but est d'utiliser un unique pin pour mesurer différent état d'un même "sensor" (ici une porte de garage par exemple), et de limiter la consommation électrique au maximum.

L1/L2 (...) des valeurs différentes permettant d'en déduire les états
L4 sert a éviter de "rendre fou" la lecture analogread.
L3 pour amortir comme tu m'as dit.

ai je bon ? (pour le moment cela marche chez moi du moins). Je voudrais juste réduire au maximum la consommation électrique car L4 fonctionne 24/24H, et L1 ou L2 8 heures pas jour.

en fait, quel "astuce" pourrais je mettre en oeuvre apres L3 pour donc brider au max la consommation électrique ? un composant qui ne consomme que des µA lol ou je fais fausse route peut être...

Bonjour,

  1. pour identifier une resistance sur un shema on utilise l'abreviation "R" exemple R1,R2 etc.
  2. l'abreviation "L" est utilisee pour les selfs ou inductance. Il faudra t'y faire, c'est universel.
  3. ton shema serait plus explicite si tu donnais les valeurs des resistances
  4. pour info : tout le monde te dit d'utiliser des resistances de pull-up ou pull down. Un petit calcul te dira qu'une resistance de 10K, valeur generalement utilisee pour cette fonction va consommer 1KW/h, qui l'unite de base de facturation de EDF ..... au bout de 45,5 ans. (calcul avec 5V d'alimentation et rendement 100% de l'alimentation)
  5. il me semble avoir lu que tu utilises un Arduino Mega. Cela vaut-il la peine de se casser la tete pour gagner 1 I/O alors que ton projet en est a son tout debut !!

Jacques

Remarque : question de vocabulaire -> pour que l'on puisse se comprendre que le schéma vienne d'Europe, d'Amérique ou d'Asie des mnémoniques ont été définies:
L -> c'est pour les inductances
R -> c'est pour les résistances
C -> c'est pour les condensateurs.

: le temps de rédiger et j'ai été grillé par JMe87, mais j'en remet une couche quand même.

Ceci étant dit ton schéma est quand même compréhensible. Par contre il faudrait indiquer la valeur des résistances.
Comment peux tu parler de consommation a réduire si tu ne communique pas ces valeurs. Au passage je rappelle que pour calculer la consommation il existe la formule U=RI.

Remarque 2 :
A) A titre personnel j'aurais plutôt mis les contacts avec un point à la masse plutôt qu'au Vcc. Les contacts sont des pièces mécaniques qui peuvent se détériorer et comme ton schéma est fait s'ils se mettent à la masse ils court-circuitent l'alimentation en mettant la totalité de l'installation en défaut.
B) Comme tu as beaucoup de longueur de fil le réseau qu'ils constituent forme une superbe antenne qui capte tout ce qui passe d'où sans doute "l'arduino fou".
Pour pallier à cet effet je placerais un condensateur entre l'entrée analogique et la masse -> à raz de l'arduino.
Cerise sur le gateau le condensateur fera un excellant anti-rebond.