Différences entre versions de « Spark-Core-PIR »

De MCHobby - Wiki
Sauter à la navigation Sauter à la recherche
(Page créée avec « {{Spark-Core-Hacking-NAV}} == Switch Magnétique == Aussi appelé contact magnétique, {{pl|60|disponible ici}}, ce contact utilise un [http://fr.wikipedia.org/wiki/Interru... »)
 
 
(9 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
 
{{Spark-Core-Hacking-NAV}}
 
{{Spark-Core-Hacking-NAV}}
  
== Switch Magnétique ==
+
== Senseur PIR ==
  
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.  
+
Savoir lire l'état d'une entrée du port GPIO du Raspberry PI est une action fondamentale en hacking électronique.<br />
 +
Nous l'avions déjà abordé avec la lecture de l'état un bouton.<br />
 +
Dans cet article, nous allons détecter l'activation d'un senseur de proximité PIR à l'aide d'un Raspberry PI.
  
Un contact magnétique est constitué de deux parties.
+
[[Fichier:SenseurPir.jpg]]
# Un aimant
 
# Le contact magnétique (aussi appelé Reed switch).
 
  
[[Fichier:ReedSwitch.jpg]]
+
Voici un exemple qui vous propose de lire l'état du senseur PIR placé sur la broche le D4.<br />
 +
Une Led rouge est placée sur le D1, elle est allumée dans lorsque le senseur PIR détecte un mouvement.
  
Ces contacts,faciles à mettre en oeuvre, servent généralement à détecter l'ouverture d'une porte ou d'une fenêtre.
+
== Matériel ==
Si vous disposez d'un système d'alarme à la maison vous avez probablement noté ces petits boitiers blancs à proximité des fenêtres.
+
* Un {{pl|53|breadboard}} et {{pl|34|des fils extra souples}}
 
+
* Un {{pl|61|senseur PIR}}
Les contacts magnétiques sont généralement ouvert au repos (c'est a dire "non sollicité par un aimant").<br />
+
* 1 x {{pl|128|résistance de 1K Ohms}} (Brun, Noir, Rouge)
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.
+
* 1 x Led Rouge
 
+
* 1 x {{pl|518|Spark Core}}
Le principe physique d'un contact reed est identique à celui d'un bouton poussoir... c'est un contact!.  
+
== 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.
  
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.
+
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.
  
== Logique inversée ==
+
[[fichier:SPARK-PIR_bb.jpg|480px]]
Le principe de lecture d'un bouton poussoir et d'un contact magnétique est identique.
 
 
 
Il y a cependant une différence de logique:
 
* Lorsque la porte est fermée, l'aimant active l'interrupteur reed et le contact est fermé.
 
* Lorsque la porte est ouverte, l'aimant s'éloigne de l'interrupteur reed et le contact s'ouvre.
 
 
 
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 ==
 
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|640px]]
+
Lorsque le senseur PIR détecte une activité, il active sa sortie, ce qui applique 3.3V sur la broche D4. Cette sortie PIR reste active pendant plusieurs secondes... à la suite de quoi le potentiel est ramené la masse (broche D4 est donc à 0 volt).
  
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 ==
 
== Code ==
 
Voici le petit bout de code pour votre Core
 
Voici le petit bout de code pour votre Core
  
 
  <nowiki>// -------------------------------------------------
 
  <nowiki>// -------------------------------------------------
// Internet Magnetic - Détection d'ouverture de contact Reed
+
// Internet PIR - Détection de mouvement avec senseur PIR
 
// -------------------------------------------------
 
// -------------------------------------------------
 
//
 
//
 
// Exemple didactique dont le but est:
 
// Exemple didactique dont le but est:
// 1) De détecter l'ouverture de contact reed (switch magnetic) 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 d'ouverture) 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.
// 3) Reporte le statut actuel du senseur dans la variable "close".
+
// 3) Reporte le statut actuel du senseur dans la variable "actif".
//    Permet de savoir si le contact/porte est fermé.  
+
//    Permet de savoir si le senseur est actuellement actif.  
//    Pratique par exemple pour la cabane de jardin, chambre froide,
+
//    Pratique par exemple pour savoir s'il y a de l'activité dans une
//    box du cheval (s'il est de sortie... donc porte ouverte), etc
+
//    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
//    de la variable "open"
+
//    de la variable "actif"
 
//
 
//
 
// Voyez le tutoriel MCHobby
 
// Voyez le tutoriel MCHobby
//  http://wiki.mchobby.be/index.php?title=Spark-Core-Switch-Magnetic
+
//  http://wiki.mchobby.be/index.php?title=Spark-Core-PIR
 
// Produit disponible chez MCHobby:
 
// Produit disponible chez MCHobby:
//  http://shop.mchobby.be/product.php?id_product=60
+
//  http://shop.mchobby.be/product.php?id_product=61
 
//
 
//
// contact magnétique/contact reed 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 72 : Ligne 62 :
  
 
// Créer les variables internes au programme
 
// Créer les variables internes au programme
int contactState; // etat du bouton
+
int pirState; // etat du senseur PIR
  
 
/* Exécuté une fois au démarrage */
 
/* Exécuté une fois au démarrage */
 
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 96 : 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 106 : 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 115 : 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 125 : 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 138 : 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 151 : 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 165 : 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 185 : 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 205 : 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}}

Version actuelle datée du 24 octobre 2015 à 13:17


MCHobby investit du temps et de l'argent dans la réalisation de traduction et/ou documentation. C'est un travail long et fastidieux réalisé dans l'esprit Open-Source... donc gratuit et librement accessible.
SI vous aimez nos traductions et documentations ALORS aidez nous à en produire plus en achetant vos produits chez MCHobby.

Senseur PIR

Savoir lire l'état d'une entrée du port GPIO du Raspberry PI est une action fondamentale en hacking électronique.
Nous l'avions déjà abordé avec la lecture de l'état un bouton.
Dans cet article, nous allons détecter l'activation d'un senseur de proximité PIR à l'aide d'un Raspberry PI.

SenseurPir.jpg

Voici un exemple qui vous propose de lire l'état du senseur PIR placé sur la broche le D4.
Une Led rouge est placée sur le D1, elle est allumée dans lorsque le senseur PIR détecte un mouvement.

Matériel

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.

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 une source de tension externe 5V branchée directement sur VIN.

SPARK-PIR bb.jpg

Lorsque le senseur PIR détecte une activité, il active sa sortie, ce qui applique 3.3V sur la broche D4. Cette sortie PIR reste active pendant plusieurs secondes... à la suite de quoi le potentiel est ramené la masse (broche D4 est donc à 0 volt).

Code

Voici le petit bout de code pour votre Core

// -------------------------------------------------
// Internet PIR - Détection de mouvement avec senseur PIR
// -------------------------------------------------
//
// Exemple didactique dont le but est:
// 1) De détecter l'activation d'un senseur PIR avec
//    avec déparasitage logiciel.
// 2) Reporte cette information dans une variable "counter" sur Particle Cloud
//    (le nombre de détection) permettant à un autre logiciel comme
//    un SmartPhone de détecter l'événement.
// 3) Reporte le statut actuel du senseur dans la variable "actif".
//    Permet de savoir si le senseur est actuellement actif. 
//    Pratique par exemple pour savoir s'il y a de l'activité dans une 
//    pièce (ex: surveiller un stock en pleine nuit).
// 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 "actif"
//
// Voyez le tutoriel MCHobby
//   http://wiki.mchobby.be/index.php?title=Spark-Core-PIR
// Produit disponible chez MCHobby:
//   http://shop.mchobby.be/product.php?id_product=61
//
// Sortie du senseur PIR branché sur la broche D4
#define pirPin 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 pirState; // etat du senseur PIR

/* 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("actif", &pirState, INT );
  
  // Enregistrer la fonction "reset compteur" sur Particle Cloud
  Spark.function("reset", resetCounter );
  
  // Active la broche D4 comme entrée
  pinMode(pirPin, INPUT);
  // lecture de l'état initial
  pirState = digitalRead( pirPin );
}

/* 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( pirPin );
  delay( 10 ); // delai de 10ms pour déparasitage logiciel
  val2 = digitalRead( pirPin );
  
  // 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 != pirState ){
          
          // Si le PIR est actif
          if( val == HIGH ){
              
              counter = counter +1; // incrémenter le compteur
          }
          
          // Se souvenir du nouvel état de l'entrée
          pirState = 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 actif. 
int resetCounter( String command ){
    counter = 0;
    
    // relecture de l'entrée
    pirState = digitalRead( pirPin );
    delay( 10 ); // déparasitage logiciel
    pirState = digitalRead( pirPin );
    
    return 1; // retour de valeur pour l'API
}

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 senseur PIR à été activé.
  • 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 :-)

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

curl -G https://api.spark.io/v1/devices/0123456789abcdef/counter -d access_token=123412341234

Ce qui produit le résultat ci-dessous, où vous pouvez constater que nous avons activé 5 fois le senseur PIR:

{
  "cmd": "VarReturn",
  "name": "counter",
  "result": 5,
  "coreInfo": {
    "last_app": "",
    "last_heard": "2014-12-31T15:53:55.238Z",
    "connected": true,
    "deviceID": "0123456789abcdef"
  }
}

L'état du senseur

Pour commencer, nous allons récupérer l'état du senseur PIR en utilisant curl (voyez nos précédents tutoriels concernant CURL).

curl -G https://api.spark.io/v1/devices/0123456789abcdef/actif -d access_token=123412341234

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):

{
  "cmd": "VarReturn",
  "name": "actif",
  "result": 1,
  "coreInfo": {
    "last_app": "",
    "last_heard": "2014-12-31T15:53:55.238Z",
    "connected": true,
    "deviceID": "0123456789abcdef"
  }
}

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 qu'il détecte des mouvement (des personnes passent par là) :-)

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

curl https://api.spark.io/v1/devices/0123456789abcdef/reset -d access_token=123412341234 -d params= 

Ce qui produit le résultat suivant:

{
  "id": "0123456789abcdef",
  "name": "mch-demo",
  "last_app": null,
  "connected": true,
  "return_value": 1
}

La valeur 1 est retournée par l'exécution de la fonction sur le Particle... mais le compteur sera bien à zéro!


Source: Particle Core Examples créé par Particle.IO.

Traduction (et augmentation de contenu) réalisée par Meurisse D pour MCHobby.be - Translated (and enhanced) by Meurisse D. for MCHobby.be

Traduit avec l'autorisation de Particle.IO - Translated with the permission from Particle.IO - Particle.IO

Toute référence, mention ou extrait de cette traduction doit être explicitement accompagné du texte suivant : «  Traduction par MCHobby (www.MCHobby.be) - Vente de kit et composants » avec un lien vers la source (donc cette page) et ce quelque soit le média utilisé.

L'utilisation commercial de la traduction (texte) et/ou réalisation, même partielle, pourrait être soumis à redevance. Dans tous les cas de figures, vous devez également obtenir l'accord du(des) détenteur initial des droits. Celui de MC Hobby s'arrêtant au travail de traduction proprement dit.