Horloge Binaire + ESP32: L'union sacrée
Toujours à l'heure de la box ...
Pour une multitude de questions !
Attendez vous à susciter la curiosité avec une telle horloge ! Surtout sur la manière de lire l'heure, car notre esprit est formaté pour raisonner en base 10. La lecture se fait en additionnant les valeurs des Leds allumées: 1 pour la plus basse, 2 pour celle juste au dessus, 4 pour la 3ème et 8 pour la 4ème !
L'exemple sur la photo ci-dessous:
- 0 pour les dizaines d'heures
- 3 pour les unités d'heures (1 + 2)
- 1 pour les dizaines de minutes
- 1 pour les unités de minutes
- 0 pour les dizaines de secondes
- 3 pour les unités de secondes (1+2)
Au moment de la photo, il est: 3 heures 11 minutes et 3 secondes
Et comment ça marche ?
Pour être toujours à l'heure, cette horloge vient capturer par le Wi-Fi, les trames de l'horloge du Net via la box familiale . La même heure que celle qui est en bas à droite de votre PC , qui se met à l'heure toute seule et s'ajuste automatiquement lors des passages Heure d'hiver <=> Heure d'été . L'affichage se fait sur 20 leds bleues matricées en colonnes / rangées avec un balayage rapide pour utiliser la persistance rétinienne, sans papillotement, afin de limiter le nombre des sorties du microcontrôleur . Mais assez de baratin, le schéma est bien plus parlant .
Le Schéma
Pour ceux qui suivent ces pages, j'ai repris mon vieux schéma de 2010, j'ai remplacé le PIC 16F84A par un ESP32 Wroom 38 broches et j'ai ajusté les sorties en fonction des besoins . Le côté pêle-mêle des attributions vient du fait que sur ce micro, toutes les GPIOs ne se suivent pas et surtout ne sont pas toutes adressables en sortie (ça m'a valu un prototype à la poubelle ) ... Tenant compte de la sérigraphie du circuit, de ce que je peux utiliser et de la réalisation amateur simple face, un jonglage sur les déclarations fût nécessaire ... Chacune d'entre elles offre 40 mA maximum de charge ! donc valeur à ne pas dépasser, surtout quand le chiffre 7 doit s'afficher, ça fait 3 leds allumées sur la même pinuche ... d'où les résistances R1 à R4 de 270 ohms. Tout cela nous amène à parler de la tension d'alimentation : Attention sur l'ESP32 tout fonctionne en 3,3 volt . Le VIN est de 5 volts (5,5v Maxi) et on attaque un régulateur intégré au circuit qui nous abaisse cette tension à 3,3 volts . Ceci pour dire que l'état logique haut est à 3,3 Vdc et non à 5 Vdc, donc la limitation en courant est OK ... idem pour les entrées, mais là on s'en moque, on n'en utilise pas (attention pour d'autres applications : 3,3 volts ! )
Le driver de colonne est un circuit intégré très courant, un ULN2003, qui offre sept transistors, montage Darlington en collecteur ouvert, qui supportent chacun 600 mA et une tension de 30 volt . Bref, le paradis, par rapport à une électronique discrète : il y a tout dedans, des résistances de base, les résistances de rappel, et même des diodes de roue libre si l'on commute des charges inductives ! On va utiliser 6 de ses amplis en courant pour venir tirer au 0 volt les cathodes des leds à allumer . (un état logique haut de l'entrée donne le potentiel GND sur la sortie relative ) .
Le but du jeu (et du logiciel) est de synchroniser les sorties "1,2,4,8," sur les colonnes " US (unités de secondes), DS (dizaines de secondes), UM (unités de minutes), DM, UH,DH,)" . D'un côté la tension positive sur l'anode, et de l'autre le tirage à "0" sur la cathode, et ça s'allume ... On reproduit le cycle assez rapidement et on a l'impression que toutes les leds ciblées sont allumées où il faut et quand il faut ... Elémentaire n'est-ce pas ?
La réalisation pratique ...
M'étant inspiré de la réalisation de mon antiquité à PIC des années 2010, je n'ai pas voulu reconduire l'expérience de faire réaliser le circuit imprimé par les boîtes en lignes et en Chine ... Pour des raisons de prix, de production unitaire, de versions d'essais, et de délais entre la commande et la réception; mais surtout pour le fun de la réalisation personnelle . Le circuit est créé par les moyens décrits dans mes pages avec des pistes de 0,8 mm et un plan de masse sur les parties inoccupées. J'ai volontairement limité ce dernier hors de l'aplomb de l'antenne de l'ESP, afin de ne pas blinder ou changer la directivité de cette dernière. Evidement, comme c'est du simple face et bien chargé en composants traversants, il y a beaucoup de straps pour remplacer les pistes de l'autre face .
On commence par souder les straps, puis les leds côté 'cuivre'. Je me suis servi de la face avant comme gabarit de positionnement, et de barrettes sécables sur les queues, pour le maintient en place lors du retournement et du 'pré-soudage' ... Attention ! la rangée de leds des unités de secondes est montée à l'envers des autres ! Les autres composants sont montés sur des supports pour faciliter leur remplacement au cas où ... Une fois câblé, l'ensemble se place sur la face avant avec les entretoises définies .
Et avec un peu de programme, ça marche bien mieux !
J'ai voulu essayer la version 2 de l'IDE Arduino: quelle souplesse, en plus c'est addictif (quand on commence, on ne peut plus s'arrêter ) et le temps passe à une vitesse affolante. Lorsque j'avais réalisé mon horloge binaire en 2010, j'avais utilisé Flowcode pour développer pour PIC16F84A, mais là, je n'ai plus besoin de base de temps, division de fréquence de quartz, calcul de savants, etc, etc ... mais plongeons dans le squetsch.
Esp bin clock txt (1.75 Ko)
Tout Simple ! On commence par les déclarations : les bibliothèques utilisées, les sorties (il n'y a pas d'entrée ), les variables, et les clés d'accès à la box (SSID + password) .
Ensuite, 3 sous-programmes :
- printLocalTime() : lecture et extraction des trames heures, minutes, secondes depuis le réseau.
- setLed() : la 'fabrication' des chiffes binaires en activant ou désactivant les états logiques des sorties suivant les dix possibilités décimales .
- disPlayLed() : la boucle de 30 affichages synchronisés, avant de redemander l'heure. Ceci dans le but de ne pas surcharger inutilement le processeur et de lui consacrer, en priorité, la partie affichage par persistance rétinienne (il ne faut pas que ça traine ) ...
Le setup() où on commence par orienter les registres des GPIOs, puis les instructions de connection au Wi-Fi en tenant compte du gmt offset (fuseau horaire) et du daylight offset (heure été/hiver) . et déconnection si accès refusé, hors zone, temps limite, ou incident .
Le loop() : dans la boucle, on saute au sous-programme de capture des H,M,S, puis l'on vient ensuite les décomposer en dizaines et unités par calcul DH, UH, DM, UM, DS, US avant d'appeler le sous-programme de balayage des colonnes qui applique à chacune d'elle la valeur binaire correspondante ! Et on reste dessus pendant 30 tours (~un tiers de seconde) ...
Le programme complet sous format .ino est dans le zip ci-dessous .
Les fichiers de Réalisation....Et conclusion
Les fichiers mécaniques des faces avants, du circuit imprimé, et du programme sont dans la compression ci-jointe:
Esp bin clock (494.52 Ko)
Voici une petite attraction bien sympa et pas trop chère, qui va en étonner plus d'un, ainsi que susciter un flot de questions ! Si le design est soigné, ça peut avoir un côté déco original et bien pratique (pour donner l'heure aussi ) ! Amusons nous bien ... Je ferai peut-être la même en CMS... A suivre !
Une Horloge Binaire en CMS : La voici !
Comme promis plus haut, voici la version ultra simplifiée de l'horloge binaire. Celle-ci est en version impression 3D et leds en CMS... Plus petite et avec le minimum de composants, elle présente la même qualité et laisse la place à l'imagination de chacun de ceux qui désirent la reproduire. Les règles ne sont pas fixées dans les formes et les couleurs. Un peu comme si je proposais un de ces moteurs d'horloge à aiguilles que l'on peut inclure dans tout et n'importe quoi.
Le schéma :
Pas de changement majeur sur le schéma : juste le circuit ULN2003 qui a disparu . J'ai simplement modifié le logiciel pour que les sorties des colonnes apportent le 0 Volt aux leds qui doivent s'allumer. Le courant restant inférieur à 30mA dans le pire des cas, on se passe très bien de l'amplificateur, même si 3 leds sont allumées en même temps (chiffre "7").
Le circuit imprimé :
Pas un, mais deux circuits imprimés, montés l'un sur l'autre, pour quatre raisons : rester en simple face, limiter la densité, réduire les dimensions et être à la portée de l'amateur pour une réalisation économique. Les deux trous des entretoises sont percés en même temps, avec un avant trou qui assure le guidage du foret dans le respect de coïncidence sur l'un comme sur l'autre. L'un va recevoir les leds et l'autre le module ESP32. Attention lors du câblage, les deux leds des dizaines d'heures sont montées à l'envers des autres . Rien n'empêche de changer les couleurs pour différencier les '1' des '2', '4' et '8'. On n'oublie pas de strap, ni de liaisons entre circuits ...
Le logiciel :
Pratiquement aucun changement par rapport à l'autre version. Suite à la suppression de l'ULN2003, j'ai dû inverser l'état logique des colonnes : au repos elles sont toutes au niveau haut et je les porte au potentiel bas pour allumer la colonne adéquat :
// Affectation des valeurs des dizaine, unité d'heure, minute et secondes
// Et multiplexage synchronisé des valeurs sur les leds relatives
for ( int i = 1; i<=6;i++ ){
if (i = 1){
tLed = US;
digitalWrite(SUS,LOW);
digitalWrite(SDS,HIGH);
digitalWrite(SUM,HIGH);
digitalWrite(SDM,HIGH);
digitalWrite(SUH,HIGH);
digitalWrite(SDH,HIGH);
setLed ();
}
if (i = 2){
tLed = DS;
digitalWrite(SUS,HIGH);
digitalWrite(SDS,LOW);
Etc... etc...etc ...
La boîte :
L'habillage est réalisé à l'imprimante 3D, et les fichiers de réalisation sont dans le zip ci-dessous. Mais rien n'empêche l'utilisation de boîtiers du commerce avec un couvercle translucide et d'y mettre une sérigraphie pour séparer les valeurs en colonnes et en rangées ... Ou pas ... Laissons le côté artistisque de chacun s'exprimer sur le design : je ne propose qu'un moteur d'horloge . L'alimentation est faite par un câble USB sur lequel je n'utilise que le fil rouge pour le 5volts et le bleu le 0 volt, ce qui permet de raccorder sur une prise d'un PC, ou autre, voir sur un bloc secteur de récupération d'un ancien téléphone .
Les fichiers de réalisation:
Esp binary clock smd (738.91 Ko)
Ajouter un commentaire