¿Es un Arduino capaz de funcionar 24/7?


46

Estoy haciendo un servidor web Arduino simple y quiero mantenerlo encendido todo el tiempo. Por lo tanto, debe soportar seguir trabajando continuamente.

Estoy usando un Arduino Uno con un escudo de Ethernet. Se alimenta con una fuente de alimentación de salida simple de 5V @ 1A.

Mis preguntas:

  • ¿Tendré problemas para dejar el Arduino encendido todo el tiempo?
  • ¿Hay alguna otra placa Arduino mejor recomendada para esto?
  • ¿Hay alguna precaución que deba tener en cuenta al respecto?

¡Primera pregunta!
TheDoctor

Nota del moderador: parece que estamos recibiendo muchas respuestas que indican que funcionó en su situación. Si tiene algo técnico que agregar a la pregunta, no dude en responder. Sin embargo, las respuestas técnicas parecen cubrir que funciona. Si debe declarar absolutamente que su situación funcionó, sería mejor agregar un comentario.
Anonymous Penguin

Respuestas:


58

No debería tener problemas para mantenerlo encendido todo el tiempo, sin embargo, algo a tener en cuenta es cualquier contador que pueda tener, como el uso de millis().

De los documentos de Arduino en millis :

Este número se desbordará (volverá a cero), después de aproximadamente 50 días.

Por lo tanto, para los proyectos que están en funcionamiento durante largos períodos de tiempo, es posible que no vea un problema de inmediato, pero algo así podría aparecer y causar errores en el futuro.


19
Para ser precisos, milis es una uint32_tvariable, por lo que se desbordará ("volverá a cero") en 4294967296 milisegundos, que es ~ 49.7 días, ~ 1193 horas o ~ 71582 minutos.
Connor Wolf

55
Entonces, todo lo que tiene que hacer es usar otro uint32_t que se incremente cuando el primer pase. Entonces puede disfrutar aproximadamente 5.846 × 10 ^ 8 años entre reinversiones.
80HD

44
si haces millis () - startTime (con el tiempo de inicio como un largo sin signo, también conocido como uint32_t), siempre obtendrás un resultado válido a menos que ocurra más de un desbordamiento
Lesto

1
Para ser más precisos, el desbordamiento ocurre después de 49 días, 17 horas, 2 minutos, 47 segundos y 295 milisegundos.
Memet Olsen

44
El desbordamiento millis () nunca tiene que ser un problema. Ver el desbordamiento de millis () ... ¿algo malo? para más detalles. Básicamente, si calcula intervalos de tiempo por sustracción, utilizando los tipos de datos apropiados, nunca tendrá un problema.
Nick Gammon

33

Un par de cosas a tener en cuenta (fuera de la mención de @ Sachleen millis()):

  • Como cualquier electrónica, el calor puede ser perjudicial. Es probable que el microcontrolador en sí no sea un gran problema desde la perspectiva del calor, pero otros componentes como la fuente de alimentación pueden causar problemas.

  • Si usa su código EEPROM.write(), tenga en cuenta que la EEPROM en su ATmega328P de Uno solo está clasificada para 100,000 escrituras.


12

Tenga en cuenta que el flash y la EEPROM tienen una vida útil limitada (alrededor de 10,000 y 100,000 ciclos de escritura, respectivamente), por lo que si escribe mucho en ellos, pueden corromperse. En una prueba que hice, una EEPROM externa tardó aproximadamente 3 días en comenzar a corromperse.


1
Si bien la documentación puede enumerar 10k ciclos, muchas pruebas han demostrado que ~ 100k es donde comienzan a ocurrir problemas.
Ron

La vida útil de EEPROM es de un mínimo de 100,000 ciclos de escritura de acuerdo con la hoja de datos. Creo recordar haber leído una prueba en la que la corrupción comenzó en cerca de un millón de escrituras.
user2973

10

Ejecutar el Arduino 24/7 no debería ser un problema.

Pero asegúrese de tener un estuche que permita la ventilación y de mantenerlo en un área bien ventilada. Al igual que las computadoras, si no las mantiene en un entorno que pueda mantenerlas frescas, no se mantendrán frescas.

La carga del servidor también debe ser algo a considerar, cuanto más carga haya en el servidor, más procesamiento tendrá que hacer y más calor generará.


3
El ATmega no tiene modos tradicionales de baja potencia como las computadoras normales, por lo que la carga es irrelevante. Si no está haciendo un cálculo activo, es solo esperar. El consumo de energía cuando se ejecuta es bastante estático (excepto cosas como escribir en la EEPROM / flash), al menos para el MCU ATmega. Puede haber variaciones en el consumo de energía de la interfaz ethernet determinado por la carga del tráfico, pero es probable que nada genere suficiente calor para ser un problema a menos que esté en un vacío perfecto o en un calentador o algo así.
Connor Wolf

1
Atmega328p tiene un modo de reposo de baja potencia que consume ~ 0.1 uA.
JRobert

2
Lo que solo sería relevante si el código realmente pone el procesador en suspensión.
Chris Stratton

8

Hemos estado ejecutando nuestro sistema de acceso RFID basado en Arduino en Bloominglabs Hackerspace en Bloomington IN desde finales de 2011 y, aparte de un par de cortes de energía y actualizaciones de software, funciona todo el día, no hay problema. Más recientemente agregamos un termostato en red, el mismo trato: funciona las 24 horas.


Yo también tengo un sistema de acceso RFID que funciona 24/7. El único momento en que "falla" es si se corta la corriente, porque se ejecuta desde la red eléctrica. Esto ha estado funcionando desde 2011 sin problemas.
Nick Gammon

Jaja, hola Steve!
deltaray

@NickGammon Sí, su sistema es genial, pero ¿por qué la autenticación no se basa en los DATOS de la tarjeta, sino solo en el UID del token? Por favor, muéstranos una solución inteligente.
user2497

¿cual es tu punto? eso no está relacionado con la pregunta del cartel.
sdcharle

6

Arduinos puede funcionar sin problemas durante mucho tiempo, aunque dependiendo de las condiciones locales y la intensidad del cálculo, es posible que deba conectar disipadores de calor.

Además, manténgalo bien ventilado.

Depende del programa que se use, también, si su servidor está sirviendo una página de vez en cuando, no debería ser un problema, pero si espera tráfico constante, entonces el Arduino puede calentarse rápidamente.

También querrá garantizar la estabilidad de la fuente de alimentación, cuando realice experimentos de mesa con un Arduino, este no es un gran problema, aunque puede convertirse en un problema si se transforma la energía de la red eléctrica para un dispositivo permanente.


2
No hay ninguna razón para esperar que la carga computacional provoque un sobrecalentamiento de un Arduino. Como se ha señalado en las respuestas más basadas en hechos, el caso normal es correr a plena carga. Si hay un componente que puede sobrecalentarse, ese será el regulador de voltaje, pero eso es principalmente una función del voltaje de entrada, ya que ya está funcionando a la corriente más alta esperada cuando no hace nada.
Chris Stratton

@ChrisStratton un escudo Ethernet puede variar la potencia según el uso. Además, el Arduino podría estar en un estado de baja potencia (por ejemplo, dormir entre las 12 a.m. y las 5 a.m.).
Anonymous Penguin

4

Nunca he ejecutado un Arduino durante tanto tiempo, pero no debería haber ningún problema. Una cosa a tener en cuenta es el voltaje de entrada.

Mientras que un Arduino es capaz de manejar 7-20v como entrada, cualquier cosa por encima de 12v puede sobrecalentarse después de períodos de tiempo más largos y causar daños a la placa. Como recomendación rápida para evitar cualquier sobrecalentamiento del Arduino, mantendría el voltaje lo más cerca posible de 7v.


4

Me gustaría mencionar un problema que no aparece con mucha frecuencia pero que puede causar problemas a largo plazo. Fugas de memoria y fragmentación del montón. Casi nadie hace mallocs en cosas incrustadas, pero si lo haces, hazlo bien.


Me ganaste, +1.
hoosierEE

Creo que la clase String usa malloc y es bastante común.
usuario2973

Convenido. Especialmente con un servidor web, asegúrese de no hacer nada que pueda fragmentar la memoria, como usar la clase String. Sin embargo, es fácil evitar eso. Tengo un Arduino funcionando como servidor web para avisarme si la puerta de mi garaje está cerrada. Eso ha estado funcionando durante años.
Nick Gammon

4

Construí un monitor de potencia simple con mi primer Arduino. Se alimenta a través de USB desde un servidor web que a su vez se alimenta a través de una batería de respaldo bastante sustancial (que no tiene capacidades de notificación).

También está conectado a un cargador de teléfono móvil conectado a una toma de corriente que no sea UPS.

Entonces, si el poder se agota, Arduino envía un mensaje a un pequeño programa que se ejecuta en el servidor. El programa del servidor a su vez me envía una notificación por correo electrónico.

Se instaló a fines de septiembre de 2013, el 23 de marzo de 2014. ¡Recibí mi primer correo electrónico!

Por lo tanto, no he visto ningún problema (no usa millis ()) pero sí muestra la potencia cada 5 segundos.


1

¿Es un Arduino capaz de funcionar 24/7?

Esta es una pregunta de fiabilidad. En confiabilidad, hay muchas cosas a considerar.

  1. El software. Hay softwares más robustos. Hay softwares menos robustos. Por ejemplo, para aplicaciones críticas, se desaconseja la asignación dinámica de memoria, ya que podría conducir a la fragmentación de la memoria. Desafortunadamente, Arduino depende en gran medida de la asignación dinámica de memoria. Este problema se exacerba ya que la mayoría de la placa Arduino tiene una RAM muy limitada.
  2. Las bibliotecas Muchas bibliotecas de Arduino tienen errores (incluso aquellos integrados en el paquete Arduino, ¡tan simple como WString!). En funcionamiento normal, estos errores pueden no aparecer en absoluto. Sin embargo, no puede esperar que "todo vaya a estar bien" y que "el usuario" (o subsistema) actúe según lo previsto. Las bibliotecas también podrían tener sus límites (es decir, no errores adecuados). Por ejemplo, muchos usuarios ya citaron la función millis (), que se restablece después de 50 días. Esto, si no se maneja correctamente, puede provocar errores graves.
  3. La fiabilidad del hardware (ni siquiera hablando de clones baratos de Arduino ...). Aquí se abre una nueva clase de preguntas secundarias. Citaré solo un subconjunto muy limitado.
    • ¿Las placas Arduino están diseñadas para ser confiables? (p. ej., ¿cuál es la
      fiabilidad de los condensadores utilizados y otros componentes?)
    • ¿Robustez contra EMI? No confiaría en eso: la mayoría de las placas Arduino tienen solo dos capas y carecen de un plano de tierra / potencia adecuado.
    • EEPROM (esto es tanto software como hardware). ¿Su software utiliza la EEPROM? ¿Está implementando algún algoritmo para evitar el ciclo (escritura / borrado repetido en las mismas celdas)?
    • Tiempo de retención de memoria flash. El tiempo de retención disminuye con la temperatura y también con el número de ciclos de programación.
    • Radiación ionizante. Sí, incluso si la probabilidad es MUY baja, al menos a nivel del mar, la probabilidad de un trastorno por evento único inducido por la radiación no es cero, y deben tomarse las contramedidas adecuadas (especialmente teniendo en cuenta que la RAM no tiene detección de errores de hardware ) en aplicaciones críticas.
    • La calidad de la fuente de alimentación.
    • El entorno operativo. ¿Un ambiente controlado a 25 ° C, o en una caja negra sobre el techo (70 ° C bajo el sol en verano)? Cuanto mayor es la temperatura, más rápidos son todos los mecanismos de degradación.
    • ...

Aún así, no debe sorprenderse si su arduino funcionará sin problemas durante muchos años. Pero esto no asegura que cada arduino lo hará.

Algunas contramedidas aumentarán la confiabilidad:

  • Use el perro guardián: es mejor reiniciar un sistema que no responde, que tener uno atascado / mal comportamiento.
  • Evite usar cualquier biblioteca que use asignación de memoria.
  • ¡Implemente (si usa la EEPROM) un algoritmo para preservarlo!
  • Buena fuente de alimentación.
  • Evite ambientes hostiles (alta temperatura, alta humedad, ciclos térmicos grandes y continuos, etc.).

0

Ciertamente puede funcionar 24/7. O uso 5V al pin de 5V, o un 7808 al pin Vin para descargar el vreg. Idealmente sería 6.5V, pero no tengo tales suministros. Sin embargo, es posible que desee una tapa de desacoplador en 5V, para absorber los picos menores al encender su suministro.

Cualquier hardware conectado que funcione a 5V, lo alimento con un 7805. Puede usar LM317s o LM350s en lugar de 78XXs, pero necesitará algunas resistencias para ellos, quizás trimpots.