Modifications

Sauter à la navigation Sauter à la recherche
371 octets ajoutés ,  24 octobre 2015 à 13:17
aucun résumé de modification
Ligne 1 : Ligne 1 :  
{{Spark-Core-Hacking-NAV}}
 
{{Spark-Core-Hacking-NAV}}
  −
{{traduction}}
      
== Senseur PIR ==
 
== Senseur PIR ==
Ligne 22 : Ligne 20 :  
== Montage ==
 
== Montage ==
 
La sortie du senseur PIR est une '''sortie active''' qui place le potentiel à GND/Masse ou 3.3V en fonction de l'état du senseur PIR.
 
La sortie du senseur PIR est une '''sortie active''' qui place le potentiel à GND/Masse ou 3.3V en fonction de l'état du senseur PIR.
 +
 +
Cette sortie est donc compatible avec un système 3.3v, même si le senseur a besoin de 5 volts pour fonctionner correctement. En branchant l'alimentation du senseur sur la broche VIN, nous y récupérons une tension de 5V lorsque le Particle Core est alimenté via USB (5V) ou via {{underline|une source de tension externe 5V}} branchée directement sur VIN.
    
[[fichier:SPARK-PIR_bb.jpg|480px]]
 
[[fichier:SPARK-PIR_bb.jpg|480px]]
Ligne 37 : Ligne 37 :  
// 1) De détecter l'activation d'un senseur PIR avec
 
// 1) De détecter l'activation d'un senseur PIR avec
 
//    avec déparasitage logiciel.
 
//    avec déparasitage logiciel.
// 2) Reporte cette information dans une variable "counter" sur Spark Cloud
+
// 2) Reporte cette information dans une variable "counter" sur Particle Cloud
 
//    (le nombre de détection) permettant à un autre logiciel comme
 
//    (le nombre de détection) permettant à un autre logiciel comme
 
//    un SmartPhone de détecter l'événement.
 
//    un SmartPhone de détecter l'événement.
Ligne 44 : Ligne 44 :  
//    Pratique par exemple pour savoir s'il y a de l'activité dans une  
 
//    Pratique par exemple pour savoir s'il y a de l'activité dans une  
 
//    pièce (ex: surveiller un stock en pleine nuit).
 
//    pièce (ex: surveiller un stock en pleine nuit).
// 3) Offrir une fonction "reset" sur Spark Cloud permettant
+
// 3) Offrir une fonction "reset" sur Particle Cloud permettant
 
//    a un autre logiciel de remettre le compteur "counter" à zéro.
 
//    a un autre logiciel de remettre le compteur "counter" à zéro.
 
//    Force la relecture de l'entrée digital et la mise à jour
 
//    Force la relecture de l'entrée digital et la mise à jour
Ligne 55 : Ligne 55 :  
//
 
//
 
// Sortie du senseur PIR branché sur la broche D4
 
// Sortie du senseur PIR branché sur la broche D4
#define btnPin 4
+
#define pirPin 4
    
// Créer une variable qui pour stocker la valeur
 
// Créer une variable qui pour stocker la valeur
Ligne 67 : Ligne 67 :  
void setup()
 
void setup()
 
{
 
{
   // Enregistrer la variable compteur sur Spark Cloud
+
   // Enregistrer la variable compteur sur Particle Cloud
 
   Spark.variable("counter", &counter, INT );
 
   Spark.variable("counter", &counter, INT );
   // Publie l'état du contact  dans la variable "close" sur Spark Cloud
+
   // Publie l'état du contact  dans la variable "close" sur Particle Cloud
   Spark.variable("close", &contactState, INT );
+
   Spark.variable("actif", &pirState, INT );
 
    
 
    
   // Enregistrer la fonction "reset compteur" sur Spark Cloud
+
   // Enregistrer la fonction "reset compteur" sur Particle Cloud
 
   Spark.function("reset", resetCounter );
 
   Spark.function("reset", resetCounter );
 
    
 
    
 
   // Active la broche D4 comme entrée
 
   // Active la broche D4 comme entrée
   pinMode(btnPin, INPUT);
+
   pinMode(pirPin, INPUT);
 
   // lecture de l'état initial
 
   // lecture de l'état initial
   contactState = digitalRead( btnPin );
+
   pirState = digitalRead( pirPin );
 
}
 
}
   Ligne 86 : Ligne 86 :  
   int val, val2; // variable pour stocker la valeur lue sur la broche D4
 
   int val, val2; // variable pour stocker la valeur lue sur la broche D4
 
    
 
    
   val = digitalRead( btnPin );
+
   val = digitalRead( pirPin );
 
   delay( 10 ); // delai de 10ms pour déparasitage logiciel
 
   delay( 10 ); // delai de 10ms pour déparasitage logiciel
   val2 = digitalRead( btnPin );
+
   val2 = digitalRead( pirPin );
 
    
 
    
 
   // si val = val2 --> lecture de l'entrée est consistante
 
   // si val = val2 --> lecture de l'entrée est consistante
Ligne 96 : Ligne 96 :  
        
 
        
 
       // Si le contact a changé d'état? (passe du HIGH->LOW ou de LOW->HIGH)
 
       // Si le contact a changé d'état? (passe du HIGH->LOW ou de LOW->HIGH)
       if( val != contactState ){
+
       if( val != pirState ){
 
            
 
            
           // Si le contact est ouvert
+
           // Si le PIR est actif
           if( val == LOW ){
+
           if( val == HIGH ){
 
                
 
                
 
               counter = counter +1; // incrémenter le compteur
 
               counter = counter +1; // incrémenter le compteur
Ligne 105 : Ligne 105 :  
            
 
            
 
           // Se souvenir du nouvel état de l'entrée
 
           // Se souvenir du nouvel état de l'entrée
           contactState = val;  
+
           pirState = val;  
 
       }
 
       }
 
    
 
    
Ligne 115 : Ligne 115 :  
// Pas de chaine de commande.
 
// Pas de chaine de commande.
 
// a) Réinitialise le compteur "counter" à zéro.
 
// a) Réinitialise le compteur "counter" à zéro.
// b) mise-à-jour de la variable open.
+
// b) mise-à-jour de la variable actif.  
 
int resetCounter( String command ){
 
int resetCounter( String command ){
 
     counter = 0;
 
     counter = 0;
 
      
 
      
 
     // relecture de l'entrée
 
     // relecture de l'entrée
     contactState = digitalRead( btnPin );
+
     pirState = digitalRead( pirPin );
 
     delay( 10 ); // déparasitage logiciel
 
     delay( 10 ); // déparasitage logiciel
     contactState = digitalRead( btnPin );
+
     pirState = digitalRead( pirPin );
 
      
 
      
 
     return 1; // retour de valeur pour l'API
 
     return 1; // retour de valeur pour l'API
Ligne 128 : Ligne 128 :     
== Faire un appel d'API avec CURL ==
 
== Faire un appel d'API avec CURL ==
Nous allons maintenant tester notre programme... nous allons donc faire des appels d'API sur Spark Cloud.
+
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:
 
Pour rappel, nous avons deux API dans notre programme:
* '''counter''' (variable) - permet de savoir combien de fois le contact magnétique à été ouvert.
+
* '''counter''' (variable) - permet de savoir combien de fois le senseur PIR à été activé.
* '''close''' (variable) - permet de savoir si le contact magnétic est fermé (close=1).
+
* '''actif''' (variable) - permet de savoir si le le senseur PIR est actif.
 
* '''reset''' (function) - sans paramètre, permet de réinitialiser le compteur à 0 mais aussi de reforcer la lecture de l'entrée :-)
 
* '''reset''' (function) - sans paramètre, permet de réinitialiser le compteur à 0 mais aussi de reforcer la lecture de l'entrée :-)
   Ligne 141 : Ligne 141 :  
  <nowiki>curl -G https://api.spark.io/v1/devices/0123456789abcdef/counter -d access_token=123412341234</nowiki>
 
  <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:
+
Ce qui produit le résultat ci-dessous, où vous pouvez constater que nous avons activé 5 fois le senseur PIR:
    
  <nowiki>{
 
  <nowiki>{
Ligne 155 : Ligne 155 :  
}</nowiki>
 
}</nowiki>
   −
=== L'état du contact ===
+
=== L'état du senseur ===
Pour commencer, nous allons récupérer l'état du contact magnétique en utilisant curl (voyez nos précédents tutoriels concernant CURL).
+
Pour commencer, nous allons récupérer l'état du senseur PIR 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>
+
  <nowiki>curl -G https://api.spark.io/v1/devices/0123456789abcdef/actif -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):
+
Ce qui produit le résultat ci-dessous, où vous pouvez constater que le senseur est actuellement actif (a priori, quelqu'un est passé dans le champs de détection):
    
  <nowiki>{
 
  <nowiki>{
 
   "cmd": "VarReturn",
 
   "cmd": "VarReturn",
   "name": "close",
+
   "name": "actif",
 
   "result": 1,
 
   "result": 1,
 
   "coreInfo": {
 
   "coreInfo": {
Ligne 175 : Ligne 175 :     
=== Réinitialiser le compteur ===
 
=== Réinitialiser le compteur ===
Idéalement votre programme utilisant l'API Spark devrait prendre la valeur du compteur... puis surveiller le changement de cette valeur.
+
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) :-)
+
Si le compteur augmente... c'est qu'il détecte des mouvement (des personnes passent par là) :-)
    
Restons pragmatique... cette façon de faire n'est pas forcement confortable.  
 
Restons pragmatique... cette façon de faire n'est pas forcement confortable.  
   −
En conséquence, nous avons ajouté une fonction '''reset''' sur Spark Cloud pour réinitialiser le compteur (ps: j'ai volontairement laissé le paramètre "params", même s'il est vide).
+
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>  
 
  <nowiki>curl https://api.spark.io/v1/devices/0123456789abcdef/reset -d access_token=123412341234 -d params=</nowiki>  
Ligne 195 : Ligne 195 :  
}</nowiki>
 
}</nowiki>
   −
La valeur 1 est retournée par l'exécution de la fonction sur le Spark... mais le compteur sera bien à zéro!  
+
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}}
29 836

modifications

Menu de navigation