Horloge mère électronique avec Arduino.

J

jpbbricole

Compagnon
Bonjour
Je me suis lancé pour voire ce je pouvais faire pour piloter une « horloge de gare » (HG).

Pour ce qui est de la source du temps, il y a des modules pour Arduino comme le DS32331
1631867217801.png

qui est assez précis.
Comme autre source il y a l’horloge atomique DCF77 et son capteur
1631867242189.png

Et internet par l’intermédiaire du service NTP.
Le pilotage du « moteur » de l’HG dans le cas d’alternance, peut se faire par un pont en H comme ceci
1631867272870.png

Pour les HG à impulsion, c’est aussi utilisable, ou un transistor ou un relais.

Pour le processeur, il y a toute la gamme Arduino pour une version avec RTC DS3231 ou DCF77.
Pour la version avec NTP, j’ai choisi dans la gamme M5Stack, le M5Stick
1631867320406.png

Qui as tout dedans, un accu, la RTC, le wifi pour Internet et NTP et Bluetooth.

J’ai commencé par la version la plus complète, à mon avis, et pas forcément la plus difficile à construire. Il faut savoir qu’un M5Stick se programme avec les mêmes outils qu’un Arduino.
Comme je n’ai pas d’horloge de gare, j’ai simulé l’alternance des signaux avec 2 LED en tête bêche. Sont inclus, un bouton pour l’avance rapide ainsi qu’un bouton pour la synchronisation avec Internet (NTP), boutons qui font partie intégrante du M5Stick.

Le GROS problème que je n’ai pas encore résolu, est la mise à l’heure surtout que l’on ne peut qu’avancer et que le programme ne peut voire la position de l’HG. Vu qu’il y a le Bluetooth, je pense utiliser un smartphone avec un petit programme avec qui on enverrai l’heure vue sur l’HG au programme et qui calculerai le nombre de minutes de différence et enverrai le nombre d’impulsion à l’HG afin de la synchroniser.
Autre solution avec le M5Stick, un petit clavier pour introduire l’heure vue.
1631867370830.png

Une petite vidéo:

Pour le plaisir, je vais pousser cette version M5Stick jusqu'qu bout, s'il y a des personnes plus intéressées par une version Arduino avec RTC ou DCF77, c'est volontier que j'entrerai en matière.

Cordialement
jpbbricole
 
Dernière édition:
F

f6exb

Compagnon
Grillé par @jpbbricole !
C'est marrant, je viens juste de faire la même chose, mais avec le module Wroom32 avec Oled incorporé.
J'avais préparé hier un message et je voulais faire des vidéos aujourd'hui.

Pour faire suite au #204, j'ai commandé chez les chinois le module ESP32 avec l'affichage OLED et wifi incorporés :

Comme je n'ai pas (encore) d'horloge réceptrice, je n'ai pas monté le L298 et je me suis contenté pour l'instant du module.
Ça marche impeccablement :

une impulsion alternée toutes les minutes avec visualisation de sa polarité sur l'écran
heure synchronisée par serveur NTP sur 24 H et en face l'heure de la réceptrice sur 12H
indication heure d'hiver / heure d'été.

Tout ça sur 6,5 * 2,5 cm.
Photo prise hier soir :

ntp.jpg
 
J

jpbbricole

Compagnon
Bonjour f6exb
Grillé par @jpbbricole !
C'est là que les grands esprits se rencontrent :smt023

C'est superbe, j'ai hésité a utiliser, aussi, ce type de composant :wink:
C'est aussi pour faire une horloge mère?
Si oui, comment penses-tu faire la remise à l'heure de l'horloge fille?
Je vais te piquer l'idée de l'affichage, c'est plus parlant.
1631877030710.png

Moi je n'ai mis que le total des minutes

Cordialement
jpbbricole
 
F

f6exb

Compagnon
Hello,
J'ai juste adapté le programme du gars. C'est assez bien expliqué et en décortiquant le programme, j'en ai saisi les grandes lignes.
Contrairement à ce que disait JCS ( https://www.usinages.com/threads/horloge-mere-electronique-avec-arduino.67569/post-1859012 ), ce n'est pas que pour les initiés. Je n'ai pratiquement jamais pratiqué de l'Arduino, mais avec un peu de logique on peut adapter. Évidemment ce n'est pas la même chose que toi qui as fait de A à Z.
Comme dit plus haut, je n'ai pas d'horloge secondaire, mais ton idée de serveur NTP par wifi m'a intéressée. J'avais tâté dans le temps la réception de l'heure avec une carte NTP Meinberg, mais via cuivre. Mais je passais mon temps à regarder les statistiques pour voir les décalages et si j'étais bien à l'heure et ça m'a saoûlé. J'ai tout débranché.

L'état théorique de l'horloge est sur le compteur de droite. Chaque impulsion est mise en mémoire ainsi que l'heure que présente l'horloge. Il est possible que cette écriture en mémoire toutes les minutes la maltraite un peu.

La mise à l'heure est un peu acrobatique :
Par un reset de la carte, le compteur de droite qui est l'image de la pendule électrique, se remet à 12:00. Il faut se débrouiller ensuite pour que la pendule soit aussi à 12:00.
Au lancement, ce compteur "voit" qu'il ne correspond pas à l'heure réelle et la carte envoie les impulsions toutes les secondes, les aiguilles cavalent jusqu'à ce que l'horloge ait rattrapé l'heure. Là, ça repart pour le fonctionnement normal.

En cas de coupure d'alimentation, le dernier état connu se trouve en mémoire et lorsque le jus revient, il se passe la même chose que lors de l'initialisation :
lecture du compteur
envoi des impulsions toutes les secondes pour rattraper l'heure de gauche.

Il y a également une mise en veille pour ne pas fatiguer l'écran avec réveil par "touch-control".

Affichages :
Réseau Wifi
DST ===> heure d'été
NTP ===> synchronisé

Ci-dessous une vidéo qui montre la remise à l'heure depuis le dernier débranchement de l'USB :

 
Dernière édition:
J

jpbbricole

Compagnon
Bonjour f6exb
Comme dit plus haut, je n'ai pas d'horloge secondaire, mais ton idée de serveur NTP par wifi m'a intéressée
C'est le pourquoi de mon choix du M5Stick, il a en interne une RTC ainsi qu'un accu, donc le NTP qui synchronise le temps, sur commande (bouton) ou périodiquement.

Pour ce qui est de la remise à l'heure, mon idée est de demander la position actuelle de l'horloge et en déduire l'action à effectuer.
Ainsi il y aura une commande comme HVISU=7:12.
Cette commande pourra être introduite par la ligne de commande de l'IDE Arduino ou tout autre terminal série comme Terminal, l'autre option sera avec un smartphone via Bluetooth.
En général, mes programmes ont la possibilité de commandes via la ligne de commande.

Cordialement
jpbbricole
 
J

jpbbricole

Compagnon
Bonjour

J’ai terminé l’HG version dite « complète », je dois dire qu’il y avait de quoi s’amuser!
Je vous montre la mise à l’heure. Comme je n’ai pas de HG, je l’ai émulée avec un moteur pas à pas
1632405566379.png


Le trait noire représente l’aiguille des minutes, ici sur hh :30.
La mise à l’heure se fait par l’introduction, depuis la console de l’IDE Arduino, de la commande HVISU=10 :30 (pour l’exercice)
1632406093504.png


qui est l’heure vue sur l’horloge « fille ».
Ainsi le programme, envoie à l’horloge « fille » les impulsions nécessaires pour mettre les compteurs des minutes à égalité.
1632405700872.png

L’introduction de la commande de mise à l’heure peut, également, se faire depuis n’importe quel émulateur de terminal ou d'un smartphone via Bluetooth.
1632405718192.png

Une petite vidéo:


Le montage de développement :
1632405844189.png


La partie essentielle, l’horloge mère est composée d’un ESP32 M5StickC.
L’émulation de l’horloge fille d’un ESP32 M5 Atom Lite avec un interface pour moteur pas à pas DRV8825.
Tout ceci se programme avec l'environnement Arduino.


Je vais m’atteler à en faire une version un peu plus « conventionnelle » composée d’un Arduino UNO, d’une RTC DS3231 et d’un interface Bluetooth HC-06.
Cette version sera sans Internet.

Cordialement
jpbbricole
 
J

jpbbricole

Compagnon
Bonsoir Precis84

Oui, j'ai fait une pause pour d'autres projets. Je vais m'y remettre.

Cordialement
jpbbricole
 
J

jpbbricole

Compagnon
Bonjour
Voilà une horloge de gare (HG) basé sur un Arduino UNO.
Elle se compose d’un écran LCD 16x2.
1637852732227.png

Modèle i2C reconnaissable au petit module qui se trouve derrière.
1637852797621.png

D’une horloge RTC DS3231
1637852824473.png

Il est impératif de choisir un modèle avec pin SQW.

Actuellement, il n’y a pas d’interface « physique » de commande, tout se fait via des commandes dans le moniteur Arduino.
HVISU= Heure vue pour resynchronisation HVISU=11 :45
AVMAN= Avance manuelle AVMAN ou AVMAN=12
PULPER= Période de la ou les impulsion(s), en général 60 secondes. PULPER=60
PULMODE= Si une impulsion simple ou 2 alternées PULMODE=1
PULONLEVEL= Niveau de l’impulsion HIGH ou LOW PULONLEVEL=0
PULWIDTH= Largeur de l’impulsion PULWIDTH=1000
SYNCTEMPO= Tempo de la synchronisation SYNCTEMPO=500
RTCADJDATE= Réglage de la date de la RTC AAAA,MM,JJ RTCADJDATE=2021,11,25
RTCADJTIME= Réglage de l’heure de la RTC HH,MM,SS RTCADJTIME=14,12,30
USINE= Remise des paramètre aux valeurs par défaut setupParams, nécessite un redémarrage.
TEST= Pour le développement.

Quel serait l’interface le plus pratique, sachant que ce serait utile pour introduire l’heure visualisée en vue d’une resynchronisation (HVISU) ?
3 boutons ou un codeur rotatif ou avec un smartphone et Bluetooth ?
Pour ce qui est de la remise à l’heure de la RTC, comme c’est assez rare à faire, ce sera via la console Arduino.
Je suis ouvert à toute proposition.

Le montage d’essai :
1637852931839.png

Comme je n’ai pas d’horloge, je l’ai émulée avec un M5 ATOM Lite et son interface MPAP.

Cordialement
Jpbbricole
 

Sujets similaires

N
Réponses
27
Affichages
569
Jean 47
J
T
Réponses
2
Affichages
24 881
Tristan l'apprenti
T
Dudulle
Général langage MMBASIC
Réponses
8
Affichages
796
Dudulle
Dudulle
laurenttanguy
Réponses
0
Affichages
436
laurenttanguy
laurenttanguy
S
Réponses
18
Affichages
10 778
speedjf37
S
N
Réponses
12
Affichages
2 330
AlliPapa
AlliPapa
osiver
Réponses
14
Affichages
35 522
osiver
osiver
Haut