Reloj Arduino con alarma

Hola a todos! 👋👋

Quiero hacer un alimentador de mascotas para mis 3 ovejeros y 2 pitbulls. Si bien ellos solos saben el horario de la comida (el más inteligente, un pitbull, siempre rasca la puerta a la hora de comer!! :) ), quiero hacer algo que no dependa de que yo o alguien de la familia pueda alimentarlos.

Así que ya tengo un sistema mecánico que alimentará a cada uno. Ahora estoy planeando como controlarlo. Lo más rápido es un temporizador de 12 horas y listo. Cada 12hs les dará de comer y listo. Cada plato tiene su propio motorcito y tornillo sin fin que va liberando alimento balanceado. O sea, lo que hacen todos, hay miles de ejemplos en la red.

Al grano: con arduino quiero controlar el tiempo y poder programarlo. Nada nuevo por ahi. Lo que quiero consultar es: cuál sería la forma correcta de controlar el cumplimiento del tiempo? Es decir, cómo controlar la alarma programada para activar la entrega de alimento?

Arduino tiene la capacidad de hacerlo todo sin adicionales. He visto el uso de RTC y otros agregados que considero en este momento, innecesario.
Obviamente delay está prohibido, y ¿se me debe ocurrir usar millis? :unsure:. Para luego comparar la hora en un bucle y luego comparar los minutos en un sub-bucle?

Cuál sería la manera correcta de realizar una alarma por software con un arduino? Convertir el tiempo esperado/programado de alarma a segundos y usar un contador decreciente? Esto es para mi, así que lo quiero hacer "no para que funcione y ya", lo quiero lindo y bonito. Nadie lo sabrá pero yo quiero que sea de la "manera en que se debe hacer" ;)

Hay muchas formas de hacer las cosas y en esto en particular no estoy encontrando nada. Y como no quiero inventar la rueda, pregunto ya que seguramente alguien tendrá una idea las "buenas prácticas" de alarmas por soft.

Muchas gracias y saludos nuevamente!!
 
....Arduino tiene la capacidad de hacerlo todo sin adicionales. He visto el uso de RTC y otros agregados que considero en este momento, innecesario.
Error.

Obviamente delay está prohibido, y ¿se me debe ocurrir usar millis? :unsure:. Para luego comparar la hora en un bucle y luego comparar los minutos en un sub-bucle?
Es común encontrarse con gente que cree que la frecuencia de oscilación de un cristal, por alguna extraña razón es exacta. No caballero, es mucho mas exacta que la que se consigue con osciladores RC,LC o resonadores cerámicos (y menos que uno de rubidio o cesio ;) )
Las tolerancias tipicas en cristales standard son de +-20ppm a +-50ppm (partes por millón), parece suficiente para un reloj, pero es bastante pobre porque un error de 50ppm representan 2minutos por mes.

Si ese error te deja conforme dale para adelante, al fin y al cabo era el error que tenían los relojes taiwanes en los 80s (aunque ví peores, de minutos por día)
Si no, podés mejorarlo haciendo un ajuste por software --> por ejemplo cada 6 horas sumar/restar los milisegundos de error. Pero esto implica hacer unos ensayos y las nuevas generaciones desconocen la palabra "calibración"

Razón por la cual te conviene un RTC, cuyo cristal no es el mismo que el del Arduino sino que vienen calibrados por láser. Bueh... eso si el chino no te enchufó un cristal común :) ...
 
Muchas gracias!!!

Entonces por eso no encuentro nada :facepalm:

Bueno, no quería, pero no tengo alternativa entonces...a por un RTC...:cry:

Igual me gusta mucho lo que indica Eduardo, un pequeño ajuste mensual para poner en hora no se ve tan mal desde mi punto de vista si lo único que quiero es que más o menos a las 13 y a las 22 les de una ración controlada.

Y como indica, solo habría que, por prueba y error, ver cada cuánto necesitará un ajuste del reloj...en MlL algunos relojes se venden con al eviso de tolerancia de +/- 1 minuto por día!!! Media hora al mes!!!! Y los venden como si fueran atómicos :ROFLMAO::ROFLMAO::ROFLMAO:

Gracias de nuevo!!!
 
¿Cuál Arduino planeas usar?
Actualmente también estoy trabajando en un reloj para mi escritorio usando la placa Black pill basada en STM32F4, es económica y ya cuenta con el cristal y RTC incorporado, al menos usar un cristal de baja frecuencia con poco corrimiento es extremadamente necesario, las placas ESP32 por ejemplo también tienen un RTC incorporado, pero usar el oscilador interno me causa desviaciones de 3 segundos cada minuto :ROFLMAO: es completamente inservible de esa forma, que se corriera 2 minutos al día lo paso y solo sincronizo por NTP, pero termina corriéndose tanto que la actualización debe ser constante.

Igual si solo requieres un tiempo específico y no una hora, puedes usar el timer, no es que se mueran de hambre por que se retrase unos 5 minutos la comida.
 
.. un pequeño ajuste mensual para poner en hora no se ve tan mal desde mi punto de vista si lo único que quiero es que más o menos a las 13 y a las 22 les de una ración controlada.

Tené en cuenta que millis() tiene overflow cada 49 días y que no podés comparar alegremente contra un tiempo "desde que se encendió el Arduino" porque ante un corte de luz a los 5 días los perros van a comer recién pasados otros 5 días.

La cuenta del reloj deberá resetearse cada 24hs, asi por lo menos te asegurás que coman. Tarde pero que coman.
De paso en el reseteo de la cuenta sumás el offset.


Nuyel:
El problema de la inexactitud es que es acumulativa. Si por día los perros comen 5 minutos mas tarde no pasa nada al principio, pero al año son 30 horas.
Si los perros están en su casa no hay problema porque lo ajusta él, pero si estuvieran de la abuela, hasta que no la visite el nieto los perros comerán a cualquier hora.
 
Última edición:
El problema de la inexactitud es que es acumulativa. Si por día los perros comen 5 minutos mas tarde no pasa nada al principio, pero al año son 30 horas.
Si los perros están en su casa no hay problema porque lo ajusta él, pero si estuvieran de la abuela, hasta que no la visite el nieto los perros comerán a cualquier hora.
Momento, me refería a que usara el temporizador, claro que habrá desviación, pero asumiendo que se llegue a correr 5 o 10 minutos en un año, reiniciarlo de vez en cuando bastaría, si se corre 5 minutos al día es inaceptable.

Nuyel, estás al tanto que esas Blue Pills son hackeables y les duplican la memoria flash... si?
¿Podrías explicarte? técnicamente cualquier dispositivo es hackeable :v
 
Nuyel, parece que existe solo una version del chip de la blue pill, tiene 128k de flash y solo cambian la denominacion del micro y desde unos fusibles lo dejan en 64k. entonces venden dos chips como distintos, pero parece que solo es uno,. busca, supe leer eso en un foro de stm32 hace tiempo...
 
Nuyel, parece que existe solo una version del chip de la blue pill, tiene 128k de flash y solo cambian la denominacion del micro y desde unos fusibles lo dejan en 64k. entonces venden dos chips como distintos, pero parece que solo es uno,. busca, supe leer eso en un foro de stm32 hace tiempo...
El que tengo es STM32F401CCU6, Arduino lo compila a los 256k como límite, el cubeprogrammer como si fuera de 384k y si reviso los bloques me suman 512k, intenté incluso cargarle los 512k de datos aleatorios y la comparación de memoria fue correcta. Pero bueno, más memoria de la que ocupaba y por menos costo, no me quejo :excelente:

Regresando al tema, el punto era que si no quiere usar hardware adicional y tampoco es tan critico podría hacerse con el timer, aunque habría que probar primero que tan alto es el corrimiento. En teoría rondaría a los 5 minutos al mes, lo cual no es un gran problema si lo resetea ocasionalmente. Ahora, por ejemplo, si tiene el cristal de 32768Hz de ±20ppm tendríamos un corrimiento aproximado de 1.728s al día, cerca de 10~11 min al año lo cual para esa aplicación sería aceptable. Obviamente no supera a un RTC con TCXO.
 
El que tengo es STM32F401CCU6, Arduino lo compila a los 256k como límite, el cubeprogrammer como si fuera de 384k y si reviso los bloques me suman 512k, intenté incluso cargarle los 512k de datos aleatorios y la comparación de memoria fue correcta. Pero bueno, más memoria de la que ocupaba y por menos costo, no me quejo :excelente:

Regresando al tema, el punto era que si no quiere usar hardware adicional y tampoco es tan critico podría hacerse con el timer, aunque habría que probar primero que tan alto es el corrimiento. En teoría rondaría a los 5 minutos al mes, lo cual no es un gran problema si lo resetea ocasionalmente. Ahora, por ejemplo, si tiene el cristal de 32768Hz de ±20ppm tendríamos un corrimiento aproximado de 1.728s al día, cerca de 10~11 min al año lo cual para esa aplicación sería aceptable. Obviamente no supera a un RTC con TCXO.
Tal cual. La idea era solo usar un nano y listo. De hecho pensaba usar el teclado de membrana solo para poner en hora y nada más (y sacarlo después de programar la hora para no "desperdiciar" un teclado).
Que guarde dos horas (almuerzo y cena) y funcione cuando llegue el momento. Y programable para poder ajustar y que en invierno no tengan que esperar a las 22hs para comer y entrar a sus "camas". En invierno a las 20,30 a dormir que hace frío!

Lo del reset de los millis() no es un problema si cada 30 días tengo que ajustar la hora.

Un error de 5 o 10 minutos no afecta en nada, no son cerdos, son perros 😉

PERO....como dijeron, si un RTC soluciona eso entonces me ahorro 12 laburitos al año y que no falle.

Hace años había hecho un reloj a cristal con un PIC16F84 y adelantaba 1 segundo por mes. Usaba la INT0 para contar y el ajuste que usé fue con un NOP en el código. Creo que solo lo puse en hora cuando arrancó y nunca más volví a controlar si adelantaba o retrasaba.
Igual, 12 segundos al año para mi ya es de precisión atómica 😀

Saludos!! Voy por un RTC.
 
Los relojes de los hornos de microondas funcionaban con esa frecuencia. Todos los hornos que he tenido llevaban la hora casi con la misma exactitud que la red celular.
En el BGH que compró la patrona, adelanta 5 minutos por semana...pero me inclino por un mal control de la frecuencia de la red...que NO debería ocurrir.
Además, la frecuencia no es exacta y varía un poco en mas y en menos, pero los controles deberían dar un promedio de 50Hz a mediano plazo que es lo que busca @426ivan ...
 
Los relojes de los hornos de microondas funcionaban con esa frecuencia. Todos los hornos que he tenido llevaban la hora casi con la misma exactitud que la red celular.
En el BGH que compró la patrona, adelanta 5 minutos por semana...pero me inclino por un mal control de la frecuencia de la red...que NO debería ocurrir.
Además, la frecuencia no es exacta y varía un poco en mas y en menos, pero los controles deberían dar un promedio de 50Hz a mediano plazo que es lo que busca @426ivan ...

Aclaro que no todos los microondas detectan el cruce por cero para sincronizar el reloj con la red.

La mayoría de los que repare no lo hacían, en cambio muchos aires acondicionados split si detectan el cruce por cero pero no se si para el reloj o para el control de alguno de los motores que tienen.



Salu2.-
 
En el BGH que compró la patrona, adelanta 5 minutos por semana...pero me inclino por un mal control de la frecuencia de la red...que NO debería ocurrir.
Además, la frecuencia no es exacta y varía un poco en mas y en menos, pero los controles deberían dar un promedio de 50Hz a mediano plazo que es lo que busca @426ivan ...

Te lo digo por experiencia propia . . . los mismos 5 minutos semanales . . . y es que si aumenta el consumo en hora pico baja la frecuencia y la corrigen de noche , pero desde hace unos años eso se ha desfasado (n).
 
Atrás
Arriba