Horloge RVB design pour moins de 10€
Réalisez une magnifique horloge RVB très design à l'aide d"un arduino pro mini, d'un RTC clock et de quelques mètres de filament 3D.
Plus de renseignements sur la page du projet:
http://www.crazymakers.fr/videos-youtube/horloge_rvb_design_pour_moins_de_1ae-art-OxHgl5IvX5E.html
➕ INFORMATIONS: ➕
⁉️ Catégorie: Electronique.
⏰ Temps: 5h.
💪 Difficulté: 6/10.
Le Circuit:
Un circuit extrêmement simple utilisant un module RTC DS1302, un arduino pro mini, une résistance 4,7 Kohms, une photorésistance, 4 micro switch et 42 modules leds RVB Diam. 10mm Noirs

Téléchargement:
Voici l'archive contenant les fichiers à imprimer, le fichier fritzing pour le raccordement et le programme.
Fichiers
Le Programme:
// Importation bibliothèques
#include ‹virtuabotixRTC.h›
#include ‹Time.h›
#include ‹Wire.h›
#include ‹EEPROM.h›
/*Définition Pinout du RTC DS1302 + Création du RTC
SCLK (Clock) -> 6, I/O (Data) -> 7, CE (reset) -> 8*/
virtuabotixRTC myRTC(6, 7, 8);
// Configuration FAST LED
#include "FastLED.h"
#define NOMBRE_LEDS_TOTAL 45 // Nombre de leds total
#define RTC_DATA_PIN 3 // Pin utilisée pour les données.
CRGB leds[NOMBRE_LEDS_TOTAL]; // Définition du tableau de couleurs RGB pour les LEDS.
byte SEGMENTS[10][7] = {{1,1,1,1,1,1,0}, // Digit 0
{0,1,1,0,0,0,0}, // Digit 1
{1,1,0,1,1,0,1}, // Digit 2
{1,1,1,1,0,0,1}, // Digit 3
{0,1,1,0,0,1,1}, // Digit 4
{1,0,1,1,0,1,1}, // Digit 5
{1,0,1,1,1,1,1}, // Digit 6
{1,1,1,0,0,0,0}, // Digit 7
{1,1,1,1,1,1,1}, // Digit 8
{1,1,1,1,0,1,1}}; // Digit 9
//Variables pour le choix de couleurs
uint32_t liste_couleurs[]={0x0000FF,0x00FF00,0xFF0000,0xFFCC00,0xFF6600,0x0099FF,0xFF0099};
int nombre_couleurs=7;
//Chargement de la derniére couleur sélectionnée.
int Num_Color=EEPROM.read(1);
//Variable pour horloge ou date
int MODE_AFFICHAGE=0; //0 horloge, 1 date
long delai_attente;
unsigned long ledColor; // Color used (in hex)
void setup(){
FastLED.addLeds
pinMode(5, INPUT_PULLUP); // BOUTON 1
pinMode(4, INPUT_PULLUP); // BOUTON 2
pinMode(11, INPUT_PULLUP); // BOUTON 3 HAUT
pinMode(10, INPUT_PULLUP); // BOUTON 3 BAS
}
void Luminosite_Auto()
{FastLED.setBrightness(map (analogRead(A3),10,1024,255,50));}
void RemplirArray(){
int cursor;
String minutes;
String heures;
String secondes;
long Now;
FastLED.clear();
ledColor = liste_couleurs[Num_Color];
if (MODE_AFFICHAGE==0) {
// ---------------------------- Récupération de l'heure du RTC et formatage ----------------------------
myRTC.updateTime(); //Lecture de l'heure sur le RTC
heures=String(myRTC.hours); minutes=String(myRTC.minutes); secondes=String(myRTC.seconds);
if (heures.length()==1){heures="0"+heures;} //Formatage de l'heure
if (minutes.length()==1){minutes="0"+minutes;} //Formatage des minutes
if (secondes.length()==1){secondes="0"+secondes;} //Formatage des secondes
Now=secondes.toInt()+minutes.toInt()*100+heures.toInt()*10000; //Création de l'heure brute en INT pour envoi sur Ruban
// ------------------------- Fin récupération de l'heure du RTC et formatage --------------------------
}
else
{
// ------------------------------- Récupération de la date et formatage -------------------------------
myRTC.updateTime(); //Lecture de la date sur le RTC
String heures=String(myRTC.hours); String minutes=String(myRTC.minutes); String secondes=String(myRTC.seconds); //Récupération de l'heure sur le RTC
String jour= String(myRTC.dayofmonth); String mois=String(myRTC.month); String annee=String(myRTC.year-2000);
if (jour.length()==1){jour="0"+jour;}
if (mois.length()==1){mois="0"+mois;} //Formatage des minutes
if (annee.length()==1){annee="0"+annee;} //Formatage des secondes
Now=annee.toInt()+mois.toInt()*100+jour.toInt()*10000; //Création de l'heure brute en INT pour envoi sur Ruban
// ----------------------------- Fin Récupération de la date et formatage -----------------------------
}
leds[14]=ledColor;
leds[15]=ledColor;
leds[30]=ledColor;
for(int i=1;i<=6;i++){
int Position_Chiffres[]={38,31,23,16,7,0}; //Position des différents chiffre sur la chaine de leds
int digit = Now % 10; // Récupération du dernier caractére de l'heure
cursor=Position_Chiffres[i-1]; //Positionnement du curseur sur la position du chiffre
for(int k=0; k<=6;k++){ //Remplissage du chiffre avec les valeurs des LEDS.
if (SEGMENTS[digit][k]== 1){leds[cursor]=ledColor;} else if (SEGMENTS[digit][k]==0){leds[cursor]=0x000000;}; //Remplissage des segments avec 0 ou couleur.
cursor ++;
};
Now /= 10; // Suppression du dernier caractére de l'heure Affiché
};
};
void Reglage() {
int button1 = digitalRead(5); // BOUTON 1
int button2 = digitalRead(4); // BOUTON 2
int button3 = digitalRead(11); // BOUTON 3 HAUT
int button4 = digitalRead(10); // BOUTON 3 BAS
int jour= myRTC.dayofmonth;
int mois=myRTC.month;
int annee=myRTC.year;
if (button1 == LOW || button2 == LOW|| button3==LOW || button4==LOW) {
delay(500);
myRTC.updateTime();
int hours = myRTC.hours;
int minutes = myRTC.minutes;
int seconds = myRTC.seconds;
if (button1 == LOW && button4==HIGH && MODE_AFFICHAGE==0) {if (hours == 23) {hours = 0;} else {hours += 1;}}
if (button1 == LOW && button4==LOW && MODE_AFFICHAGE==0) {if (hours == 0) {hours = 23;} else {hours -= 1;}}
if (button2 == LOW && button4==HIGH && MODE_AFFICHAGE==0) {if (minutes == 59) {minutes = 0;} else {minutes += 1;}}
if (button2 == LOW && button4==LOW && MODE_AFFICHAGE==0) {if (minutes == 0) {minutes = 59;} else {minutes -= 1;}}
if (button1 == LOW && button4==HIGH && MODE_AFFICHAGE==1) {if (jour == 31) {jour = 0;} else {jour += 1;}delai_attente=millis();}
if (button1 == LOW && button4==LOW && MODE_AFFICHAGE==1) {if (jour == 0) {jour = 31;} else {jour -= 1;}delai_attente=millis();}
if (button2 == LOW && button4==HIGH && MODE_AFFICHAGE==1) {if (mois == 12) {mois = 0;} else {mois += 1;}delai_attente=millis();}
if (button2 == LOW && button4==LOW && MODE_AFFICHAGE==1) {if (mois == 0) {mois = 12;} else {mois -= 1;}delai_attente=millis();}
if (button3 == LOW && button4==HIGH && MODE_AFFICHAGE==1) {annee += 1;MODE_AFFICHAGE=1;delai_attente=millis();}
if (button3 == LOW && button4==LOW && MODE_AFFICHAGE==1) {annee -= 1;MODE_AFFICHAGE=1;delai_attente=millis();}
if (button3 == LOW && MODE_AFFICHAGE==0) {MODE_AFFICHAGE=1;delai_attente=millis();}
if (button4 == LOW && MODE_AFFICHAGE==0 && button1==HIGH && button2==HIGH && button3==HIGH) {Num_Color+=1;if(Num_Color>=nombre_couleurs){Num_Color=0;}; EEPROM.write(1,Num_Color);}
myRTC.setDS1302Time(seconds, minutes, hours, 0, jour, mois, annee);
}
}
void loop() // Main loop
{
Reglage(); // Check to se if time is geting modified
RemplirArray(); // Get leds array with required configuration}
Luminosite_Auto();
FastLED.show(); // Display leds array
if (millis()>delai_attente+5000){MODE_AFFICHAGE=0;}
}
Commentaires Youtube
### Déposer un commentaire ###
Par: @emmanuelbourgeois6863 le 2022-03-08T12:23:54Zbonjour
je vient d'imprimer les pieces et souder les leds
il me reste plus qu'a compiler le programe
MAIS
je ne trouve pas les bibliotheque
merci a ceux qui pourront m'aider
PS:superb projet
Par: @victorianaiworld-21 le 2022-01-10T17:47:32Z
Can Sir rtc ds3231 be used?
Par: @joelzender le 2021-10-24T18:53:00Z
Bonjour, comme déjà demander d'après ce que j'ai vu, mais il n'y avait pas de réponse, c'est pour l'alimentation 5 V ou faut-il la placer sur le circuit ? Afin de ne pas endommager le mini, merci de votre retour si possible. Autrement chouette montage bravo.
Par: @Roro-iw6uv le 2021-10-19T05:59:11Z
bonjour pourriez vous me dire ou vous branchez l alimentation et quelle voltage
Par: @ducatezserge2839 le 2021-02-11T04:08:33Z
Superbe, bravo ;)
Par: @Fais-comme-ci le 2020-12-07T15:18:33Z
Bravo, belle réalisation.
Peut-être un projet d'écran avec ces leds ?
Par: @jean-michelsoret3965 le 2019-12-30T15:07:07Z
Super boulot. Je vais tenter de reproduire. Dans le zip, il n'y a pas le stl du cache. Ou puis-je le trouver ?
Merci d'avance
Par: @olivierd2224 le 2019-03-11T11:51:49Z
Bonjour,
Merci pour le tuto👍
Premier projet arduino pour moi
Je viens de télécharger les fichiers et commencer à imprimé les différents éléments
Le .stl pour le couvercle n'est pas présent dans le dossier,dommage 😕
L' autre petit problème vous expliqué qu'il faut alimenté les led sans passé par l'arduino,
Auriez vous un lien de schéma pour comprendre comment faire?
J'ai fait une demande d'adhésion à votre groupe sur Facebook il y a déjà un moment mais n'a toujours pas été validé 😭
D'avance merci😃
Un grand fan de votre chaîne 👍
Par: @onclefly8450 le 2018-11-16T19:49:58Z
Salut l'ami, top ton horloge a fabriquer soi même en ^lus pas un soir froid en hiver, j'adore. Mélange d'impression 3D, électrique, informatique programmation, montage, il y a de tout, chapeau. 😉
Par: @ducatezserge2839 le 2018-11-13T02:34:52Z
Super, j'adore. Bravo.
Par: @BourbonDrone le 2018-11-10T10:20:52Z
Super boulot :)
Je ne connaissais pas ces Leds adressable en série. Hop un tour chez ALI et c'est dans le panier.
Par: @caape62 le 2018-11-05T19:25:32Z
Bonjour. Super résultat.
Où as tu acheté ton ruban led? Et a combien?
J'ai l'impression que ça revient plus cher que 10€ avec les LE Ds et PLA. Enfin j'aurais imaginé plus.
Continu comme ça
Bye
Par: @fabricemotard4312 le 2018-11-05T08:17:38Z
Génial bravo je compte bien l'a réalisé des que j'aurai installer mon imprimante 3d vraiment du beau travail !! 👏👏👍
Par: @fabricemotard4312 le 2018-11-05T08:17:29Z
Génial bravo je compte bien l'a réalisé des que j'aurai installer mon imprimante 3d vraiment du beau travail !! 👏👏👍
Par: @vulbas le 2018-11-04T17:44:39Z
tres sympa ça. par contre est ce qu'on ne voit pas trop que ce n'est qu'une led par cabochon qui eclaire ? est ce bien diffus comme eclairage ? sur la video on vois clairement le point de la led mais en vrai ce n'est peu etre pas pareil....
Par: @Fondation3 le 2018-11-03T22:21:44Z
Merci pour ce tuto.
Tu l'évoques dans la vidéo, l'horloge du module RTC se décale avec le temps. J'ai entendu parler de 'quelques' secondes chaque jour. Mais ce quelques est un peu vide de sens (entre 2 secondes et 50 secondes par jour, il y a un monde). D'après ce que tu observes sur ton horloge, le décalage que tu constates est de combien ?
Si ce décalage est réel, je me demande aussi si il n'existe pas des modules RTC plus précis (car c'est quand même son boulot de nous donner l'heure, et pas le notre)... Ca serait quand même dommage de devoir récupérer l'heure sur un module GPS pour avoir une valeur qui ne se dérègle pas. Je me demande d'ailleurs sur quoi les horloges "Radio Controlled" se calent (peut être y'a t'il moyen de s'en inspirer).
Par: @michelbre7784 le 2018-11-03T18:23:04Z
Un portage sur wemos serait idéal avec interrogation d'une sonde température extérieure se serait le top et WAF
Par: @lmdm57 le 2018-11-03T17:16:02Z
super travail... une idée à lancer si un jour il y a une v2 et d'ajouter une appli bluetooth pour régler aussi depuis son tel.
Par: @kikosricos le 2018-11-03T15:21:13Z
Superbe horloge, moi j'adore .Ça mélange le dessin 3d, l'électronique et la programmation, enfin tout ce que j'aime.
Bravo.
Par: @Sebasuchan-IDF le 2018-11-03T14:34:22Z
Effectivement, une bien sublime horloge.
J’espère que les changements perso sont positifs.
Merci pour le partage.