Art. 5 : Créer une boite aux lettres connectée

Sommaire

  1. Présentation
  2. Cahier des charges
  3. Solution
  4. Matériels
  5. Travaux pratiques
  6. Partie électronique
  7. Partie logicielle
  8. Résultat final
  9. Améliorations

1. Présentation

Je vais présenter dans cet article comment transformer sa boite aux lettres classique en boite aux lettres 2.0 (C’est à dire connectée, qui est capable d’indiquer la présence de courrier ou non).

18236651_1752499778098592_953750962_o

2. Cahier des charges

  • La boite aux lettres ne doit pas subir de modifications (En location, ce n’est pas la mienne :p). Il doit donc être aisé de mettre en place le système, mais aussi de l’enlever.
  • La solution ne doit pas être volumineuse et ne doit pas empêcher le facteur de déposer un colis
  • L’alimentation doit être autonome
  • Aucune action humaine ne doit être faite (Ni du facteur pour le dépôt, ni de moi pour la relevée)
  • L’envoi des données doit se faire via signal radio car la boite aux lettres se situe à 50-60m de la maison

3. Solution

Plusieurs solutions peuvent être envisagées. En parcourant les blogs, on peut surtout voir la mise en place d’un capteur d’ouverture/fermeture du clapet et de la porte. Il y a surtout des inconvénients pour cette solution :

  • L’électronique doit rester en écoute permanente, donc la veille est impossible : Pas terrible pour un système sur batterie
  • On ne sait pas si l’ouverture de la porte est un second dépôt d’une lettre ou le retrait de la 1ère ?

La solution que j’ai retenue est d’utiliser le principe d’une barrière IR à l’aide de simples photodiodes et des leds infrarouge. Cette solution corrige les inconvénients de la solution ci-dessus :

  • On effectue un contrôle toutes les X minutes (J’ai pris 10min comme intervalle). Le reste du temps le système est mis en veille
  • Le système s’auto-reset lorsqu’on retire le courrier (10min d’attente maximum)

L’envoi des données sera réalisé par le protocole MySensors (Basé sur un arduino + NRF24L01), et le traitement de l’information sera effectué par Gladys (Assistant domotique installé sur un raspberry, couplé aux modules MySensors / Pushbullet / SMS Free mobile).

4. Matériels

  • Planche de bois (1cm d’épaisseur)
  • Perceuse
  • Scie sauteuse
  • Scie à métaux
  • Pistolet à colle
  • Fer à souder / étain
  • Tige fileté pleine
  • Tige fileté creuse (Diamètre légèrement supérieur à la tige fileté pleine)
  • Écrous / rondelles
  • Fils breadboard
  • 1 arduino nano
  • 1 powerbank (Dans mon cas 3.7V – 9.25Wh soit 2.5Ah)
  • 1 câble USB pour l’alimentation de l’arduino
  • 1 résistance de 220Ω
  • 1 résistance de 700KΩ
  • 2 plaques d’essai avec soudure
  • 6 photodiodes de type SFH213FA
  • 6 LED IR de type SFH 487-2
  • 1 boitier de dérivation d’électricité
  • Module NRF24L01+PA+LNA SMA

5. Travaux pratiques

L’arduino nano dispose de plusieurs entrées/sorties, ce qui nous permet de mettre en place 6 capteurs (6 couples led IR / photodiode).

  • On commence par découper 2 planches de bois aux dimensions internes de la boite
  • On perce aux 4 coins pour y insérer les tiges filetées
  • On perce les emplacements des led IR / photodiodes au centre. Les placer au mieux pour réaliser le meilleur quadrillage possible de la zone. Attention les trous doivent correspondent parfaitement entre la plaque du bas et celle du haut
  • DSCN0405DSCN0408
  • Découper les différentes tiges filetées. J’ai trouvé pleins d’avantages à ce système :
    • L’ensemble ne passe pas d’un bloc dans la boite aux lettres. Il faut installer la plaque du bas, puis les tiges filetées, puis la plaque du haut. La modularité doit donc être au rendez-vous !
    • On peut faire varier toutes les hauteurs à volonté à l’aide des 5 écrous
  • Insérer les photodiodes dans les trous de la plaque du bas et les coller avec le pistolet à colle
  • Insérer les leds IR dans les trous de la plaque du haut et les coller avec le pistolet à colle
  • Dans la boite de dérivation, installer le module radio NRF24L01

DSCN0409.JPG

6. Partie électronique

Le principe de la barrière infrarouge est ici utilisé. Un seul couple LED IR/photodiode sera allumé à un instant T. Ils seront allumés à tour de rôle pour effectuer le contrôle.

  • Lorsque la boite est vide, chaque photodiode reçoit beaucoup de lumière de la part de sa led IR
  • Lorsque la boite contient du courrier, chaque photodiode (Peut-être pas toutes si le courrier est petit) ne reçoit pas de lumière, car obstruée par le courrier

Voici une explication par l’image sur le fonctionnement mis en place :

leds

 

Pour la plaque du haut :

  • Souder la résistance de 220Ω sur une plaque d’essai
  • Souder un fil sur une des broches de la résistance (Broche connectée à la masse de l’arduino)
  • Souder 6 fils sur l’autre broche de la résistance (Chaque fil sera connecté à la cathode d’une led IR)
  • Brancher un fil sur l’anode des 6 led IR (Ces 6 fils seront reliés à 6 broches distinctes de l’arduino pour commander l’allumage/l’extinction : A0, A1, A2, A3, A4, A5)LedIR

Pour la plaque du bas :

  • Souder la résistance de 700KΩ sur une plaque d’essai
  • Souder 2 fils sur une des broches de la résistance (Un fil sera connecté directement à la masse de l’arduino, l’autre servira à fournir la masse à la plaque du haut)
  • Souder 7 fils sur l’autre broche de la résistance (6 fils seront connectés à l’anode d’une photodiode – le 7ème fil sera connecté à la broche A6 de l’arduino pour effectuer une mesure)
  • Brancher un fil sur la cathode des 6 photodiodes (Ces 6 fils seront reliés à 6 broches distinctes de l’arduino pour commander l’allumage/l’extinction : D2, D3, D4, D5, D6, D7)
  • photodiode.png

7. Partie logicielle

1. Installation du raspberry

  • Installer Gladys sur le raspberry ainsi que ses modules MySensors / Pushbullet / SMS Free mobile

2. Analyse des valeurs renvoyées par les 6 capteurs

Les valeurs mesurées par la broche A6 de l’arduino pour les 6 capteurs ne sont pas identiques. J’imagine que cela provient du placement de certaines led IR (ou de la photodiode) qui n’est pas optimal.

J’ai donc réalisé 2 tests à partir du sketch MySensors suivant https://github.com/Florian56/mysensors-boiteauxlettres-statistiques :

  • Envoi des valeurs, toutes les minutes, pendant 12h pour les 6 capteurs (Sans courrier)
  • Envoi des valeurs, toutes les minutes, pendant 12h pour les 6 capteurs (Avec courrier)

La réception des valeurs se fait sur une gateway MySensors branchée à mon PC (Le contrôleur étant MYSController). Activer le bouton « Logging » dans MYSController pour tracer les résultats dans un fichier.

On se retrouve donc avec 2 fichiers de traces, totalement inexploitable à la main. Exemple du fichier avec courrier :

Resultats

J’ai réalisé un petit projet console en C# pour extraire les statistiques des 6 capteurs.

https://github.com/Florian56/boiteauxlettres-analyseresultats/

Cela permet de générer le résultat suivant (Avec courrier – Sans courrier) :

Resultats_Statistiques

3. Modification du sketch MySensors selon les résultats précédents

L’analyse des valeurs mesurées pour chaque capteur à permis de constater que le 6ème capteur renvoyait souvent des valeurs plus faibles que les autres lorsqu’il n’y a pas de courrier.

On peut tout de même placer un curseur commun à tous les capteurs qui servira de seuil à la détection du courrier. J’ai pris la valeur 60 comme seuil :

  • Si l’un des 6 capteurs renvoie une valeur inférieure à 60 : Il y a du courrier
  • Sinon : Pas de courrier

Modifier le sketch de l’arduino avec celui-ci : https://github.com/Florian56/mysensors-boiteauxlettres : il envoie maintenant un booléen à la gateway MySensors, toutes les 10min.

4. Paramétrage de Gladys pour traiter l’information

Créer un script « NotifierCourrierDetecte » : Il permet de m’envoyer une notification par SMS ou par PushBullet.

gladys.notification.create({
text: ‘Du courrier est arrivé’,
title: ‘Courrier détecté’,
icon: ‘fa fa-bed’,
iconColor: ‘bg-blue’,
priority: 1,
user: 1
});

Créer un script « ControlerPresenceCourrier » : Il permet de contrôler la présence du courrier (Réception d’une valeur true, alors que la précédente valeur était false).

gladys.utils.sql(‘SELECT value FROM devicestate WHERE devicetype = 132 ORDER BY createdat DESC LIMIT 2’)
.then(function(resultats) {
if (resultats.length === 2 && resultats[1].value === 0) {
gladys.script.exec({id : 3})
}
});

  • Modifier dans ce script l’id du deviceType
  • Modifier dans ce script l’id du script « NotifierCourrierDetecte« 

Créer un nouveau scénario :

  • Device
  • Valeur = 1
  • Exécute un script : « ControlerPresenceCourrier« 

8. Résultat final

DSCN0402DSCN0407DSCN0422DSCN0424

9. Améliorations

  • Mettre en veille l’arduino plus longtemps la nuit. Inutile de contrôler toutes les 10min
  • On peut aussi envoyer une information plus précise qu’un booléen. Par exemple 1, 2, 3, 4, 5, 6 selon le nombre de capteurs qui indique un courrier : Ceci permettrait pourquoi pas d’indiquer la présence d’une petite lettre, ou d’un colis qui remplit entièrement la boite
  • Connaitre l’état de la batterie : MySensors le permet, mais pas encore testé 🙂
  • Utiliser un petit panneau solaire comme batterie

Art. 4.4 : MySensors – Purge de l’id d’un nœud.

Présentation

Lorsqu’un nœud s’est connecté à la Gateway et a obtenu un id délivré par le contrôleur, ou que l’id était fixé dans le sketch, cet id est enregistré dans la mémoire morte de l’Arduino (EEPROM).

Si nous souhaitons ensuite modifier cet id, le modifier dans le sketch ne sera pas suffisant car il est enregistré en mémoire.

Solution

Pour cela, il faut uploader le sketch ClearEeprom (fournit dans la librairie MySensors) sur l’Arduino.

sans-titre33

Ensuite, uploader le bon sketch pour le nœud, et le contrôleur fournira un nouvel id.

Art. 4.3 : MySensors – Création d’un noeud

Sommaire

  1. Présentation
  2. Matériel
  3. Branchements
  4. Partie logicielle
    1. Pré-requis
    2. Choix du sketch
    3. Analyse du sketch
    4. Sélection de notre arduino
    5. Téléversement
    6. Test du bon fonctionnement

1. Présentation

Parce que le but de MySensors est quand même de créer un réseau de nœuds, nous allons donc voir maintenant comment créer un nœud.

Le nœud peut être de 2 types (Voir les exemples ici):

  • Capteur (Température, distance, pression, luminosité …)
  • Actionneur (Commander un relais pour l’ouverture d’un portail par exemple, déclencher l’allumage d’un radiateur …)

Notre but sera de créer un nœud actionneur. Une simple LED simulera un relais qu’on pourra allumer/éteindre via une commande.

2. Matériel

Le matériel peut être identique à celui utilisé pour la création de notre gateway (Voir ici).

Nous allons volontairement changer d’arduino pour vérifier qu’il est possible d’en utiliser un autre. Le schéma des branchements sera donc différent.

Voici ce que nous avons besoin pour cet article :

  • Arduino UNO
  • Câble USB de type A vers B : Lien
  • Module radio NRF24L01
  • Câbles breadboard de type mâle vers femelle
  • Câbles breadboard de type mâle vers mâle
  • Platine d’essai (breadboard)
  • 1 LED
  • 1 résistance

3. Branchements

Arduino UNO <-> NRF24L01

MySensors indique comment effectuer le branchement (Voir ici).

  • GND – GND
  • 3.3V – VCC
  • 9 – CE
  • 10 – CSN
  • 13 – SCK
  • 11 – MOSI
  • 12 – MISO

Les numéros des pins sont affichés directement sur l’arduino UNO, il suffit de brancher comme indiqué.

Attention, l’arduino UNO délivre du 5V et du 3.3V, il faut bien brancher le VCC du NRF24L01 sur le 3.3V car le NRF24L01 accepte uniquement cette tension.

Arduino UNO <-> PC

Brancher le câble USB à l’arduino UNO

Arduino UNO <-> LED

Placer la LED et la résistance en série sur la breadboard.

Connecter la LED avec le PIN PWM n° 3

Connecter la résistance avec le PIN GND

Voici ce que ça donne au final :

IMG_20160401_122754.jpg

A noter que ce branchement est réalisé ici pour un nœud, mais il serait à l’identique pour la gateway (Sans la partie Arduino UNO <-> LED bien sûr).

4. Partie logicielle

1. Pré-requis

Avoir suivi le tutoriel Création de la gateway (Pour l’installation de l’IDE Arduino et des sketchs MySensors sur notre PC).

2. Choix du sketch

Brancher l’arduino uno au PC via le câble USB (Les leds de l’arduino s’allument).

Lancer l’IDE Arduino.

Dans Fichier > Exemples, on ouvre le sketch RelayActuator :

2016-03-27_182255.png

3. Analyse du sketch

Analysons les parties de code qui nous intéressent :2016-03-27_183238.png

  • RELAY_1 : Numéro du PIN Arduino sur lequel nous avons branché la paire LED-Résistance. C’est bien le PIN 3 que l’on a connecté : « Connecter la LED avec le PIN PWM n° 3 ».
  • NUMBER_OF_RELAYS : Nombre de relais. Dans notre cas, c’est bien 1, car 1 seule LED.
  • RELAY_ON : Valeur pour activer le relais
  • RELAY_OFF : Valeur pour couper le relais

2016-03-27_184005.png

  • gw.begin : Cette méthode permet au nœud de se présenter auprès du contrôleur lorsqu’il démarre (Quand on l’alimente).
    • AUTO : Un nœud est identifié par un ID. Ici avec AUTO, on n’indique pas d’ID pour ce nœud. Ce sera donc au contrôleur de lui en fournir un. Lorsque l’ID sera récupéré, il sera enregistré en EEPROM de l’Arduino. Nous pouvons forcer cette valeur et renseigner un entier compris entre 1 et 254. Vous pouvez modifier la valeur en renseignant un ID à « 2 » car on n’a pas de contrôleur derrière.
    • true : Booléen pour indiquer si ce nœud répète le signal des autres nœuds ou non
  • gw.sendSketchInfo : Cette méthode permet au nœud d’indiquer au contrôleur le nom du sketch utilisé ainsi que sa version.
  • Boucle FOR : Étant donné qu’il est possible d’avoir plusieurs relais, il est nécessaire de tous les présenter au contrôleur.
  • gw.present : Cette méthode permet de présenter au contrôleur un capteur ou un actionneur lié au nœud (Dans notre cas, un actionneur). Le capteur ou actionneur est appelé un sensor.
    • sensor : Le sensor est également identifié par un ID (Ici le code va le présenter avec l’ID « 1 »)
    • $_LIGHT : Le sensor est typé (Ici c’est un actionneur. Voir les types possibles ici dans la catégorie presentation)
  • pinMode & digitalWrite : Méthodes non liées directement à MySensors, mais liées à l’arduino. Elles permettent d’activer le PIN 3 pour commander notre relais.

Pour conclure l’analyse, voyons ce que ça donnerait si on mettait la variable NUMBER_OF_RELAYS à 3 :

  • 1er sensor
    • Son ID : 1
    • Son PIN arduino : 3
  • 2ème sensor
    • Son ID : 2
    • Son PIN arduino : 4
  • 3ème sensor
    • Son ID : 3
    • Son PIN arduino : 5

On voit donc bien maintenant comment s’articule un réseau MySensors, sous la forme d’un arbre : arbre

Pour tous les détails, se référer au guide MySensors.

4. Sélection de notre Arduino

Avant d’envoyer le sketch sur l’arduino, il faut indiquer quelle est notre version.

  • Sélection du type de carte :

2016-03-28_120014

  • Sélection du port :

2016-03-28_120844

5. Téléversement

  • Téléverser le sketch dans l’arduino :

2016-03-28_121703

  • Le téléversement démarre :

2016-03-28_121820

  • Téléversement correctement terminé :

2016-03-28_122204

6. Test du bon fonctionnement

Notre test va permettre de valider le dialogue entre la gateway (Créée ici) et notre nœud. Grâce au test, nous allons pouvoir comprendre les données échangées entre un nœud et la gateway.

6.1. Lancement de la gateway
  • Connecter la gateway au PC via le câble USB
  • Ouvrir l’IDE Arduino
  • Paramétrer le type d’arduino et le port USB du PC sur lequel il est branché
    • Outils > Type de carte : Arduino Nano
    • Outils > Port : Sélectionner le bon port
  • Lancer le moniteur série : Outils > Moniteur série. Les 2 messages d’initialisation de la gateway s’affichent :

2016-03-26_184135

 6.2. Lancement du nœud
  • Connecter le nœud au PC (Ou sur un autre PC) via le câble USB, dans le but d’alimenter l’arduino.
  • Dans le moniteur série de la gateway, nous voyons les commandes envoyées par le nœud pour se présenter. Un nœud se présentera toujours de cette façon :

2016-03-30_232110

6.3. Analyse détaillée des données affichées

Pour comprendre la nature des échanges, il est nécessaire d’utiliser le référentiel de MySensors.

Chaque message est composé de 6 informations, séparées par un point virgule :

  • node_id : ID du nœud qui émet ou qui est destinataire du message
  • child_sensor_id : ID du sensor qui émet ou qui est destinataire du message
  • message_type : Type du message. Se référer au tableau. 5 types possibles.
  • ack : Booléen indiquant si une vérification de la bonne réception du message doit être effectuée ou non.
  • sub_type : Est lié au type de message (PRESENTATION, SET, REQ …). Se référer aux 3 tableaux sur la page des référentiels MySensors.
  • payload : La donnée à partager. Exemples : « 1 » pour activer un relais / « 18.25 » pour un capteur de température.

A partir de là, il est possible de comprendre ce qui est affiché dans le moniteur série :

  • Démarrage de la gateway :
    • 1er message :0;0;3;0;9;gateway started
      • 0 : ID du noeud (C’est la gateway)
      • 0 : ID de son sensor (C’est la gateway, donc pas de sensor)
      • 3 : Message interne au protocole
      • 0 : Pas de ack sur le message
      • 9 : Selon le tableau, la valeur 9 correspondant au type « 3 » est « Sent by the gateway to the Controller to trace-log a message« 
      • gateway started : Information de la gateway pour le contrôleur
    • 2ème message : Pas de détails, à vous de comprendre 🙂
  • Démarrage du nœud :
    • Un nœud se présente toujours de la même façon (On peut voir que chaque message est doublé, une ligne de la gateway qui indique ce qu’elle a reçue, et l’autre ligne qui est le vrai message envoyé par le nœud). On va s’intéresser aux vraies lignes envoyées par le nœud
    • 1er message : 2;255;0;0;18;1.5.1
      • 2 : Effectivement, dans le sketch notre ID nœud était bien forcée à « 2 »
      • 255 : ID du sensor par défaut du nœud. Ce sensor n’existe donc pas réellement
      • 0 : Type PRESENTATION
      • 0 : Pas de ack
      • 18 : Ce nœud est de type S_ARDUINO_REPEATER_NODE. Effectivement dans le sketch nous avions bien mis le booléen à true pour qu’il soit répéteur.
      • 1.5.1 : Version du sketch utilisé
    • 2ème message : 2;255;3;0;6;0
      • 2 : Effectivement, dans le sketch notre ID nœud était bien forcée à « 2 »
      • 255 : ID du sensor par défaut du nœud. Ce sensor n’existe donc pas réellement
      • 3 : Type INTERNAL
      • 0 : Pas de ack
      • 6 : Le nœud demande sa configuration. Voir détails de MySensors : Config request from node. Reply with (M)etric or (I)mperal back to sensor. Pas de réponse en retour car pas de contrôleur
      • 0 : Valeur non utilisée
    • 3ème message : 2;255;3;0;11;Relay
      • 2 : Effectivement, dans le sketch notre ID nœud était bien forcée à « 2 »
      • 255 : ID du sensor par défaut du nœud. Ce sensor n’existe donc pas réellement
      • 3 : Type INTERNAL
      • 0 : Pas de ack
      • 11 : Le nœud envoie le nom de son sketch Arduino
      • Relay : Nom du sketch
    • 4ème message : 2;255;3;0;12;1.0
      • 2 : Effectivement, dans le sketch notre ID nœud était bien forcée à « 2 »
      • 255 : ID du sensor par défaut du nœud. Ce sensor n’existe donc pas réellement
      • 3 : Type INTERNAL
      • 0 : Pas de ack
      • 12 : Le nœud envoie la version de son sketch Arduino
      • 1.0 : Version du sketch
    • 5ème message : 2;1;0;0;3
      • 2 : Effectivement, dans le sketch notre ID nœud était bien forcée à « 2 »
      • 1 : ID du vrai sensor, connecté à notre LED
      • 0 : Type PRESENTATION
      • 0 : Pas de ack
      • 3 : Le nœud indique que son sensor ID 1 est de type « Light Actuator (on/off)« . C’est bien un actionneur

On analyse ici ce que reçoit la gateway, mais au final la gateway renvoie toutes ces données au contrôleur. Ce dernier doit donc avoir un algorithme intelligent pour traiter les différentes informations reçues.

6.4. Allumer la LED

Nous arrivons ici au test final. Le but du nœud était de pouvoir allumer et éteindre un relais (Notre LED pour le test).

Pour cela, il suffit d’écrire sur le port série de la gateway la ligne de commande pour contrôler le nœud.

Nous allons envoyer la ligne suivante. Cliquer sur Envoyer  :

2016-04-01_121506

  • 2 : ID du noeud
  • 1 : ID du sensor
  • 1 : SET (Permet de modifier une valeur du sensor)
  • 0 : Pas de ACK
  • 2 : Binary status. 0=off 1=on (Cf. tableau MySensors)
  • 1 : La valeur booléenne pour actionner le relais

Nous voyons que la gateway a bien envoyé l’information :

2016-04-01_121746.png

Résultat : La LED doit s’allumer !

6.5. Éteindre la LED

Pour éteindre la LED, la ligne de commande est presque identique, sauf que la valeur à envoyer est « 0 » et non pas « 1 ».

Nous allons envoyer la ligne suivante. Cliquer sur Envoyer  :

2016-04-01_122009

  • 2 : ID du noeud
  • 1 : ID du sensor
  • 1 : SET (Permet de modifier une valeur du sensor)
  • 0 : Pas de ACK
  • 2 : Binary status. 0=off 1=on (Cf. tableau MySensors)
  • 0 : La valeur booléenne pour éteindre le relais

Nous voyons que la gateway a bien envoyé l’information :

2016-04-01_122021.png

Résultat : La LED doit s’éteindre !

Art. 4.2 : MySensors – Création de la gateway

Présentation

Dans cet article, nous allons créer une gateway MySensors, élément central et donc indispensable au protocole. Je vais essayer de détailler le plus possible chacune des étapes, pour tous les débutants 🙂

Il est possible de créer 2 types de gateway :

  • Série (Via le port USB) : Ce sera notre exemple
  • Ethernet : Connexion réseau – Je ne détaille pas ce type dans cet article

Matériel

Pour commencer, de quel matériel a t-on besoin ? MySensors présente sur son site quelques produits pour déployer son propre réseau  (http://www.mysensors.org/store/).

J’ai donc pris l’arduino nano compatible : Lien (Au passage, un Arduino est dit « Compatible » si ce n’est pas un officiel, c’est donc une copie mais ça fonctionne très bien).

Pour connecter la gateway (Notre Arduino) au raspberry, il faudra un câble USB « Mini USB type B – type A » (Non fournit avec l’arduino, donc à prévoir en supplément).

Il faut aussi avoir de petits câbles breadboard pour connecter l’arduino au module radio NRF24L01. Ces câbles doivent être de type femelle-femelle (http://www.ebay.fr/itm/40pcs-Jumper-Cable-Platine-Essai-Breadboard-Circuit-Arduino-male-femme-Cavalier-/350991102922?var=&hash=item0).

Pour terminer, il faut avoir le module radio NRF24L01. Ce module gère l’émission et la réception de signaux. J’ai pris la version avec antenne externe (http://www.ebay.com/itm/310651702557?rmvSB=true) qui annonce une portée du signal d’1km, par rapport aux 60m seulement lorsque l’antenne est incluse à la puce (L’antenne qu’on peut voir en zig-zag sur cette image : http://www.ebay.com/itm/170819069271?rmvSB=true). PS : Je n’ai pas encore vérifié les 1km annoncés :p.

Branchements

Toujours sur le site MySensors, ils nous indiquent comment brancher l’arduino au NRF24L01 (http://www.mysensors.org/build/connect_radio). L’exemple donné est pour un Arduino Pro Mini, donc il faut se baser sur le numéro des pins pour refaire le branchement sur notre nano.

J’ai trouvé un exemple tout fait ici pour le nano (http://domotique.benchi.fr/wp-content/uploads/2015/03/arduino-nano-gateway-mysensors.png?0165d4) :

arduino-nano-gateway-mysensors

Attention, les branchements indiqués sont sur le dessus de la puce, il faut donc vérifier à 2 fois les branchements (Car les branchements se font en vrai par en dessous).

Nous utilisons la version avec antenne, mais les pins sont identiques. Pour être comme sur le schéma, il faut tenir notre NRF24L01 de telle façon que :

  • Notre antenne soit en haut
  • Les pins en bas, et en dessous
  • Exemple :

IMG_20160325_220814.jpg

Pour terminer, il reste à brancher le câble USB à l’arduino.

Voici ce que ça donne au final :

IMG_20160325_221710.jpg

A noter que ce branchement est réalisé ici pour la gateway, mais il serait à l’identique pour un nœud du réseau.

Partie logicielle

1. Installation de l’IDE Arduino

Le programme utilisé par l’arduino est appelé un sketch. Ce sketch est téléchargé dans l’Arduino via un logiciel (L’IDE Arduino, qu’il faut télécharger ici) et qu’il faut installer sur notre PC.

2. Installation des librairies MySensors

Une fois l’IDE correctement installé, nous pouvons télécharger l’ensemble des sketchs fournit par MySensors : http://www.mysensors.org/download/ :

  • Cliquer sur « Download » dans la section « 1.5 – Latest release« . Dé-zipper le fichier téléchargé nommé « Arduino-master.zip« 
  • Copier le contenu du répertoire « libraries » et coller dans « C:\Program Files (x86)\Arduino\libraries » :

2016-03-26_172230.png

Nous pouvons désormais lancer l’IDE Arduino. Dans Fichier > Exemples, nous pouvons voir les librairies MySensors :

2016-03-26_173443.png

3. Choix du sketch

Avant d’ouvrir le sketch, brancher l’arduino nano à notre PC via le câble USB (Les leds de l’arduino s’allument).

Étant donné que l’on souhaite créer une gateway série, nous pouvons ouvrir le sketch « SerialGateway » (Trop facile :p) :

2016-03-26_174606.png

4. Sélection de notre Arduino

Avant d’envoyer le sketch sur l’arduino, il faut indiquer quelle est notre version.

  • Sélection du type de carte :

2016-03-26_174712.png

  • Sélection du processeur :

2016-03-26_174811.png

  • Sélection du port :

2016-03-26_174854.png

5. Téléversement

  • Téléverser le sketch dans l’arduino :

2016-03-26_175011.png

  • Le téléversement démarre :

2016-03-26_175103.png

  • Téléversement correctement terminé :

2016-03-26_175210.png

6. Test du bon fonctionnement

Dans l’IDE Arduino, cliquer sur Outils > Moniteur série :

2016-03-26_192751.png

Dans les paramètres, choisir :

  • Nouvelle ligne
  • 115200 baud

2016-03-26_184016.png

Nous voyons apparaître les 2 messages d’initialisation de la gateway :

2016-03-26_184135

On peut alors déconnecter l’arduino de notre PC, notre gateway est maintenant parfaitement fonctionnelle !

Art. 4.1 : Protocole domotique – Présentation de MySensors

Le protocole domotique qui sera utilisé dans le projet est MySensors (http://www.mysensors.org/).
Ce protocole est basé sur les cartes Arduino ainsi que sur les puces radio NRF24L01 pour la communication (2.4GHz).
La mise en place du protocole est assez simple, et le coût de revient reste faible.

Il permet de créer par exemple des capteurs de températures, mouvements, humidité, gaz, distances, actionner des relais …

Un réseau MySensors est composé de :

  • Le contrôleur :
    • Le contrôleur est une application logicielle. Dans notre cas ce sera Gladys installé sur raspberry.
    • Il sert à lancer des commandes (actionner un relais par exemple), ou récupérer la température d’un capteur afin de la stocker
  • La gateway :
    • La gateway est composée d’un Arduino et d’un module radio NRF24L01 (Comme un nœud).
    • Elle sert de passerelle entre le contrôleur et l’ensemble des nœuds du réseau.
    • Elle dialogue avec le contrôleur via un câble USB (connexion série) ou via un câble Ethernet.
    • Elle dialogue avec tous les nœuds via son module radio NRF24L01
    • L’Arduino contient un sketch spécifique « Gateway » (Fourni par MySensors)
  • Un ou plusieurs nœuds :
    • Ils sont tous composés d’un Arduino et d’un module radio NRF24L01 (Comme la gateway).
    • Chaque nœud peut avoir plusieurs capteurs ou plusieurs actionneurs
    • Ils dialoguent avec la gateway via le module radio NRF24L01
    • Chaque nœud peut répéter le signal d’un autre nœud pour augmenter la portée des signaux (En cas de nœuds éloignés de la gateway)
    • Le sketch Arduino d’un nœud est lié à ce que l’on souhaite faire (Plusieurs exemples sont fournis par MySensors)

En résumé, un schéma pour présenter les liens :

  • Gladys : Contrôleur
  • GW : La GateWay
  • S : Un nœud qui ne fait pas la répétition des signaux
  • R : Un nœud qui effectue la répétition des signaux

index

Dans les prochains articles, nous verrons comment fonctionne le protocole, et comment créer la gateway et un nœud.

Serveur central – Art. 3 : Logiciel domotique

Le raspberry a besoin d’une couche logicielle pour devenir le cœur du système domotique.

Cette couche logicielle contient souvent un socle de base, auquel on vient ajouter des modules complémentaires pour effectuer ce que l’on souhaite.
Cela évite d’avoir une usine à gaz au niveau du socle, et permet à chaque utilisateur de paramétrer son système comme il l’entend.

Le logiciel sur lequel je tente l’aventure est Gladys :
http://gladysproject.com/

Ses qualités :

– Gratuit
– Libre
– Développée en Node.js (permet une bonne gestion des événements car tout le code est exécuté en asynchrone, ce qui permet d’avoir une bonne fluidité de l’application)
– Une communauté qui commence à bien se développer
– Fonctionne sur raspberry
– Beaucoup de librairies sont déjà développées par la communauté Node.js (voir npm), donc une rapidité de développement accrue
– Le système peut prendre des initiatives via des scénarios

Ses défauts :

– Encore jeune (mais cela permet de participer au développement du projet)

A titre de comparaison, j’ai testé un autre système domotique qui faisait de la reconnaissance vocale.
C’est sympa, mais ce n’est pas abouti selon moi :
– Il ne comprend pas toujours
– Il peut comprendre un peu trop (Il se déclenche alors que l’on a rien dit)
– Il faut disposer des micros partout si on veut déclencher des actions de n’importe où

Bref, j’ai trouvé ça gadget.

Gladys ne fait pas de reconnaissance vocale, mais prend plutôt des initiatives pour devancer nos besoins.

Serveur central – Art. 2 : Accès Internet

Le serveur central doit pouvoir accéder à Internet pour 2 raisons :

  • Des informations utiles doivent être récupérées sur Internet
  • L’application domotique doit être pilotable à distance par smartphone

Pour cela, rien de plus simple. Un dungle WIFI est rajouté sur un port USB du raspberry.

Choix

Pour choisir un dungle, il est possible de consulter cette page. Elle recense tous les modules WIFI compatibles en fonction des systèmes d’exploitation.

http://elinux.org/RPi_USB_Wi-Fi_Adapters#Working_USB_Wi-Fi_Adapters

Mon choix s’est porté sur celui-ci (Edimax – EW-7811UN), avec lequel je n’ai aucun problème :

http://www.amazon.fr/gp/product/B003MTTJOY?psc=1&redirect=true&ref_=oh_aui_detailpage_o02_s00

Configurer la connexion

Éditer le fichier suivant :

sudo nano /etc/network/interfaces

Supprimer tout et remplacer par :

auto lo

iface lo inet loopback
iface eth0 inet dhcp

allow-hotplug wlan0
auto wlan0

iface wlan0 inet dhcp
wpa-ssid "nom du réseau"
wpa-psk "mot de passe wifi"

Garder le WIFI actif

Lorsque le raspberry se met en mode économie d’énergie (au bout d’un certain temps d’inactivité), il désactive également le dungle WIFI.

Il faut donc désactiver le mode économie d’énergie pour conserver le WIFI actif 24/24.

Étape 1 : Vérification

cat /sys/module/8192cu/parameters/rtw_power_mgnt

Valeurs renvoyées :

  • 0 : Économie d’énergie déjà désactivé
  • 1 : Économie d’énergie activé

Étape 2 : Désactiver l’économie d’énergie

Éditer le fichier 8192cu.conf :

sudo nano /etc/modprobe.d/8192cu.conf

Ajouter la ligne suivante :

options 8192cu rtw_power_mgnt=0 rtw_enusbss=0

Explications :

  • Le paramètre rtw_power_mgnt permet d’activer ou non l’économie d’énergie
  • Le paramètre rtw_enusbss permet d’activer ou non la suspension automatique des ports USB.

Étape 3 : Rebooter le raspberry

  1. Sauvegarder le fichier modifié
  2. Rebooter le raspberry

Sources

Serveur central – Art. 1 : Le cerveau

J’en ai déjà parlé brièvement dans l’article précédent (Oui oui dans le schéma).

Le serveur central aura comme cerveau : le raspberry (dans sa version 2).
Pourquoi ce choix ?

  • Son prix : environ 40€
  • Sa faible consommation : on parle de 3€ par an
  • Sa petite taille : peut facilement être dissimulé derrière un écran
  • Ce n’est pas une bête de course, mais la version 2 est assez puissante pour notre projet
  • Sa forte communauté, qui s’est développée autour de projets variés (domotique, électronique, robotique ou bien purement informatique…)
  • Plusieurs logiciels domotique libres et gratuits ont été développés et fonctionnent parfaitement sur raspberry
  • Plusieurs protocoles de communication peuvent être utilisés

Présentation de mon projet domotique

Pour bien commencer ce blog, un article présentant mon projet domotique.

Voilà les fonctionnalités dont j’ai besoin :

  • Une zone dite « Serveur central », qui doit avoir les fonctionnalités suivantes :
    • Doit être le cerveau domotique.
    • Doit avoir accès à internet.
    • Doit posséder un logiciel spécifique pour lui ajouter toute l’intelligence domotique souhaitée.
    • Doit posséder un écran pour qu’on puisse interagir avec le système et effectuer le contrôle/paramétrage.
    • Doit posséder un haut parleur, car le système doit pouvoir me parler.
    • Doit posséder une caméra pour faire de la reconnaissance faciale et savoir qui est présent dans la pièce (Ceci dans le but d’annoncer uniquement des informations qui m’intéressent : chaque membre de la famille ne souhaite pas entendre les mêmes informations)
  • Des capteurs/actionneurs disposés dans toute la maison, à distance du serveur central.

Le projet doit être réalisé au maximum en mode DIY (« Faites le vous-même »).

1er schéma (Qui évoluera en fonction des prochains articles) :