lundi 12 octobre 2015

Construction d'une horloge avec deux galvanomètres

Voici le compte rendu de la construction d'une horloge constituée de deux galvanomètres à cadre mobile, d'un Arduino et d'une horloge temps réel (RTC pour "Real Time Clock") DS1307.  Il s'agit d'un projet simple à la portée des débutants.

J'ai déjà rédigé un article sur la construction d'une horloge à base d'Arduino et de RTC DS1307, mais il s'agissait d'un modèle très conventionnel d'horloge à affichage numérique, identique à ce qu'on peut acheter tout fait pour deux fois rien dans n'importe quelle boutique.

Un des plaisir de construire soit même une horloge, toutefois, c'est d'arriver à un résultat exclusif: fabriquer une horloge qui a quelque chose de particulier, qu'on ne retrouve pas dans les commerces.  Cette horloge répond parfaitement à ce critère, puisqu'elle utilise deux graduations distinctes pour indiquer l'heure et les minutes.

Le galvanomètre à cadre mobile

Avant les années 1980, la plupart des multimètres et autres instruments de mesure étaient analogiques:  la mesure était affichée par une aiguille qui se déplaçait au-dessus d'une graduation:  le galvanomètre à cadre mobile.  L'aiguille rotative était fixée à un petit bobinage de fil conducteur placé dans un champ magnétique:  plus le courant traversant la bobine était grand, plus l'aiguille subissait une forte déviation causée par la force magnétique.

Il est encore possible d'acheter un tel dispositif (en cherchant "analog panel" sur eBay, par exemple), mais si vous avez la chance de mettre la main sur de vieux appareils qui étaient destinés à la poubelle, c'est encore mieux!

Pour ma part, j'ai utilisé un module constitué de deux galvanomètre, que j'avais récupéré à l'intérieur d'une chaîne stéréo datant du début des années 1980.  Il s'agissait de deux indicateurs qui aidaient l'utilisateur lors de la syntonisation d'une chaîne de radio FM:  l'indicateur de gauche indiquait la puissance du signal, alors que celui de droite se positionnait au centre lorsque la fréquence sélectionnée était optimale.



Choix d'une résistance de protection pour le galvanomètre

Un galvanomètre à cadre mobile est un dispositif fragile!  Si vous le branchez directement à une source de tension sans le protéger au moyen d'une résistance suffisante placée en série, vous risquez de le détruire en très peu de temps.

Commencez avec une grande résistance en série avec le galvanomètre, et alimentez le circuit avec une faible tension:  si tout va bien, l'aiguille devrait être légèrement déviée vers la droite.  Si elle se rend brusquement au maximum de l'échelle, débranchez tout!  Le courant est probablement trop fort dans le bobinage du galvanomètre:  il vous faut une résistance plus grande ou une tension plus faible.  Si l'aiguille ne bouge pas du tout, le courant circule peut-être dans la mauvaise direction (donc l'aiguille tente en vain de dévier plus à gauche):  inversez la polarité pour vérifier si c'est le cas, au lieu d'immédiatement augmenter le courant.


Lorsque vous êtes certain d'avoir correctement branché le galvanomètre, il reste à trouver la valeur de résistance qui permet d'atteindre le maximum de l'échelle (ou à peu près) lorsque la tension d'alimentation est de 5 volts (ça peut être utile d'utiliser un potentiomètre pour trouver cette valeur).  Dans mon cas, une résistance de 10 kΩ faisait parfaitement l'affaire.

Pour atteindre des valeurs intermédiaires, il s'agira d'alimenter le galvanomètre au moyen d'un signal PWM de l'Arduino.  Il ne sera même pas nécessaire d'ajouter un filtre passe-bas pour modifier le signal PWM en véritable tension continue:  l'aiguille demeurera immobile grâce à son inertie.




Le module RTC DS1307

Je ne vais pas répéter ici tout ce que j'ai déjà dit sur le module Real Time Clock DS1307, je vous réfère plutôt à ce précédent article.

Il faut bien admettre qu'une portion assez limitée des fonctions du module RTC sera utilisée: nous n'utiliserons que l'heure et les minutes (alors que le module pourrait aussi nous permettre de connaître la date, par exemples).  Pour cette raison, il serait parfaitement envisageable de ne pas utiliser de RTC et de laisser le soin à l'Arduino de mesurer le temps lui-même (avec un petit bémol, toutefois:  la fonction millis() de l'Arduino atteint sa limite au bout d'environ cinquante jours). 

Le module DS1307 communique avec l'Arduino au moyen du protocole I2C; il se branche donc au moyen de quatre fil:

"Sda" : Arduino A4
"Scl": Arduino A5
"Gnd": Arduino GND
"Vcc": Arduino 3V3 ou 5V

Pour me simplifier la tâche, j'ai installé et utilisé la bibliothèque RTClib.


Circuit complet


Les galvanomètres doivent être alimentés par une sortie de l'Arduino capable de produire un signal PWM.  Ici, j'ai opté par la pin 9 (les heures) et la pin 10 (les minutes).

Calibration

Tel que mentionné plus haut, la position de l'aiguille des galvanomètre se contrôle au moyen d'un signal PWM émis par l'Arduino.  Au départ, j'avais prévu faire un calcul algébrique simple pour transformer une heure (nombre de 1 à 12) en un rapport cyclique (nombre de 0 à 255).

Petite complication:  la réponse de mes deux galvanomètres n'est pas linéaire:  l'écart de tension correspondant à une durée d'une heure n'est pas la même entre 1h00 et 2h00 qu'entre 10h00 et 11h00, par exemple.  En utilisant une simple conversion proportionnelle, mes graduations auraient été ridiculement rapprochées les unes des autres dans la zone "8 à 12 heures", après avoir été très éloignées les unes des autres dans la zone "1 à 4 heures".

J'aurais peut-être pu me creuser la cervelle pour trouver une fonction mathématique permettant de traduire l'heure exacte en une position d'aiguille qui aurait varié linéairement, mais j'ai plutôt choisi de tracer d'abord une graduation linéaire, et de trouver par essai erreur la tension nécessaire pour pointer chaque valeur entière de cette graduation:  12 valeurs différentes pour les heures, et 12 valeurs différentes pour les minutes.

Le sketch

Voici ce que ça donne:


Bien que l'indicateur soit analogique, il ne s'agit pas d'une véritable horloge analogique, puisque chaque aiguille ne peut occuper que 12 positions possibles.  Par exemple, l'aiguille qui indique les heures va indiquer le nombre 10 pendant de 10h00 à 10h59, puis soudainement passer à 11.  L'aiguille des minutes va indiquer 30 de 10h30 à 10h34, puis soudainement passer à 35 pour les 5 minutes suivantes.

Mon horloge a actuellement une résolution de 5 minutes, ce qui n'est pas très précis;  pour améliorer les choses, je pourrais programmer 60 positions différentes pour les minutes;  ce ne serait pas très difficile, mais un peu plus long (j'aurais besoin d'une patience d'horloger...).  Quelqu'un qui dispose d'un troisième galvanomètre pourrait aussi ajouter une trotteuse, indiquant les secondes.

J'ai fait les tests avec un Arduino Uno pour faciliter le prototypage.  Si je désirais faire un produit fini, je le remplacerais probablement par un Arduino pro nano (plus petit, moins cher), ou même par un ATTiny.

Rien n'empêche d'ajouter des fonctionnalités supplémentaires, comme par exemple un beep toutes les heures, ou l'affichage de la date grâce à deux galvanomètres supplémentaires.

Finalement, je vous rappelle que, lorsque vous aurez fabriqué votre horloge, il n'est pas conseillé de l'apporter à l'intérieur d'une école américaine...

Yves Pelletier   (TwitterFacebook)

2 commentaires:

  1. Bonsoir Monsieur Pelletier, Je vous remercie vivement pour tout ce travail partagé.
    Je trouve ce projet amusant et je viens de mettre le lien dans mes favoris pour y revenir quand j'aurai le temps.
    Tout est bien expliqué avec humour et précision, du bonheur.

    RépondreSupprimer
  2. Bonjour et merci pour les pistes qui ont permis de finir nos projets.

    RépondreSupprimer