Czy Arduino jest w stanie pracować 24/7?

46

Tworzę prosty serwer internetowy Arduino i chcę go cały czas włączyć. Musi więc znosić ciągłe działanie.

Używam Arduino Uno z osłoną Ethernet. Jest zasilany za pomocą prostego zasilacza sieciowego 5V @ 1A.

Moje pytania:

  • Czy będę miał problemy z pozostawieniem włączonego Arduino?
  • Czy jest jakaś inna płyta Arduino lepsza do tego celu?
  • Czy są jakieś środki ostrożności, które muszę wziąć pod uwagę?
Butzke
źródło
Pierwsze pytanie!
TheDoctor
Uwaga moderatora: wydaje się, że otrzymujemy wiele odpowiedzi stwierdzających, że zadziałało w ich sytuacji. Jeśli masz coś technicznego do dodania do pytania, odpowiedz. Wydaje się jednak, że odpowiedzi techniczne obejmują, że to działa. Jeśli absolutnie musisz stwierdzić, że Twoja sytuacja działała, lepiej byłoby dodać komentarz.
Anonimowy pingwin

Odpowiedzi:

58

Nie powinieneś mieć żadnych problemów z utrzymywaniem go przez cały czas, jednak pewne rzeczy do rozważenia to wszelkie liczniki, które możesz mieć, takie jak użycie millis().

Z dokumentacji Arduino na millis :

Liczba ta przepełni się (wróci do zera) po około 50 dniach.

Dlatego w przypadku projektów trwających od dłuższego czasu problem może nie pojawić się od razu, ale coś takiego może wyskoczyć i spowodować błędy na późniejszym etapie.

sachleen
źródło
19
Mówiąc ściślej, millis jest uint32_tzmienną, więc przepełni się („wróci do zera”) w 4294967296 milisekundach, co stanowi ~ 49,7 dni, ~ 1193 godzin lub ~ 71582 minut.
Connor Wolf,
5
Następnie wystarczy użyć innego uint32_t, który zwiększa się przy pierwszym przewróceniu. Następnie możesz cieszyć się około 5,846 × 10 ^ 8 lat między rolowaniami.
80HD
4
jeśli zrobisz millis () - startTime (z czasem rozpoczęcia jako długim bez znaku, czyli uint32_t), zawsze otrzymasz poprawny wynik, chyba że nastąpi więcej niż jedno przepełnienie
Lesto
1
Mówiąc ściślej, przepełnienie następuje po 49 dniach, 17 godzinach, 2 minutach, 47 sekundach i 295 milisekundach.
Memet Olsen,
4
Przepełnienie millis () nigdy nie musi stanowić problemu. Zobacz przepełnienie millis () ... zła rzecz? po więcej szczegółów. Zasadniczo, jeśli obliczasz przedziały czasowe odejmując, używając odpowiednich typów danych, nigdy nie będziesz mieć problemu.
Nick Gammon
33

Kilka rzeczy, o których należy pamiętać (poza wzmianką o @ Sachleen millis()):

  • Jak każda elektronika, ciepło może powodować zakłócenia. Sam mikrokontroler prawdopodobnie nie będzie wielkim problemem z punktu widzenia ciepła, ale inne elementy, takie jak zasilacz, mogą powodować problemy.

  • Jeśli używasz kodu EEPROM.write(), pamiętaj, że pamięć EEPROM w ATmega328P Twojego urządzenia Uno jest oceniana tylko na 100 000 zapisów.

Matthew G.
źródło
12

Pamiętaj, że pamięć flash i pamięć EEPROM mają ograniczony czas życia (odpowiednio około 10 000 i 100 000 cykli zapisu), więc jeśli robisz dużo do nich, mogą ulec uszkodzeniu. W teście, który zrobiłem, zewnętrzna pamięć EEPROM zajęła około 3 dni, aby zacząć ulegać uszkodzeniu.

Doktor
źródło
1
Chociaż dokumentacja może zawierać listę 10 000 cykli, wiele testów wykazało, że ~ 100 000 jest miejscem, w którym zaczynają się pojawiać problemy.
Ron
Żywotność pamięci EEPROM wynosi co najmniej 100 000 cykli zapisu zgodnie z arkuszem danych. Chyba pamiętam test, w którym korupcja rozpoczęła się przy prawie milionie zapisów.
user2973,
10

Uruchamianie Arduino 24/7 Nie powinno stanowić problemu.

Ale upewnij się, że masz skrzynię, która umożliwia wentylację i trzymasz ją w dobrze wentylowanym miejscu. Podobnie jak komputery, jeśli nie trzymasz ich w środowisku, które może zapewnić im chłód, nie będą one chłodne.

Należy również rozważyć obciążenie serwera, im więcej obciążenia na serwerze, tym więcej przetwarzania musi wykonać, i tym więcej ciepła będzie generować.

JVarhol
źródło
3
ATmega nie ma tradycyjnych trybów niskiego poboru mocy, takich jak zwykłe komputery, więc obciążenie nie ma znaczenia. Jeśli nie wykonujesz aktywnych obliczeń, to po prostu czekasz. Zużycie energii podczas pracy jest w zasadzie dość statyczne (z wyjątkiem takich rzeczy, jak zapisywanie do pamięci EEPROM / flash), przynajmniej dla ATmega MCU. Mogą występować różnice w poborze mocy interfejsu Ethernet zależnym od obciążenia ruchem, ale nic nie będzie w stanie wygenerować wystarczającej ilości ciepła, aby stanowić problem, chyba że jest w idealnej próżni, grzejniku lub czymś podobnym.
Connor Wolf
1
Atmega328p ma tryb uśpienia o niskiej mocy, który pobiera ~ 0,1 uA.
JRobert
2
Byłoby to istotne tylko wtedy, gdy kod faktycznie uśpił procesor.
Chris Stratton,
8

Nasz system dostępu RFID oparty na Arduino działa w Bloominglabs Hackerspace w Bloomington IN od końca 2011 roku i oprócz kilku awarii zasilania i aktualizacji oprogramowania działa przez całą dobę, bez problemu. Niedawno dodaliśmy termostat sieciowy, ta sama oferta - działa przez całą dobę.

sdcharle
źródło
Ja też mam system dostępu RFID działający 24/7. Jedyny raz, kiedy „zawodzi”, to gdy nastąpi zanik zasilania, ponieważ działa z sieci. To działa od 2011 roku bez żadnych problemów.
Nick Gammon
Haha, hej Steve!
deltaray
@NickGammon Tak, twój system jest fajny, ale dlaczego uwierzytelnianie nie opiera się na DANYCH karty, a jedynie na UID tokena? Pokaż nam sprytne rozwiązanie.
user2497,
o co ci chodzi? to nie ma związku z pytaniem plakatu.
sdcharle,
6

Arduinos mogą działać bezproblemowo przez naprawdę długi czas, jednak w zależności od lokalnych warunków i intensywności obliczeń konieczne może być podłączenie radiatorów.

Ponadto należy go dobrze wentylować.

Zależy to również od używanego programu, jeśli twój serwer od czasu do czasu wyświetla stronę, nie powinno to stanowić problemu, ale jeśli oczekujesz stałego ruchu, Arduino może szybko się rozgrzać.

Będziesz także chciał zapewnić stabilność zasilania, kiedy przeprowadzasz eksperymenty z Arduino, nie jest to duży problem, ale może stać się problemem, jeśli przekształcisz moc z sieci na stałe.

Manishearth
źródło
2
Nie ma żadnego powodu, aby oczekiwać, że obciążenie obliczeniowe spowoduje przegrzanie Arduino. Jak wskazano w odpowiedziach opartych na faktach, normalnym przypadkiem jest działanie przy pełnym obciążeniu. Jeśli istnieje element, który może się przegrzać, będzie to regulator napięcia, ale jest to przede wszystkim funkcja napięcia wejściowego, ponieważ działa on już z prawie najwyższym oczekiwanym prądem, gdy nic nie robi.
Chris Stratton,
@ChrisStratton osłona Ethernet może różnić się mocą w zależności od użytkowania. Ponadto Arduino może być w stanie niskiego poboru mocy (na przykład spać między godziną 12:00 a 5:00).
Anonimowy pingwin
4

Tak długo nie prowadziłem Arduino, ale nie powinno być problemu. Należy zwrócić uwagę na napięcie wejściowe.

Podczas gdy Arduino jest w stanie poradzić sobie z napięciem 7-20 V, wszystko powyżej 12 V może się przegrzać po dłuższym czasie i spowodować uszkodzenie płyty. Jako szybką rekomendację, aby uniknąć przegrzania Arduino, utrzymałbym napięcie tak blisko 7 V, jak to możliwe.

Steven10172
źródło
4

Chciałbym wspomnieć o problemie, który nie pojawia się zbyt często, ale może powodować problemy długoterminowe. Wycieki pamięci i fragmentacja sterty. Prawie nikt nie zamyka się w osadzonych rzeczach, ale jeśli to zrobisz, zrób to dobrze.

EternityForest
źródło
Pokonałeś mnie do tego, +1.
hoosierEE
Wierzę, że klasa String używa malloc i jest to dość powszechne.
user2973,
Zgoda. Zwłaszcza w przypadku serwera WWW upewnij się, że nie robisz niczego, co mogłoby rozdrobnić pamięć, np. Użyj klasy String. Łatwo jednak tego uniknąć. Mam Arduino działające jako serwer internetowy, aby poinformować mnie, czy moja brama garażowa jest zamknięta. To działa od lat.
Nick Gammon
4

Z moim pierwszym Arduino zbudowałem prosty monitor zasilania. Jest zasilany przez USB z serwera sieciowego, który z kolei jest zasilany przez dość znaczne podtrzymanie bateryjne (które nie ma możliwości powiadamiania).

Jest również podłączony do ładowarki telefonu komórkowego podłączonej do gniazda zasilania innego niż UPS.

Więc jeśli moc umrze, Arduino wyśle ​​komunikat do małego programu działającego na serwerze. Z kolei program serwera wysyła mi powiadomienie e-mailem.

Został zainstalowany pod koniec września 2013 r., 23 marca 2014 r. - Dostałem swój pierwszy e-mail!

Więc nie widziałem problemu (nie używa millis ()), ale próbkuje moc co 5 sekund.

TimboTinkerer
źródło
1

Czy Arduino jest w stanie pracować 24/7?

To pytanie o niezawodność. Jeśli chodzi o niezawodność, należy wziąć pod uwagę wiele kwestii.

  1. Oprogramowanie. Istnieje bardziej niezawodne oprogramowanie. Istnieje mniej niezawodne oprogramowanie. Na przykład w przypadku krytycznych aplikacji odradza się dynamiczne przydzielanie pamięci, ponieważ może to prowadzić do fragmentacji pamięci. Niestety Arduino w dużej mierze opiera się na dynamicznej alokacji pamięci. Problem ten nasila się, ponieważ większość płyty Arduino ma bardzo ograniczoną pamięć RAM.
  2. Biblioteki. Wiele bibliotek Arduino ma błędy (nawet te wbudowane w pakiet Arduino, tak proste jak WString!). W normalnej pracy takie błędy mogą się wcale nie pojawiać. Nie możesz jednak mieć nadziei, że „wszystko będzie dobrze” i że „użytkownik” (lub podsystem) będzie działał zgodnie z przewidywaniami. Biblioteki mogą mieć również swoje ograniczenia (tj. Nieprawidłowo występujące błędy). Na przykład wielu użytkowników cytowało już funkcję millis (), która resetuje się po 50 dniach. Jeśli nie zostanie to właściwie wykonane, może to spowodować poważne błędy.
  3. Niezawodność sprzętu (nawet nie mówiąc o tanich klonach Arduino ...). Tutaj otwiera się nowa klasa zapytań. Przytoczę tylko bardzo ograniczony podzbiór.
    • Czy tablice Arduino są zaprojektowane pod kątem niezawodności? (np. jaka jest
      niezawodność zastosowanych kondensatorów? i innych elementów?)
    • Odporność na zakłócenia elektromagnetyczne? Nie polegałbym na tym: większość płyt Arduino ma tylko dwie warstwy i brak odpowiedniej płaszczyzny uziemienia / mocy.
    • EEPROM (zarówno oprogramowanie, jak i sprzęt). Czy twoje oprogramowanie korzysta z EEPROM? Czy zaimplementowano jakiś algorytm zapobiegający cyklom (wielokrotne zapisywanie / usuwanie w tych samych komórkach)?
    • Czas przechowywania w pamięci flash. Czas retencji zmniejsza się wraz z temperaturą, a także liczbą cykli programowania.
    • Promieniowanie jonizujące. Tak, nawet jeśli prawdopodobieństwo jest BARDZO niskie, przynajmniej na poziomie morza, prawdopodobieństwo wywołanego przez promieniowanie zakłócenia pojedynczego zdarzenia nie jest równe zero i należy podjąć odpowiednie środki zaradcze (szczególnie biorąc pod uwagę, że pamięć RAM nie wykrywa błędów sprzętowych ) w krytycznych aplikacjach.
    • Jakość zasilacza.
    • Środowisko operacyjne. Środowisko kontrolowane w 25 ° C lub w czarnej skrzynce nad dachem (70 ° C pod słońcem latem)? Im wyższa temperatura, tym szybciej wszystkie mechanizmy degradacji.
    • ...

Jednak nie powinieneś być zaskoczony, jeśli twoje arduino będzie działało bezbłędnie przez wiele lat. Ale to nie gwarantuje, że każde arduino to zrobi.

Niektóre środki zaradcze zwiększą niezawodność:

  • Użyj watchdoga: lepiej zresetować niereagujący system, niż zablokowany / źle działający.
  • Unikaj korzystania z dowolnej biblioteki, która korzysta z alokacji pamięci.
  • Zaimplementuj (jeśli używasz EEPROM) algorytm, aby go zachować!
  • Dobry zasilacz.
  • Unikaj trudnych warunków (wysoka temperatura, wysoka wilgotność, duże i ciągłe cykle termiczne itp.).
następny hack
źródło
0

Z pewnością może działać 24/7. Używam albo 5 V do pinu 5 V, albo 7808 do pinu Vin, aby rozładować vreg. Idealnie byłoby 6,5 V, ale nie mam takich dostaw. Możesz jednak chcieć ograniczenia odsprzęgacza na 5 V, aby pochłonąć wszelkie drobne skoki podczas zwiększania zasilania.

Dowolny podłączony sprzęt, który działa przy napięciu 5V, zasilam 7805. Możesz użyć LM317 lub LM350 zamiast 78XXs, ale do nich potrzebujesz kilku oporników, być może trimpotów.

użytkownik2497
źródło