Kann ein Arduino rund um die Uhr laufen?


46

Ich mache einen einfachen Arduino-Webserver und möchte ihn die ganze Zeit eingeschaltet lassen. Es muss also Bestand haben, ununterbrochen zu arbeiten.

Ich verwende einen Arduino Uno mit einem Ethernet Shield. Es wird mit einer einfachen Steckdose 5V @ 1A betrieben.

Meine Fragen:

  • Habe ich Probleme, den Arduino die ganze Zeit eingeschaltet zu lassen?
  • Gibt es ein anderes Arduino-Board, das besser dafür empfohlen wird?
  • Gibt es irgendwelche Vorsichtsmaßnahmen, die ich beachten muss?

Erste Frage!
TheDoctor

Anmerkung des Moderators: Es scheinen viele Antworten zu kommen, die besagen, dass es in ihrer Situation funktioniert hat. Wenn Sie der Frage etwas Technisches hinzufügen möchten, können Sie dies gerne beantworten. Die technischen Antworten scheinen jedoch zu verdeutlichen, dass es funktioniert. Wenn Sie unbedingt angeben müssen, dass Ihre Situation funktioniert hat, sollten Sie einen Kommentar hinzufügen.
Anonymous Penguin

Antworten:


58

Sie sollten keine Probleme damit haben, es die ganze Zeit am Laufen zu halten. Sie sollten jedoch berücksichtigen, welche Leistungsindikatoren Sie möglicherweise haben, wie z millis(). B. die Verwendung von .

Aus den Arduino-Dokumenten auf Millis :

Diese Zahl läuft nach ca. 50 Tagen über (auf Null zurück).

Bei Projekten, die über einen längeren Zeitraum laufen, wird ein Problem möglicherweise nicht sofort angezeigt, es kann jedoch zu Fehlern kommen.


19
Um genau zu sein, Millis ist eine uint32_tVariable, die in 4294967296 Millisekunden (~ 49,7 Tage, ~ 1193 Stunden oder ~ 71582 Minuten) überläuft ("zurück auf Null").
Connor Wolf

5
Dann müssen Sie nur noch ein uint32_t verwenden, das sich erhöht, wenn der erste Rollover ausgeführt wird. Dann können Sie zwischen den Überschlägen ungefähr 5,846 × 10 ^ 8 Jahre genießen.
15.

4
Wenn Sie millis () - startTime (mit der Startzeit als vorzeichenloses Long, aka uint32_t) ausführen, erhalten Sie immer ein gültiges Ergebnis, es sei denn, es ist mehr als ein Überlauf
aufgetreten

1
Genauer gesagt tritt der Überlauf nach 49 Tagen, 17 Stunden, 2 Minuten, 47 Sekunden und 295 Millisekunden auf.
Memet Olsen

4
Der millis () -Überlauf muss nie ein Problem sein. Siehe millis () -Überlauf ... eine schlechte Sache? für mehr Details. Wenn Sie Zeitintervalle durch Subtraktion unter Verwendung der entsprechenden Datentypen berechnen, werden Sie grundsätzlich nie ein Problem haben.
Nick Gammon

33

Ein paar Dinge, die Sie beachten sollten (außer @ Sachleens Erwähnung von millis()):

  • Wie bei jeder Elektronik kann Wärme stören. Der Mikrocontroller selbst wird aus Sicht der Wärme wahrscheinlich kein großes Problem sein, aber andere Komponenten wie das Netzteil können Probleme verursachen.

  • Wenn Ihr Code verwendet EEPROM.write(), beachten Sie, dass das EEPROM im ATmega328P Ihres Uno nur für 100.000 Schreibvorgänge ausgelegt ist.


12

Denken Sie daran, dass Flash und EEPROM nur eine begrenzte Lebensdauer haben (etwa 10.000 bzw. 100.000 Schreibzyklen). Wenn Sie also viel auf diese schreiben, können sie beschädigt werden. Bei einem Test, den ich durchgeführt habe, dauerte es ungefähr 3 Tage, bis ein externes EEPROM beschädigt wurde.


1
Während die Dokumentation möglicherweise 10.000 Zyklen auflistet, haben viele Tests gezeigt, dass bei ~ 100.000 Probleme auftreten.
Ron

Die EEPROM-Lebensdauer beträgt laut Datenblatt mindestens 100.000 Schreibzyklen. Ich glaube, ich erinnere mich an einen Test, bei dem die Korruption bei fast einer Million Schreibvorgängen begann.
user2973

10

Das Arduino 24/7 laufen zu lassen sollte kein Problem sein.

Vergewissern Sie sich jedoch, dass Sie ein Gehäuse haben, das Belüftung zulässt, und bewahren Sie es an einem gut belüfteten Ort auf. Genau wie Computer bleiben sie auch nicht kühl, wenn Sie sie nicht in einer Umgebung aufbewahren, die sie kühl hält.

Die Serverauslastung sollte ebenfalls berücksichtigt werden. Je höher die Auslastung des Servers ist, desto mehr Verarbeitungsschritte sind erforderlich und desto mehr Wärme wird erzeugt.


3
Der ATmega verfügt nicht über herkömmliche Energiesparmodi wie normale Computer, daher ist die Auslastung irrelevant. Wenn Sie keine aktiven Berechnungen durchführen, warten Sie nur auf das Schleudern. Der Stromverbrauch beim Laufen ist eigentlich ziemlich statisch (außer beim Schreiben in das EEPROM / Flash), zumindest für die ATmega-MCU. Es kann Abweichungen in der Leistungsaufnahme der Ethernet-Schnittstelle geben, die durch die Verkehrsbelastung bestimmt werden. Es ist jedoch wahrscheinlich, dass nichts genug Wärme erzeugt, um ein Problem zu sein, es sei denn, es befindet sich in einem perfekten Vakuum oder an einer Heizung oder Ähnlichem.
Connor Wolf

1
Atmega328p verfügt über einen Energiesparmodus , der ~ 0,1 uA benötigt.
JRobert

2
Was nur relevant wäre, wenn der Code den Prozessor tatsächlich in den Ruhezustand versetzt.
Chris Stratton

8

Wir betreiben unser Arduino-basiertes RFID-Zugriffssystem seit Ende 2011 bei Bloominglabs Hackerspace in Bloomington, IN. Abgesehen von einigen Stromausfällen und Software-Updates ist dies rund um die Uhr möglich. In jüngerer Zeit haben wir einen vernetzten Thermostat hinzugefügt, der rund um die Uhr in Betrieb ist.


Ich habe auch ein RFID-Zugangssystem, das rund um die Uhr funktioniert. Das einzige Mal, dass es "ausfällt", ist, wenn die Stromversorgung unterbrochen wird, weil es über das Stromnetz betrieben wird. Dies läuft seit 2011 ohne Probleme.
Nick Gammon

Haha, hey Steve!
Deltaray

@NickGammon Ja, dein System ist cool, aber warum basiert die Authentifizierung nicht auf Kartendaten, sondern nur auf der Token-UID? Bitte zeigen Sie uns eine clevere Lösung.
user2497

worauf willst du hinaus? Das hat nichts mit der Frage des Posters zu tun.
SDCharle

6

Arduinos können sehr lange ohne Probleme laufen. Abhängig von den örtlichen Bedingungen und der Intensität der Berechnung müssen Sie möglicherweise Kühlkörper anbringen.

Bewahren Sie es außerdem gut belüftet auf.

Es hängt auch vom verwendeten Programm ab, ob Ihr Server ab und zu eine Seite bereitstellt, es sollte kein Problem sein, aber wenn Sie konstanten Datenverkehr erwarten, kann sich das Arduino schnell aufheizen.

Sie möchten auch die Stabilität der Stromversorgung sicherstellen. Wenn Sie Benchtop-Experimente mit einem Arduino durchführen, ist dies kein großes Problem. Es kann jedoch zu einem Problem werden, wenn Strom aus dem Netz für eine permanente Fixierung umgewandelt wird.


2
Es gibt keinerlei Grund zu der Annahme, dass die Rechenlast zu einer Überhitzung eines Arduino führt. Wie in den eher faktenbasierten Antworten ausgeführt wurde, ist der Normalfall die Ausführung unter Volllast. Wenn es eine Komponente gibt, die überhitzen kann, ist dies der Spannungsregler, der jedoch in erster Linie von der Eingangsspannung abhängt, da er bei Nichtbeachtung bereits fast den höchsten zu erwartenden Strom aufweist.
Chris Stratton

@ChrisStratton Eine Ethernet-Abschirmung kann je nach Verwendung unterschiedlich stark sein. Der Arduino könnte sich auch in einem Energiesparmodus befinden (z. B. zwischen 0:00 und 5:00 Uhr morgens).
Anonym Pinguin

4

Ich habe noch nie ein Arduino so lange gelaufen, aber es sollte kein Problem geben. Eine Sache, auf die Sie achten müssen, ist die Eingangsspannung.

Während ein Arduino 7-20 V als Eingang verarbeiten kann, kann sich alles über 12 V nach längerer Zeit überhitzen und Platinenschäden verursachen. Als schnelle Empfehlung, um eine Überhitzung des Arduino zu vermeiden, würde ich die Spannung so nahe wie möglich an 7 V halten.


4

Ich möchte ein Problem erwähnen, das nicht sehr häufig auftritt, aber langfristige Probleme verursachen kann. Speicherlecks und Heap-Fragmentierung. Fast niemand mallocs in eingebetteten Sachen, aber wenn Sie es tun, tun Sie es richtig.


Du hast mich geschlagen, +1.
hoosierEE

Ich glaube, die String-Klasse verwendet Malloc und es ist ziemlich verbreitet.
User2973

Einverstanden. Stellen Sie insbesondere bei einem Webserver sicher, dass Sie nichts tun, was den Speicher fragmentieren könnte, wie z. B. die String-Klasse. Dies ist jedoch leicht zu vermeiden. Ich habe einen Arduino, der als Webserver ausgeführt wird, um mich zu informieren, ob mein Garagentor geschlossen ist. Das läuft schon seit Jahren.
Nick Gammon

4

Ich habe mit meinem ersten Arduino einen einfachen Leistungsmonitor gebaut. Es wird über USB von einem Webserver gespeist, der wiederum über ein ziemlich umfangreiches Batterie-Backup (das keine Benachrichtigungsfunktionen besitzt) mit Strom versorgt wird.

Es wird auch an ein Mobiltelefon-Ladegerät angeschlossen, das an eine Nicht-USV-Steckdose angeschlossen ist.

Wenn der Strom ausfällt, sendet der Arduino eine Nachricht an ein kleines Programm, das auf dem Server ausgeführt wird. Das Serverprogramm wiederum sendet mir eine E-Mail-Benachrichtigung.

Es wurde Ende September 2013 am 23. März 2014 installiert - ich habe meine erste E-Mail bekommen!

Ich habe also kein Problem gesehen (es wird nicht millis () verwendet), aber es tastet die Leistung alle 5 Sekunden ab.


1

Kann ein Arduino rund um die Uhr laufen?

Dies ist eine Zuverlässigkeitsfrage. Bei der Zuverlässigkeit sind viele Dinge zu beachten.

  1. Die Software. Es gibt robustere Software. Es gibt weniger robuste Software. Beispielsweise wird für kritische Anwendungen von einer dynamischen Speicherzuweisung abgeraten, da dies zu einer Speicherfragmentierung führen kann. Leider ist Arduino stark auf die dynamische Speicherzuweisung angewiesen. Dieses Problem wird verschärft, da die meisten Arduino-Boards über einen sehr begrenzten Arbeitsspeicher verfügen.
  2. Die Bibliotheken. Viele Arduino-Bibliotheken haben Fehler (auch die im Arduino-Paket enthaltenen, so einfachen wie WString!). Im normalen Betrieb können solche Fehler überhaupt nicht auftreten. Sie können jedoch nicht hoffen, dass "alles in Ordnung ist" und "der Benutzer" (oder das Subsystem) wie vorhergesagt handelt. Bibliotheken könnten auch ihre Grenzen haben (dh nicht richtig Bugs). Beispielsweise haben viele Benutzer bereits die Funktion millis () zitiert, die nach 50 Tagen zurückgesetzt wird. Wenn dies nicht richtig gehandhabt wird, kann dies zu schweren Fehlern führen.
  3. Die Zuverlässigkeit der Hardware (spricht nicht einmal über billige Arduino-Klone ...). Hier öffnet sich eine neue Klasse von Unterfragen. Ich werde nur eine sehr begrenzte Teilmenge anführen.
    • Sind die Arduino Boards auf Zuverlässigkeit ausgelegt? (zB was ist die
      Zuverlässigkeit der verwendeten Kondensatoren und anderer Komponenten?)
    • Robustheit gegen EMI? Darauf würde ich mich nicht verlassen: Die meisten Arduino-Boards haben nur zwei Schichten und es fehlt eine richtige Masse- / Energieebene.
    • EEPROM (dies ist sowohl Software als auch Hardware). Verwendet Ihre Software das EEPROM? Implementiert man einen Algorithmus, um das Radfahren zu verhindern (wiederholtes Schreiben / Löschen in denselben Zellen)?
    • Flash-Speicher-Aufbewahrungszeit. Die Verweilzeit verringert sich mit der Temperatur und auch mit der Anzahl der Programmierzyklen.
    • Ionisierende Strahlung. Ja, selbst wenn die Wahrscheinlichkeit, zumindest auf Meereshöhe, SEHR gering ist, ist die Wahrscheinlichkeit einer strahlungsbedingten Störung durch ein einzelnes Ereignis nicht Null, und es sollten angemessene Gegenmaßnahmen ergriffen werden (insbesondere unter Berücksichtigung, dass der RAM keine Hardwarefehlererkennung aufweist ) in kritischen Anwendungen.
    • Die Qualität der Stromversorgung.
    • Die Betriebsumgebung. Eine kontrollierte Umgebung mit 25 ° C oder eine Blackbox über dem Dach (70 ° C unter der Sonne im Sommer)? Je höher die Temperatur, desto schneller sind alle Abbaumechanismen.
    • ...

Dennoch sollten Sie sich nicht wundern, wenn Ihr Arduino viele Jahre lang einwandfrei funktioniert. Dies stellt jedoch nicht sicher, dass jeder Arduino dies tut.

Einige Gegenmaßnahmen erhöhen die Zuverlässigkeit:

  • Verwenden Sie den Watchdog: Es ist besser, ein nicht reagierendes System zurückzusetzen, als ein nicht funktionierendes System zu haben.
  • Vermeiden Sie die Verwendung von Bibliotheken, die die Speicherzuordnung verwenden.
  • Implementieren Sie (wenn Sie das EEPROM verwenden) einen Algorithmus, um es zu erhalten!
  • Gute Stromversorgung.
  • Vermeiden Sie raue Umgebungsbedingungen (hohe Temperatur, hohe Luftfeuchtigkeit, große und kontinuierliche Wärmezyklen usw.).

0

Es kann sicherlich 24/7 laufen. Ich verwende entweder 5V an den 5V-Pin oder einen 7808 an den Vin-Pin, um den Vreg zu entladen. Im Idealfall wäre es 6,5 V, aber ich habe keine solchen Lieferungen. Möglicherweise möchten Sie jedoch eine Entkopplungskappe für 5 V verwenden, um geringfügige Spannungsspitzen beim Einschalten der Stromversorgung zu vermeiden.

Jegliche angeschlossene Hardware, die mit 5 V betrieben wird, wird mit einer 7805 gespeist. Sie können LM317s oder LM350s anstelle von 78XXs verwenden, für diese benötigen Sie jedoch einige Widerstände, z. B. Trimpots.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.