Ligne 3 : |
Ligne 3 : |
| == Switch Magnétique == | | == Switch Magnétique == |
| | | |
− | Aussi appelé contact magnétique, {{pl|60|disponible ici}}, ce contact utilise un [http://fr.wikipedia.org/wiki/Interrupteur_reed interrupteur reed] <small>(''Wikipédia'')</small> et un aimant pour activer le contact. | + | Aussi appelé contact magnétique, {{pl|60|disponible ici}}, ce contact utilise un [http://fr.wikipedia.org/wiki/Interrupteur_reed interrupteur reed] <small>(''Wikipédia'')</small> et un aimant pour activer un contact. |
| | | |
− | Ce type de contact est utilisé pour détecter l'ouverture d'une porte où d'un boitier.
| + | Un contact magnétique est constitué de deux parties. |
| + | # Un aimant |
| + | # Le contact magnétique (aussi appelé Reed switch). |
| + | |
| + | [[Fichier:ReedSwitch.jpg]] |
| + | |
| + | Ces contacts,faciles à mettre en oeuvre, servent généralement à détecter l'ouverture d'une porte ou d'une fenêtre. |
| + | Si vous disposez d'un système d'alarme à la maison vous avez probablement noté ces petits boitiers blancs à proximité des fenêtres. |
| + | |
| + | Les contacts magnétiques sont généralement ouvert au repos (c'est a dire "non sollicité par un aimant").<br /> |
| + | Lorsque l'on place l'aimant à proximité, le contact se ferme. En étant attentif, il est parfois même possible d'entendre le contact se fermer. |
| | | |
| Le principe physique d'un contact reed est identique à celui d'un bouton poussoir... c'est un contact!. | | Le principe physique d'un contact reed est identique à celui d'un bouton poussoir... c'est un contact!. |
| | | |
− | Par conséquent, nous vous recommandons fortement [[Spark-Core-Bouton|la lecture de notre tutoriel sur le bouton poussoir]] et la section décrivant la protection d'une entrée digitale. | + | Par conséquent, nous vous recommandons fortement [[Spark-Core-Bouton|la lecture de notre tutoriel sur le bouton poussoir]] et la section décrivant la protection d'une entrée digitale et le déparasitage logiciel. |
| | | |
| == Logique inversée == | | == Logique inversée == |
Ligne 19 : |
Ligne 29 : |
| | | |
| Dans le cas ci-présent, il ne faut pas détecter la fermeture d'un contact (comme le bouton poussoir) '''mais l'ouverture d'un contact'''. | | Dans le cas ci-présent, il ne faut pas détecter la fermeture d'un contact (comme le bouton poussoir) '''mais l'ouverture d'un contact'''. |
− |
| + | |
| == Montage == | | == Montage == |
| Comme pour le bouton poussoir, le montage est élémentaire et utilise une résistance pull-down de 10 KOhms (brun, noir, orange) et une résistance de protection de 100 Ohms (brun, noir, brun). | | Comme pour le bouton poussoir, le montage est élémentaire et utilise une résistance pull-down de 10 KOhms (brun, noir, orange) et une résistance de protection de 100 Ohms (brun, noir, brun). |
| | | |
− | [[fichier:SPARK-MAGNETIC-SWITCH_bb.jpg]] | + | [[fichier:SPARK-MAGNETIC-SWITCH_bb.jpg|640px]] |
| + | |
| + | Lorsque le contact est fermé (la porte fermée), 3.3V est appliqué sur la broche D4... lorsque la porte est ouverte, le contact reed s'ouvre et la broche D4 est ramenée à la masse par la résistance pull-down. |
| + | |
| + | == Code == |
| + | Voici le petit bout de code pour votre Core |
| + | |
| + | <nowiki>// ------------------------------------------------- |
| + | // Internet Magnetic - Détection d'ouverture de contact Reed |
| + | // ------------------------------------------------- |
| + | // |
| + | // Exemple didactique dont le but est: |
| + | // 1) De détecter l'ouverture de contact reed (switch magnetic) avec |
| + | // avec déparasitage logiciel. |
| + | // 2) Reporte cette information dans une variable "counter" sur Particle Cloud |
| + | // (le nombre d'ouverture) permettant à un autre logiciel comme |
| + | // un SmartPhone de détecter l'événement. |
| + | // 3) Reporte le statut actuel du senseur dans la variable "close". |
| + | // Permet de savoir si le contact/porte est fermé. |
| + | // Pratique par exemple pour la cabane de jardin, chambre froide, |
| + | // box du cheval (s'il est de sortie... donc porte ouverte), etc |
| + | // 3) Offrir une fonction "reset" sur Particle Cloud permettant |
| + | // a un autre logiciel de remettre le compteur "counter" à zéro. |
| + | // Force la relecture de l'entrée digital et la mise à jour |
| + | // de la variable "open" |
| + | // |
| + | // Voyez le tutoriel MCHobby |
| + | // http://wiki.mchobby.be/index.php?title=Spark-Core-Switch-Magnetic |
| + | // Produit disponible chez MCHobby: |
| + | // http://shop.mchobby.be/product.php?id_product=60 |
| + | // |
| + | // contact magnétique/contact reed branché sur la broche D4 |
| + | #define btnPin 4 |
| + | |
| + | // Créer une variable qui pour stocker la valeur |
| + | // du compteur de pression |
| + | int counter = 0; |
| + | |
| + | // Créer les variables internes au programme |
| + | int contactState; // etat du bouton |
| + | |
| + | /* Exécuté une fois au démarrage */ |
| + | void setup() |
| + | { |
| + | // Enregistrer la variable compteur sur Particle Cloud |
| + | Spark.variable("counter", &counter, INT ); |
| + | // Publie l'état du contact dans la variable "close" sur Particle Cloud |
| + | Spark.variable("close", &contactState, INT ); |
| + | |
| + | // Enregistrer la fonction "reset compteur" sur Particle Cloud |
| + | Spark.function("reset", resetCounter ); |
| + | |
| + | // Active la broche D4 comme entrée |
| + | pinMode(btnPin, INPUT); |
| + | // lecture de l'état initial |
| + | contactState = digitalRead( btnPin ); |
| + | } |
| + | |
| + | /* la fonction loop() est executée encore et encore */ |
| + | void loop() |
| + | { |
| + | int val, val2; // variable pour stocker la valeur lue sur la broche D4 |
| + | |
| + | val = digitalRead( btnPin ); |
| + | delay( 10 ); // delai de 10ms pour déparasitage logiciel |
| + | val2 = digitalRead( btnPin ); |
| + | |
| + | // si val = val2 --> lecture de l'entrée est consistante |
| + | // l'état de l'entrée est définit avec certitude... ce n'est pas |
| + | // un parasite. |
| + | if( val == val2 ){ |
| + | |
| + | // Si le contact a changé d'état? (passe du HIGH->LOW ou de LOW->HIGH) |
| + | if( val != contactState ){ |
| + | |
| + | // Si le contact est ouvert |
| + | if( val == LOW ){ |
| + | |
| + | counter = counter +1; // incrémenter le compteur |
| + | } |
| + | |
| + | // Se souvenir du nouvel état de l'entrée |
| + | contactState = val; |
| + | } |
| + | |
| + | } |
| + | |
| + | } |
| + | |
| + | // Cette fontion est appelée lorqu'il y a un appel correspondant sur l'API |
| + | // Pas de chaine de commande. |
| + | // a) Réinitialise le compteur "counter" à zéro. |
| + | // b) mise-à-jour de la variable open. |
| + | int resetCounter( String command ){ |
| + | counter = 0; |
| + | |
| + | // relecture de l'entrée |
| + | contactState = digitalRead( btnPin ); |
| + | delay( 10 ); // déparasitage logiciel |
| + | contactState = digitalRead( btnPin ); |
| + | |
| + | return 1; // retour de valeur pour l'API |
| + | }</nowiki> |
| + | |
| + | == Faire un appel d'API avec CURL == |
| + | Nous allons maintenant tester notre programme... nous allons donc faire des appels d'API sur Particle Cloud. |
| + | |
| + | Pour rappel, nous avons deux API dans notre programme: |
| + | * '''counter''' (variable) - permet de savoir combien de fois le contact magnétique à été ouvert. |
| + | * '''close''' (variable) - permet de savoir si le contact magnétic est fermé (close=1). |
| + | * '''reset''' (function) - sans paramètre, permet de réinitialiser le compteur à 0 mais aussi de reforcer la lecture de l'entrée :-) |
| + | |
| + | Dans les exemples Curl ci-dessous, le Core_ID est fixé à 0123456789abcdef et l'Access Token fixé à 123412341234, notre tuto sur la LED internet explique [[Spark-Core-NetLED#Faire_une_requ.C3.AAte_sur_l.27API|comment identifier votre CORE_ID et votre ACCESS TOKEN]]. |
| + | === Le compteur === |
| + | Pour commencer, nous allons récupérer le résultat du compteur en utilisant curl (voyez nos précédents tutoriels concernant CURL). |
| + | |
| + | <nowiki>curl -G https://api.spark.io/v1/devices/0123456789abcdef/counter -d access_token=123412341234</nowiki> |
| + | |
| + | Ce qui produit le résultat ci-dessous, où vous pouvez constater que nous avons ouvert 5 fois le contact: |
| + | |
| + | <nowiki>{ |
| + | "cmd": "VarReturn", |
| + | "name": "counter", |
| + | "result": 5, |
| + | "coreInfo": { |
| + | "last_app": "", |
| + | "last_heard": "2014-12-31T15:53:55.238Z", |
| + | "connected": true, |
| + | "deviceID": "0123456789abcdef" |
| + | } |
| + | }</nowiki> |
| + | |
| + | === L'état du contact === |
| + | Pour commencer, nous allons récupérer l'état du contact magnétique en utilisant curl (voyez nos précédents tutoriels concernant CURL). |
| + | |
| + | <nowiki>curl -G https://api.spark.io/v1/devices/0123456789abcdef/close -d access_token=123412341234</nowiki> |
| + | |
| + | Ce qui produit le résultat ci-dessous, où vous pouvez constater que le contact est actuellement ouvert (a priori, la porte est ouverte): |
| + | |
| + | <nowiki>{ |
| + | "cmd": "VarReturn", |
| + | "name": "close", |
| + | "result": 1, |
| + | "coreInfo": { |
| + | "last_app": "", |
| + | "last_heard": "2014-12-31T15:53:55.238Z", |
| + | "connected": true, |
| + | "deviceID": "0123456789abcdef" |
| + | } |
| + | }</nowiki> |
| + | |
| + | === Réinitialiser le compteur === |
| + | Idéalement votre programme utilisant l'API Particle devrait prendre la valeur du compteur... puis surveiller le changement de cette valeur. |
| + | |
| + | Si le compteur augmente... c'est que l'on a ouvert le contact (la porte) :-) |
| + | |
| + | Restons pragmatique... cette façon de faire n'est pas forcement confortable. |
| + | |
| + | En conséquence, nous avons ajouté une fonction '''reset''' sur Particle Cloud pour réinitialiser le compteur (ps: j'ai volontairement laissé le paramètre "params", même s'il est vide). |
| + | |
| + | <nowiki>curl https://api.spark.io/v1/devices/0123456789abcdef/reset -d access_token=123412341234 -d params=</nowiki> |
| + | |
| + | Ce qui produit le résultat suivant: |
| + | |
| + | <nowiki>{ |
| + | "id": "0123456789abcdef", |
| + | "name": "mch-demo", |
| + | "last_app": null, |
| + | "connected": true, |
| + | "return_value": 1 |
| + | }</nowiki> |
| + | |
| + | La valeur 1 est retournée par l'exécution de la fonction sur le Particle... mais le compteur sera bien à zéro! |
| | | |
| {{Spark-Core-Hacking-TRAILER}} | | {{Spark-Core-Hacking-TRAILER}} |