Horloge analogique - tâtonnements...

image principale Horloge analogique - tâtonnements...

Difficulté:

Suite à un article de Hackable Magazine n°10, ce tutoriel présente mes recherches / erreurs / errements pour transformer de vieux ampèremètres à aiguille en afficheurs. Dans mon cas, ce serait pour afficher l'heure, mais ce peut être bien d'autres choses. J'espère ensuite créer un second tutoriel présentant une réalisation complète et aboutie issue de ces premiers pas.

Matériel :

Budget : Non défini

Etape 1 : Choix des ampèremètres

Pourquoi un ampèremètre ?

L'idée de départ est d'afficher une valeur fournie par un Arduino via un cadran à aiguille pour avoir un effet "vintage".
Si l'Arduino intégrait un convertisseur numérique analogique, il serait possible de lire ainsi une variation de tension, et nous aurions besoin d'un voltmètre.

Mais les sorties dites "analogiques" des Arduinos sont en fait des sorties numériques dont l'état (0 ou 1) est juste ddéfini par des tranches de temps : via "PWM", la sortie associée enverra l'état "1" pendant 50% du temps, par exemple, pour avoir une valeur de 50% du maximum possible.
Et là, ce sera alors le courant qui variera comme on le souhaite, d'où le besoin d'un ampèremètre pour lire la valeur associée.

Quelle plage de mesure pour l'ampèremètre ?

Une sortie Arduino peut fournir jusqu'à 40mA (20mA conseillé) : l'idée est donc d'utiliser une plage de mesure inférieure, typiquement 10mA ou 1mA.

Il suffira ensuite de limiter le courant de la sortie Arduino au maximum de cette plage via une résistance, puis de faire varier sa valeur via le rapport cyclique d'une sortie PWM.

Pour fixer le courant maximum, on utilisera la loi d'Ohms via R = U / I, sachant que U = 5V et I = valeur maxi de la plage de mesure de l'ampèremètre choisi.

Et au final, où trouver cet ampèremètre ?

-> Ce que l'on trouve le plus basiquement, ce sont de petits cadrans modernes, d'environ 6 x 5cm pour moins de 5€ pièce, sur eBay ou des sites d'électronique.
(ex. : sur eBay)

-> Mais on trouve aussi de vieux ampèremètres d'occasion au look beaucoup plus sympa je trouve, mais pour un prix souvent un peu exagéré, disons autour de 20€ pièce... et jusqu'à beaucoup plus ! Autre difficulté : en trouver deux identiques...
(ex. : toujours sur eBay)

-> Personnellement, j'ai trouvé les miens sur un site de matériel pour les écoles, présentant l'avantage d'un grand affichage (85 x 95 mm) et d'un prix en promo (<7€, fin de série).
(site : 3B Scientific)

-> Et enfin, une piste qui a l'air prometteuse est l'utilisation de vu-mètres ! : on en trouve sur les anciens amplificateurs, souvent vendus qq euros chez Emmaüs par exemple, sur lesquels ils sont souvent par 2 (pour la stéréo) et avec en prime un rétro-éclairage déjà présent (même s'il faudra sans doute remplacer la vieille ampoule par une LED). On en trouve aussi des neufs pour un prix raisonnable et un aspect sympa sur le net ; et il s'agit souvent d'ampèremètres de 500 micro A soit 0,5mA : c'est encore jouable sur l'Arduino !
(ex. : encore sur eBay)


Etape 2 : Essayer de comprendre mes ampèremètres...

Ayant choisi des ampèremètres destinés aux écoles, je me retrouve avec des appareils de mesure aux capacités superflues !
En effet, mes ampèremètres permettent la mesure de courants continus ET alternatifs, et sur différentes plages de mesures, allant de 1mA à 10A !

Je démonte donc les bêtes pour tenter d'y voir plus clair (voir photo) ! :

-> En haut à droite, il y a une sorte de circuit imprimé avec un petit transformateur, 2 diodes, un condensateur et un potentiomètre : à priori, une partie (redressement ???) pour les courants alternatifs => à virer !

-> Tout en haut, un interrupteur permettant de choisir entre courants alternatifs et continus => à enlever ou réutiliser pour autre chose.

-> En bas, toutes les bornes autres que la "masse" et "1mA" me semblent inutiles même s'il y a des choses qui me paraissent bizarres : un gros fil reliant la borne "10A continu" à la "masse" ... en court-circuit ??? Et deux résistances soudées en parallèle entre les bornes "1mA continu" et "10A continu"... ???

Etape 3 : ...et tout enlever ! ;o)

En fait, je garde l'interrupteur qui me permet de déconnecter l'ampèremètre en cas de souci... et les deux seules bornes "masse" et "1mA".

Etape 4 : Premier test... et déconvenue ;o)

Branchements :

Bon, avec notre petite loi d'Ohm, un voltage à 5V et une plage de mesure de 1mA, on définit qu'il faut mettre une résistance de 5/0,001 = 5000 = 5kOhms, soit 4,7kOhms dans la pratique, histoire de tomber dans les valeurs "standard" des résistances, et ce qui ne fera dépasser notre valeur de courant maximale que de 0,00006A soit 0,06mA : rien de grave !

L'ampèremètre est donc relié à la masse, et sa borne "1mA" à une sortie PWM de l'Arduino (D9 dans mon cas) avec une résistance de 4,7kOhms en série.

NB : sur l'Arduino Nano, les bornes PWM ne sont pas indiquées, mais ce sont les mêmes que sur le Uno = D3, D5, D6, D9, D10 et D11.

Programme de test :

Un croquis super simple : on définit la borne PWM à utiliser, on la règle comme "sortie" et on y envoie une valeur médiane... par sécurité !

Donc, une borne PWM pouvant prendre des valeurs entre 0 et 255, on la règle sur 255/2.

En fait, sur 255/2.0, le ".0" permettant de faire un calcul sur des valeurs réelles, sinon, il se fera sur des entiers et on aura 127 au lieu de 127,5. OK, dans ce cas, ce n'est pas flagrant, mais quand on divisera notre plage de valeur en 60 (pour les minutes), on obtiendra 21 au lieu de 21,25... soit la perte de 1 unité toutes les 4 minutes.

Test et résultat :

Ben... je me félicite de n'avoir testé qu'une valeur médiane, car mon aiguille, au lieu de se trouver au centre du cadran est à 82% de sa valeur maximale !

Etape 5 : Tentative d'explication et de correction !

1er raisonnement :

D'abord, je me dis que j'ai en fait un ampèremètre, non pas de 1mA, mais de valeur plus faible...
Et je fais donc mon calcul, si, en envoyant 0,5mA, j'arrive à 82% de mon cadran, j'ai un ampèremètre de 0,61mA...
Et il me faudrait donc une résistance de 5 / 0,61 = 8,2kOhms...

N'ayant pas de telle résistance, j'utilise un potentiomètre de 10kOhms et... ça marche.

Mais... j'ai un doute :

Déjà, j'ai de la peine à comprendre pourquoi ça marchait sur 1mA quand l'ampèremètre était complet ?
(Oui, j'avais fait un test tout de suite ;o))

Ensuite, je me rappelle avoir lu dans Hackable quelque chose disant que, en fait, on avait à faire à un galvanomètre, et qu'on en faisait un voltmètre en mettant une résistance en série ou un ampèremètre via une résistance en shunt...

Et là, je me souviens des résistances vues à l'étape 2 et enlevées à l'étape 3... et si je les remettais ???

Et je corrige donc... enfin, je crois ! :

En re-branchant les résistances vues à l'étape 2 entre la borne "1mA" et la "masse", je retrouve un comportement "normal" : 5mA place bien l'aiguille de mon ampèremètre à peu près au centre de son cadran !

Bon, si un électronicien passe par là, je le vois déjà bondir au plafond : mon raisonnement n'est que tâtonnements, et si quelqu'un de plus compètent pouvait le complèter avec de vrais arguments, je lui en serais particulièrement reconnaissant, et je pourrais alors corriger / enrichir cette étape qui reste un peu absconde pour moi... ;o)

Etape 6 : Réglage des ampèremètres

Il s'agit juste de régler les points haut et bas de la plage de mesure :

Réglage du point bas (0) :

Un des mes ampèremètres n'était pas à 0 au repos => à corriger via la petite vis se trouvant à la base de son aiguille.

Réglage du point haut (1mA) :

Je reprends d'abord mon petit programme de test, et cette fois, je règle ma sortie PWM à son maximum = 255.

Avec une résistance de 4,7kOhms, et bien que cela aurait dû placer mon aiguille un peu au dessus de la valeur maximale de mesure, je me retrouve en fait 2 divisions en dessous.

Rien de grave et on pourrait bien sûr "corriger" cela lors de l'impression de nouvelles graduations pour la lecture de notre horloge, mais j'ai préféré remplacer ma résistance par un potentiomètre de 10kOhms pour ajuster ensuite finement la position de mon aiguille.
De plus, je conserverai cette possiblité en cas de dérive dans le temps... sait-on jamais...

Etape 7 : Choix d'un module RTC

Un module RTC (Real Time Clock ou horloge temps réel) permet de fournir à l'Arduino une date / heure, sauvegardée via une pile bouton.

Ayant acheté diverses petites choses avec mon premier Arduino, je possède un module de type DS1302, mais celui pour lequel on trouve le plus d'informations est le DS1307 et je me suis donc aperçu qu'il en existait... une belle variété !

Voici donc un rapide tour d'horizon avec quelques explications pour s'y retrouver !

Le plus courant = le DS1307 :

Omniprésent sur le net, on le trouve pour 1€ sur eBay et plein d'informations pour l'utiliser.

La bibliothèque la plus courante pour l'utiliser avec Arduino et la DS1307RTC, directement accessible via le gestionnaire de bibliothèque d'Arduino (Menu "Croquis > Inclure une bilbliothèque > Gérer les bibliothèques")

Il utilise une interface à 2 fils dite i2C.
NB : là encore, rien d'indiqué sur les bornes de l'Arduino Nano, mais il sagit des pins suivants :
SCL = A5
SDA = A4

Bien que très courant, ce module est considéré comme peu précis, avec une dérive non négligeable de son horloge dans le temps.

Enfin, il fonctionne en 5V, et ne conviendra pas pour une carte ne fournissant que du 3,3V.

Le plus... vieux ? = le DS1302 :

Et oui, je me retrouve apparemment avec un vieux tromblon ! Bon, pas "si" vieux, puisqu'il remplace lui-même le DS1202 ! ;o)

Il se trouve encore facilement sur le net, pour quelques €.

La principale bibliothèque Arduino pour s'en servir est celle de Henning Karlsen, nommée DS1302, que l'on trouve sur le site Rinky-Dink Electronics.
Mais on en trouve une version dérivée, nommée DS1302RTC et qui utilise alors la même syntaxe que la DS1307RTC, sur le site Arduino.

Il utilise une interface... bâtarde apparemment, sur 3 fils, parfois appelée à tort SPI.
NB : les pins à utiliser seront définies par programmation, puisqu'on n'utilise pas un bus de transmission standard.

Là encore, ce module est jugé comme peu précis, avec une dérive de son horloge dans le temps.

Il fonctionne par contre aussi bien en 3,3V qu'en 5V.

Et enfin, il permet de recharger la pile intégrée, sans pour autant l'abimer s'il s'agit d'une pile non rechargeable (Lithium typiquement).

Celui du moment = le DS3231 :

On le trouve, là encore, pour quelques € sur le net, et il semble vouloir détrôner le DS1307.

Il existe un foule de librairies Arduino, directement accessibles via le gestionnaire de bibliothèques.

Il utilise une interface i2C.

Il est très précis.

Il dispose aussi de 2 alarmes quotidiennes et d'un capteur de température (à priori peu précis pour servir de thermomètre à part entière : il sert normalement juste à gérer la bonne santé de la puce !)


Et tous les autres ! :

Et oui, il en existe encore bien d'autres :
-> le DS3232 = le DS3231 + de la SRAM,
-> le DS1338 = comme le DS1307, mais en 3,3V
-> le DS3234 = avec 2 alarmes et de la SRAM

Et je ne suis sans doute pas exhaustif !!!

Etape 8 : Réglage du DS1302

Raccorder le module DS1302 :

Et bien... rien d'indiqué sur l'Arduino, puisqu'il ne s'agit pas d'une connexion i2C , et plusieurs dénominations possibles des broches sur ce genre de module ! ;o)

Donc, c'est le programme qui déterminera les pins à utiliser, qui seront des pins numériques => j'ai donc choisi les premières, soit :
-> CE (ou RST) = pin D2
-> I/O (ou DAT) = pin D3
-> SCLK (ou CLK) = pin D4

Puis reste à brancher VCC sur le 5V et GND sur une des masses de l'Arduino !
NB : les bibliothèques proposent en option de raccorder ces deux broches sur d'autres sorties numériques pour gérer l'allumage du module... bof.

Installer la bibliothèque DS1302RTC :

On récupère le fichier DS1302RTC.zip sur la page associée du site Arduino.

On l'installe via le menu Croquis > Inclure une bibliothèque > Ajouter la bibliothèque .ZIP puis en choisissant le fichier téléchargé.

On l'insère ensuite dans son code avec la commande :

#include <DS1302RTC.h>

Régler l'heure du DS1302 :

Alors... pas super facile / précis dans le sens où il n'y a pas de code exemple permettant directement de régler l'heure de ce module de façon automatique (comme c'est le cas avec le DS1307).

Il y a bien un exemple nommé SetSerial qui permet de passer une date au module RTC via le moniteur série, mais il faut d'abord installer d'autres bibliothèques => j'ai fait mon flemmard et je ne suis pas allé plus loin dans ce sens.

Par contre, on a d'autres exemples où la date est directement passée via le code au module RTC. Là encore, pas très précis, mais c'est simple !

J'ai donc chargé le programme DS1302_Serial via le menu Fichiers > Exemples > DS1302RTC > DS1302_Serial.

Puis j'ai modifié les pins conformément à mon câblage, j'ai enlevé la gestion des pins VCC et GND et j'ai entré la date et l'heure qui me convenaient, avant de téléverser le programme dans l'Arduino... en essayant de ne pas trop avoir de décalage entre l'heure réelle et le moment où elle est passée au module RTC ! ;o)

Etape 9 : Programmation de l'horloge... enfin !

Câblage du module RTC :

Tel qu'à l'étape précédente, rien ne change ! :
-> VCC sur 5V
-> GND sur GND
-> RST sur D2
-> DAT sur D3
-> CLK sur D4

Câblage des ampèremètres :

-> la masse des ampèremètres sur une borne GND de l'Arduino.

-> la borne 1mA des ampèremètres sur les broches D9 et D10 de l'Arduino, sans oublier d'y intercaler un potentiomètre de 10kOhms réglé autour des 4,5kOhms (voir étape 6).
NB : le tout est de choisir des broches PWM, soit D3, D5, D6, D9, D10 ou D11 sur le Nano.

-> une diode 1N4148, dite "de roue libre" entre la masse et la borne 1mA des ampèremètres, pour éviter les retours de courant sur les bornes de l'Arduino, lorsque l'aiguille revient à 0.

Programmer l'Arduino :

Du très très simple :

-> on inclut les librairies de temps et du DS1302
-> on définit les sorties des heures et minutes
-> on définit les broches du module RTC
-> on règles les broches des heures et minutes en sorties
-> on lit la date / heure du module RTC
-> si c'est OK, on transforme la valeur de l'heure puis des minutes en % de la plage d'affichage associée (12 pour les heures, 60 pour les minutes) et on l'envoie directement sur les broches PWM via la commande analogWrite().

Etape 10 : Et après ???

Ben... passage à un tutoriel complet présentant la réalisation complète et finie d'une horloge... "pseudo analogique" ?! ;o)

Pour le moment, je n'ai donc mis qu'un ampèremètre en service, "pour voir", et je réfléchis à la version "finie", avec, sans doute :
-> échange de mon module DS1302 pour un DS3231 plus fiable,
-> recherche de vu-mètres "vintages" plus petits, mignons et rétro-éclairés...
-> ...ou recyclage d'un vieux testeur de pile acheté 5€ sur un vide grenier (mais qu'un seul galvanomètre, voir photo...)
-> ajout de fonctions annexes : éclairage, alarme, possibilités de correction directe de l'heure, possibilité d'afficher d'autres informations (température ?), etc...
-> intégration dans un beau boîtier en bois ou autre matière "noble".

Mais bon, ça va prendre du temps et je trouvais qu'il pouvait déjà être intéressant de partager mes "déboires" rencontrés lors du dégrossissage de ce projet, en espérant que cela puisse aussi vous donner des idées pour vos propres détournements de ces vieux cadrans à aiguille !

Et pour ne pas vous laisser sur votre fin, voici quelques liens vers des sites proposant de telles réalisations... abouties !!! :

-> une SUPERBE horloge / station météo à galvanomètres :
http://alex.oger.free.fr/blog/?p=110

-> un multimètre transformé en horloge avec d'autres fonctions, sur le blog Arduino :
https://blog.arduino.cc/2017/03/07/display-time-on-a-1950s-multimeter/

-> et le site de Hackable Magazine, à l'origine de l'idée via son magazine n°10 :
https://www.hackable.fr/

Et pour imprimer vos propres graduations, un petit soft pour Windows :
http://tonnesoftware.com/meterappnote1.html

Et pour les non Windows, un petit tutoriel sous InkScape ! :
http://equipe-flightgear.forumactif.com/t931-inkscape-creer-une-texture-d-instrument

Ces tutoriels devraient vous plaire

vignette L’imprimante 3D pour 60€: EWaste
L’imprimante 3D pour 60€: EWaste
vignette Connecter un  écran LCD en I2C
Connecter un écran LCD en I2C
vignette Arduino et Porte automatique de poulailler
Arduino et Porte automatique de poulailler

Découvrez tous les tutoriels partagés sur Oui Are Makers

Powered by Oui Are Makers