Розетка работающая по расписанию

bumrik
Offline
Зарегистрирован: 13.01.2016

Это мой первый проект! Розетка работающая по расписанию.

Цель: необходимо включать увлажнитель воздуха в заданное время.

Использовал:

Arduino nano

Реле

Модуль времени Ds3231

 

Код в основном собран из частей, сам писать пока не умею

 

#include <Wire.h> //Подключаем библиотеку для использования I2C интерфейса с модулем RTC

#include <RTClib.h> //Подключаем библиотеку для использования модуля часов реального времени RTC

RTC_DS1307 RTC; //Создаем переменную класса - для использования RTC

const int RelayChn1 = 6; //Используем цифровой ПОРТ 6 для ПЕРВОГО канала релейного модуля

//Расчет времени ( 60секунд *60 минут *1 = 3600)

const long StartRelCn_1 = 28800; //Время срабатывания 8:00

const long DurationCh_1 = 1800; //ДЛИТЕЛЬНОСТЬ срабатывания реле 0:30

const long StartRelCn_1A = 36000; //Время срабатывания 10:00

const long DurationCh_1A = 1800; //ДЛИТЕЛЬНОСТЬ срабатывания реле 0:30

const long StartRelCn_1B = 41400; //Время срабатывания 11:30

const long DurationCh_1B = 2400; //ДЛИТЕЛЬНОСТЬ срабатывания реле 0:40

const long StartRelCn_1C = 52200; //Время срабатывания 14:30

const long DurationCh_1C = 1800; //ДЛИТЕЛЬНОСТЬ срабатывания реле 0:30

const long StartRelCn_1D = 57600; //Время срабатывания 16:00

const long DurationCh_1D = 1800; //ДЛИТЕЛЬНОСТЬ срабатывания реле 0:30

const long StartRelCn_1I = 64800; //Время срабатывания 18:00

const long DurationCh_1I = 2400; //ДЛИТЕЛЬНОСТЬ срабатывания реле 0:40

const long StartRelCn_1F = 72000; //Время срабатывания 20:00

const long DurationCh_1F = 3600; //ДЛИТЕЛЬНОСТЬ срабатывания реле 1:00

void setup(){

pinMode(RelayChn1,OUTPUT); //Инициализируем порт для ПЕРВОГО канала как ВЫХОД

digitalWrite(RelayChn1,HIGH); //Устанавливаем на входах релейного модуля ВЫСОКИЙ уровень

Wire.begin(); //Инициируем I2C интерфейс

RTC.begin(); //Инициирум RTC модуль

}

void loop()

{

DateTime myTime = RTC.now(); //Читаем данные времени из RTC при каждом выполнении цикла

long utime = myTime.unixtime(); //сохраняем в переменную - время в формате UNIX

utime %= 86400; //Сохраняем в этой же переменной остаток деления на кол-во секнд в сутках,

if ((utime >= StartRelCn_1) &&

(utime < (StartRelCn_1+DurationCh_1)) or (utime >= StartRelCn_1A) &&

(utime < (StartRelCn_1A+DurationCh_1A))  or (utime >= StartRelCn_1B) &&

(utime < (StartRelCn_1B+DurationCh_1B))  or (utime >= StartRelCn_1C) &&

(utime < (StartRelCn_1C+DurationCh_1C))  or (utime >= StartRelCn_1D) &&

(utime < (StartRelCn_1D+DurationCh_1D))  or (utime >= StartRelCn_1I) &&

(utime < (StartRelCn_1I+DurationCh_1I))  or (utime >= StartRelCn_1F) &&

(utime < (StartRelCn_1F+DurationCh_1F)))

{

digitalWrite(RelayChn1,LOW); //Устанавливаем на ПЕРВОМ входе релейного модуля НИЗКИЙ уровень - реле срабатывает

}

else //во всех остальных случаях

{

digitalWrite(RelayChn1,HIGH); //Устанавливаем на ПЕРВОМ входе релейного модуля ВЫСОКИЙ уровень - реле выключается

}

 

}

Zebraj
Offline
Зарегистрирован: 14.03.2015

Спасибо за Проект, подсмотрел у Вас код и вставил себе ;)

Gres
Gres аватар
Offline
Зарегистрирован: 26.03.2013

Такими вещами можно заниматься только ради собственного удовольствия и самообразования. Готовое устройство выходит дешевле. Единственный и очень большой плюс своей разработки, это возможность дальнейшей модернизации и удаленного управления.

Zebraj
Offline
Зарегистрирован: 14.03.2015

Ненадежные эти таймеры, имею погрешность по времени, срок работы 1 год, одна розетка.