Chronométrage sur ESP8266 & arduino uno sans un RTC (Real Time CLock) ? (2 / 3 étapes)

Étape 2: L’essai proprement dit : quelle est la précision un arduino uno / ESP8266 sans CCF ?

"Mais l’arduino uno / ESP8266 / Wemos est inexacte sans CCF et j’ai besoin de précision avant toute chose! »-dit le sceptique. Presque tous les arduino horloge instructables disposent donc une unité de la CCF, même s’ils ne vont jamais être éteint et ne nécessitent pas la fonction de sauvegarde.

Eh bien, j’étais sceptique aussi. Mais j’ai été frustré avec codé des applications internet, les encombrants CCF unités, les librairies qui n’ont pas été universellement compatible et frustré avec le sloppyness de tout cela. Donc j’ai écrit mon propre esquisse pour garder l’heure qui fonctionne sur n’importe quel microcontrôleur compatible arduino. L’esquisse est basée uniquement sur la fonction millis(). Cette fonction fonctionne sur n’importe quel microcontrôleur et il ne fait que compter les millisecondes qui se sont écoulées depuis votre dernière remise à zéro. Vous trouverez l’esquisse ci-dessous, y compris les commentaires explaing tout et j’ai également joint à cette instructable dans un fichier distinct .ino. Il est simple à faire si vous suivez mes commentaires et vous pourrez facilement faire votre propre version personnalisée basée sur vos besoins de chronométrage de la saleté :

Rédigé par Ruben Marc Speybrouck

unsigned long TEM.PS = 0 ;

unsigned long timeLast = 0 ;

Paramètres de temps de démarrage :

int startingHour = 12 ;

régler votre heure de départ ci-dessous, pas à l’heure int. Cela garantit exacte correction quotidienne du temps

secondes int = 0 ;

int minutes = 33 ;

int h = startingHour ;

jours d’int = 0 ;

Paramètres de précision

J’aint dailyErrorFast = 0; / / set le nombre moyen de millisecondes, temps de votre microcontrôleur est rapide sur une base quotidienne

int dailyErrorBehind = 0; définir le nombre moyen de millisecondes, que temps de votre microcontrôleur est à l’origine sur une base quotidienne

int correctedToday = 1; ne modifiez pas cette variable, on veut dire que le temps a déjà été corrigé aujourd'hui pour l’erreur dans votre cristal de planches. Cela est vrai pour le premier jour parce que vous venez de mettre le temps quand vous avez téléchargé l’esquisse.

void setup() { / / mettez votre code de configuration ici, pour exécuter une fois :

Serial.Begin(9600) ; }


void loop() { / / mettez votre code principal ici, pour exécuter à plusieurs reprises :

TEM.PS = millis () / 1000 ; le nombre de millisecondes écoulées depuis le démarrage

secondes = TEM.PS - timeLast ;

le nombre de secondes qui se sont écoulés depuis la dernière fois que 60 secondes a été atteint.

Si (secondes == 60) {}

timeLast = TEM.PS ;

minutes = minutes + 1 ; }

Si une minute passée, commencer à compter les millisecondes de zéro à nouveau et ajouter une minute à l’horloge.

Si (minutes == 60) {}

minutes = 0 ;

heures = heures + 1 ; }


Si une heure est passée, commencer à compter les minutes entre zéro et ajouter une heure à l’horloge


Si (heures == 24) {}

heures = 0 ;

jours = jours + 1 ;

}

Si 24 heures se sont écoulées, ajoutez un jour

Si (== heures (24 - startingHour) & & correctedToday == 0) {}

Delay(dailyErrorFast*1000) ;

secondes = secondes + dailyErrorBehind ;

correctedToday = 1 ; }

chaque fois que 24 heures se sont écoulées depuis l’heure de départ initiale et n’a pas pu réinitialiser cette veille, ajouter les millisecondes ou retarder le programme avec quelques millisecondes.

Changer ces varialbes selon l’erreur de votre planche.

La seule façon de savoir comment loin votre horloge interne de planches est, est en téléchargeant cette esquisse à exactement le même temps que le temps réel, laisser tourner pendant quelques jours

et puis en déterminant le nombre de secondes lent/rapide votre horloge interne de planches est sur une moyenne quotidienne. (24 heures).

Si (heures == 24 - startingHour + 2) {}

correctedToday = 0 ; }

Informez l’esquisse qu’une nouvelle journée a commencé pour quelle correction de préoccupations, si cette ligne n’était pas ici l’arduiono / / continuerait à corriger pour une heure entière, c’est 24 - startingHour.

Serial.Print ("le temps est:") ;

Serial.Print(Days) ;

Serial.Print(":") ;

Serial.Print(hours) ;

Serial.Print(":") ;

Serial.Print(minutes) ;

Serial.Print(":") ;

Serial.println(seconds) ;

}

J’ai couru le code sur un wemos D1 et un arduino uno. J’ai mis le temps égal au temps de :http://www.timeanddate.com/ le jour de minuit zéro (il ne faut évidemment pas commence à minuit!-j’ai inclus le timecode définie ci-dessus Sub d’installation). Après un jour et 9 heures, la différence entre l’heure de mon microcontrôleurs et ce site Web a été environ une seconde. J’ai vérifié cela en prenant un screenshot de mon serial monitor sur un côté de l’écran et en ayant la page Web à ouvrir de l’autre côté. (voir photo).

Après environ 3 jours, sur mon arduino et wemos l’horloge a été rapide d’environ 2 à 2,5 sec. C’est 274 secondes une année de congé ou un peu plus de 4,5 minutes. C’est inacceptable ! Non, pas vraiment. Je viens d’ajouter une ligne de code à mon esquisse qui corrige le temps sur mon microcontrôleurs en retardant le programme juste un peu toutes les 24 heures, ou en ajoutant quelques millisecondes chaque jour. Dans mon cas environ 0,75 secondes tous les jours. Et là vous avez, à long terme près de chronométrage deuxième précis sans chichis à n’importe quel bord !

Voici le code de correction tous ensemble dans la pratique une fois de plus si on pouvait facilement voir l’image entière

Paramètres de précision

int dailyErrorFast = 0; définir le nombre moyen de millisecondes, temps de votre microcontrôleur est rapide sur un quotidien base int dailyErrorBehind = 0; / / set le nombre moyen de millisecondes, temps de votre microcontrôleur est derrière sur un quotidien base int correctedToday = 1; / / ne pas changer cette variable, on veut dire que le temps a déjà été corrigé aujourd'hui pour l’erreur dans votre cristal de planches. Cela est vrai pour le premier jour parce que vous venez de mettre le temps quand vous avez téléchargé l’esquisse. :

Si (== heures (24 - startingHour) & & correctedToday == 0) {}

Delay(dailyErrorFast*1000) ;
secondes = secondes + dailyErrorBehind ; correctedToday = 1;}

chaque fois que 24 heures se sont écoulées depuis l’heure de départ initiale et n’a pas pu réinitialiser cette veille)

Si (heures == 24 - startingHour + 2) {correctedToday = 0;}

Informez l’esquisse qu’une nouvelle journée a commencé pour quelle correction de préoccupations, si cette ligne n’était pas ici l’arduiono
continuerait à corriger pour une heure entière, c’est 24 - startingHour.

Articles Liés

Remplacement d’un Atmega328 brûlé sur un Arduino Uno

Remplacement d’un Atmega328 brûlé sur un Arduino Uno

Cette vidéo vous montrera comment faire pour remplacer un Atmega328 brûlé sur un Arduino Uno.Avez des questions ? Commentaire ci-dessous.N'hésitez pas à visiter www.jayconsystems.com
Programmer une Simple mélodie sur un Arduino Uno

Programmer une Simple mélodie sur un Arduino Uno

Cette instructable va vous montrer une façon super simple de programmer votre Arduino Uno à jouer une mélodie midi simple (dans ce cas "You Are My Sunshine"). J'ai utilisé quelques éléments dans mon Arduino Starter Kit, un Chromebook et le libre
Téléchargement de croquis pour Arduino Pro Mini en utilisant la carte Arduino UNO (sans enlever la puce Atmel)

Téléchargement de croquis pour Arduino Pro Mini en utilisant la carte Arduino UNO (sans enlever la puce Atmel)

Il prévoit une procédure permettant d'utiliser de Serial(TTL) convertisseur USB intégré de Arduino UNO pour télécharger des sketches au Conseil d'Arduino Pro Mini sans la nécessité d'enlever morceau de microcontrôleur Atmel de l'ONU. Ceci est utile p
Verre les ordinateurs basés sur l’Arduino Uno

Verre les ordinateurs basés sur l’Arduino Uno

Pour mon projet diplômés de masters ("Gowing ordinateurs, connexion corps, Cutting the Cord") de Konstfack Collège d'artisanat et de Design (céramique et verre/CRAFT), j'ai fait 3 verre ordinateurs basés sur les spécifications de l'Arduino Uno.
Définissez jusqu'à Real Time Clock (RTC) sur Raspberry Pi

Définissez jusqu'à Real Time Clock (RTC) sur Raspberry Pi

Remarque : il y avait quelques problèmes avec l'audio sur la vidéo YouTube. J'ai il pris vers le bas temporairement et sera charger une vidéo fixe et mettre à jour le lien bientôt. Désolé pour le dérangement.Raspberry Pi n'inclut pas une horloge maté
TimeDuino - 7 Segment Arduino horloge (sans registres à décalage nécessaires!)

TimeDuino - 7 Segment Arduino horloge (sans registres à décalage nécessaires!)

Hé tous les amateurs instructable ! C'est mon premier projet. Oui, je sais que ces mots généralement obtenir le stéréotype « Cela ne va pas être un bon projet » attitude, mais j'ai attendu longtemps pour un projet qui mérite peut-être briser la premi
La programmation Arduino Pro Mini en utilisant Arduino Uno et ArduShield - sans les câbles

La programmation Arduino Pro Mini en utilisant Arduino Uno et ArduShield - sans les câbles

L'objectif principal de cette instruction est de vous montrer comment programmer plus facile manière Arduino Mini ou Arduino Pro Mini avec Arduino UNO et ArduShield – sans les câbles.Étape par étape tutoriel, avec aucune mesure pour sauter en PCB gén
Brûler le Bootloader sur ATMega328 servant d’ISP Arduino UNO

Brûler le Bootloader sur ATMega328 servant d’ISP Arduino UNO

mise à jour : ce tutoriel va travailler sur IDE Arduino 1.0.1, la 1.0.5 récente apporte quelques modifications sur le croquis de l'ISP, donc je ne sais pas si ça fonctionne (je viens d'acheter 2 ATMega328 et brûlé tous les deux sur 1.0.1).S'il vous p
Comment construire un Arduino Uno sur une maquette

Comment construire un Arduino Uno sur une maquette

Si vous êtes comme et moi et profiter de projets électroniques de construction puis vous pourriez avoir travaillé avec l'Arduino Uno. L'Arduino uno est la plus populaire micro contrôleur de la série et a une grande collection des bibliothèques qui fo
Guide simple pour régler l’heure sur une horloge temps réel DS3231/DS3107/DS1337 avec Arduino UNO

Guide simple pour régler l’heure sur une horloge temps réel DS3231/DS3107/DS1337 avec Arduino UNO

Le DS3231 est une haute précision, largement utilisé Real Time Clock (RTC), ainsi que ses homologues légèrement moins précis, DS3107 et DS1337. Avant de pouvoir être utile, toutefois, elle doit être réglée à la bonne heure. Ce Instructable est strict
Contrôlée de bricolage Bluetooth téléphone Droid BB-8 avec Arduino UNO

Contrôlée de bricolage Bluetooth téléphone Droid BB-8 avec Arduino UNO

Je suis un grand fan de Star Wars et quand j'ai vu la Star Wars : The Force Awakens j'ai pensé que j'ai besoin d'un droïde de BB-8. C'était génial, comment cette petite sphère s'installe dans le film. Alors j'ai décidé que je vais faire ce droid qui
Bateau pilote automatique - basée sur l’Arduino

Bateau pilote automatique - basée sur l’Arduino

Voici comment construire un pilote automatique qui peut diriger un RC bateau à waypoints ! Il est facile à construire, basé sur la populaire plate-forme Arduino et idéal pour les amateurs qui veulent certaine pratique soudure ! Avec ce pilote automat
Arduino Uno Xylophone

Arduino Uno Xylophone

Ce xylophone utilise l'Arduino Uno et un multiplexeur pour identifier quand une des huit clés sont frappés et jouer un son sur un ordinateur qui sonnent via midi. Une partie optionnelle de la notice permet également chaque touche à la lumière vers le
Faire un détecteur d’incendie en quelques minutes avec Samsung SAMIIO, Arduino UNO et Raspberry Pi

Faire un détecteur d’incendie en quelques minutes avec Samsung SAMIIO, Arduino UNO et Raspberry Pi

Nous allons construire un dispositif d'Ito qui envoie des données de capteurs à SAMI à l'aide WebSockets de SAMI la flamme. Le dispositif de l'ITO se compose d'un capteur sur étagère, Arduino UNO et Raspberry Pi.Dans cette implémentation, un manifest