Vous aurez besoin :
Une carte Arduino (à peu près n’importe quelle saveur fonctionne parfaitement) et des logiciels
1 LED
1 cavalier
(Exemple de câblage mise à jour ci-dessous...)
Je suis un ingénieur électricien de 20 ans et vient de découvrir la plateforme Arduino il y a quelques mois. Inutile de dire que j’ai tombé en amour avec elle et suis maintenant accro sur les projets. Pour Noël cette année, j’ai voulu faire quelques cadeaux très sincère, one-of-a-kind pour mes parents. Pour ma mère, c’était certainement un « un-de ' horloge design. Je n’étais pas concerné avec jonglant avec l’heure d’été ou les années bissextiles - garder simplement avec précision le jour de la semaine et l’heure.
Comment générer les impulsions d’horloge d’une manière unique et précise bien que ? Bien sûr, je pourrais utiliser une horloge fantaisie embarquée IC ou l’oscillateur à quartz 32 768 commun, mais je voulais quelque chose de différent que le reste. J’ai commencé à utiliser un timer 555 pour produire une onde carrée stable de 100Hz. Cela fonctionnait assez bien, mais je perdais environ 1 seconde par heure. Pas de problème - je viens d’écrire un algorithme permettant de corriger le manque de seconde dans le logiciel. J’ai été heureux. Puis j’ai découvert que, bien que l’horloge interne de l’Arduino n’était pas totalement fiable pour le chronométrage, les sorties PWM analogiques n’avaient une onde carrée très stable de 490Hz. Le rapport cyclique est déterminé par la valeur écrite à la broche analogique. (p. ex. - 0 est zéro volts, 127 est un cycle de 50 %, 255 est une logique haute/5V).
J’ai décidé d’essayer la sortie analogique PWM raccordée directement sur la broche d’interruption 2 et cela a fonctionné très bien ! De plus, il maintenu parfaitement avec horloge en temps réel de mon ordinateur à la seconde sans nécessité d’indemnisation logiciel. J’ai fait tourner pendant des jours maintenant et il continue de se produire juste comme je l’avais espéré... avec un fil et un code.
Le don fini aura Eagle CAD personnalisé PCB pour l’alimentation et la logique, logé dans un boîtier de plexiglass. Le thème entier est bleu glacier éclairage LED pour simuler une horloge analogique. Alors que l’enceinte a un blanc sur bleu écran LCD affichant le jour, heure et température ambiante, un câble série se connecte dans la zone de projet à l’horloge réelle. À l’aide d’un compteur de décennie de 12 bits, un servo et beaucoup de LED bleue je suis éclairage l’heure appropriée segments sur une horloge analogique conçu face imprimée sur plexiglas. Le servo est monté au centre du cadran, et a une armature attachée avec une LED montés pour éclairer les minutes derrière la vitre. (chaque minute le servo tourne 6 degrés, illuminant l’heure désirée). J’espère avoir fini bientôt et va faire une vidéo du produit final... J’espère qu’elle adore ça!!
Arduino câblage diagramme et démo code simple de faire votre propre horloge à l’aide de cette méthode. Également un lien vers Circuit Lab qui illustre l’utilisation de la minuterie 555 @ 100Hz méthode si vous le souhaitez.
Code et liens ci-dessous...
Circuit d’oscillateur 555 timer (si vous voulez essayer cette méthode)
https://www.circuitlab.com/circuit/b575r9/555-100Hz-Oscillator/
Code de démonstration d’horloge :
/ * Démo simple horloge interne : par Joseph Unik aka Relic1974
Utilise la sortie PWM analogique de 490Hz avec un cycle de 50 % à
garder l’heure très précise;). Brancher une LED à la broche 13 à
regarder les secondes clignotent. Connecter un cavalier de broche analogique 0
à la broche numérique 2 (interruption 0). Sortie de minutes à sériel
moniteur. logo 'Arduino' http://www.planetxresearch.com
Pour plus d’astuces et de projets...
(N’hésitez pas à utiliser ce code pour développer dans un plein-fonctionnel
horloge ou autre projet Creative Commons;)
*/
int clockInt = 0 ; la broche numérique 2 est maintenant interruption 0
masterClock int = 0 ; nombre de signaux d’horloge de bord en hausse
secondes int = 0 ; variable
minutes d’int = 0 ; variable
int ledPin = 13 ;
void setup()
{
attachInterrupt (clockInt, clockCounter, RISING) ;
clockInt est notre interruption, la fonction clockCounter est appelée lorsque
appelé sur un bord d’horloge de montée
analogReference(DEFAULT) ;
pinMode (ledPin, sortie) ;
Serial.Begin(57600) ;
analogWrite (0, 127) ; Cela commence notre PWM « clock » et un cycle de fonctionnement de 50 %
}
void clockCounter() / / appelé par interruption
{
masterClock ++ ; avec chaque augmentation d’horloge ajouter 1 à count masterclock
if(masterClock == 489) / / 490 Hz atteint
{
secondes ++ ; après un cycle de 490Hz ajouter 1 seconde;)
masterClock = 0 ; Réinitialiser après que 1 seconde est atteint
ton (13, 100, 500) ; à l’aide de ton à impulsion LED sans appel retard;)
}
retour ;
}
void loop()
{
if(seconds == 60) / / maintenant monter pour maintien de temps réel
{
minutes ++ ; minutes d’incrément de 1
secondes = 0 ; réinitialiser la variable secondes
Serial.Print ("Minutes =") ;
Serial.println(minutes) ;
}
}
Démo de mon projet en cours ici