¿TimeKeeping en ESP8266 & arduino uno sin un RTC (reloj en tiempo Real)? (2 / 3 paso)

Paso 2: La prueba real: ¿Qué tan preciso es un arduino uno / ESP8266 sin RTC?

"Pero el arduino uno / ESP8266 / Wemos es inexacta sin RTC y necesito precisión por encima de todo!"-dice el escéptico. Casi todos arduino reloj instructables por lo tanto cuentan con una unidad RTC, aunque nunca se va a apagar y no requieren el función de respaldo.

Así también estaba escéptico. Pero yo estaba frustrado con aplicaciones de internet complejamente codificados, voluminosas unidades RTC, librerías que no eran compatible universalmente y frustrados con la sloppyness de todo. Así que escribí mi propio boceto para mantener el tiempo que trabaje en cualquier microcontrolador compatible con arduino. El bosquejo se basa solamente en la función millis(). Esta función funciona en cualquier microcontrolador, y todo lo que hace es contar los milisegundos que han transcurrido desde su última puesta a cero. Usted encontrará el bosquejo a continuación incluso comentarios explaing todo y os lo adjunto también en este instructable en un archivo separado .ino. Es suciedad fácil de hacer si sigues mis comentarios y fácilmente podrás hacer tu propia versión personalizada basada en su tiempo manteniendo las necesidades:

Escrito por Ruben Marc Speybrouck

timeNow larga sin signo = 0;

timeLast largo sin signo = 0;

Hora de inicio de configuración:

int startingHour = 12;

su hora de partida aquí, no abajo en horas de int. Esto asegura la corrección diaria precisa de tiempo

int segundos = 0;

int minutos = 33;

horas de int = startingHour;

días de int = 0;

Configuración de precisión

medailyErrorFast nt = 0; / / establecer el número de milisegundos de tiempo de su microcontrolador es rápido sobre una base diaria promedio

int dailyErrorBehind = 0; establecer el número de milisegundos de que tiempo de su microcontrolador está detrás de un diario promedio

int correctedToday = 1; cambiar esta variable, se entiende que el tiempo ya ha sido corregido hoy para el error en tu cristal de tableros. Esto es cierto para el primer día porque sólo tienes que configurar el tiempo de cuando subiste el bosquejo.

void setup() { / puso su código de instalación, para ejecutar una vez:

Serial.Begin(9600); }


void loop() { / / Pon tu código principal, para ejecutar varias veces:

timeNow = millis () / 1000; el número de milisegundos que han transcurrido desde el inicio

segundos = timeNow - timeLast;

el número de segundos que han transcurrido desde que se llegó a la última vez que 60 segundos.

Si (segundos == 60) {}

timeLast = timeNow;

minutos = minutos + 1; }

Si ha pasado un minuto, empezar a contar milisegundos desde cero otra vez y añadir un minuto en el reloj.

Si (minutos == 60) {}

minutos = 0;

horas = horas + 1; }


Si ha pasado una hora, empezar a contar los minutos desde cero y añadir una hora al reloj


Si (horas == 24) {}

horas = 0;

días = días + 1;

}

Si han pasado 24 horas, añadir un día

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

Delay(dailyErrorFast*1000);

segundos = segundos + dailyErrorBehind;

correctedToday = 1; }

cada vez que han pasado 24 horas desde la hora inicial y no ha sido restablecer este día antes, añadir milisegundos o retrasar el programa con algunos milisegundos.

Cambiar esas varialbes según el error de la tabla.

Es la única manera de averiguar cómo lejos el reloj interno de tableros, por subir este bosquejo en exactamente el mismo tiempo que el tiempo real, dejándola correr por unos días

y entonces determinar cuantos segundos lentos y rápidos el reloj interno de tableros en un promedio diario. (24 horas).

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

correctedToday = 0; }

saber el boceto que ha comenzado un nuevo día para qué corregir problemas, si esta línea no era aquí el arduiono / / seguiría corregir toda una hora que sea 24 - startingHour.

Serial.Print ("el tiempo es:");

Serial.Print(Days);

Serial.Print(":");

Serial.Print(hours);

Serial.Print(":");

Serial.Print(minutes);

Serial.Print(":");

Serial.println(seconds);

}

Funcionó el código en un wemos D1 y un arduino uno. Configurar el tiempo igual con el tiempo de:http://www.timeanddate.com/ día cero de la medianoche (obviamente no tienes que comenzar a la medianoche!-incluí código determinado tiempo sobre instalación de vacío). Después de un día y 9 horas la diferencia entre el tiempo en mi microcontroladores y este sitio web fue aproximadamente un segundo. He comprobado esto tomando una captura de pantalla de mi monitor serial en un lado de la pantalla y tener la página abierta en el otro lado. (ver foto).

Después de 3 días, en mi arduino y wemos el reloj fue rápido aproximadamente de 2 a 2,5 seg. es de 274 segundos un año o poco más de cuatro y medio minutos. 'S inaceptable!!!!!! No, no es realmente. Acaba de agregar una línea de código a mi bosquejo que corrige la hora en mi microcontroladores retrasando el programa solo un poco cada 24 horas o mediante la adición de unos pocos milisegundos cada día. En mi caso aproximadamente 0,75 segundos cada día. Y ahí lo tienen, a largo plazo cerca de timekeeping segundo exacto con ninguna queja sobre cualquier junta!

Aquí está el código de corrección de todos juntos en la práctica una vez más así que fácilmente podía ver la imagen completa

Configuración de precisión

int dailyErrorFast = 0; establece el número promedio de milisegundos de tiempo de su microcontrolador es rápido en un diario base int dailyErrorBehind = 0; / / establecer el número promedio de milisegundos de tiempo de su microcontrolador está detrás en un diario base int correctedToday = 1; / / no cambiar esta variable, uno significa que el tiempo ya ha sido corregido hoy para el error en tu cristal de tableros. Esto es cierto para el primer día porque sólo tienes que configurar el tiempo de cuando subiste el bosquejo.:

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

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

cada vez que han pasado 24 horas desde la hora inicial y no ha sido restablecer este día antes)

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

saber el boceto que ha comenzado un nuevo día para qué corregir problemas, si esta línea no era aquí el arduiono
continuaría a corregir para una hora entera que es 24 - startingHour.

Artículos Relacionados

Reloj en tiempo real (RTC) con LinkIt uno

Reloj en tiempo real (RTC) con LinkIt uno

¿Alguna vez atascado con un proyecto que necesita un reloj de tiempo real (un reloj que te indica la fecha y hora y no sólo cuántos segundos (milli) transcurrido desde que se conectó al poder)?Tienes 2 opciones:Uso de GPS y obtener el tiempo allíInte
Configuración de un reloj de tiempo Real (RTC) con un Micro Arduino Pro

Configuración de un reloj de tiempo Real (RTC) con un Micro Arduino Pro

Para un montón de proyectos, necesita saber el tiempo real. Siendo precisos segundos, la hora del día o la fecha del mes, un Módulo de reloj de tiempo Real RTC es la respuesta a esa necesidad.Con bajo consumo de energía, avanzadas de precisión y cali
Berlín reloj, Arduino Nano, DS1307 reloj en tiempo Real. 74HC595N 8 Bit Shift Register.

Berlín reloj, Arduino Nano, DS1307 reloj en tiempo Real. 74HC595N 8 Bit Shift Register.

Hace algún tiempo he querido construir un reloj de Berlín. ¿Realmente no sé por qué? Igual lo "diferente" a la hora.¿Cómo funciona?A partir de la parte inferior hay 4 amarillo enciende cada luz representa 1 minuto, así que si no hay ninguno en e
Reloj de tiempo Real de Arduino con alarma y sensores ambientales

Reloj de tiempo Real de Arduino con alarma y sensores ambientales

Reloj de Arduino, con respaldo de batería (reloj en tiempo real), tiempo, fecha, alarma, temperatura, humedad, presión, LCD, salida, entrada de teclado, dormir modo, blanco de iluminación (4 X) LED LCD con control de intensidadPaso 1: Lista de piezas
Arduino Aquaponics: reloj de tiempo Real parte I

Arduino Aquaponics: reloj de tiempo Real parte I

necesidad fundamental de AA de cualquier sistema de control es la capacidad de registrar el tiempo.  Como lo que somos conscientes, el Arduino tiene tres métodos que puede emplear:1. serie.  Varias veces superar el tiempo de la conexión en serie.2. e
Reloj en tiempo Real de Arduino DS3231 con color TFT

Reloj en tiempo Real de Arduino DS3231 con color TFT

Construcción de un reloj de tiempo real con un pantalla TFT a color es muy fácil utilizando Arduino. La pantalla muestra la hora, la fecha, la temperatura del currect a lo largo de la temperatura MAX y MIN que ha medido. Vamos a construirlo!Paso 1: O
Módulos de reloj en tiempo Real compatible con Arduino #5 (DS1307 y DS3231)

Módulos de reloj en tiempo Real compatible con Arduino #5 (DS1307 y DS3231)

Un módulo de reloj en tiempo Real (RTC) es que un RTC es un RTC. ¿Verdad? Mal!Mientras estos dos ECA muy común, compatible con Arduino un aspecto muy similar y están conectados a través del I2C (pronunciado ojo cuadrado, u ojo ojo) bus de comunicacio
Frambuesa Pi - reloj en tiempo Real (RTC)

Frambuesa Pi - reloj en tiempo Real (RTC)

En este proyecto, vamos a hacer un reloj de tiempo Real (RTC) que mantenga el tiempo de su frambuesa Pi incluso si está apagada.Reloj de tiempo real es esencial para cada Micro controladores mantener el tiempo, incluso si está apagada. Sin un Network
Subir bocetos a Arduino Mini Pro uso de Arduino UNO (sin quitar el Atmel Chip)

Subir bocetos a Arduino Mini Pro uso de Arduino UNO (sin quitar el Atmel Chip)

Esto describe un procedimiento para hacer uso de USB incorporado de Arduino UNO a Serial(TTL) subir bocetos a tablero de Arduino Mini Pro sin necesidad de quitar la viruta de regulador micro Atmel de UNO. Esto es útil para aquellos empezando con plac
Sensor de temperatura WiFi DS18B20 ESP8266 (ESP8266 Arduino IDE sin Arduino)

Sensor de temperatura WiFi DS18B20 ESP8266 (ESP8266 Arduino IDE sin Arduino)

En este tutorial mostramos cómo construir sensor de temperatura ESP8266 WiFi con DB18B20. Vamos a utilizar el IDE de Arduino, Arduino, sin. Datos se enviará al servidor EasyIoT (Windows o frambuesa Pi) para el registro y agradable.Ver más tutoriales
Reloj en tiempo real de Arduino usando el Ds1302

Reloj en tiempo real de Arduino usando el Ds1302

Esta semana he decidido que quiero construir un reloj. Quiero un reloj quesiempre el momento adecuado para que eso necesito un componente que puede hacer que algunas investigaciones y encontré el ds1302.Paso 1: Ver el videoHice un video en YouTube do
Arduino DS3231 RTC reloj

Arduino DS3231 RTC reloj

Para familiarizarme con una DS3231 RTC (reloj en tiempo real), construí un arduino sencilla basada en 24 horas. Tiene 3 botones con las siguientes funciones: Pulse cualquier botón para entrar en el modo de ajuste de tiempo, aumentar y disminuir el ti
Arduino Nano y Visuino: 7 segmentos Display Clock con el MAX7219 y DS1307 en tiempo Real Clock(RTC)

Arduino Nano y Visuino: 7 segmentos Display Clock con el MAX7219 y DS1307 en tiempo Real Clock(RTC)

Reloj de tiempo Real DS1307 son módulos de RTC I2C de bajo costo ampliamente disponibles. Vienen con un reloj y una pequeña batería y cuando esté conectado a Arduino, puede realizar un seguimiento de tiempo real incluso cuando no se alimenta la placa
Guía simple para el ajuste de hora en un reloj DS3231/DS3107/DS1337 en tiempo Real con Arduino UNO

Guía simple para el ajuste de hora en un reloj DS3231/DS3107/DS1337 en tiempo Real con Arduino UNO

El DS3231 es un altamente exacto, ampliamente utilizado Real Time Clock (RTC), como sus contrapartes ligeramente menos precisas, DS3107 y DS1337. Antes de que puede ser útil, sin embargo, debe ajustarse la hora correcta. Este Instructable es estricta