Construire une horloge ventilateur LED USB avec Arduino Nano – Schéma et code
Horloge analogique à ventilateur LED USB avec Arduino NANO – Code du projet et schéma avec fonction réglage heure
Si vous avez vu la vidéo du célèbre gadget « Mini USB LED light Fan clock », préparez-vous : nous allons concevoir la même horloge analogique à affichage hélice basée sur Arduino NANO, capteur à effet Hall, résistances, batterie, moteur DC et LEDs.
Les LEDs tournent en mouvement circulaire et affichent une horloge analogique en affichage hélice avec les trois aiguilles (heures, minutes, secondes) ainsi que la forme circulaire arrondie comme une montre-bracelet ou horloge murale ordinaire.
Le grand atout : vous pouvez modifier le réglage de l'heure (minutes et secondes) en téléversant le code source sur l'Arduino NANO via câble USB. Voyons comment faire.
Découvrez le gadget Horloge Ventilateur LED
Composants requis :
- Arduino NANO
- Capteur Hall W130
- R1 à R16 = 330 Ω
- R17 = 2,2 kΩ
- R18 = 10 kΩ
- LED 1 à LED 11 = Rouge
- LED 12 à LED 16 = Verte
- LED 17 = Bleue
- Batterie = 3,7 V, 240 mAh (9 V à 12 V pour moteur puissant à haute vitesse)
- Interrupteur = ON/OFF unipolaire (curseur)
- Autres : circuit imprimé, moteur DC jouet, fils, câbles, fer à souder, etc.
Câblage et schéma de circuit
Voici le schéma pour l'horloge analogique à hélice LED USB. Pour la version avec réglage d'heure, voir le second schéma en bas de page.

Procédure de montage :
- Découpez un petit morceau de circuit imprimé selon le circuit.
- Insérez une LED verte dans les trous, patte longue à gauche. Côté cuivre, pliez les pattes d'un côté (LED vertes 12–16 via R12–R16 et A5–A1).
- De même, insérez les LEDs rouges restantes (LED 1–11 via R1–R11 et D2–D12).
- Insérez la LED bleue au-dessus des vertes (LED 17 via R17 et A7). R17 = 2,2 kΩ. Reliez la cathode de cette LED aux cathodes des autres. Connectez l'anode à une extrémité de R17, l'autre extrémité au +5 V de l'Arduino.
- Reliez toutes les cathodes des LEDs ensemble. Coupez les excédents de pattes si nécessaire.
- Insérez les résistances et pliez les pattes comme pour les LEDs. Coupez l'excédent.
- Soudez les composants selon le schéma.
- Soudez les connecteurs sur l'Arduino NANO.
- Reliez la cathode commune des LEDs au GND de l'Arduino.
Connectez les fils des résistances aux broches Digital « D » et Analog « A » de l'Arduino :
- R1 → D2, R2 → D3, R3 → D4, R4 → D5, R5 → D6, R6 → D7, R7 → D8, R8 → D9, R9 → D10, R10 → D11, R11 → D12
- R12 → A1, R13 → A2, R14 → A3, R15 → A4, R16 → A5
Connectez le capteur Hall :
- Sortie → broche A0 de l'Arduino
- VCC → +5 V de l'Arduino
- GND → GND de l'Arduino
Finitions :
- Connectez la batterie 3,7 V 240 mAh selon le schéma, avec interrupteur curseur unipolaire sur le fil positif pour marche/arrêt.
- Montez le tout sur une plaque avec le moteur DC jouet. Pour moteur puissant à haute vitesse, utilisez 9–12 V.
- Téléversez le code (ci-dessous) via USB, mettez sous tension. Le ventilateur affiche l'horloge en LEDs en mouvement hélice.
Code du projet
Vous pouvez modifier le code source ci-dessous et le téléverser sur l'Arduino NANO via USB si besoin.
Code via : hobbyprojects
int LED1 = 2; int LED2 = 3; int LED3 = 4; int LED4 = 5; int LED5 = 6; int LED6 = 7; int LED7 = 8; int LED8 = 9; int LED9 = 10; int LED10 = 11; int LED11 = 12; int LED12 = A1; int LED13 = A2; int LED14 = A3; int LED15 = A4; int LED16 = A5; int sensorPin = A0; int minuteSensor = A7; int hourSensor = A6; unsigned int n,ADCvalue,propeller_posn; unsigned long previousTime = 0; byte hours = 12; // régler heures byte minutes = 15; // régler minutes byte seconds = 00; // régler secondes int val; void setup() { pinMode(LED1,OUTPUT); pinMode(LED2,OUTPUT); pinMode(LED3,OUTPUT); pinMode(LED4,OUTPUT); pinMode(LED5,OUTPUT); pinMode(LED6,OUTPUT); pinMode(LED7,OUTPUT); pinMode(LED8,OUTPUT); pinMode(LED9,OUTPUT); pinMode(LED10,OUTPUT); pinMode(LED11,OUTPUT); pinMode(LED12,OUTPUT); pinMode(LED13,OUTPUT); pinMode(LED14,OUTPUT); pinMode(LED15,OUTPUT); pinMode(LED16,OUTPUT); pinMode(sensorPin,INPUT_PULLUP); if(hours == 12) hours = 0; //**************************************** // Décommenter pour test capteur IR /* Serial.begin(9600); while(1) { ADCvalue = analogRead(minuteSensor); Serial.print("minuteSensor "); Serial.println(ADCvalue); ADCvalue = analogRead(hourSensor); Serial.print("hourSensor "); Serial.println(ADCvalue); Serial.println(); delay(1000); } */ //**************************************** } void loop() { val = digitalRead(sensorPin); while (val == LOW) { val = digitalRead(sensorPin); } if (millis() >= (previousTime)) { previousTime = previousTime + 1000; seconds = seconds+1; if (seconds == 60) { seconds = 0; minutes = minutes+1; } if (minutes == 60) { minutes = 0; hours = hours+1; } if (hours == 12) { hours = 0; } } propeller_posn=30; n=0; while(n < 60) { ADCvalue = analogRead(minuteSensor); if(ADCvalue < 500) { minutes = propeller_posn; seconds = 0; } ADCvalue = analogRead(hourSensor); if(ADCvalue < 500) { hours = propeller_posn/5; seconds = 0; } drawMinuteMarker(); if ((propeller_posn==0) || (propeller_posn==5) || (propeller_posn==10) || (propeller_posn==15) || (propeller_posn==20) || (propeller_posn==25) || (propeller_posn==30) || (propeller_posn==35) || (propeller_posn==40) || (propeller_posn==45) || (propeller_posn==50) || (propeller_posn==55)) drawHourMarker(); if ((propeller_posn==0) || (propeller_posn==15) || (propeller_posn==30) || (propeller_posn==45)) drawQuarterMarker(); if((propeller_posn == hours*5) || (( propeller_posn == 0 ) && (hours == 0))) drawHoursHand(); if(propeller_posn == minutes) drawMinutesHand(); if(propeller_posn == seconds) drawSecondsHand(); delayMicroseconds(100); // largeur pixel LED (ajuster selon vitesse moteur. Augmenter pour basse vitesse, diminuer pour haute vitesse) displayClear(); drawInner_Circle(); delayMicroseconds(450); // espace entre pixels/marqueurs minutes (ajuster selon vitesse moteur) n++; propeller_posn++; if(propeller_posn == 60) propeller_posn=0; } val = digitalRead(sensorPin); while (val == HIGH) { val = digitalRead(sensorPin); } } //========================= void displayClear() { digitalWrite(LED1,LOW); digitalWrite(LED2,LOW); digitalWrite(LED3,LOW); digitalWrite(LED4,LOW); digitalWrite(LED5,LOW); digitalWrite(LED6,LOW); digitalWrite(LED7,LOW); digitalWrite(LED8,LOW); digitalWrite(LED9,LOW); digitalWrite(LED10,LOW); digitalWrite(LED11,LOW); digitalWrite(LED12,LOW); digitalWrite(LED13,LOW); digitalWrite(LED14,LOW); digitalWrite(LED15,LOW); digitalWrite(LED16,LOW); } void drawMinuteMarker() { digitalWrite(LED16,HIGH); } void drawHourMarker() { digitalWrite(LED15,HIGH); digitalWrite(LED14,HIGH); } void drawQuarterMarker() { digitalWrite(LED13,HIGH); digitalWrite(LED12,HIGH); } void drawHoursHand() { digitalWrite(LED1,HIGH); digitalWrite(LED2,HIGH); digitalWrite(LED3,HIGH); digitalWrite(LED4,HIGH); digitalWrite(LED5,HIGH); digitalWrite(LED6,HIGH); digitalWrite(LED7,HIGH); } void drawMinutesHand() { digitalWrite(LED1,HIGH); digitalWrite(LED2,HIGH); digitalWrite(LED3,HIGH); digitalWrite(LED4,HIGH); digitalWrite(LED5,HIGH); digitalWrite(LED6,HIGH); digitalWrite(LED7,HIGH); digitalWrite(LED8,HIGH); digitalWrite(LED9,HIGH); } void drawSecondsHand() { digitalWrite(LED1,HIGH); digitalWrite(LED2,HIGH); digitalWrite(LED3,HIGH); digitalWrite(LED4,HIGH); digitalWrite(LED5,HIGH); digitalWrite(LED6,HIGH); digitalWrite(LED7,HIGH); digitalWrite(LED8,HIGH); digitalWrite(LED9,HIGH); digitalWrite(LED10,HIGH); digitalWrite(LED11,HIGH); } void drawInner_Circle() { digitalWrite(LED1,HIGH); delayMicroseconds(30); digitalWrite(LED1,LOW); }
Comment changer l'heure sur l'horloge ventilateur LED ?
Pour récepteur IR basique avec le circuit principal
Composants requis :
- R19 et R20 = 10 kΩ
- Phototransistor IR (près LED #13 pour réglage minutes)
- Phototransistor IR (près LED #16 pour réglage heures)
Connectez R19 au premier phototransistor IR (près LED #13 pour minutes) et R20 au second (près LED #16 pour heures). Reliez le commun des phototransistors et les deux résistances au GND et +5 V de l'Arduino respectivement. Connectez un fil du A7 entre R19 et le second phototransistor. Même chose pour A6 vers R20 et le premier phototransistor.

Pour émetteur télécommande IR basique
Composants requis :
- Batterie 9 V
- Connecteur snap batterie
- LED IR (infrarouge)
- Résistance 1 kΩ
- Interrupteur tactile
- Circuit imprimé
Pour fabriquer un émetteur IR simple pour régler l'heure : connectez tous les composants en série (batterie 9 V, LED IR, résistance 1 kΩ, interrupteur tactile sur le positif). Cet émetteur sert à pointer vers LED #13 et LED #16 pour régler l'heure.
Le code suivant permet de régler l'heure et les minutes de l'horloge analogique USB LED :
Vérifiez la sortie du circuit détecteur IR via le Moniteur Série Arduino. Exemple : lecture lumière ambiante > 500, avec lumière IR < 500. Adaptez le code/valeurs selon vos capteurs.
propeller_posn=30; n=0; while(n < 60) { ADCvalue = analogRead(minuteSensor); if(ADCvalue < 500) { minutes = propeller_posn; seconds = 0; } ADCvalue = analogRead(hourSensor); if(ADCvalue < 500) { hours = propeller_posn/5; seconds = 0; }
Pour régler les minutes : pointez la télécommande IR vers le repère minute et appuyez. Pour les heures : pointez vers le repère heure et appuyez.
Regardez la vidéo :
Ressources :
Gadget Horloge Ventilateur LED
Kits et composants pour ce projet
Arduino NANO pour ce projet
Technologie industrielle
- Séquenceur LED avec timer 555 et compteur 4017 — Division de fréquence et anti-rebond
- Horloge POV Arduino : Construire un affichage LED à persistance rétinienne
- Construire une horloge maître LED personnalisée avec alarme – Visible à 12 mètres
- Morpion sur matrice LED MAX7219 avec boîtier en carton
- Construire un robot quadrupède Arduino intelligent : guide étape par étape
- Construire un minuteur à rebours Arduino fiable avec afficheur 7 segments SparkFun
- Horloge à bascule Arduino avec matrice LED 8×8 – Projet DIY d'horloge temps réel
- Construisez votre propre voiture RC Porsche avec Arduino : Guide étape par étape
- Schéma de circuit lampe de nuit LED professionnel – Design alimenté secteur 230 V/50 Hz ou 110 V/60 Hz