08.05.2018 Views

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!