我是一名学生,只是新手到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?