如何使每天的Arduino在规定的时间执行任务?(How to make Arduino perfo

2019-09-26 15:08发布

我是一名学生,只是新手到Arduino的。 我试图进行自动植物浇灌系统 ,应该给植物浇水两次day.Is反正有使Arduino的准确在规定的时间每天执行任务,然后自身设置为睡眠模式?

Answer 1:

正是在日常所需的时间

  • 如果你的Arduino是同步于内部RC,你不会有足够的精度(1%)。 您的时钟将约7小时1个月后的衍生物。

  • 如果你需要有一个(非常)良好的精确度,你可以使用RTC模块(百万分之二)。 您的时钟将从约5秒钟1个月后的衍生物。

  • 或者你可以简单地使用millis()函数应该是在晶体振荡器(200ppm的)不够精确。 您的时钟将从约10分钟1个月后的衍生物。

因为它不需要额外的部件,我将开始与最后的解决方案,并改善与需要RTC。

然后自身设置为睡眠模式

AVR内核具有不同程度的睡眠,有些人会保持时钟(空闲),并应与使用millis()解决方案和一些不会保持时钟(断电),但更节能,并且可以与RTC一起使用。 该解决方案取决于你需要的功率多低是。 需要注意的是最大的低功耗将不与Arduino板和IDE因为电源稳压器和其他组件的实现。 为了实现Atmega328数据表中描述的睡眠电流为200nA这将需要一些工作。

米利斯()的例子

#define INTERVAL_1_DAY 86400000  // 1day => 24*60*60*1000

unsigned long nextDate = INTERVAL_1_DAY;  

void loop()
{
    unsigned long currentDate = millis(); //millis rollover (overflow) after about 50 days

    if(currentDate > nextDate  // time elapsed, do action
       && currentDate < (nextDate + INTERVAL_25_DAY)) //treatement of the overflow of millis() and *Dates ...
    {
        nextDate += INTERVAL_1_DAY;  //you have to use nextDate here and not current date like in some examples to have no sweep (some µs each day)

        // do your action here
    }

    // you may add some idle sleep here 
    // 10s sleep would give a execution date glitch e.g. [3pm to 3pm+10s]
    // but some code can fix this
}


文章来源: How to make Arduino perform a task daily at the required time?
标签: arduino