Elektor Electronics 2018 03 04
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
pour piloter la vieille horloge à Nixie.<br />
Ce projet repose sur une idée plutôt<br />
simple, mais sa réalisation l’est un peu<br />
moins. Vous devrez peut-être modifier<br />
le logiciel pour le rendre compatible<br />
avec votre horloge DCF77. Pour cela,<br />
Luc (labo d’<strong>Elektor</strong>) a conçu un petit<br />
circuit imprimé qui facilite grandement<br />
la (re)programmation éventuelle du<br />
module ESP-01. Le circuit présenté ici<br />
est donc un émulateur DCF77 ainsi qu’un<br />
programmateur d’ESP-01.<br />
Le matériel est simple<br />
Le schéma de l’émulateur (fig. 1) n’est<br />
pas compliqué. Le régulateur de tension<br />
3,3 V à faible chute (IC1) alimente le<br />
module ESP-01 (MOD1). Le cavalier<br />
JP1 permet de placer l’ESP-01 en mode<br />
programmation.<br />
LED1 indique la présence de la tension<br />
d’alimentation, mais comme l’ESP-01<br />
possède sa propre LED, LED1 (ainsi que<br />
R1) pourront être omis.<br />
K1 au brochage compatible avec un câble<br />
FTDI permet de relier un adaptateur<br />
USB/série de type 3,3 V.<br />
Le transistor T1 facilitera l’interfaçage<br />
avec votre horloge en traduisant le 3,3 V<br />
en sortie de l’ESP-01 vers la tension de<br />
prédilection de votre horloge DCF77.<br />
Vous pourrez omettre la résistance de<br />
collecteur R4 si l’horloge possède déjà<br />
une résistance de rappel vers le haut à<br />
l’entrée de son décodeur DCF77.<br />
Le signal de sortie DCF77 est inversé<br />
par T1, mais le logiciel compense. Vous<br />
devrez peut-être jeter un coup d’œil à<br />
la documentation du module DCF77 de<br />
votre horloge pour déterminer si le signal<br />
doit être inversé ou non. Bien entendu,<br />
vous pourrez procéder par essais<br />
successifs pour déterminer la polarité qui<br />
convient, ou bien utiliser un oscilloscope<br />
pour déterminer la polarité du signal en<br />
sortie de votre récepteur DCF77.<br />
ReadAndDecodeTime<br />
fait tout le boulot<br />
Le programme est un croquis Arduino.<br />
Comme à l’habitude, il lance la fonction<br />
setup avant de répéter continuellement<br />
l’exécution de la fonction loop.<br />
La fonction setup configure les entrées<br />
et sorties de l’ESP-01 et initialise<br />
certaines variables globales. Elle<br />
configure également un temporisateur<br />
déclenché toutes les 100 ms. Ce dernier<br />
est utilisé pour produire les données<br />
codées au format DCF77 (voir les détails<br />
du protocole DCF77 sur l’internet).<br />
Enfin, une connexion au réseau Wi-Fi<br />
est établie.<br />
La fonction loop est très simple et<br />
s’exécute une fois par minute. Soit elle<br />
se connecte au serveur de temps pour<br />
obtenir l’heure, soit elle tente de se<br />
reconnecter au réseau si le lien a été<br />
interrompu.<br />
La fonction loop est sommaire parce<br />
qu’elle délègue le gros du travail à la<br />
fonction ReadAndDecodeTime. En effet<br />
c’est cette dernière qui se connecte au<br />
serveur NTP pour obtenir l’heure et qui<br />
la convertit ensuite un format qui permet<br />
enfin le codage au format DCF77. C’est<br />
la fonction CalculateArray qui se charge<br />
de la conversion finale des différentes<br />
valeurs qui composent une trame de<br />
zéros et uns positionnés correctement.<br />
Le temporisateur 100 ms mentionné plus<br />
haut appelle la fonction DcfOut. Cette<br />
fonction lit le tableau de bits rempli par<br />
CalculateArray et le transmet sous la<br />
forme d’impulsions sur la broche GPIO2 :<br />
100 ms pour un 0, 200 ms pour un 1.<br />
La conversion de l’heure NTP en signal<br />
horaire DCF77 vous paraît peut-être<br />
triviale, mais c’est loin d’être le cas.<br />
Primo, le serveur envoie le nombre de<br />
secondes écoulées depuis 1900. Deuzio,<br />
la bibliothèque utilisée pour les calculs<br />
de temps fonctionne avec le temps<br />
Unix (le nombre de secondes écoulées<br />
depuis 1970) ; il faut donc convertir<br />
l’heure NTP en heure Unix. Tertio, le<br />
DCF<br />
+<br />
GND<br />
RX<br />
TX<br />
K2<br />
K1<br />
3<br />
2<br />
1<br />
to DCF clock<br />
6<br />
5<br />
4<br />
3<br />
2<br />
1<br />
RS232 TTL/ FDTI<br />
C1<br />
470n<br />
T1<br />
BC547<br />
3k3<br />
IC1<br />
LM3940 3V3<br />
R4<br />
TAB<br />
R2<br />
47k<br />
TX<br />
RX<br />
INFOS SUR LE PROJET<br />
DCF77<br />
ESP-01<br />
émulateur<br />
Æ<br />
Env. 2 h<br />
Fer à souder pour CMS,<br />
ordinateur,<br />
EDI Arduino<br />
env. 15 €<br />
ESP8266<br />
NTP Wi-Fi<br />
protocole DCF77 transmet l’heure à la<br />
prochaine minute (« Au quatrième top,<br />
il sera... »), pas le temps réel. Enfin,<br />
la valeur NTP reçue ne correspond sans<br />
doute pas à une minute exacte. Pour<br />
corriger cela, on soustrait deux minutes<br />
du temps reçu avant d’envoyer deux<br />
trains d’impulsions à l’horloge, ensuite<br />
on envoie une troisième minute complète<br />
3k3<br />
C2<br />
100u 16V<br />
R3<br />
FLASH<br />
220R<br />
3k3<br />
JP1 2<br />
R1<br />
LED1<br />
R5<br />
1<br />
VCC<br />
2<br />
6<br />
4<br />
5<br />
3<br />
8<br />
1<br />
7<br />
VCC<br />
CH_PD<br />
RST<br />
GPIO2<br />
GPIO0<br />
TX<br />
RX<br />
débutant<br />
connaisseur<br />
expert<br />
C3<br />
100n<br />
MOD1<br />
ESP8266<br />
GND<br />
ESP-01<br />
WiFi module<br />
150713 - 11<br />
Figure 1. Le cerveau de l’émulateur DCF77 se trouve dans un module Wi-Fi ESP-01.<br />
www.elektormagazine.fr mars/avril <strong>2018</strong> 23