Un Arduino è in grado di funzionare 24/7?


46

Sto creando un semplice server Web Arduino e voglio mantenerlo sempre acceso. Quindi deve resistere per continuare a lavorare continuamente.

Sto usando un Arduino Uno con Ethernet Shield. È alimentato da una semplice presa di corrente 5V @ 1A.

Le mie domande:

  • Avrò problemi a lasciare Arduino sempre acceso?
  • C'è qualche altra scheda Arduino meglio consigliata per questo?
  • Ci sono delle precauzioni di cui devo tener conto al riguardo?

Prima domanda!
TheDoctor

Nota del moderatore: sembra che stiamo ricevendo molte risposte che affermano che ha funzionato nella loro situazione. Se hai qualcosa di tecnico da aggiungere alla domanda, sentiti libero di rispondere. Tuttavia, le risposte tecniche sembrano coprire che funziona. Se è assolutamente necessario affermare che la situazione ha funzionato, sarebbe meglio aggiungere un commento.
Anonimo Penguin,

Risposte:


58

Non dovresti avere problemi a tenerlo sempre acceso, tuttavia, una cosa da considerare è qualsiasi segnalino che potresti avere, come l'uso di millis().

Dai documenti di Arduino su millis :

Questo numero traboccerà (tornerà a zero), dopo circa 50 giorni.

Quindi, per i progetti che sono attivi per lunghi periodi di tempo, potresti non vedere immediatamente un problema, ma qualcosa del genere potrebbe apparire e causare errori lungo la strada.


19
Per essere precisi, il millis è una uint32_tvariabile, quindi traboverà ("torna a zero") in 4294967296 millisecondi, che è ~ 49,7 giorni, ~ 1193 ore o ~ 71582 minuti.
Connor Wolf,

5
Quindi tutto ciò che devi fare è usare un altro uint32_t che aumenta quando il primo passa. Quindi puoi goderti circa 5,846 × 10 ^ 8 anni tra i rollover.
80HD,

4
se fai millis () - startTime (con l'ora di inizio come un segno senza segno lungo, aka uint32_t), otterrai sempre un risultato valido a meno che non si verifichi più di un overflow
Lesto

1
Per essere più precisi, l'overflow si verifica dopo 49 giorni, 17 ore, 2 minuti, 47 secondi e 295 millisecondi.
Memet Olsen,

4
L'overflow di millis () non deve mai essere un problema. Vedi millis () overflow ... una cosa negativa? per ulteriori dettagli. Fondamentalmente se si calcolano gli intervalli di tempo per sottrazione, utilizzando i tipi di dati appropriati, non si avrà mai un problema.
Nick Gammon

33

Un paio di cose da tenere a mente (al di fuori della menzione di @ Sachleen millis()):

  • Come qualsiasi elettronica, il calore può essere dannoso. Il microcontrollore stesso non sarà probabilmente un grosso problema dal punto di vista del calore, ma altri componenti come l'alimentatore potrebbero causare problemi.

  • Se il codice viene utilizzato EEPROM.write(), tenere presente che la EEPROM nell'ATmega328P di Uno è classificata solo per 100.000 scritture.


12

Tieni presente che il flash e la EEPROM hanno una durata limitata (rispettivamente circa 10.000 e 100.000 cicli di scrittura), quindi se stai scrivendo molto su quelli, potrebbero corrompersi. In un test che ho eseguito, una EEPROM esterna ha impiegato circa 3 giorni per iniziare a danneggiarsi.


1
Mentre la documentazione può elencare cicli da 10k, molti test hanno mostrato che ~ 100k è dove iniziano a verificarsi problemi.
Ron,

La durata della EEPROM è di almeno 100.000 cicli di scrittura secondo la scheda tecnica. Penso di ricordare di aver letto un test in cui la corruzione è iniziata a quasi un milione di scritture.
user2973,

10

Esecuzione di Arduino 24/7 non dovrebbe essere un problema.

Ma assicurati di avere una custodia che consenta la ventilazione e di tenerla in un'area ben ventilata. Proprio come i computer, se non li conservi in ​​un ambiente in grado di mantenerli freschi, non rimarranno freddi.

Anche il carico del server dovrebbe essere una cosa da considerare, più carico c'è sul server più elaborazione deve fare e più calore genererà.


3
ATmega non ha le tradizionali modalità a basso consumo come i normali computer, quindi il carico è irrilevante. Se non stai eseguendo calcoli attivi, è solo attesa di rotazione. Il consumo di energia durante l'esecuzione è in realtà praticamente statico (tranne cose come scrivere su EEPROM / flash), almeno per la MCU ATmega. Potrebbero esserci variazioni nella potenza assorbita dall'interfaccia Ethernet determinate dal caricamento del traffico, ma nulla è probabile che generi abbastanza calore da costituire un problema a meno che non sia in un vuoto perfetto o su un riscaldatore o qualcosa del genere.
Connor Wolf,

1
Atmega328p ha una modalità di sospensione a basso consumo che assorbe ~ 0,1 uA.
JRobert

2
Il che sarebbe rilevante solo se il codice mette effettivamente il processore in modalità di sospensione.
Chris Stratton,

8

Abbiamo eseguito il nostro sistema di accesso RFID basato su Arduino presso Bloominglabs Hackerspace a Bloomington IN dalla fine del 2011 e, a parte un paio di interruzioni di corrente e aggiornamenti software, funziona tutto il giorno, nessun problema. Più di recente abbiamo aggiunto un termostato in rete, lo stesso affare: funziona 24 ore su 24.


Anch'io ho un sistema di accesso RFID in esecuzione 24/7. L'unica volta in cui "fallisce" è se l'alimentazione si interrompe, perché viene alimentata dalla rete elettrica. Funziona dal 2011 senza problemi.
Nick Gammon

Ahah, ciao Steve!
deltaray,

@NickGammon Sì, il tuo sistema è interessante, ma perché auth non si basa sui DATI della scheda, ma solo sull'ID utente token? Per favore, mostraci una soluzione intelligente.
user2497

Qual è il tuo punto? non è correlato alla domanda del poster.
sdcharle,

6

Gli Arduinos possono funzionare senza problemi per molto tempo, anche se a seconda delle condizioni locali e dell'intensità di calcolo potrebbe essere necessario collegare i dissipatori di calore.

Inoltre, tienilo ben ventilato.

Dipende anche dal programma utilizzato, se il tuo server pubblica una pagina di tanto in tanto, non dovrebbe essere un problema, ma se ti aspetti un traffico costante, Arduino potrebbe surriscaldarsi rapidamente.

Avrai anche bisogno di garantire la stabilità dell'alimentazione, quando si eseguono esperimenti da banco con un Arduino questo non è un grosso problema, ma può diventare un problema se si trasforma l'alimentazione dalla rete per un apparecchio permanente.


2
Non c'è motivo di aspettarsi che il carico computazionale causi il surriscaldamento di un Arduino. Come è stato sottolineato nelle risposte più basate sui fatti, il caso normale è di funzionare a pieno carico. Se c'è un componente che può surriscaldarsi, sarà il regolatore di tensione, ma questa è principalmente una funzione della tensione di ingresso, poiché sta già funzionando alla corrente più alta prevista quando non fa nulla.
Chris Stratton,

@ChrisStratton uno schermo Ethernet può variare la potenza a seconda dell'uso. Inoltre, l'Arduino potrebbe essere in uno stato di basso consumo (ad esempio, dormendo tra le 12:00 e le 5:00).
Anonimo Penguin,

4

Non ho mai usato un Arduino per così tanto tempo, ma non ci dovrebbero essere problemi. Una cosa a cui fare attenzione è la tensione di ingresso.

Mentre un Arduino è in grado di gestire 7-20 v poiché l'input di qualsiasi valore superiore a 12 v può surriscaldarsi dopo periodi di tempo più lunghi e causare danni alla scheda. Come veloce raccomandazione per evitare qualsiasi surriscaldamento dell'Arduino, manterrei la tensione il più vicino possibile a 7v.


4

Vorrei menzionare un problema che non si presenta molto spesso ma che può causare problemi a lungo termine. Perdite di memoria e frammentazione dell'heap. Quasi nessuno malloc in roba incorporata, ma se lo fai, fallo bene.


Mi hai battuto, +1.
hoosierEE,

Credo che la classe String usi malloc ed è abbastanza comune.
user2973,

Concordato. Soprattutto con un web server, assicurati di non fare nulla che possa frammentare la memoria, come usare la classe String. Tuttavia è facile evitarlo. Ho un Arduino in esecuzione come web server per farmi sapere se la mia porta del garage è chiusa. Funziona da anni.
Nick Gammon

4

Ho costruito un semplice monitor di potenza con il mio primo Arduino. È alimentato tramite USB da un web server che a sua volta è alimentato tramite un backup della batteria abbastanza consistente (che non ha capacità di notifica).

È inoltre collegato a un caricabatterie per cellulare collegato a una presa di corrente non UPS.

Quindi, se l'alimentazione si interrompe, Arduino invia un messaggio a un piccolo programma in esecuzione sul server. Il programma server a sua volta mi invia una notifica e-mail.

È stato installato alla fine di settembre 2013, il 23 marzo 2014 - Ho ricevuto la mia prima email!

Quindi non ho visto alcun problema (non usa millis ()) ma campiona la potenza ogni 5 secondi.


1

Un Arduino è in grado di funzionare 24/7?

Questa è una domanda di affidabilità. In termini di affidabilità, ci sono molte cose da considerare.

  1. Il software. Ci sono software più robusti. Ci sono software meno robusti. Ad esempio, per applicazioni critiche, l'allocazione dinamica della memoria è sconsigliata, poiché potrebbe portare alla frammentazione della memoria. Sfortunatamente, Arduino fa molto affidamento sull'allocazione dinamica della memoria. Questo problema è aggravato dal momento che la maggior parte della scheda Arduino ha una RAM molto limitata.
  2. Biblioteche. Molte librerie di Arduino hanno dei bug (anche quelle integrate nel pacchetto Arduino, semplice come WString!). Nel normale funzionamento, tali bug potrebbero non apparire affatto. Tuttavia, non puoi sperare che "tutto andrà bene" e che "l'utente" (o sottosistema) funzionerà come previsto. Le biblioteche potrebbero anche avere i loro limiti (cioè non correttamente i bug). Ad esempio, molti utenti hanno già citato la funzione millis (), che si ripristina dopo 50 giorni. Questo, se non gestito correttamente, potrebbe portare a gravi bug.
  3. L'affidabilità dell'hardware (nemmeno parlando di cloni Arduino economici ...). Qui si apre una nuova classe di domande secondarie. Citerò solo un sottoinsieme molto limitato.
    • Le schede Arduino sono progettate per essere affidabili? (ad es. qual è l'
      affidabilità dei condensatori usati? e di altri componenti?)
    • Robustezza contro l'IME? Non mi affiderei a questo: la maggior parte delle schede Arduino ha solo due strati e la mancanza di un adeguato piano terra / potenza.
    • EEPROM (questo è sia software che hardware). Il tuo software sta utilizzando la EEPROM? L'implementazione di alcuni algoritmi per prevenire il ciclismo (ripetute operazioni di scrittura / cancellazione sulle stesse celle)?
    • Tempo di conservazione della memoria flash. Il tempo di ritenzione diminuisce con la temperatura e anche con il numero di cicli di programmazione.
    • Radiazione ionizzante. Sì, anche se la probabilità è MOLTO bassa, almeno a livello del mare, la probabilità di sconvolgimento di un singolo evento indotto da radiazioni non è zero e dovrebbero essere prese adeguate contromisure (soprattutto considerando che la RAM non ha alcun rilevamento di errori hardware ) in applicazioni critiche.
    • La qualità dell'alimentazione.
    • L'ambiente operativo. Un ambiente controllato a 25 ° C o in una scatola nera sopra il tetto (70 ° C sotto il sole in estate)? Maggiore è la temperatura, più veloci sono tutti i meccanismi di degradazione.
    • ...

Tuttavia, non dovresti essere sorpreso se il tuo arduino funzionerà perfettamente per molti anni. Ma questo non garantisce che ogni arduino lo farà.

Alcune contromisure aumenteranno l'affidabilità:

  • Usa il watchdog: è meglio ripristinare un sistema non responsivo, piuttosto che avere un sistema bloccato / che si comporta male.
  • Evitare di utilizzare qualsiasi libreria che utilizza l'allocazione di memoria.
  • Implementa (se usi la EEPROM) un algoritmo per preservarlo!
  • Buona alimentazione.
  • Evitare aspre variazioni (alta temperatura, elevata umidità, cicli termici ampi e continui, ecc.).

0

Certamente può funzionare 24/7. Uso 5 V sul pin 5 V o 7808 sul pin Vin per scaricare il Vreg. Idealmente sarebbe 6.5V, ma non ho tali forniture. Potresti volere un tappo disaccoppiatore su 5V, per immergere eventuali picchi minori quando si alimenta il rifornimento.

Qualsiasi hardware collegato che gira a 5 V, io alimento con un 7805. Puoi usare LM317 o LM350 al posto di 78XX, ma avrai bisogno di alcuni resistori per quelli, forse trimpots.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.