Sincroniza los tiempos de Arduino con una diferencia de 20ms

Estoy trabajando en un proyecto escolar en el que necesito sincronizar el reloj en dos Arduinos a una sincronización casi perfecta. Me gustó la idea de usar Bluetooth pero tiene ciertas desviaciones/retrasos en el tiempo. Estaba pensando en usar una conexión directa entre las dos placas al iniciar y luego desconectar cuando están sincronizadas. ¿Los Arduinos mantendrán la sincronización "perfecta" durante un largo período de tiempo? ¿Esto hará el truco o hay mejores soluciones?

No estoy restringido a usar un Arduino. Necesito una latencia de menos de 20 milisegundos.

Respuestas (2)

" NTP generalmente puede mantener el tiempo dentro de decenas de milisegundos en la Internet pública y puede lograr una precisión de 1 milisegundo en redes de área local en condiciones ideales"

Por ejemplo: Arduino UdpNtpClient , aunque este no es un cliente NTP completo y no mantiene la hora exacta de forma continua (a diferencia de un cliente NTP normal)

La latencia de la red no es un problema, la fluctuación puede serlo. NTP requiere que los sistemas puedan comunicarse a intervalos regulares y requiere tiempo para establecer valores precisos.

Para responder a la pregunta de precisión mientras está desconectado, un cristal típico puede tener una precisión de, por ejemplo, 50 ppm, lo que equivale a alrededor de 4,3 segundos de error durante un día o alrededor de 180 ms por hora, por lo que podría exceder su límite de 20 ms en menos de 10 minutos. Gran parte del error depende de la temperatura y la edad del cristal, por lo que probablemente podría calibrarlo para obtener resultados mucho mejores, pero si está hablando de períodos de tiempo prolongados y su temperatura variará bastante, puede que no sea práctico. .

Ahora que los módulos GPS son tan baratos que vale la pena considerarlos como una fuente de tiempo precisa, suponiendo que su aplicación tenga una vista relativamente clara del cielo o que pueda usar una antena. Técnicamente, el sistema GPS tiene una precisión de alrededor de 20 ns, pero la mayoría de los receptores que he visto con una salida PPS (pulso por segundo) externa afirman una precisión de 1 ms o menos.

Para que eso funcione normalmente, necesitará un puerto UART para leer la salida NMEA del GPS que incluye la fecha y hora UTC y conectar la salida PPS a una línea de interrupción. Deberá verificar la hoja de datos para el módulo GPS específico, pero la mayoría parece pulsar la línea PPS y la oración NMEA que sigue incluye el tiempo relacionado con el pulso, por lo que un método que he usado es cuando ocurre la interrupción para establecer el tiempo hasta el tiempo anterior recibido más un segundo (porque los últimos datos NMEA ahora tienen un segundo de antigüedad) y úselo para calibrar el temporizador de funcionamiento libre.

Como una alternativa más económica a un escudo/módulo GPS, considere un RTC (ejemplo sparkfun.com/products/99 ) como el DS1307. Razonablemente preciso, puede sincronizar una vez al día o más a menudo, mantiene el tiempo incluso cuando falla la alimentación de la MPU, es fácil de programar y leer, y es realmente pequeño, por lo que no debería estorbar.
@RonJ. idea bastante razonable, aunque la mayoría de los cristales de los relojes todavía tienen solo alrededor de 20 ppm, por lo que solo sería 2.5 más preciso que las cifras anteriores, por lo que solo estaría mirando unos 30 minutos más o menos antes de que pudiera desviarse fuera de los 20 ms. Tienden a ser más estables en los relojes de pulsera porque el cuerpo humano regula la temperatura mientras se usan y, cuando no, la mayoría de la gente no los deja expuestos al frío/calor extremos.
@PeterJ. Para ser más precisos, mi objetivo es comenzar a reproducir un archivo mp3 desde una ubicación diferente en un momento específico utilizando una aplicación. El GPS es demasiado caro. Volver a conectar las placas con un cable directo cada vez que el reloj no está sincronizado parece demasiado tedioso. Estoy pensando en volver a una conexión Bluetooth directa entre placas, para mantener la sincronización. ¿Hay esperanza?
@JJC, si Bluetooth está dentro del alcance, podría ser una buena solución. Nunca he hecho lo suficiente con BT para saber cómo es la latencia, pero RedGrittyBrick sugirió que tal vez puedas crear un protocolo similar a NTP que haga algunos 'pings' y mida la latencia para compensar, pero la inestabilidad podría ser un problema, pero lo haría. creo que estaría bien entre dos dispositivos BT.