Horloge POV LED de style analogique
Composants et fournitures
 | | × | 1 | |
 | | × | 17 | |
 | | × | 1 | |
 | | × | 17 | |
| Moteur à courant continu (générique) | | × | 1 | |
 | Régulateur de commutation Boost (Step Up), fixe | | × | 1 | |
Applications et services en ligne
À propos de ce projet
Les écrans de persistance de la vision (POV) sont généralement des écrans à LED qui « montrent » des images en affichant une section d'une image à un moment donné, en succession rapide et rapide. Le cerveau humain perçoit cela comme l'affichage d'une image continue.
Sur le site Web "Hobby Project", cette horloge analogique relativement simple mais visuellement efficace est présentée. La partie électronique contient les diodes LED Arduino Nano 17 et le capteur à effet Hall. Les groupes de diodes LED d1-d11, d12-d16 et d17 sont de couleurs différentes pour un meilleur effet visuel. L'appareil est alimenté par une batterie lithium-ion via un convertisseur élévateur.
La partie la plus difficile des projets pour moi était la stabilité mécanique. Lors de la première tentative, la batterie était réglée de manière excentrique et à une vitesse de rotation plus élevée, il y avait une énorme vibration. Ensuite j'ai fait une modification et mis la batterie au centre de rotation.
Pour la rotation, j'utilise un moteur électrique 12V connecté à une alimentation variable afin que la vitesse de rotation de l'appareil puisse être facilement contrôlée. En fonction de la vitesse de rotation de l'appareil, dans le code, vous devez définir la valeur de "delayMicroseconds" à une valeur déterminée.
La vidéo présentée n'est pas assez claire, car pour cela j'ai besoin d'une caméra avec de meilleures images par seconde.
Code
codeArduino
// hobbyprojects// ArduinoNanoPropellerLEDAnalogClock20190403Aint 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;unsigned int n,ADCvalue,propeller_posn;unsigned long previousTime =0;byte heures =12; // définit les heures et les minutes =15 ; // définit minutesbyte secondes =00; // set secondsint val;void setup() { pinMode(LED1,OUTPUT); pinMode (LED2, SORTIE); pinMode (LED3, SORTIE); pinMode (LED4, SORTIE); pinMode (LED5, SORTIE); pinMode (LED6, SORTIE); pinMode (LED7, SORTIE); pinMode (LED8, SORTIE); pinMode (LED9, SORTIE); pinMode (LED10, SORTIE); pinMode (LED11, SORTIE); pinMode (LED12, SORTIE); pinMode (LED13, SORTIE); pinMode (LED14, SORTIE); pinMode (LED15, SORTIE); pinMode (LED16, SORTIE); pinMode (sensorPin, INPUT_PULLUP); if(hours ==12) hours =0;}void loop() { val =digitalRead(sensorPin); while (val ==LOW) { val =digitalRead(sensorPin); } if (millis()>=(previousTime)) { previousTime =previousTime + 1000; secondes =secondes+1 ; if (secondes ==60) { secondes =0; minutes =minutes+1 ; } si (minutes ==60) { minutes =0; heures =heures+1 ; } if (heures ==12) { heures =0; } } propeller_posn=30; n=0 ; while(n <60) { 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 ==heures*5) || (( propeller_posn ==0 ) &&(heures ==0))) drawHoursHand(); if(propeller_posn ==minutes) drawMinutesHand(); if(propeller_posn ==secondes) drawSecondsHand(); délaiMicrosecondes(140); // pour la largeur de pixel de la LED (changer la valeur en fonction de la vitesse du moteur. Augmenter pour la faible vitesse, diminuer pour le moteur à grande vitesse) displayClear(); drawInner_Circle(); délaiMicrosecondes (600); // pour l'écart entre les marqueurs de pixels/minutes LED (changer la valeur en fonction de la vitesse du moteur. Augmenter pour la faible vitesse, diminuer pour le moteur à grande vitesse) n++ ; propeller_posn++; if(propeller_posn ==60) propeller_posn=0; } val =digitalRead(sensorPin); while (val ==HAUT) { val =digitalRead(sensorPin); } }//=========================void displayClear() { digitalWrite(LED1,LOW); digitalWrite (LED2, LOW); digitalWrite (LED3, LOW); écriture numérique (LED4, FAIBLE); écriture numérique (LED5, FAIBLE); écriture numérique (LED6, FAIBLE); écriture numérique (LED7, FAIBLE); écriture numérique (LED8, FAIBLE); écriture numérique (LED9, FAIBLE); écriture numérique (LED10, FAIBLE); digitalWrite (LED11, FAIBLE); écriture numérique (LED12, FAIBLE); écriture numérique (LED13, FAIBLE); écriture numérique (LED14, FAIBLE); écriture numérique (LED15, FAIBLE); écriture numérique (LED16, FAIBLE); } void drawMinuteMarker() { digitalWrite(LED16,HIGH); } void drawHourMarker() { digitalWrite(LED15,HIGH); digitalWrite (LED14, HAUT); } void drawQuarterMarker() { digitalWrite(LED13,HIGH); digitalWrite (LED12, HAUT); } void drawHoursHand() { digitalWrite(LED1,HIGH); digitalWrite (LED2, HAUT); digitalWrite (LED3, HAUT); digitalWrite (LED4, HAUT); digitalWrite (LED5, HAUT); digitalWrite (LED6, HAUT); digitalWrite (LED7, HAUT); } void drawMinutesHand() { digitalWrite(LED1,HIGH); digitalWrite (LED2, HAUT); digitalWrite (LED3, HAUT); digitalWrite (LED4, HAUT); digitalWrite (LED5, HAUT); digitalWrite (LED6, HAUT); digitalWrite (LED7, HAUT); digitalWrite (LED8, HAUT); digitalWrite (LED9, HAUT); } void drawSecondsHand() { digitalWrite(LED1,HIGH); digitalWrite (LED2, HAUT); digitalWrite (LED3, HAUT); digitalWrite (LED4, HAUT); digitalWrite (LED5, HAUT); digitalWrite (LED6, HAUT); digitalWrite (LED7, HAUT); digitalWrite (LED8, HAUT); digitalWrite (LED9, HAUT); digitalWrite (LED10, HAUT); digitalWrite (LED11, HAUT); } void drawInner_Circle() { digitalWrite(LED1,HIGH); délaiMicrosecondes(30); digitalWrite (LED1, BAS); }
Schémas