Créez une horloge Arduino précise en utilisant un seul fil - aucun matériel externe n'est requis!

Créez une horloge Arduino précise en utilisant un seul fil - aucun matériel externe n'est requis!

Table des matières:

Anonim

Comment créer une horloge Arduino - sans utiliser d'oscillateurs externes ni de puces d'horloge:

(plusieurs de mes projets sur notre site Web de recherche - cliquez sur le logo arduino en haut de la page d'accueil)

Tu auras besoin de:

Une carte Arduino (à peu près n'importe quelle saveur fonctionnera bien) et un logiciel

1 LED

1 fil de liaison

(Exemple de câblage mis à jour ci-dessous …)

Je suis un ingénieur électricien de plus de 20 ans et je viens de découvrir la plate-forme Arduino il y a quelques mois. Inutile de dire que j'en suis tombé amoureux et que je suis désormais accro à mes projets. Pour Noël cette année, je voulais faire des cadeaux uniques au cœur de mon cœur pour mes parents. Pour ma mère, il s'agissait vraiment d'une horloge unique. Je ne me préoccupais pas de suivre l'heure d'été ni les années bissextiles, mais simplement de garder avec précision le jour de la semaine et l'heure.

Comment générer les impulsions d'horloge d'une manière unique mais précise? Bien sûr, je pourrais utiliser un circuit intégré d'horloge sophistiqué ou l'oscillateur à cristal commun, mais je voulais quelque chose de différent du reste. J'ai commencé à utiliser une minuterie 555 pour produire une onde carrée constante à 100Hz. Cela fonctionnait plutôt bien mais je perdais environ 1 seconde par heure. Pas de problème - je viens d'écrire un algorithme pour corriger la seconde manquante dans le logiciel. J'étais heureux. Ensuite, j'ai découvert que, même si le minuteur interne de l'Arduino n'était pas totalement fiable pour la mise à l'heure, les sorties analogiques PWM avaient une onde carrée très constante de 490Hz. Le rapport cyclique est déterminé par la valeur écrite sur la broche analogique. (c’est-à-dire que - 0 correspond à zéro volt, 127 correspond à un rapport cyclique de 50%, 255 correspond à une logique / 5V).

J'ai décidé d'essayer la sortie analogique PWM câblée directement à la broche d'interruption 2 et cela a très bien fonctionné! De plus, elle a parfaitement suivi l'horloge en temps réel de mon ordinateur à la seconde près sans nécessiter de compensation logicielle. Je le lance depuis des jours et il continue de fonctionner exactement comme je l'espérais… le tout avec un fil et du code.

Le cadeau fini aura des circuits imprimés personnalisés Eagle CAD pour l’alimentation et la logique, logés dans un boîtier en plexiglas. Le thème entier est un éclairage LED bleu glace simulant une horloge analogique. Bien que le boîtier dispose d'un écran LCD blanc sur bleu affichant le jour, l'heure et la température ambiante, un câble série se connecte du boîtier de projet à l'horloge réelle. À l'aide d'un compteur de décades 12 bits, d'un servo et de nombreuses DEL bleues, j'éclaire les segments horaires appropriés sur un cadran d'horloge analogique conçu sur mesure, imprimé sur du plexiglas. Le servo est monté au centre du cadran de l'horloge et possède une armature fixée à l'aide d'une DEL montée pour éclairer les minutes derrière la vitre. (chaque minute, le servo tourne à 6 degrés, allumant la minute appropriée). J'espère l'avoir bientôt fini et fera une vidéo du produit final …. J'espère qu'elle l'aime !!

Schéma de câblage Arduino simple et code de démonstration pour créer votre propre horloge en utilisant cette méthode. Également un lien vers Circuit Lab montrant comment utiliser la méthode 555 à 100Hz si vous le souhaitez.

Code et liens ci-dessous …

Circuit oscillateur à minuterie 555 (si vous souhaitez essayer cette méthode)

www.circuitlab.com/circuit/b575r9/555-100hz-oscillator/

Code de démonstration d'horloge:

/ * Simple demo clock interne: de Joseph Unik aussi nommé Relic1974

Utilise une sortie PWM analogique de 490Hz avec un rapport cyclique de 50%

garder l'heure très précise;). Connectez une LED à la broche 13 à

Regardez les secondes clignoter. Connecter un cavalier de la broche analogique 0

sur la broche numérique 2 (interruption 0). Minutes de sortie en série

moniteur. http://www.planetxresearch.com logo 'Arduino'

pour plus de projets et astuces …

(Ne hésitez pas à utiliser ce code pour développer dans un entièrement fonctionnel

horloge ou autre projet sous Creative Commons;)

*/

int clockInt = 0; // la broche numérique 2 est maintenant interrompue 0

int masterClock = 0; // compte les signaux d'horloge de front montant

int secondes = 0; // variable

int minutes = 0; // variable

int ledPin = 13;

void setup()

{

attachInterrupt (clockInt, clockCounter, RISING);

// clockInt est notre interruption, la fonction clockCounter est appelée quand

// invoqué sur un front d'horloge RISING

analogReference (DEFAULT);

pinMode (ledPin, OUTPUT);

Serial.begin (57600);

analogWrite (0, 127); // cela démarre notre horloge PWM avec un cycle de travail de 50%

}

void clockCounter () // appelé par interruption

{

masterClock ++; // à chaque montée d'horloge, ajoutez 1 au compte d'horloge maître

if (masterClock == 489) // 490Hz atteint

{

secondes ++; // après un cycle de 490Hz, ajoutez 1 seconde;)

masterClock = 0; // Réinitialisation après 1 seconde

ton (13, 100, 500); // utilisation de tonalité pour impulser la LED sans appel différé;)

}

revenir;

}

boucle vide ()

{

if (secondes == 60) // PASSER MAINTENANT AU TEMPS RÉEL GARDER

{

minutes ++; // incrémente les minutes de 1

secondes = 0; // réinitialise la variable secondes

Serial.print ("Minutes =");

Serial.println (minutes);

}

}

Démo de mon projet dans les travaux ici

Provisions: