Arduino network power switch : télécommander via ethernet des équipements basse tension ou 220V avec une arduino

Ce qui devait arriver arriva... A force de jouer avec des cartes Arduino d'un coté et un environnement domotique de l'autre, l'envie vient de jouer avec les 2 en même temps... Voyons ici comment réaliser un "power switch", c'est à dire commander une carte relais, par ethernet, avec une arduino. Cette carte relais sera utilisée pour commander un automatisme de portail d'un coté(sortie sur contact sec) et une imprimante réseau de l'autre. Intéret de la chose par rapport à des modules X10 : le cout. En effet, chaque module X10 220V vaut 39€, alors que l'ensemble Freeduino (15€), carte ethernet (15€) et carte relais (6€) coute le même prix et permet de commander 2 modules au moins...

Nous verrons aussi comment l'ntégrer ensuite à un envionnement domotique sous Linux, utilisant Heyu et le fontal domus.link pour l'interface web.

Choix du matériel

Pour faire cette réalisation, il va nous falloir :

A noter que la quantité de ram utilisée nécessite un ATMega368 au lieu de l'ATMega168. Sur les nouvelles cartes, cela ne devrait pas poser de problème, mais les possesseurs d'anciennes Arduino devraient peut être lire l'article sur la mise à jour de leurs cartes sur ce même blog.

Câblage

Ici, 2 sorties sont utilisées : Digital 3 et 4. La carte relais s'alimentant en 5V, il est possible de prélever l'alimentation de l'Arduino. Attention toutefois à la puissance de l'alimentation, car Arduino + carte Ethernet = 150mA, et lorsque les 2 relais sont allumés on passe à 300mA. Il peut être nécessaire d'ajouter un radiateur sur le régulateur 5V de l'Arduino.

Les sorties relais peuvent ensuite être utilisées pour piloter toutes sortes de choses, y compris des charges 220V, leur pouvoir de coupure permettant de contrôler jusqu'à 10 ampères (2200W sur charges résistives...).

Logiciel embarqué

Le principal problème est la communication par Ethernet. NUElectronics, fournit une bibliothèque avec sa carte et quelques explications :

Il va tout d'abord falloir installer la librairie Ethernet (tous les fichiers de l'archive ci dessous) dans le sous répertoire hardware\libraries\etherShield de l'environnement Arduino. Les exemples fournis sont installés dans le sous répertoires de ce répertoire.

Malheureusement, l'implémentation Ethernet est relativement simple, pour ne pas dire simpliste. De ce fait, dans les exemples fournis, l'IP et l'adresse MAC sont fixes dans le code.

Je suis parti de l'exemple "etherShield_web_switch.pde", que j'ai cloné afin de le modifier. A partir de cet exemple, j'ai souhaité :

  • Inverser la gestion des sorties (état haut correspondait à 'off', ce qui ne va pas pour les relais...)
  • Renommer la sortie de 'led' à relais
  • Ajouter la gestion d'une deuxième sortie
  • Nettoyer code html
  • Et surtout ajouter un paramétrage de l'Ethernet.

En effet, les paramètres étant flashés dans le programme, cela ne me semblait pas des plus pratiques. L'AVR disposant d'une E2prom, il m'a semblé intéressant de rendre paramétrable la MAC, l'IP et le port et de les stocker en E2Prom. Par contre, la faible quantité de Ram de l'AVR rend difficile pour ne pas dire impossible la composition de pages webs élaborées. En effet, tout doit être préparé dans un tampon en ram avant d'envoyer sur le réseau, et la taille du tampon est TRÈS limitée... il devenait pratiquement impossible de mettre en place un paramétrage par pages web. J'ai donc privilégié le paramétrage par le biais de la liaison série, à la manière des vieux serveurs d'impressions.

Le code source de ce sketch peut être téléchargé ICI : PowerSwitch.pde

EDIT : José Courneau, a réalisé sur cette base un switch à 4 sorties. Le code source peut être téléchargé ICI :PowerSwitchmodif4_SORTIES_OK.pde

Première utilisation

Les réglages étant récupérés de l'E2Prom, il conviendra d'effectuer une première initialisation dessus. Paramétrer la liaison série de l'environnement de développement Arduino à 115200 bauds, no parity, 8 bits, 1 stop et 'allumer' la liaison série.

Un message devrait s'afficher, indiquant le bon fonctionnement de la liaison série:

Hit 's' or 'S' to enter setup

Entrons en mode 'setup' en tapant 's'. Un menu s'affiche :

Arduino Relay Setup Menu :
--
1: Clear E2PROM (first use)
2: Display current Settings
3: Modify Mac Addr
4: Modify IP Addr
5: Modify Port Number
6: Store new settings to E2PROM
7: Exit Setup

?

Voyons un peu les options disponibles :

  • 1 : Initialise l'E2prom pour une première utilisation, et met les réglages par défaut (192.168.20.99:80). Cela 'sauve' ces réglages.
  • 2 : Affiche les réglages courants (IP, MAC, port)
  • 3 : Change la MAC address
  • 4 : Change l'adresse IP de la carte
  • 5 : Change le numéro de port su lequel l'interface est active
  • 6 : Stocke les réglages faits dans l'E2Prom.
  • 7 : Quitte le setup, redémarre le sketch, et prend en compte les nouveaux réglages.

A noter, qu'à cause de l'environnement de développement Arduino qui prend la touche 'entrée' comme validation, mais n'envoie pas physiquement le caractère '0x0D' ou '0x0A' sur la liaison série, les entrées de valeurs longues (ex: ip, mac) doivent être terminées par le point d'exclamation avant de tape entrée... Bizarre, mais cette astuce évite d'utilise un terminal série pour paramétrer la carte....

Juste après le chargement du sketch, il va donc vous falloir faire au minimum

1 Pour initialiser l'E2Prom
2 Pour afficher la config courante
4 Pour mettre votre popre adresse IP
2 Pou vérifier qu'elle a bien été prise en compte
6 Pour stocker ces nouveaux réglages si ils vous conviennent
7 Pour redémarrer la carte avec les nouveaux réglages.

Dès lors, vous devriez pouvoir accéder au montage par un navigateur Web directement sur l'adresse IP :

Intégration avec le serveur domotique Heyu

Bien qu'à ce stade, nous disposions déjà de la possibilité de commuter une charge par l'interface web, il serait bien plus rigolo d'intégrer cette carte dans Heyu, nous autorisant à allumer ou éteindre ces 2 sorties par la télécommande radio, l'interface web de heyu, par programmation, etc...

L'interface web du powerswitch acceptant un paramètre en ligne de commande (cmd) il suffit de lui passer les bons paramètes pour allumer ou éteindre l'une ou l'autre des deux sorties :

  • cmd=2 allumage sortie 1
  • cmd=3 extinction sortie 1
  • cmd=4 allumage sortie 2
  • cmd=5 extinction sortie 2

Heyu nous offrant la possibilité de déclencher des commandes shell sur une adresse X10, nous allons tout d'abord déclarer les sorties dans /etc/heyu/x10.conf (ici, house code A, numéros de périphériques X10 8 et 9):

ALIAS imprimante A8 StdAM # Appliance,Garage
ALIAS portail A9 StdAM # Appliance,Garage

Il nous suffit ensuite d'associer 2 scripts par sortie pour gérer l'allumage et l'extinction des 2 relais, avec un simple wget sur l'url de la carte, en mettant le paramètre cmd avec la valeur requise pour l'action :

SCRIPT imprimante gon anysrc ::   wget -q "http://192.168.20.99/?cmd=2" -O /dev/null
SCRIPT imprimante goff anysrc ::   wget -q "http://192.168.20.99/?cmd=3" -O /dev/nul; 
SCRIPT portail gon anysrc ::         wget -q "http://192.168.20.99/?cmd=4" -O /dev/null 
SCRIPT portail goff anysrc ::         wget -q "http://192.168.20.99/?cmd=5" -O /dev/null

Après avoir rechargé la config de heyu, un simple test avec la télécommande permet de vérifier que cela fonctionne.

Et voila!