Розетка работающая по расписанию
- Войдите на сайт для отправки комментариев
Это мой первый проект! Розетка работающая по расписанию.
Цель: необходимо включать увлажнитель воздуха в заданное время.
Использовал:
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); //Устанавливаем на ПЕРВОМ входе релейного модуля ВЫСОКИЙ уровень - реле выключается
}
}
Спасибо за Проект, подсмотрел у Вас код и вставил себе ;)
Такими вещами можно заниматься только ради собственного удовольствия и самообразования. Готовое устройство выходит дешевле. Единственный и очень большой плюс своей разработки, это возможность дальнейшей модернизации и удаленного управления.
Ненадежные эти таймеры, имею погрешность по времени, срок работы 1 год, одна розетка.