Включение реле по времени модуля Tiny RTC
- Войдите на сайт для отправки комментариев
Добрый день!
Использую arduino uno, модуль времени Tiny RTC и библиотеку адафруит.
Как то давно написал простой код, который позволяет включать и отключать реле с момента включения ардуинки.
Периодически летом (редко но всё же) моргает/выключают свет и при включении получается что насос, работающий от реле может работать не по расписанию и несколько раз в сутки. А смысл в чем : в 8.00 и в 20.00 включается насос (+ параллельно пищалка) и качает в течении 45 секунд канализационные стоки в юнилос, этот режим в принципе хорош но при выключении света и включении насос включается лишний раз что не совсем то что нужно.
int Relay = 10; int Beep = 9; int length = 1; char notes[] = "c"; int beats[] = { 1 }; int tempo = 300; void setup() { Serial.begin(9600); pinMode(Relay, OUTPUT); pinMode(Beep, OUTPUT); delay(1000); } void loop() { digitalWrite(Relay, HIGH); analogWrite(Beep, HIGH); delay(45000); digitalWrite(Relay, LOW); digitalWrite(Beep, LOW); delay(43200000); }
Помогите пожалуйста написать код, который бы позволял включать РЕЛЕ два раза в сутки по определенному времени.
Вроде бы как набросал но знаю что что то не дописал или ошибся, помогите пожалуйста
#include <Wire.h> #include "RTClib.h" RTC_DS1307 RTC; int hour; int minute; int second; int Relay = 10; void setup () { Serial.begin(9600); pinMode(Relay, OUTPUT); digitalWrite(Relay, LOW); Wire.begin(); RTC.begin(); } void loop () { DateTime now = RTC.now(); hour = (now.hour(), true); minute = (now.minute(), false); second = (now.second(), false); if (hour == 13 && minute == 55 && second >=15) {digitalWrite(Relay, HIGH);} if (hour == 13 && minute == 55 && second >=55) {digitalWrite(Relay, LOW);} delay(1000); }
Более наглядно:
if
(hour == 13 && minute == 55 && second >= 15 && second < 55)
{digitalWrite(Relay, HIGH);}
else
{digitalWrite(Relay, LOW);}
Если два раза в сутки, то
if
( (hour == 13 ||
hour == 20) && minute == 55 && second >= 15 && second < 55)Спасибо за совет.
Вообщем немного посидел, подумал и вот что получилось
Я так думаю, что данные о последнем включении нужно записывать в EEPROM. Затем, после отключения\включения электричества, считывать эти данные и отталкиваться от них.
Я так думаю, что данные о последнем включении нужно записывать в EEPROM. Затем, после отключения\включения электричества, считывать эти данные и отталкиваться от них.
В принципе я с Вами согласен, идея хорошая, но для кратковременных выключений можно обойтись и без этого. Но я все же попробую сделать как Вы сказали
два раза в сутки - при нормальной сети это хорошо
но если сеть скачет...... :(
вариант - запитать ардуину от хоть какой-то батарейки , чтобы не мучить EEPROM
1....осуществлять контроль что ПОСЛЕ 8:00 насос отработал ИМЕННО 45 сек
2....осуществлять контроль что ПОСЛЕ 20:00 насос отработал ИМЕННО 45 сек
логика - если насос с 8:00 до 20:00 не отработал 45 сек , то в период с 20:00 до 8:00 он должен отработать 90 сек.... и т.д.
как страховка от сбоев ардуины - да , запись крайних данных в EEPROM