Arduino способен работать 24 часа в сутки?


46

Я делаю простой веб-сервер Arduino и хочу, чтобы он был постоянно включен. Так что это должно продолжаться, чтобы продолжать работать непрерывно.

Я использую Arduino Uno с Ethernet Shield. Он питается от простого источника питания 5В @ 1А.

Мои вопросы:

  • Будут ли у меня проблемы с тем, чтобы Arduino всегда был включен?
  • Есть ли какая-нибудь другая плата Arduino, лучше рекомендованная для этого?
  • Есть ли какие-то меры предосторожности, которые мне нужно учитывать в этом отношении?

Первый вопрос!
TheDoctor

Примечание модератора: мы, кажется, получаем много ответов, в которых говорится, что это сработало в их ситуации. Если у вас есть что-то техническое, чтобы добавить к вопросу, не стесняйтесь ответить. Тем не менее, технические ответы, кажется, охватывают, что это работает. Если вы абсолютно обязаны заявить, что ваша ситуация сработала, было бы лучше добавить комментарий.
анонимный пингвин

Ответы:


58

У вас не должно быть проблем с его постоянным включением, однако следует учитывать, что у вас могут быть какие-то счетчики, например, использование millis().

Из документов Arduino на миллисе :

Это число будет переполнено (вернется к нулю) примерно через 50 дней.

Таким образом, для проектов, которые выполняются в течение длительного периода времени, вы можете не сразу увидеть проблему, но что-то подобное может появиться и вызвать ошибки в будущем.


19
Чтобы быть точным, миллис является uint32_tпеременной, поэтому он будет переполнен («вернуться к нулю») через 4294967296 миллисекунд, что составляет ~ 49,7 дня, ~ 1193 часа или ~ 71582 минуты.
Коннор Вольф

5
Тогда все, что вам нужно сделать, это использовать другой uint32_t, который увеличивается, когда первый переворачивается. Тогда вы можете наслаждаться примерно 5,846 × 10 ^ 8 лет между ролловерами.
80HD

4
если вы выполните millis () - startTime (со временем начала как unsigned long, он же uint32_t), вы всегда получите правильный результат, если не произошло более одного переполнения
Lesto

1
Точнее говоря, переполнение происходит через 49 дней, 17 часов, 2 минуты, 47 секунд и 295 миллисекунд.
Мемет Олсен

4
Переполнение millis () никогда не должно быть проблемой. Видите, переполнение millis () ... плохо? Больше подробностей. В основном, если вы рассчитываете временные интервалы путем вычитания, используя соответствующие типы данных, у вас никогда не возникнет проблем.
Ник Гэммон

33

Несколько вещей, которые нужно иметь в виду (за исключением упоминания @ Sachleen millis()):

  • Как и любая электроника, тепло может быть разрушительным. Сам микроконтроллер вряд ли станет большой проблемой с точки зрения нагрева, но другие компоненты, такие как источник питания, могут вызвать проблемы.

  • Если ваш код использует EEPROM.write(), помните, что EEPROM в вашем Uno ATmega328P рассчитан только на 100 000 операций записи.


12

Имейте в виду, что флэш-память и EEPROM имеют ограниченный срок службы (около 10000 и 100000 циклов записи соответственно), поэтому, если вы делаете много записей для них, они могут быть повреждены. В моем тесте внешнему EEPROM потребовалось около 3 дней, чтобы начать повреждаться.


1
Хотя в документации может быть указано 10 тыс. Циклов, многие тесты показали, что ~ 100 тыс. - это место, где начинаются проблемы.
Рон

Срок службы EEPROM составляет минимум 100 000 циклов записи в соответствии с таблицей данных. Мне кажется, я помню, как читал тест, в котором коррупция начиналась с почти миллиона записей.
user2973

10

Запуск Arduino 24/7 не должен быть проблемой.

Но будьте уверены, что у вас есть чехол для вентиляции, и вы должны держать его в хорошо проветриваемом помещении. Точно так же, как компьютеры, если вы не держите их в среде, которая может сохранять их прохладными, они не будут оставаться холодными.

Также следует учитывать нагрузку на сервер: чем больше нагрузка на сервер, тем больше обработки он должен выполнять и тем больше тепла он будет генерировать.


3
ATmega не имеет традиционных режимов с низким энергопотреблением, как обычные компьютеры, поэтому нагрузка не имеет значения. Если вы не делаете активных вычислений, это просто ожидание вращения. Потребление энергии при работе на самом деле довольно статично (за исключением таких вещей, как запись в EEPROM / flash), по крайней мере для ATmega MCU. Могут быть различия в потребляемой мощности интерфейса Ethernet, определяемой нагрузкой трафика, но ничто, вероятно, не произведет достаточно тепла, чтобы быть проблемой, если это не находится в полном вакууме или на нагревателе или чем-то.
Коннор Вольф

1
Atmega328p имеет спящий режим с низким энергопотреблением, который потребляет ~ 0,1 мкА.
JRobert

2
Что было бы актуально, только если код фактически переводит процессор в спящий режим.
Крис Страттон

8

Наша система RFID-доступа на базе Arduino работает в Bloominglabs Hackerspace в Блумингтоне с конца 2011 года, и, несмотря на пару отключений электропитания и обновления программного обеспечения, она работает круглосуточно, без проблем. Совсем недавно мы добавили сетевой термостат, тоже самое дело - он работает круглосуточно.


У меня тоже есть система доступа RFID, работающая 24/7. Единственный раз, когда он «выходит из строя», это когда питание отключается, потому что оно работает от сети. Это работает с 2011 года без проблем.
Ник Гэммон

Хаха, эй, Стив!
Deltaray

@NickGammon Да, ваша система классная, но почему аутентификация не основана на данных карты, а только на UID токена? Пожалуйста, покажите нам умное решение.
user2497

в чем ваша точка зрения? это не связано с вопросом автора.
sdcharle

6

Arduinos может работать без проблем в течение очень долгого времени, хотя в зависимости от местных условий и интенсивности вычислений вам может потребоваться установить радиаторы.

Кроме того, хорошо проветривайте его.

Это также зависит от используемой программы, если ваш сервер время от времени обслуживает страницу, это не должно быть проблемой, но если вы ожидаете постоянного трафика, то Arduino может быстро нагреться.

Вы также захотите обеспечить стабильность электропитания, когда при проведении настольных экспериментов с Arduino это не является большой проблемой, хотя это может стать проблемой при преобразовании питания от сети для постоянного устройства.


2
Нет никаких оснований ожидать, что вычислительная нагрузка вызовет перегрев Arduino. Как указывалось в ответах, основанных на фактах, нормальный случай - запуск при полной нагрузке. Если есть компонент, который может перегреться, это будет регулятор напряжения, но это, прежде всего, функция входного напряжения, так как он уже работает при почти максимальном ожидаемом токе, когда ничего не делает.
Крис Страттон

@ChrisStratton щит Ethernet может варьировать мощность в зависимости от использования. Кроме того, Arduino может находиться в состоянии пониженного энергопотребления (например, спать с 12 до 5 утра).
Анонимный Пингвин

4

Я никогда не управлял Arduino так долго, но проблем не должно быть. Единственное, на что нужно обратить внимание - это входное напряжение.

В то время как Arduino способен обрабатывать 7-20 В в качестве входных данных, все, что выше 12 В, может перегреться после более длительного периода времени и вызвать повреждение платы. В качестве быстрой рекомендации, чтобы избежать перегрева Arduino, я бы держал напряжение как можно ближе к 7В.


4

Я хотел бы упомянуть проблему, которая возникает не очень часто, но может вызвать долгосрочные проблемы. Утечки памяти и фрагментация кучи. Почти никто не злоупотребляет встроенными вещами, но если вы это сделаете, сделайте это правильно.


Вы победили меня, +1.
hoosierEE

Я считаю, что класс String использует malloc, и это довольно часто.
user2973

Согласовано. Особенно с веб-сервером, убедитесь, что вы не делаете ничего, что может фрагментировать память, например, используйте класс String. Однако этого легко избежать. У меня есть Arduino, работающий как веб-сервер, чтобы сообщить мне, закрыта ли моя дверь гаража. Это работает в течение многих лет.
Ник Гэммон

4

Я построил простой монитор мощности с моим первым Arduino. Он питается через USB от веб-сервера, который, в свою очередь, питается от довольно значительной резервной батареи (которая не имеет возможности уведомления).

Он также подключен к зарядному устройству для мобильного телефона, подключенному к розетке без подключения к ИБП.

Поэтому, если питание отключается, Arduino отправляет сообщение маленькой программе, запущенной на сервере. Серверная программа в свою очередь отправляет мне уведомление по электронной почте.

Он был установлен в конце сентября 2013 года, 23 марта 2014 года - я получил свое первое письмо!

Таким образом, я не видел проблемы (он не использует millis ()), но он каждые 5 секунд производит выборку мощности.


1

Arduino способен работать 24 часа в сутки?

Это вопрос надежности. В надежности есть много вещей, чтобы рассмотреть.

  1. Программное обеспечение Есть более надежные программы. Есть менее надежные программы. Например, для критически важных приложений динамическое выделение памяти не рекомендуется, так как это может привести к фрагментации памяти. К сожалению, Arduino сильно зависит от динамического распределения памяти. Эта проблема усугубляется, так как большинство плат Arduino имеют очень ограниченную оперативную память.
  2. Библиотеки. Многие библиотеки Arduino имеют ошибки (даже те, которые встроены в пакет Arduino, такие же простые, как WString!). При нормальной работе такие ошибки могут вообще не появляться. Однако вы не можете надеяться, что «все будет хорошо» и что «пользователь» (или подсистема) будет действовать так, как предсказано. Библиотеки также могут иметь свои ограничения (то есть не правильно ошибки). Например, многие пользователи уже ссылались на функцию millis (), которая сбрасывается через 50 дней. Это, если не обрабатывается правильно, может привести к серьезным ошибкам.
  3. Надежность аппаратного обеспечения (даже не говоря о дешевых клонах Arduino ...). Здесь открывается новый класс подвопросов. Я приведу лишь очень ограниченное подмножество.
    • Arduino Boards предназначены для надежности? (например, какова
      надежность используемых конденсаторов? и других компонентов?)
    • Надежность против EMI? Я бы не стал полагаться на это: большинство плат Arduino имеют всего два слоя и не имеют правильной плоскости заземления / мощности.
    • EEPROM (это и программное и аппаратное обеспечение). Ваше программное обеспечение использует EEPROM? Реализует ли какой-то алгоритм предотвращения циклического повторения (повторная запись / стирание в тех же ячейках)?
    • Время удержания флэш-памяти. Время удерживания уменьшается с температурой, а также с количеством циклов программирования.
    • Ионизирующего излучения. Да, даже если вероятность ОЧЕНЬ низка, по крайней мере, на уровне моря, вероятность радиационного расстройства, вызванного одним событием, не равна нулю, и следует принимать адекватные контрмеры (особенно принимая во внимание, что в ОЗУ нет аппаратного обнаружения ошибок) ) в критических приложениях.
    • Качество блока питания.
    • Операционная среда. Среда, контролируемая при 25 ° C, или в черном ящике над крышей (летом под углом 70 ° C)? Чем выше температура, тем быстрее все механизмы разложения.
    • ...

Тем не менее, вы не должны удивляться, если ваш Arduino будет работать безупречно в течение многих лет. Но это не гарантирует, что каждый Arduino будет.

Некоторые контрмеры повысят надежность:

  • Используйте сторожевой таймер: лучше сбросить не реагирующую систему, чем застрявшую или плохо себя зарекомендовавшую.
  • Избегайте использования любой библиотеки, которая использует распределение памяти.
  • Реализуйте (если вы используете EEPROM) алгоритм для его сохранения!
  • Хороший блок питания.
  • Избегайте суровых условий окружающей среды (высокая температура, высокая влажность, большие и продолжительные тепловые циклы и т. Д.).

0

Это, конечно, может работать 24/7. Я либо использую 5V для вывода 5V, либо 7808 для вывода Vin, чтобы разгрузить Vreg. В идеале это было бы 6,5 В, но у меня нет таких источников питания. Возможно, вы захотите снять защитный колпачок на 5 В, чтобы выдержать любые незначительные пики при включении питания.

Любое подключенное оборудование, которое работает на 5 В, я питаю от 7805. Вы можете использовать LM317 или LM350 вместо 78XX, но вам понадобится несколько резисторов для них, возможно, триммеры.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.