« Voici une horloge fille de mars 1968.
Elle a été mise à jour avec des LED WS2811 afin d’indiquer les secondes.
Les LED sont connectées à un ESP32 qui les allume une à une de rouge à vert. Le tour du cadran est fait en 58,5 secondes comme les horloges CFF.
Une impulsion 24V est envoyée toutes les minutes depuis une horloge mère.
Cette impulsion est une fois positive et une fois négative. Cela permet de faire avancer les minutes d’un réseau d’horloges, comme dans une gare ou une école.
Les LED attendent une impulsion pour démarrer un cycle de 58,5 secondes.
58,5 secondes est le même temps que met une trotteuse sur une horloge CFF.
Cela lui permet de faire une pause.
Dans mon cas, je fais clignoter les LED en bleu.
J’utilise un ESP32 pour commander les LED.
L’ESP32 est connecté à un relais qui reçoit l’impulsion toutes les 60 secondes.
Cela permet de donner le top départ de la trotteuse LED.
De ce fait, je suis certain que les secondes sont toujours synchronisées avec les minutes.
- Le matériel:
- Une horloge fille
- Un ES32
- Un relais 24V
- Une alimentation 5V
- Des LED WS2811
La voici en fonction:
Derrière:
Voici l’horloge mère qui pilote les horloges filles de l’atelier.
Le code:
#include <FastLED.h>
#define LED_PIN 5
#define NUM_LEDS 60
#define BUTTON_PIN 18
CRGB leds[NUM_LEDS];
void setup() {
FastLED.addLeds<WS2811, LED_PIN, GRB>(leds, NUM_LEDS);
pinMode(BUTTON_PIN, INPUT_PULLUP);
}
void loop() {
// Wait for button press
while (digitalRead(BUTTON_PIN) == HIGH) {
// Clear LEDs
fill_solid(leds, NUM_LEDS, CRGB::Green);
FastLED.show();
delay(100);
}
// Clear LEDs and start LED cycle
fill_solid(leds, NUM_LEDS, CRGB::Green);
for (int i = 0; i < NUM_LEDS; i++) {
// Blend green and red color
nblend(leds[i], CRGB::Red, 128);
FastLED.setBrightness(255); // Set full brightness
FastLED.show();
delay(975);
}
// All LEDs on
fill_solid(leds, NUM_LEDS, CRGB::Red);
FastLED.setBrightness(255); // Set full brightness
FastLED.show();
// Blink LEDs in blue
for (int i = 0; i < 2; i++) {
fill_solid(leds, NUM_LEDS, CRGB::Blue);
FastLED.setBrightness(128); // Set half brightness
FastLED.show();
delay(100);
fill_solid(leds, NUM_LEDS, CRGB::Black);
FastLED.setBrightness(128); // Set half brightness
FastLED.show();
delay(100);
}
// Reduce brightness of LEDs
FastLED.setBrightness(32); // Set low brightness
FastLED.show();
// Wait for button release
while (digitalRead(BUTTON_PIN) == LOW) {
delay(100);
}
}