logo

Cette page a au moins 16 ans !
This page is at least 16 years old !

I) L'idée

L'idée vient en grande partie de Scruffy, qui, après s'être amusé a éteindre certaines choses chez une certaine personne a l'aide de prises secteur télécommandées (je savais même pas que ça existait) m'avait parlé des portes de garages automatiques et des sonnettes sans fil.
L'autre jour j'étais justement en train de bricoler sur notre futur détonateur à distance, et son idée m'est revenue: pourquoi ne pas développer une nouvelle "connerie technologique" sur cette base ?

Après 5 minutes de recherche, on s'est aperçu qu'un grand nombre de ces systèmes fonctionnaient effectivement avec des petits emeteurs/recepteurs 433,92Mhz. Cette frequence est largement utilisée dans plein de petits appareils télécommandés: jouets, portes de garage, sonnettes, portails, ou encore portes de voitures !
Bien sur, la sonnette de la maison familliale n'a pas eu le temps de se cacher avant qu'elle se fasse démonter, histoire d'avoir des renseignements pratiques plus rapidement.

II) La recherche d'infos

Dans le "bouton", a l'exterieur de la maison, le circuit est alimenté par une pile 12v Renata, qui doit coûter plus cher à l'unité que la sonnette entière. Il y a comme prévu un petit résonateur 433Mhz (434), et un circuit intégré de référence HT12-E avec deux jumpers. En allant voir le manuel sur internet, j'ai eu confirmation que ces deux jumpers permettent de "se faire comprendre" par le carillon (recepteur). Ils permettent d'éviter les conflits entre sonnettes, puisque l'émetteur est en théorie assez puissant pour émettre jusque chez les voisins. Le but est d'avoir la même configuration de jumpers du coté du bouton et du coté du carillon.

Puisque mon vieux module récépteur était déja cablé et opérationnel, j'ai pu enregistrer vite fait le signal émis par l'émetteur (entrée ligne + audacity = oscilloscope 48Khz). Voici ce que j'ai obtenu:

Le signal se repète tant qu'on appuie sur le bouton, il est constitué de 13 bits. Ici on lit: 1111100000100. S est un bit de start. J'explique leur signification plus tard...
Il y a une pause de la même longueur entre chaque transmission.

Mais pourquoi devoir faire un tel "codage" pour éviter les conflits, puisqu'il y a des dizaines de marques de sonnettes différentes ?
Simplement parce que le HT12-E a beau paraître un peu éxotique, il est relativement connu et répandu dans ce genre d'appareils radio, et pour cause: il coute rien, il a une plage de fonctionnement assez énorme et il nécéssite qu'au minimum une résistance pour fonctionner. Inutile de dire que c'est plutôt bon signe pour nous !

Le HT12-E est un encodeur 2^12 bits, associé a son décodeur, le HT12-D, que j'ai trouvé comme par hasard dans le carillon.
Holtek, qui sont apparament spécialisés dans les petits circuits intégrés simplificateurs de vie, fabriquent ce circuit intégré. Datasheet du HT12-E, et du HT12-D.

Notez bien qu'il n'existe pas que cet encodeur, veuillez vous referer au bas de cet article pour lire de quoi vous décourager.

Les datasheets sont souvent très gentils et fournissent tout ce dont on a besoin pour s'amuser.
Le CI demande une résistance de calibration pour son oscillateur, 12 entrées et une autre pour activer la transmission. Le CI n'est rien d'autre qu'une sorte de convertisseur PISO (Parallel In, Serial Out) qui ne s'occupe que de transmettre le "mot" configuré a l'aide de ses 12 entrées en série à la fréquence voulue, vers l'emetteur radio.

Le datasheet indique bien que ce sont 12 bits qui sont transmis, et non 13, le premier étant toujours un "1", qui sert à déclencher le récépteur. Tout ce qui suit est simplement l'état de ses entrées.
Pour confirmer cela, j'ai suivi les pistes sur le circuit du "bouton", et bien entendu cela correspondait au signal enregistré.

Les 4 premières broches sont reliées à "VSS": 4 bits à "1".
Les 2 suivantes sont reliées à la masse: 2 bits à "0".
Les 2 suivantes sont reliées à la masse également, mais par les deux jumpers: 2 bits à "0" dans mon cas.
La suivante, à la masse aussi: 1 bit à "0".
La suivante, laissée en l'air par une piste coupée volontairement: 1 bit à "1".
Et les deux dernières, reliées à la masse.
Ceci donne bien 1-111100000100, 1+12 bits.

Du coté du récépteur, on trouve les mêmes jumpers et la même piste coupée.

Le datasheet explique très bien la même chose, avec de jolis dessins. Il explique également qu'un bit à "1" est 1/3 du temps à l'état haut, et un bit à "0" est 2/3 du temps à l'état haut, comme vous pouvez le voir sur l'enregistrement. Il donne aussi comme recommandation d'utiliser une résistance de 51Kohms a 5% comme réglage de l'oscillateur, sympathique si les fabricants suivent ça à la lettre !

III) L'application

Maintenant la partie marrante: comme ce circuit est largement répandu et qu'il est relativement simple, faisons un "brute-forcer" !
Pas la peine de chercher exactement le même CI, car un bête microcontrolleur ferait largement l'affaire: j'utiliserais un ATTiny2313 parce que je n'avais que ça sous la patte, mais un Tiny13, 15, ou n'importe lequel a 8 broches fera aussi très bien l'affaire, et sera une grosse économie en place et en broches. Le programme compilé est en dessous des 500 octets.

Paragraphe inséré après une autre découverte: le carillon m'a surprit en jouant une mélodie qu'il n'avait jamais encore faite alors que j'essayais justement de le brute-forcer. En suivant les pistes sur son circuit, j'ai découvert qu'en fait, les 12 bits sont bien utilisés comme l'indiquait le datasheet: 8 bits d'adresse (ceux qui sont configurables pour éviter les conflits, et qui doivent etre les mêmes entre l'emetteur et le recepteur) et les 4 bits de fin sont des bits de données, qui ne sont pas comparés, mais servent juste à transmettre une info. C'est justement cette info qui est en partie transmise à un autre circuit intégré (limé) qui sert à générer les mélodies, interessant !
C'est donc le bouton qui choisit la mélodie. De cette manière on peut savoir à laquelle des deux éventuelles portes on a sonné...

Nous n'avons donc pas à scanner 2^12=4096 possibilités, mais seulement 2^8=256: encore plus interessant !
Dans le recepteur que j'ai démonté, les deux derniers bits de données ne sont pas connectés, et servent donc à rien du tout, les deux avant derniers par contre, permettent de choisir la mélodie. Par exemple:

11110000 01 xx = adresse, mélodie "01": ding-dong tout con.
11110000 10 xx = adresse, mélodie "10": big ben pendant 10 secondes...

Notez que "00" ou "11" ne fonctionne pas, et je ne saurais pas pourquoi tant que je n'aurais pas réussi a lire la référence sur le circuit generateur de mélodies.
De toutes manières, avec ce carillon, on aura pas d'autre mélodies sauf si on se met à couper des pistes.

On peut transmettre toujours les mêmes 4 bits, en esperant que ça tombe bien avec le routage du circuit. "0101" serait peut être le plus judicieux en sachant qu'au moins deux combinaisons marchent pas.
Mais le mieux, pour avoir le maximum de chance de réussir, serait de "scanner" en plus les 2 avant derniers bits, en ayant la même adresse. Comprennez:

11000111 0000, 11000111 0100... 11000111 1100, puis l'adresse suivante...

Il y a une info vraiment importante dans la doc du HT12-D: il vérifie normalement 3 fois le code reçu. Pas la peine de se précipiter, j'ai vérifié: il faut au moins transmettre 4 fois le même code pour qu'il se mettre à comprendre...

IV) La réalisation

Comme son nom l'indique pas, un "brute-forcer" sert à trouver un code en essayant toutes les combinaisons possibles.
C'est ce que fait le programme, en partant de "0". C'est à dire qu'il transmettera d'abord une imitation d'un code transmis par un HT12-E avec toutes ses broches de configuration à la masse, une fois avec les 4 bits de fin "0101" et une autre avec "1010". Puis il essaiera 1, 2, 3 et ainsi de suite, jusque 255. En tout nous avons 256*2=512 codes à tester.
Un code et son silence durent environ 21ms, qu'il faut transmettre 4 fois. Donc à raison d'environ 12 essais à la seconde, il faut un peu moins de 45 secondes pour tester d'une façon fiable toutes les possibilités.
Malheuresement, comme les récépteurs ne sont pas vraiment faits pour battre des records de vitesse, on peut difficilement réduire ce temps car je l'ai déja mis en dessous des 5% de la résistance, heuresement qu'ils sont très tolérants !

Voici le schéma, partant d'un AVR 8 broches, a vous d'adapter le programme selon quel µc vous voulez utiliser:

Radio: vers module radio 433Mhz, Aurel et Telecontrolli en ont des sympas.

Le programme idiot, qui teste les 4096 possibilités met environ 6 minutes pour toutes les essayer.
Le programme plus intelligent, qui teste les 256*2 possibilités met environ 45 secondes.
Télécharger les sources C AVRStudio pour ATMega8 (version 1): dbbf_1.zip

Vidéo du montage en action, avec un ATMega8. Notez les deux mélodies differentes selon les bits de données (A ou B):

V) Remarque sur la diversité

Si vous avez des difficultés à faire réagir un recepteur 12 bits avec ce programme, essayez de remettre le "30" original de TIMECONST dans le programme. Il permet de reproduire le signal dans des temps plus corrects.
Il existe d'autres paires d'encodeurs/décodeurs radio qui sont conçus pour éviter ce genre d'attaque. Par exemple le PT2262 de PTC permet de coder l'adresse sur 3^12 bits (531441 possibilités), je vous souhaite bien du courage pour attendre minimum 12 heures et 20 minutes... Alors ne comptez pas trop sur le programme que je fournis pour faire réagir des systèmes critiques.

footer
symbol symbol symbol symbol symbol