Arduino能够运行24/7吗?


46

我正在制作一个简单的Arduino Web服务器,并且希望一直保持打开状态。因此,它必须忍受持续工作。

我正在使用带以太网屏蔽的Arduino Uno。它由一个简单的5V @ 1A插座电源供电。

我的问题:

  • 我会一直保持Arduino开启状态吗?
  • 有没有其他更好的为此推荐的Arduino开发板?
  • 我是否需要注意任何预防措施?

第一个问题!
TheDoctor 2014年

主持人注意:我们似乎得到了很多答案,表明它在他们的情况下有效。如果您有技术要补充的问题,请随时回答。但是,技术答案似乎涵盖了它的工作原理。如果您绝对必须声明自己的情况有效,那么最好添加一条评论。
匿名企鹅

Answers:


58

您不应该一直保持任何问题,但是要考虑的是您可能拥有的任何计数器,例如使用millis()

millisArduino文档中

大约50天后,该数字将溢出(返回零)。

因此,对于长时间运行的项目,您可能不会立即看到问题,但是可能会弹出这样的问题,并可能导致错误。


19
确切地说,毫秒是uint32_t变量,因此它将在4294967296毫秒(即〜49.7天,〜1193小时或〜71582分钟)内溢出(“返回零”)。
康纳·沃尔夫

5
然后,您要做的就是使用另一个uint32_t,它会在第一个翻转时递增。然后,您可以在两次翻转之间享受大约5.846×10 ^ 8年的时间。
80HD 2014年

4
如果您执行millis()-startTime(开始时间为无符号长整数,又称为uint32_t),则除非发生
多次

1
更准确地说,溢出发生在49天,17小时,2分钟,47秒和295毫秒之后。
Memet Olsen 2014年

4
millis()溢出永远不会成为问题。看到millis()溢出...是一件坏事吗?更多细节。基本上,如果您使用适当的数据类型通过减法计算时间间隔,则永远不会有问题。
尼克·加蒙

33

需要记住的几件事(@Sachleen提到的millis()除外):

  • 像任何电子设备一样,热量可能具有破坏性。从热量的角度来看,微控制器本身不太可能成为一个大问题,但是电源等其他组件可能会引起问题。

  • 如果您的代码使用EEPROM.write(),请注意,Uno的ATmega328P中的EEPROM仅可写入100,000次。


12

请记住,闪存和EEPROM的寿命有限(分别约为10,000和100,000个写周期),因此,如果您对它们进行大量写操作,则它们可能会损坏。在我进行的测试中,外部EEPROM花了大约3天时间才开始损坏。


1
尽管文档可能列出了10k个周期,但是许多测试表明,大约100k是开始出现问题的地方。
罗恩

根据数据表,EEPROM寿命至少为100,000个写周期。我想我记得记得读过一个测试,其中腐败始于近百万次写入。
user2973

10

运行Arduino 24/7应该不是问题。

但是,请确保您有一个可以通风的箱子,并将其放在通风良好的地方。就像计算机一样,如果您不将它们放置在可以使其保持凉爽的环境中,它们也不会保持凉爽。

服务器负载也是要考虑的事情,服务器上的负载越多,它必须执行的处理越多,并且它将产生的热量就越多。


3
ATmega不像传统计算机那样具有传统的低功耗模式,因此负载无关紧要。如果您不进行主动计算,那只是在等待。至少对于ATmega MCU而言,运行时的功耗实际上几乎是静态的(除了诸如写入EEPROM /闪存之类的事情)。以太网接口的功耗可能因流量负载而变化,但是除非处于理想的真空状态或在加热器或类似物品上,否则不会产生足够的热量。
康纳·沃尔夫

1
Atmega328p具有低功耗睡眠模式,功耗约为0.1 uA。
JRobert

2
仅当代码实际上使处理器进入睡眠状态时,才有意义。
克里斯·斯特拉顿

8

自2011年下半年以来,我们一直在位于布卢明顿的Bloominglabs Hackerspace上运行基于Arduino的RFID访问系统,除了几次停电和软件更新外,它不间断运行。最近,我们添加了一个网络恒温器,价格相同-全天候运行。


我也有一个24/7全天候运行的RFID访问系统。唯一的“故障”是电源断开,因为它依靠市电供电。自2011年以来一直没有问题。
尼克·加蒙

哈哈,史蒂夫!
deltaray

@NickGammon是的,您的系统很棒,但是为什么auth不基于卡数据,而仅基于令牌UID?请向我们展示一个明智的解决方案。
user2497

你想说什么?这与发布者的问题无关。
sdcharle

6

Arduino可以在很长一段时间内毫无问题地运行,尽管取决于当地条件和您可能必须安装散热器的计算强度。

此外,请保持通风良好。

这也取决于所使用的程序,如果您的服务器时不时地在服务一个页面,那不应该是一个问题,但是如果您期望持续的流量,那么Arduino可能会迅速升温。

您还需要确保电源的稳定性,当使用Arduino进行台式实验时,这不是一个大问题,如果将电源从电源转换为永久性固定装置,这可能会成为一个问题。


2
没有任何理由期望计算负载导致Arduino过热。正如在更多基于事实的答案中所指出的那样,正常情况是在满负荷下运行。如果有一个可能会过热的组件将成为电压调节器,但这主要是输入电压的函数,因为不执行任何操作时它已经以接近最高预期电流的速度运行。
克里斯·斯特拉顿

@ChrisStratton以太网屏蔽可能会根据使用情况改变功率。另外,Arduino可能处于低功耗状态(例如,在12AM和5AM之间休眠)。
匿名企鹅2014年

4

我从来没有运行过Arduino这么长时间,但是应该没有问题。要注意的一件事是输入电压。

尽管Arduino能够将7-20v作为输入来处理,但超过12v的任何东西在较长时间后都会过热并导致电路板损坏。作为避免Arduino过热的快速建议,我会保持电压尽可能接近7v。


4

我想提一下这个问题不会经常出现,但是会引起长期的问题。内存泄漏和堆碎片。几乎没有人在嵌入式内容中分配内存,但是如果您这样做,请正确执行。


你击败了我,+ 1。
hoosierEE 2014年

我相信String类使用malloc,这很常见。
user2973 2014年

同意 特别是对于Web服务器,请确保不要做任何可能导致内存碎片的事情,例如使用String类。但是,很容易避免这种情况。我有一个作为网络服务器运行的Arduino,可以让我知道我的车库门是否关闭。这已经运行了多年。
尼克·加蒙

4

我使用第一个Arduino构建了一个简单的电源监控器。它通过Web服务器的USB供电,而Web服务器又通过相当大的备用电池(没有通知功能)供电。

它还连接到插入非UPS电源插座的手机充电器。

因此,如果电源中断,Arduino将向服务器上运行的一个小程序发送消息。服务器程序反过来给我发送电子邮件通知。

它安装在2013年9月下旬,即2014年3月23日-我收到了第一封电子邮件!

因此,我没有看到任何问题(它不使用millis()),但是每5秒就会对电源采样一次。


1

Arduino能够运行24/7吗?

这是一个可靠性问题。在可靠性方面,有很多事情要考虑。

  1. 该软件。有更强大的软件。缺少健壮的软件。例如,对于关键应用程序,不鼓励动态内存分配,因为它可能导致内存碎片。不幸的是,Arduino严重依赖于动态内存分配。由于大多数Arduino板的RAM都很有限,因此这个问题更加严重。
  2. 图书馆。许多Arduino库确实存在bug(甚至是Arduino包中内置的bug,就像WString一样简单!)。在正常操作中,此类错误可能根本不会出现。但是,您不能指望“一切都会好起来”并且“用户”(或子系统)会按预期运行。图书馆也可能有其局限性(即没有适当的错误)。例如,许多用户已经引用了millis()函数,该函数会在50天后重置。如果处理不当,可能会导致严重的错误。
  3. 硬件的可靠性(甚至不谈论廉价的Arduino克隆...)。此处将打开一类新的子问题。我只会引用一个非常有限的子集。
    • Arduino开发板是否专为可靠性设计?(例如
      ,使用过的电容器和其他组件的可靠性如何?)
    • 抗电磁干扰能力强吗?我不会依靠:大多数Arduino板只有两层,并且缺少适当的接地/电源层。
    • EEPROM(这是软件和硬件)。您的软件使用EEPROM吗?是否正在执行某种算法来防止循环(在同一单元上重复写入/擦除)?
    • 闪存保留时间。保留时间随温度以及编程循环次数而减少。
    • 电离辐射。是的,即使概率很低,至少在海平面上,辐射引起的单事件扰动的概率也不为零,并且应采取足够的对策(尤其要考虑到RAM没有硬件错误检测) )在关键应用中。
    • 电源质量。
    • 操作环境。是在25°C的受控环境下,还是在屋顶上方的黑匣子中(夏季,在阳光下为70°C)?温度越高,所有降解机理越快。
    • ...

尽管如此,如果您的arduino可以完美无瑕地工作很多年,您也不会感到惊讶。但这并不能确保每个arduino都能做到。

一些对策将提高可靠性:

  • 使用看门狗:重置无响应的系统比卡住/行为异常的系统要好。
  • 避免使用任何使用内存分配的库。
  • 实现(如果使用EEPROM)算法来保留它!
  • 良好的电源。
  • 避免恶劣的环境(高温,高湿,连续的大热循环等)。

0

它当然可以运行24/7。我要么使用5V至5V引脚,要么使用7808至Vin引脚来减轻vreg的负担。理想情况下,它将为6.5V,但我没有此类电源。不过,您可能需要一个5V的去耦电容,以在电源上电时吸收任何小的尖峰。

任何以5V运行的硬件都可以提供7805。您可以使用LM317或LM350代替78XX,但是您需要一些电阻用于这些电阻,也许是微调电阻。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.