我是学生,只是Arduino的新手。我正在尝试制作一个自动植物浇水系统,它应该每天给植物浇水两次。无论如何,要让Arduino在每天所需的时间完成任务,然后让自己睡觉模式?
答案 0 :(得分:1)
正好在每天所需的时间
如果您的Arduino使用内部RC,您将无法获得足够的精度(1%)。你的时钟将在1个月后的7小时内推出。
如果您需要(非常)良好的精度,您可以使用RTC模块(2ppm)。 你的时钟将在1个月后大约5秒钟推出。
或者您可以简单地使用{X}振荡器(200ppm)上应该足够精确的millis()
函数。
你的时钟将在1个月后的大约10分钟内推出。
我将从最后一个解决方案开始,因为它不需要额外的组件,并且需要使用RTC进行改进。
然后将自己设置为睡眠模式
AVR内核具有不同的睡眠级别,有些会保持时钟(空闲),应该与millis()
解决方案一起使用,有些不会保持时钟(掉电)但功率效率更高,可能是与RTC一起使用。解决方案取决于您需要的低功耗。请注意,由于功率调节器和其他组件,使用Arduino板和IDE无法实现最大低功耗。要实现Atmega328数据表中描述的200nA睡眠,需要做一些工作。
millis()示例
#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
}