Domotique revisitée ;-)

IMG_0926La première version de ma domotique m’a accompagné pendant 3 ans, mais il était temps de faire évoluer tout cela !!!

D’une part pour ces relais qui n’arrêtaient pas de « claquer » à chaque action sur les volets ou à chaque déclenchement du chauffage, et d’autre part pour cette interface graphique façon « minitel » d’un autre temps 😉

Ce qui a donné un cahier des charges en deux parties:
– trouver un moyen de remplacer les relais par une autre solution
– avoir une véritable interface graphique digne de ce nom

Les relais:
pour la V1 de la domotique j’avais utilisé deux cartes de 16 relais où chacune des 32 entrées de commande était relié à un pin de l’arduino méga. Au delà du problème de bruit des relais, cela utilisait un trop grand nombre de sorties du microcontrôleur (à mon gout). Pour réduire ce nombre, il fallait passer par un système permettant un quelconque multiplexage des commandes. J’ai cherché à utiliser en premier lieu une solution basée sur une carte avec des relais sur bus I2C. J’en ai trouvé facilement un modèle 8 relais en vente sur Ebay. Si cette solution était intéressante du point de vue du nombre de pin utilisés (2 pins: SDA et SCL), cela ne résolvait en rien mon problème de bruit.

DSCF4892Je suis donc tourné vers une solution en deux partie. La première partie a consisté a utiliser une carte équipée de 8 relais « OMRON SSR G3MB-202P ». Ces relais sont des SSR (Solid State Relay), c’est à dire qu’il sont composés de composants électroniques ne faisant pas appel à des pièces mécaniques (donc pas de bruit !! 😉 ). Plus précisément, il s’agit d’un opto-coupleur (led+detecteur) qui commande un ensemble de transistors MOSFET en mode relais.
C’est la solution idéale dans mon cas, plus de bruit, pas de mécanique, donc, virtuellement inusable.
Concernant la deuxième parie de ma solution, il fallait que je trouve un moyen de réduire le nombre de pins utilisés, pour cela, je me suis intéressée aux registres à décalage. Derrière ce gros mot se cache un composant simple d’emploi qui permet de transformer un signal série en signal parallèle. Pour être plus clair, on envoie un signal d’horloge sur une patte et sur une autre on envoie les différents bits constituant un octet, en conséquence le composant va retranscrire cet octet en activant ou pas (0 ou 1) 8 pattes de sortie. Le registre à décalage le plus commun est le 74HC595, il a l’avantage d’être facilement chainable (on peut en commander 4 à la suite avec les mêmes fils), et de fonctionner très bien avec la bibliothèque « ShiftOut » développée pour les arduino.
domotique1_bb

Le schéma ci-dessous montre comment à partir de 5 fils (+5V; 0V; data; clock; latch) commander 32 sorties. Ce qui signifie qu’avec quatre 74HC595, il est possible de commander 4 cartes de 8 relais, le tout à partir de 3 pins (hors alim). Afin de réaliser quelque chose de compacte, j’ai souhaité faire mon propre circuit PCB plutôt que d’utiliser une plaque de prototypage et une multitude de fils volants. Je l’ai conçu avec le logiciel Fritzing qui permet de faire toutes les étapes depuis le schéma, en passant par le PCB, jusqu’à la demande de fabrication sur le net.
domotique1_circuit imprimé

Comme le montre ce dessin du PCB, je l’ai fait graver en double couche afin de minimiser sa taille. En bas se trouvent les entrées (2 pins d’alim+3 pins) et au milieu, chaque barre fourni l’alim et la commande de 2 cartes relais (+-12345678).

.
.
.

.

.

.

Et voila le résultat: Les 4 cartes et le PCB en dessous (en blanc). Le relais 1 de la quatrième carte est activé dans cet exemple.

IMG_0319

L’interface graphique:

J’ai cherché pendant plusieurs mois une solution simple et peu onéreuse permettant d’avoir une interface graphique correcte, mais sans grand succès. Jusqu’au jour où je suis tombé sur un billet expliquant comment utiliser une liaison serie entre un arduino et un Raspberry Pi afin d’utiliser le Raspberry pi comme carte graphique HDMI moyennant un programme en python coté Pi interprétant les commandes passée sur le port série par l’arduino. Si c’est encore trop obscur, lisez l’article, le principe y est bien expliqué.
Le plus dur a été d’apprendre à programmer en python pour analyser les trames série, gérer l’écran tactile (vu comme une souris USB par le RasPi), afficher des images, rafraichir l’écran et renvoyer des trames à l’arduino en retour de toute action. Le code du programme python est dispo ici (le corps du programme commence à partie de la ligne 422).
Encore merci à Gilles pour sa maquette d’interface graphique 😉
La vidéo ci-dessous montre le fonctionnement de la chose:

L’énorme avantage d’un Raspberry Pi comme carte graphique est d’avoir pu réduire au maximum le code utile du coté de l’arduino. Par rapport à la V1 de la domotique le code passe d’environ 1700 lignes à 850. Avec cette nouvelle version la tache principale de l’arduino est désormais d’exécuter les taches planifiées (volets), et de gérer le chauffage.
Le code est dispo ici

L’ensemble de l’électronique avant remontage 😉

IMG_0457