DomoPi : une extension domotique pour le raspberry Pi
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é.
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 !
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.
samsoul
15 avril 2015 à 22:19Franck
29 janvier 2015 à 15:57Yoshi
29 janvier 2015 à 15:02DD91
16 novembre 2014 à 19:19DD91
13 novembre 2014 à 14:45