Dans mon dernier edito de rentrée 2017, j’avais fait part de mon intention de rédiger quelques billets orientés domotique et arduino. A l’époque, j’étais « supramotivé », fougueux et plein d’idées trottaient dans ma petite tête. Nous sommes le 19 décembre et à ce jour 0.00 article n’a été publié .Mais comme bien souvent dans ces cas là , le fait de l’annoncer est juste un moyen de ne pas perdre de vue ce projet qui me tient à coeur et d’éviter de le reporter à l’année d’après. Et donc l’année 2017 n’étant pas totalement terminée, je compte prouver que je suis un blogger de parole 😉
Je profite de ma semaine de vacances pour « déprocrastiner ».J’ai enfin pu tester le clônage de prises radio télécommandée. Késaco?
Mais si vous savez celles que l’on trouve dans n’importe quelle grande surface de bricolage aux alentours de 20 euros le lot de 3 avec la télécommande.
Aujourd’hui je vais vous démontrer qu’avec très peu de matos et de connaissances il est possible à base d’arduino de donner des ordres, les mêmes que ceux envoyés par la télécommande. Je me suis fortement inspiré de plusieurs tutos (liens dispo à la fin de l’article). Ils m’ont beaucoup aidé mais je voulais « élaguer » un peu de technique (que les puristes me pardonnent) pour que des béotiens comme moi puissent reproduire facilement les manipulations sans rentrer trop dans les détails mais tout en comprenant quand même les différentes étapes pour y arriver.
Ce tutoriel est assez basique ,ne vous attendez pas à produire quelque chose de spectaculaire mais vu le peu de moyens qu’il demande à mettre en oeuvre ce serait dommage de ne pas l’essayer! Ce sera surtout une première marche pour accéder au palier supérieur qui mène à la route de la domotisation 🙂
Aussi, dans cette série de billets , je vous propose de commencer par le plus simple: le « clônage » de prises « chacon » référence 54647.
Pourquoi ce modèle de prises?
Elles sont pas chères, efficaces et disponibles facilement. Mais sachez que si vous possédez déjà des prises d’une autre marque celles ci ont de fortes chances d’être compatibles [spoiler]avec la bibliothèque chargée de sniffer les trames de la télécommande.[/spoiler]
Plan d’actions:
1/ Prérequis
a/ Matériels
b/ Logiciels
2/ Installation
a/ Environnement Arduino
b/ Bibliothèque RcSwitch
3/ Capturer la trame
a/ Montage du receveur
b/ Sniff avec rcswitch
4/ « Clônage » de la trame
a/ Montage de l’emetteur
b/ Envoi de la trame
1/ Prérequis
a/ Matériels
- 1 arduino uno (environ 20 euros)
- 1 alimentation usb
- 1 couple transmetteurs / receveurs 433mhz (1,40euros)
- 1 prise « chacon » + 1 télécommande (13euros)
Donc à la louche , votre investissement sera de 38 euros.Prix raisonnable, d’autant plus que les composants achetés pourront vous resservir par la suite pour d’autres projets.
b/ Logiciels
- Ide Arduino
- Bibliothèque RcSwitch
Durée du tuto:
En mode script kiddie, je dirais que si vous n’êtes pas à l’aise avec l’electronique , il vous faudra bien 10 à 15 minutes maxi pour mettre en oeuvre ce petit TP.
2/ Installation
A/ Environnement IDE Arduino
apt install arduino
B/ importer la librairie rcSwitch
Un grand merci à Sui77 qui a pondu cette librairie capable de beaucoup de choses notamment de sniffer et d’envoyer des trames 433 mhz
git clone https://github.com/sui77/rc-switch.git
On lance l’environnement arduino :
arduino
Puis on parcourt le menu:
Croquis > Importer une bibliothèque > Ajouter la bibliothèque.
ou méthode moins graphique mais tout aussi efficace:
mv rc-swich /usr/share/arduino/libraries/rcswitch/
3/ Capturer la trame
A/ Montage du récepteur
Lequel des 2? Ca ressemble à ça:
-relier le recepteur 433 mhz à l’arduino.
Attention le schéma ci-dessous ne tient pas compte du branchement des composants à la « breadboard ». Pour celà, voir la photo d’après
- fil noir à connecter sur grnd
- fil orange à connecter sur pin 2 de l’arduino
- fil rouge à connecter sur vcc 5v
b/ Sniff avec rcswitch
L’idée c’est de capturer la trame envoyée par la télécommande mais cette fois ci à l’aide du contrôleur arduino
Dans l’IDE arduino , charger la librairie rcswith et plus particulièrement le fichier intitulé:
Fichier->Exemples->Rcswitch-> »ReceiveDemo_Advance »
- Compiler le programme
- Téléverser le programme dans l’arduino
- Lancer la fenêtre « moniteur série » avec ctrl+MAJ+M ou outils->Moniteur série
- régler les bauds (9600)
A partir de ce moment là , l’arduino est en attente de réception d’une trame pour pouvoir la décoder. Il ne reste plus qu’à appuyer sur une des touches de la télécommande pour allumer la prise 1 par exemple.
Vous devriez voir apparaître les informations suivantes relatives au décodage de votre trame:
[ Bouton 1 ]
#trames ON
Decimal: 5510485 (24Bit) B
Binary: 01010100 00010101 01010101
Tri-State: FFF00FFFFFFF
PulseLength: 411 microseconds Protocol: 1
Raw data: 12804,396,12,1240,1224,432,392,1252,1220,392,1256,1216,440,384,1260,
392,1260,388,1260,392,1256,392,380,1256,1216,436,388,1264,1212,436,388,1264
,1212,436,384,1268,1212,440,380,1268,1208,448,376,1268,1208,444,1204,448,1200,
Ensuite vous faites la même chose en appuyant sur la touche « off » de la télécommande pour éteindre la prise 1.
#trames OFF
Decimal: 5510484 (24Bit)
Binary: 010101000001010101010100
Tri-State: FFF00FFFFFF0
PulseLength: 411 microseconds Protocol: 1
Raw data: 12788,400,1248,1224,428,400,1248,1224,424,400,1252,1220,428,396,1256
,396,1252,396,1252,400,1248,400,1252,1224,424,400,1248,1228,428,392,1256,1220,428
,396,1252,1224,428,396,1252,1220,428,396,1256,1216,432,396,1252,1220,432,*
Je vous passe les différents tests et déductions logiques qui ont permis de comprendre quels bits correspondaient à quelle action . Si ça vous intéresse , je me suis fortement inspiré de ce très bon tutoriel où tout est bien expliqué.
Pour résumer, la trame de 24 bits se décompose découpe en 3 octets . Pour rappel le but du jeu est de :
Trouver les bits qui correspondent :
- à l’identification du sélecteur
- au numéro de prise
- à l’ordre (ON ou OFF)
Donc dans notre exemple pour rappel nous avons branché la prise 1 sur selecteur 1 et appuyé sur le bouton 1 de la télécommande
La trame capturée nous renvoie en binaire la valeur suivante:
Binary: 00010101 00010101 01010101
- 1er octet = numéro du sélecteur = 00010101
- 2ème octet = numéro de prise = 00010101
- 3ème octet = action « ON »= 01010101
Note pour plus tard:
Nous utiliserons la valeur décimale de la trame. Alors pourquoi avoir fait un focus sur le découpage de la trame en octet? c’était juste pour expliquer et comprendre comment cette dernière était formée.
« Clônage » de la trame
a/ Montage de l’emetteur
- Ca ressemble à quoi un emetteur 433 mhz?
pin plus à gauche=data
pin milieu= vcc
pin à droite = ground
Connecté à l’Arduino ca donne ça:
- fil noir à connecter sur grnd
- fil orange à connecter sur pin 10 de l’arduino
- fil rouge à connecter sur vcc 5v
Pour info, le fil bleu que vous voyez sur la photo est une antenne artisanale confectionnée par mes soins. Elle ne fait qu’amplifier et n’est pas nécessaire si la distance avec votre prise est de quelques mètres.
b/ Envoi de la trame
Programme emprunté au tutoriel cité plus haut mais je me suis permis de l’adapter dans l’optique de juste faire clignoter la lampe de son salon que ‘on aura pris soin de brancher sur la prise numero 1.
A partir de l’IDE Arduino , compilez et téléversez le fichier « SendDemo »
Fichier->Exemples->Rcswitch-> »SendDemo »
#include <RCSwitch.h>
RCSwitch mySwitch = RCSwitch();
void setup() {
Serial.begin(9600);
// Transmitter is connected to Arduino Pin #10
mySwitch.enableTransmit(10);
}
void loop() {
/* on envoie la trame "on" avec sa valeur décimale */
mySwitch.send( 5510485, 24);
delay(2000);
/* on envoie la trame "off" avec sa valeur décimale */
mySwitch.send( 5510484, 24);
delay(2000);
}
– Compilez puis téléversez
– la lampe de votre salon devrait alors s’allumer et au bout de 2 secondes s’éteindre sans aucune autre intervention que celle de votre contrôleur.
Conclusion
Vous allez me dire tout ca pour ça??? tu fais clignoter la lampe de ton salon , c’est super utile :/ En fait, ce petit tuto a juste pour but de montrer qu’avec quelques lignes de code,un peu d’électronique et une communauté sympa qui met à disposition leurs sources , il est posssible de maitriser le pilotage de certains objets de la vie quotidienne. Mais ce qu’il nous manque maintenant c’est l’automatisation.
Nous savons donc maintenant comment faire pour envoyer basiquement des ordres à des objets par le biais d’ondes hertziennes. la prochaine étape est de trouver un moyen de planifier, d’ordonnancer , faire interagir tous ces objets .Utiliser un raspberry ou un arduino ou les deux? la suite dans les prochains épisodes….
Pour ceux qui voudraient aller plus loin:
Salut, je m’efforce d’installer RCSwitch.h mais je n’arrive pas à l’installer peut tu me donner la manipulation à effectuer.
La plus simple bien-sur.
merci
slt, il faudrait en dire un peu plus sur la nature de tes difficultés pour que je puisse t’aider…
c’est à la compilation que tu obtiens un message d’erreur ? ou est ce que tu n’arrives pas à voir la librairie dans l’IDE arduino? t’es sous linux ?
Rien ne sort du moniteur. J’utilise une Arduino MEGA 2560, je me suis bien branché sur la borne 2 pour DATA,GND et 5V, rien à faire rien ne s’afficher sur le moniteur série, je désespère.
Merci pour ce tutoriel ! Ca m’a permis de mettre au point un délesteur pour radiateur mobile…
Bonjour,
Merci pour ce tutoriel qui est très pratique. En ce qui me concerne j’arrive très bien a capter la trame, cependant elle est codée sur 32 bits et quand je la renvoie tel quel il ne se passe rien. Je n’ai pas du comprendre l’utilité de chaque bit.
Ci-dessous la trame ON de la position 1 de la télécommande:
Decimal: 2384749312 (32Bit) Binary: 10001110001001000110001100000000 Tri-State: not applicable PulseLength: 707 microseconds Protocol: 2
Raw data: 7116,1156,688,560,1292,556,1296,560,1300,1164,700,1160,716,1152,728,544,1312,552,1296,548,1296,1156,704,556,1300,556,1316,1148,724,548,1324,544,1316,548,1296,1152,692,1160,700,552,1312,548,1316,552,1316,1148,728,1148,720,540,1304,544,1308,540,1308,548,1316,548,1312,552,1320,552,1328,544,1276,
La telecommande est une chacon RX54670
Pouvez vous m’aider s’il vous plait?
Bonjour, j’ai exactement le même problème, je reçois une tram sur 32 bits et il ne se passe rien quand j’essaie de l’envoyer avec le transmetteur.
Je rencontre moi aussi le même problème. Avez-vous trouvé une solution ?