DomoPi : une extension domotique pour le raspberry Pi

Ajouté le : 17 décembre 2013
Mis à jour le : 29 décembre 2013

Nous allons voir dans cet article en deux parties, comment réaliser une extension pour le Raspberry Pi afin de créer une petitebox de domotique.

Le but premier de ce projet est de pouvoir communiquer via les ondes RF avec divers modules 433MHz de notre installation domotique. On va donc faire en sorte, dans un premier temps, de pouvoir émettre et recevoir des signaux RF.

Sur les photos vous noterez la présence en façade d'un capteur infrarouge. Je n'ai pas prévu de détailler son utilisation ici mais pour ceux que ça intéresse vous trouverez toutes les informations nécessaires ici.

Choix de l'architecture

Ici encore, on essaye de réaliser quelque chose de convenable en termes de performance et à un coût raisonnable. Rien de tel, dans ce cas, qu'un Raspberry Pi comme point de départ !

Le Raspberry dispose d'un connecteur GPIO pour accéder aux entrées/sorties. A partir de là, on pense tout de suite à connecter directement un récepteur et un émetteur RF, comme vous l'aurez peut-être déjà vu pour ceux qui ont déjà creusé la question, sur le blog d'Idleman ou encore dans le MagPI n°8 page 8. Si en théorie l'idée semble parfaite, en pratique elle m'est avérée impossible à mettre en oeuvre. Le Pi se trouve énormément "stressé" par le décodage des trames RF. En cause, trop de programmes en mémoire, ou une configuration du Pi trop juste (j'utilise toujours la toute première version du Pi), rendent le tout incapable de décoder convenablement des signaux. Il faut savoir qu'un récepteur RF, même s'il ne reçoit pas de signal, est toujours actif en sortie, générant des 0 et des 1 en permanence. De même si votre Pi est monopolisé par un autre processus ou interrompu pendant le décodage, votre signal passe à la trappe.

Pour pallier à ce problème, et ayant déjà fait l'expérience des projets RF sur Arduino (voir ici), je me suis mis en tête de déléguer la réception RF à un Arduino, et de faire communiquer celui-ci avec le Pi via la liaison série, libérant ainsi le Pi de cette activité.

Architrecture DomoPi

L'émetteur RF est aussi connecté à l'Arduino, mais contrairement au récepteur, il ne stresse pas en permanence le microcontrôleur auquel il est relié, puisque son activité ne se fait que lorsqu'on lui demande. On pourrait donc très bien le connecté directement au Pi, mais dans ce cas il faudrait développer la partie encodage pour le Pi et la partie décodage pour l'Arduino. L'autre intérêt de cette méthode est que vous pourrez par la suite utiliser la partie Arduino/RF avec n'importe qu'elle autre projet capable de gérer une liaison série.

Choix des composants

Une fois l'architecture établie, reste le choix des différents composants. On sait maintenant que nous avons besoin d'un Raspberry PI, d'un Arduino, d'un émetteur et d'un récepteur RF.

L'Arduino

L'Arduino se décline en une multitude de versions, à nous donc de choisir la plus adaptée. Ici, il nous faut une version relativement compacte et encore une fois à un prix minime. Sur ces quelques critères, on tombe rapidement sur la version "Arduino Pro Mini". Peu cher, environ 10€, elle dispose de tous les avantages de l'arduino dans un format tout petit. Seul inconvénient elle n'intègre pas d'interface de programmation. Qu'à celà ne tienne, puisqu'on a prévu de faire communiquer le Pi avec l'Arduino, on va en profiter pour programmer l'Arduino, avec le Pi !

Arduino Pro Mini

Attention : l'Arduino Pro Mini existe en 2 tensions, 3,3V et 5V. J'ai choisi la version en 5V, ce qui implique d'utiliser un convertisseur de tension au niveau de la liaison série, le Raspberry Pi n'étant pas tolérant au 5V. Dans le cas où vous choisiriez une version en 3,3V pas besoin de convertir les tensions sur la liaison série, mais attention si vos modules fonctionnent en 5V.

Le récepteur RF

Les modules de réception RF aussi existent en quantité importante. Pour ma part j'en ai testé plusieurs, du modèle chinois à 3€ au modèle Aurel à 15€ (et ce n'est pas le plus cher). Et évidemment la qualité de réception n'est pas la même. Or ici la réception est quand même le nerf de la guerre, et je ne pourrais donc que vous conseiller le modèle Aurel 4M50RR30SF. Là où le modèle chinois ne capte plus rien au delà d'un mètre, le module Aurel s'en sort sans peine sur une dizaine de mètres.

L'émetteur RF

Je n'ai pas encore effectué de tests de portée sur les différents modules que j'ai en stock chez moi, mais  un simple modèle chinois à 3€ s'en sort sur une distance d'environ 4 mètres sans antenne (beaucoup plus avec une antenne). Dès que j'aurais plus de temps, je le comparerai au modèle Aurel que j'ai, et vous tiendrai au courant. A noter que pour le modèle chinois, une tension d'alimentation plus importante (de 5 à 12V) lui permettrait d'augmenter sa portée.

L'assemblage

Tous les composants qu'on utilise ici peuvent être reliés point à point pour peu qu'ils utilisent la même tension.

Malheureusement, dans notre projet, ce n'est pas le cas entre le Pi et l'Arduino. Le Pi attend des tensions d'entrées de 3,3V maximum, là où l'Arduino génère du 5V. Il nous faut donc un convertisseur de tension entre les 2 sur la liaison série. Il existe des convertisseurs logique 3,3V<->5V prêt à l'emploi, mais dans notre cas il se trouve qu'on a seulement besoin d'abaisser la tension entre le TX de l'Arduino et le RX du Pi. Un simple pont diviseur 1/3, 2/3 fera donc l'affaire.

Reste la liaison Pi TX -> Arduino RX. On pourrait penser qu'il suffit de brancher directement le Pi à l'Arduino avec un fil, pour peu que ce dernier accepte 3,3V pour un niveau logique haut. Or même si c'est bien le cas, certains ce sont apperçu que l'Arduino présentait à l'allumage sur sa broche RX une tension de 5V (ce que j'ai pu vérifier). On va donc devoir protéger notre Raspberry avec une diode régulatrice de 3,3V.

Schéma de la liaison série pour la programmation et la communication entre le Raspberry Pi et l'Arduino :

Afin que la carte électronique soit assez facilement réalisable par tous, elle a été pensée sur une plaque d'essai à bande. Le détail du circuit électronique au format Fritzing sera bientôt disponible, en attendant voici l'image :

La partie en haut à gauche correspond au circuit de la liaison série entre le Pi et l'Arduino. Le reste est relativement simple, la sortie Data du récepteur RF est connecté sur la deuxième interruption de l'Arduino, à savoir la broche 3, et l'entrée Data de l'émetteur est reliée à la broche 11.

L'utilisation d'un connecteur HE10 vous permet de reporter tous les ports GPIO du Pi sur la carte pour pouvoir ajouter facilement d'autres composants (comme un récepteur IR), mais vous pouvez très bien vous en passer.

L'Arduino et le récepteur RF sont enfichés et non soudés (attention au sens), pour pouvoir éventuellement m'en servir un jour sur un autre projet, mais vous pouvez les souder directement. Les deux fils noirs sur l'Arduino passent en fait dessous. Attention à couper les pistes au milieu sous l'Arduino.

Les deux fils rouges "volants" que vous voyez sont volontairement laissés longs pour le cas où il serait intéressant de changer de type d'alimentations. Le fil rouge de l'émetteur RF serait à relier directement à l'alimentation externe (12V max).

L'antenne rigide n'est pas obligatoire, mais vous devez au minimum souder un simple fil de 17,3cm. En test, l'antenne rigide m'a permis de gagner deux à trois mètres de portée.

Edit du 29/12/2013 : Le choix de l'antenne est en fait beaucoup plus crucial que ce que je croyais. Ainsi j'ai laissé tomber la mini antenne 433MHz, certes très jolie mais en fait peu efficace dans mon cas (problème de connexion entre l'antenne et le récepteur ?), au profit d'un bout de fil de cuivre rigide d'environ 34cm, à savoir une demi onde plutôt qu'un quart d'onde. Tant pis pour l'esthétique.

Concernant l'alimentation, celle-ci est à choisir avec soin. Si vous en choisissez une trop "faiblarde" vous allez avoir des soucis pour alimenter à la fois le Pi et la carte électronique. Pour ma part j'utilise une alimentation 1 Ampère de chez RadioSpares sans soucis, mais impossible de faire fonctionner le tout avec un chargeur usb Samsung, pourtant donné pour 2A... La tension mesurée aux bornes 5V du Pi est de 4,70V, trop peu pour le récepteur RF qui nécessite 4,75V minimum. Avec l'alimentation RadioSpares on atteint les 4,85V.

Edit du 29/12/2013 : Le choix d'une alimentation externe s'impose si vous souhaitez maximiser votre DomoPi. Dans le cas contraire la portée ne devrait dépasser une dizaine de mètre. Pour une alimentation externe jusqu'à 12V, vous pouvez utiliser le régulateur de tension embarqué de l'Arduino. Pour ça déconnectez le fil rouge volant reliant le connecteur HE10 à l'Arduino (en bas sur la photo), et branchez votre alimentation à la masse et à la broche RAW de l'Arduino.

 Ce qu'il reste à faire

Pour la partie hardware, il reste quelques améliorations à voir :

  • insérer un témoin lumineux en façade pour indiquer l'émission/réception des ordres RF/IR
  • insérer un petit haut-parleur pour avoir un retour sonore sur certaines actions
  • utiliser une alimentation externe pour alimenter le circuit permettant ainsi d'augmenter la portée de l'émetteur RF et de palier aux alimentations Usb souvent un peu faiblarde.

Coût total

Pour les composants actifs de la carte il faut compter :

  • un Arduino Pro Mini 5V : 12€
  • un récepteur Aurel RF 4M50RR30SF : 15€
  • un émetteur chinois : 3€

Pour les composants passifs :

  • 3 résistances, 1 zener : 0,4€
  • une plaque d'essai : 5€
  • un connecteur mâle à souder HE10 2x13 points : 0,7€
  • un mètre de nappe 26 points : 1,4€
  • deux connecteurs femelles à sertir HE10 2x13 points : 1,3€
  • un boitier : 1€
  • une belle antenne : 5,5€

Soit un total de 39,8 € ! Et un peu de temps libre.

Suite

Bien évidemment tout ça n'est rien sans le logiciel qui va bien, passons donc maintenant à la programmation de l'Arduino.

16 commentaires (Ajouter)

samsoul

15 avril 2015 à 22:19
Bonjour, Tout nouveau dans le monde de la domotique (on peut dire vierge même...), votre projet m'intéresse dans le but de récupérer l'état de détecteurs de fumée interconnectés afin de me transmettre l'information en cas de déclenchement lorsque je ne suis pas chez moi. Bref... Je possède déjà un Raspberry B (pour un média center) et compte investir dans les différents composants et la carte que vous préconisez. Ne connaissant pas je m'interroge sur l'alimentation des cartes : faut-il 2 alimentations à savoir 1 pour le Rasp et 1 pour l'Arduino ou bien l'Arduino peut alimenter le Rasp (et donc comment les relier ?) ? Après de brèves recherches sur les émetteurs et récepteurs je suis tombé sur ceux-ci : - http://snootlab.com/composants/145-recepteur-rf-434-mhz-fr.html - http://snootlab.com/composants/147-emetteur-rf-434-mhz-fr.html L'émetteur semble bien puissant et le récepteur en 110dbm bien plus performant que ce qui est proposé par la plus part des "produits chinois". Qu'en pensez-vous ? A noter que dans le cadre de mon 1er projet, l'émetteur ne semble pas utile. Par avance merci...

Franck

29 janvier 2015 à 15:57
@Yoshi : Bonjour, le boitier est celui-ci http://www.gotronic.fr/art-boitier-clipsable-sa133-6149.htm Avantages : les dimensions sont biens. Inconvénients : ce ne sont que des clips, et une fois la découpe faite pour la nappe, ça clipse un peu moins bien. Mais ça serait à refaire je regarderais s'il n'existe pas un boitier qui puisse contenir le Pi également. Ou alors, dans le cas où l'on ne se sert pas du récepteur IR, d'utiliser la connectique USB pour relier l'arduino R3, qui serait lui dans un boitier sympa (s'il en existe...).

Yoshi

29 janvier 2015 à 15:02
Bonjour, Pouvez-vous me dire où avez-vous acheter le petit boitier pour y mettre l'emetteur-recepteur. Merci Cordialement

DD91

16 novembre 2014 à 19:19
bonjour et bien daccord merci pour toutes vos reponses et bon courage pour la suite :) DD91

DD91

13 novembre 2014 à 14:45
Bonjour merci pour votre réponse rapide daccord pour le protocole xpl, je pense que pour savoir si domoticz le gere il ne me reste plus qu'à l'installer et voir si il est inclu c'est ca? (Surement dans la partie de configuration pour les cle zwave etc...) Faut il obligatoirement une arduino pour verifier? une fois que je l'aurais recu je viendrais ici pour donner ce que j'ai pu trouver DD91
Ajouter votre commentaire

Tous les champs sont obligatoires