внесение в код таймера для реле
- Войдите на сайт для отправки комментариев
Ср, 08/03/2017 - 18:55
Здраствуйте. хотелось бы в этот код
#include <TimeAlarms.h> // Подключаем библиотеку для работы с таймерами #include <DHT.h> // Подключаем библиотеку для работы с датчиками температуры/влажности на базе чипов AM23xx #define DHTPIN 12 // Цифровой пин, к которому подключен датчик тепрературы/влажности (12 = D12) #define DHTTYPE DHT22 // Модель датчика (AM2301 = DHT21, AM2302 и AM2321 = DHT22) #define CLKPIN 10 // Цифровые пины для подключения дисплея #define DIOPIN 11 #define S_ON 0 // Значение пина для ВКЛЮЧЕНИЯ розетки #define S_OFF 1 // Значение пина для ВЫКЛЮЧЕНИЯ розетки // Режим включения нагрузки #define NO_ACTION 0 // Значение датчика не учитывается #define IN_RANGE 1 // Включать нагрузку, когда значение В ПРЕДЕЛАХ диапазона #define OUT_RANGE 2 // Включать нагрузку, когда значение ВНЕ ПРЕДЕЛОВ ДИАПАЗОНА // Определяем структуру, в которой содержатся условия для подключения розетки. typedef struct RunCondition { int socketPin; // Пин, который управляет розеткой float tempBegin; // Температура. Начало диапазона. float tempEnd; // Температура. Конец диапазона. int tempMode; // Режим включения нагрузки по температуре float humBegin; // Влажность. Начало диапазона. float humEnd; // Влажность. Конец диапазона. int humMode; // Режим включения нагрузки по влажности. }; #define NUM_SOCKETS 3 // Количество розеток в системе // Определяем массив структур, определяющих условия для 3-х розеток RunCondition sockets[NUM_SOCKETS] = { { 2, // Розетка №1: Приточный вентилятор. Управляющий пин - D2. 30.0, // Минимальная температура 100.0, // Максимальная температура IN_RANGE, // Вентилятор включается, если температура более 30 градусов и менее 100. 0.0, 0.0, NO_ACTION // Влажность не учитывается }, { 3, // Розетка №2: Обогреватель. Управляющий пин - D3. -50.0, // Минимальная температура 16.0, // Максимальная температура IN_RANGE, // Обогреватель включается, если температура больше -50 и меньше 16 градусов 0.0, 0.0, NO_ACTION // Влажность не учитывается }, { 4, // Розетка №3: Увлажнитель. Управляющий пин - D4. 20.0, // Минимальная температура 100.0, // Максимальная температура IN_RANGE, // Увлажнитель включается только если температура в диапазоне от 20 до 60 градусов 0.0, // Минимальная влажность (в %) 50.0, // Максимальная влажность IN_RANGE // Увлажнитель включается, если влажность в диапазоне от 0% до 50% } }; int socketStatus[NUM_SOCKETS]; // Определяем массив переменных, в которых хранится текущее состояние розеток. S_OFF - выключено, S_ON - включено. DHT dht(DHTPIN, DHTTYPE); // Создаем объект для работы с датчиком // Определяем глобальные переменные, в которых будем хранить показания датчиков float temp = 0; float hum = 0; void setSockets() { // Эта функция устанавливает состояние розеток for (int i = 0; i < NUM_SOCKETS; i++) { // Перебираем все определенные ранее розетки, устанавливая для них соответствующий статус digitalWrite(sockets[i].socketPin, socketStatus[i]); } } void printSensors() { // Эта функция выводит в консоль состояние датчиков для помощи при отладке. Serial.print("[ >> ] Temperature: "); Serial.print(temp); Serial.print(" C;\tHumidity: "); Serial.print(hum); Serial.println("%"); } void setup() { // Эта функция выполняется один раз при включении контроллера. Serial.begin(115200); // Подключаем COM-порт для вывода информации из контроллера в консоль. Serial.println("[ ++ ] WeedLife Air Controller Lite v.1.1.d"); dht.begin(); // Инициализируем датчик температуры/влажности. for (int i = 0; i < NUM_SOCKETS; i++) { socketStatus[i] = S_OFF; // Устанавливаем розетку в ВЫКЛЮЧЕНО по умолчанию pinMode(sockets[i].socketPin, OUTPUT); // Переключаем управляющие пины всех определенных ранее розеток в режим "выход" } setSockets(); // Переводим розетки в состояние по умолчанию } void loop() { // Эта функция выполняется по бесконечному кругу. Здесь мы будем проверять показания датчиков и управлять нагрузками. Alarm.delay(1000); // Вносим задержку в 1 секунду, чтобы датчик успел передать предыдущие данные temp = dht.readTemperature(); // Получаем текущую температуру hum = dht.readHumidity(); // Получаем текущую влажность if (isnan(temp) || isnan(hum)) { // Что-то пошло не так, потому что данные с датчика не поступают! Отключаем все нагрузки и возвращаемся в начало! for (int i = 0; i < NUM_SOCKETS; i++) socketStatus[i] = S_OFF; setSockets(); Serial.println("[FAIL] Can't read sensor data! Turn everithing OFF!"); return; } // Теперь сравним полученные данные с условиями, заданными для каждой розетки for (int s = 0; s < NUM_SOCKETS; s++) { // Проверяем условия для включения розетки по датчику температуры int tempStatus = S_OFF; switch (sockets[s].tempMode) { case NO_ACTION: tempStatus = S_ON; break; case IN_RANGE: if ((temp >= sockets[s].tempBegin) && (temp <= sockets[s].tempEnd)) tempStatus = S_ON; break; case OUT_RANGE: if ((temp <= sockets[s].tempBegin) || (temp >= sockets[s].tempEnd)) tempStatus = S_ON; break; } // Проверяем условия для включения розетки по датчику влажности int humStatus = S_OFF; switch (sockets[s].humMode) { case NO_ACTION: humStatus = S_ON; break; case IN_RANGE: if ((hum >= sockets[s].humBegin) && (hum <= sockets[s].humEnd)) humStatus = S_ON; break; case OUT_RANGE: if ((hum <= sockets[s].humBegin) || (hum >= sockets[s].humEnd)) humStatus = S_ON; break; } // Объединяем оба результата в один новый статус розетки int newStatus = S_OFF; if ((tempStatus == S_ON) && (humStatus == S_ON)) newStatus = S_ON; if (socketStatus[s] != newStatus) { // Статус розетки изменился! Отправим сообщение об этом в консоль и установим новое значение. Serial.print("[ OK ] Socket #"); Serial.print(s); Serial.print(" status has changed to "); Serial.println(newStatus); socketStatus[s] = newStatus; } // Обновляем статусы розеток setSockets(); } // Конец функции loop. Сейчас контроллер запустит ее снова. }
Внести изменения и вместо включение по показателям влажности и температуры,вторая и третья розетка включались на время допустим на 16 часов и 8 часов отдыха
был найден такой код но совместить не хватает навыков
#define NASOS_PIN 13 // Вывод к котрому подключена нагрузка #define TIME_ON_NASOS 10000 // Время в течении, которого на выводе 1 #define TIME_OFF_NASOS 180000 // Время в течении, которого на выводе 0 boolean state_nasos = 0; // Переменная для хранения состояния вывода unsigned long new_millis_nasos = millis(); // Переменная для хранения времени #define SVET_PIN 10 // Вывод к котрому подключена нагрузка #define TIME_ON_SVET 1000 // Время в течении, которого на выводе 1 #define TIME_OFF_SVET 3000 // Время в течении, которого на выводе 0 boolean state_svet = 0; // Переменная для хранения состояния вывода unsigned long new_millis_svet = millis(); // Переменная для хранения времени void setup() { pinMode(NASOS_PIN, OUTPUT); // Настраиваем вывод на выход pinMode(SVET_PIN, OUTPUT); // Настраиваем вывод на выход } void loop(){ // Управление насосом: if(millis() > new_millis_nasos){ state_nasos = !state_nasos; digitalWrite(NASOS_PIN, state_nasos); if(state_nasos){ new_millis_nasos = millis() + TIME_ON_NASOS; } else{ new_millis_nasos = millis() + TIME_OFF_NASOS; } } // Управление светом: if(millis() > new_millis_svet){ state_svet = !state_svet; digitalWrite(SVET_PIN, state_svet); if(state_svet){ new_millis_svet = millis() + TIME_ON_SVET; } else{ new_millis_svet = millis() + TIME_OFF_SVET; } } }
что вам вообще надо то?! зачем натягивать чужие решения на свои задача.
чтоб включалось по времени надо просто часы. топик про часы и аквариум тут был. там все есть в простой и понятной форме .
про временные интервалы для включения
вот http://arduino.ru/forum/programmirovanie/akvarium-i-ds1302
хаха не работает ссылка :)))
во проправил
хрен. автор движка просто жжет. короче там пробел удалите в название добавляется и не работает перевод каретки что ли в ссылке не удаляется
есть 3 розетки под вытяжку обогреватель и увлажнитель
вместо обогревателя и увлажнителя хотел в розетки вставить свет и насос
но свет и насос просто дожны включатся по таймеру а модуля реального времени нет и ждать его долго
http://arduino.ru/forum/programmirovanie/akvarium-i-ds1302
и опять же по ссылке человек работает с RTC