Raspberry PI ~ 15 : Créer sa propre prise radio (et autres périphériques) pour 6€
mercredi 13 février 2013 à 21:23Ce post est le quinzième d’une liste de tutoriels sur le raspberry PI, cliquez ici pour accéder au sommaire !
Suite à nos précédents tutos sur le Raspberry PI et la domotique contrôlée par radio (et notamment le tuto 12), certains d’entre vous m’ont demandé si il n’était pas possible de se passer de prises Chacon, d’autres m’ont demandé si des multiprises existaient sur le même principe, quant à moi je souhaitais de débarrasser de Chacon pour diverses raisons :
- Je voudrais, sur le long terme, personnaliser le protocole radio (inclure une notion d’état de la prise, en retour de consommation d’énergie etc..)
- J’aimerais construire de A à Z mon système domotique dans une optique pédagogique (100% DIY)
- J’aimerais ajouter quelques gadgets dans ma prise (pourquoi pas un capteur de température ou de consommation de courant ? )
C’est pourquoi nous allons aujourd’hui construire notre propre prototype de prise radio (pouvant facilement être transformée en multiprise) commandée par le Raspberry PI
Je parle de « prototype » pour une bonne raison, bien que le montage fonctionne parfaitement, il peux être amélioré au niveau du « packaging » (boitier).
Afin de vous motiver un peu (car je vous sent mous aujourd’hui :p), wala la petite vidéo de démo du prototype (avec quelques explication sommaires pour vous mettre en jambe)
Notez bien que vous devez au moins avoir lu le tuto 12 pour comprendre celui ci
Vous êtes chaud patate pour commencer ? Voyons voir un peu le matos à se procurer
Le matériel
Pour aller plus loin, il vous faudra les curieuses bêbêtes suivantes :
- Votre télécommande chacon OU votre rpi configuré comme dans le tuto 12
- 1 carte arduino duemilanove(c’est la moins chère 15€)
- 1 Micro contrôleur ATmega 328-pu avec bootloader inclus(2.55€) (nb:le bootloader inclus est important, si vous achetez une puce vierge par mégarde, il faudra la flasher vous même)
- 1 Résonateur ZTT 16.00mx(1.11€ les 5)
- 1 Résistance 1.27Ω (brun rouge violet gris rouge) (enfin c’est ce que j’ai pris mais il semblerais qu’une 10k convienne mieux.
- 1 Récepteur RF 433,92 mhz(1.28€ avec l’émetteur dont on ne se servira pas ici)
- 1 Carte relais 5V 1 canal(1.26€)
- 1 LED quelconque et sa résistance associée (j’ai pris une led au hasard + résistance 8.21MΩ (gris rouge brun doré) ces composants sont optionnels et servent juste de repères visuel lors du fonctionnement
Notez bien que vous n’aurez à Acheter la carte arduino qu’une fois, elle nous servira de programmateur pour construire toute nos futures prises, de même, les résonateurs sont par lots de 5 et nous n’en avons besoin que d’un par prises.
Vous en aurez donc environ pour 6€ par prises radio par la suite, notez que je ne compte pas l’alim (un vieux chargeur de portable récupéré fera l’affaire) ni le boitier (bah oui la vas falloir se dépatouiller avec un Tupperware qui traine XD), nous ne faisons pas vraiment ça pour le prix mais il faut souligner qu’on y gagne quand même par rapport au commerce (d’autant qu’il est possible de faire des multiprises avec ce montage et donc de réduire encore le cout par prises, on peux aussi remplacer/supprimer certains composants en bricolant (suppression du résonateur,remplacement de l’atmega par une Attiny etc..) mais je vais pas tout vous faire non plus :p).
Attends attends…C’est quoi ton Arduino la ?
Dans ce tuto nous introduirons les carte de programmation « Arduino » et leurs micro contrôleur Atmega qui nous permettrons de créer tous nos périphériques à bas cout sans avoir à acheter un raspberry à chaque fois ^^.
Petite explication rapide sur l’arduino donc :p
L’arduino (souvent nommé ardui) est une carte électronique très similaire au raspberry PI, à savoir qu’elle peut gérer des entrées sorties GPIO et contenir un code (en C++) pour réagir en fonction de ces gpio, cela dit, il y a quelques différences importantes :
- L’arduino coute 16€ pour son modèle le moins cher (duemilanove), le raspberry pi coute 30€
- L’arduino comprends 23 gpio digitaux (donc plus que le rpi), de plus, l’arduino à des 7 gpio analogiques (peux prendre d’autres valeurs que 0 ou 1), le rpi n’en possède pas
- L’arduino ne peux contenir qu’un code C++, le raspberry Pi peux contenir un système d’exploitation(ex : raspian…)
- L’arduino est en temps réel, pas le raspberry PI
- L’arduino (en fonction des modèles) ne contient pas de port Ethernet
- Le cerveau d’un arduino est la puce Atmega328, qui avec un peu d’astuce, peut être utilisée toute seule dans nos montage, cette puce ne coute que 3€ et est de plus petite taille que l’ardui.
Vous l’aurez compris, l’arduino est une carte de bas niveau, très rapide, moins chère, réductible à une puce et avec plus de gpio que le rpi ce qui en fait un élément parfait pour créer tous nos périphériques radio (prise radio, sonde de température radio, capteur d’ouverture radio etc…).
Les arduino (ou plutôt a terme : les atmega 328) seront les muscles de notre domotiquemaison
En revanche l’ardui n’a pas les capacité de traitement du rpi, de plus le rpi est plus haut niveau et gère en natif l’Ethernet, la gestion d’un os etc…
le rpi sera donc le cerveau de notre domotiquequi commandera et sondera les muscles arduino.
Le fonctionnement de la prise
Nous allons refaire le tutoriel #12 : allumer/éteindre une prise à distance avec le raspberry PI,sauf que cette fois ci, la prise sera « maison ».
Concrètement vous allez appuyer sur un certain bouton de votre télécommande chacon (ou envoyer le signal depuis votre rpi)
Ce signal vas être capté par le récepteur RF relié à l’arduino, l’arduino vas vérifier que le signal parle bien de lui (à son code récepteur) qu’il provient bien de la télécommande (a le bon code émetteur) et a un état on ou off (afin de savoir ce qu’il doit faire).
L’arduino vas alors envoyer 0 ou 1 a la carte relais, celle ci vas donc « ouvrir » ou « fermer » le circuit classique de la prise et laisser passer ou non le courant.
OUI MAIS !!!
Comme les cartes arduino c’est un peu gros et que c’est un peu cher d’en mettre une dans chaque prises, on ne vas utiliser que leurs micro contrôleur : l’Atmega328, qui lui coute 3€ et fait la même chose que l’arduino.
Évidemment comme c’est une puce nue, ça vas être un peu moins rigolo a programmer qu’une carte ardunio (qu’il suffit de brancher sur le port usb du pc), on vas donc se servir de la carte arduino pour programmer les puces Atmega que l’on inclura dans chaque prises
Ça parait un peu fou comme ça pour les novices électroniques que nous sommes mais vous allez voir, c’est en fait très simple
La programmation de la puce : branchements
Avant tout, téléchargez et installez l’IDE (environnement de développement Arduino) sur le site d’arduino.
Voila le schéma permettant de programmer une puce atmega à partir d’une carte arduino
Notez que sur le schéma j’utilise ce qu’on appelle une « BreadBoard », c’est une plaque en plastique qui permet de tester des circuits sans avoir à souder juste en plantant des fils dans des trous, les trous sont reliés de manière horizontale entre eux, sauf pour les lignes bleu et rouges (utilisée pour l’alimentation) qui eux sont verticaux.
Je vous conseille vivement l’achat d’une breadboard, ça ne coûte rien et c’est quasi indispensable pour tester les circuits dans de bonnes conditions (je m’en veux un peu de ne pas vous en avoir parlé avant)
- Les fil rx et tx sont ceux qui envoie le programme à l’Atmega
- La puce Atmega originellement implantée sur l’Ardunio doit être dé-clipsée sinon c’est elle qui sera programmée
- L’ensemble du circuit doit être alimenté en 5V, ici on utilise l’alimentation de l’arduino (conseillé)
- L’atmega doit être alimentée (5V + GND) des deux cotés aux bornes indiquées
- Le pin Reset de l’Atmega doit être relié au reset de l’arduino comme indiqué sur le schéma
- Le pin Reset de l’Atmega être relié au 5V via une résistance 1.27Ω (brun rouge violet gris rouge) comme indiqué sur le schéma
Une fois le circuit branché et alimenté vous pourrez lancer l’IDE arduino et programmer la puce comme si elle se trouvait sur la carte arduino.
Le code
Commencez par choper les sources du programme ici :
http://domotique.idleman.fr/data/priseMaison/priseRadio.zipPremièrement, allez dans votre repertoire arduino puis dans \libraries\ et créez un dossier nommé : EEPROMAnythingDedans vous placerez le fichier EEPROMAnything.h Nous venons d’inclure une nouvelle librairie à l’arduino IDE, celle vi vas nous permettre de gérer l’EEPROM (petite mémoire interne de l’atmega dans laquel nous allons stocker nos données)
Ensuite, lancez l’IDE (arduino.exe) : il ne vous reste qu’a copier le programme priseRadio.txt ci dessous dans l’ide, et cliquer sur télé-verser
nb: En fonction de l’atmega programmée, vous aurez peut être a changer le modèle de la carte dans l’ide, ex : j’ai une carte arduino duemilanove, mais mon atmega acheté est un uno, du coups lors du télé versement j’ai une erreur du genre “invalid sync blablabla”, donc je sélectionne uno dans le menu :
Et je retente le coup :p
Une fois la puce programmée on vas pouvoir passer a notre vrai branchement de prise radio final (fiou !! ^^, vous verrez avec le temps ça parait enfantin)
Le montage finale : branchements
La je ne peux pas faire explication plus détaillée (et plus débordante) que ce schéma…
En gros l’Atmega est toujours relié au résonateur (son horloge) et est alimenté des deux coté en 5v comme sur le montage précédent.
On à en plus branché trois composant sur l’Atmega : une led qui vas clignoter quand la prise recevra un signal, afin de ne pas griller la led, on rajoute une résistance (la résistance est a définir en fonction de la led) notez bien que led+ résistance sont optionnels et ne servent que pour avoir un visuel des signaux reçus.
On ajoute à ça une carte de réception radio 433 mhz qui vas capter les signaux radio et les envoyer à l’Atmega par le pin 9, cette carte radio est évidemment alimentée en 5v
On ajoute enfin une carte relais qui vas recevoir un ordre de l’Atmega part le pin 10 quand le signal reçu sera le bon, la carte relais vas alors fermer le circuit de droite (lampe + prise) ce qui vas allumer la lampe. Evidemment, cette carte aussi est alimenté en 5v.
Attention :Faites attention au sens de l’Atmega, vous pourrez vous repérer au petit creux rond en haut de la puce
nb: Les pattes extérieures du résonateur ne sont pas polarisées donc vous pouvez les intervertir par rapport au schéma, en revanche les pattes de la led le sont, donc si votre led ne s’allume pas, c’est peut être que vous vous êtes loupé de sens
L’utilisation
Le programme se comporte de la façon suivante :
Le tout premier signal au protocole home easy envoyé à la prise sera enregistré dans celle ci et deviendra le signal de référence pour ouvrir ou fermer le relais de la prise, il est donc nécessaire d’envoyer ce signal le plus rapidement possible après la mise en route du montage final, car un signal voisin pourrait vous piquer la place.
Actuellement, un seul signal peut être enregistré et vous n’avez droit qu’a un seul essai (bien que le matériel puisse en mémoriser beaucoup plus, le code doit être amélioré).
Lorsque la prise reçoit un signal correspondant a son signal de référence, la led clignote 10 fois très rapidement, et le relais change d’état
Lorsque la prise reçoit un signal non correspondant a son signal de référence mais au protocole home easy, la led clignote 1 fois lentement.
Les améliorations possibles
- La puce :En bidouillant un peu, on peux remplacer l’AtMega328 par un Attiny85, qui est un peu moins cher et bien plus petit, donc gain de place dans la prise et rapinage de quelques centimes à l’achat.
- Toujours la puce :L’Atmega328 possède une horloge interne, il est donc possible de se passer du résonateur, cependant il faut pour cela bidouiller un peu (je vous laisse chercher l’astuce :p) et vous passerez de 16mhz à 8mhz de fréquence d’horloge, donc ça sera moins réactif.
- La diode : Une diode RVB (pouvant s’allumer en rouge, vert ou bleu) serai plus appropriée car nous pourrions associer une couleur à chaque état (attente d’un signal, enregistrement d’un signal, refus d’un signal etc…)
- Le packaging :pas encore d’idées précise de ce côté la, si quelqu’un a des bons prix de boiter personnalisables, qu’il se manifeste ^^, si vous devez bricoler ou faire de la récup, évitez le bois (qui brûle trop bien en cas de court circuit) et le métal (qui conduit, donc risque de court circuit/électrocution) préférez le plastique (ou éventuellement le verre si vous voulez faire quelque chose d’artistique), un Tupperware un peu rigide et une rallonge coupée en deux me parait sensé, vous avez aussi l’option de l’imprimante 3d mais il faut en avoir une sous la main.
Notez que vous pouvez aussi inclure votre montage dans un boitier de ce genre ça fait plus pro (merci à Placto pour l’idée) - Le code :Vous aurez peut être noté que contrairement aux prises chacon, notre prise n’a qu’un mode « apprentissage » et il est très restreint, petite flemme de ma part, c’est pourtant très simple à ajouter, il faudra que je m’y mette quand j’aurais une petite seconde
- L’objet :En modifiant légèrement le code et en prenant une carte relais avec plus de canaux, vous pouvez faire une multiprise radio, ce qui sera plus rentable car pour disons 8 prises, vous n’aurez besoin que d’un atmega, un récepteur, un résonateur, une alim etc…
- Le protocole :maintenant qu’on a notre protocole identique à celui de chacon, pourquoi ne pas ajouter quelques fonctions comme une notion de retour sur l’état de la prise, ou même la consommation de la prise, sa température, la possibilité de faire varier la lumière, etc… ?
- L’alimentation : il faudrait trouver une alim pas chère pour le système, mais ne faites pas comme moi, pour ces choses la : ne commandez pas chinois :p
Si vous avez des problèmes de portées, de gros parasites, ou de mauvaise communication, pensez a faire ces deux choses :
- Prendre une alim externe pour les cartes radio et les l’alimenter au maximum de ce qu’elles sont capables de faire (cf la clause « voltage max » de fiche technique, souvent c’est entre 5 et 12V)
- Souder un fil conducteur de 17.3 cm a l’émetteur et au récepteur pour servir d’antennes.
Avec ces deux points, vous pouvez passer de quelques centimètres à plusieurs centaines de mètres de portée, la différence est vraiment flagrante.