Просмотр полной версии : Есть заядлые электронщики?
а сами куры не в состоянии?
Accelero
05.09.2015, 18:19
а сами куры не в состоянии?
Скетч написать? Х/з - пойду спрошу!
подпишусь.
сам работаю в IT-сфере, но могу только писать код...( для готовых дивайсов.
Сейчас изучаю как сделать видеонаблюдение и умный дом для дачи.
веб морду и сервак пишу сам на основе RPI + Modbus.
Более всего вымораживает как при нынешних ОпСоСах сделать норм сетку.
Сервак в инете есть.
SSH-тонель? IP динамиический у всех ОпСоСов((
то есть тупо дергать дачный сервак напрямую по IP не полуится для получения данных
Добавлено через 3 минуты
Ну там же идет до 23, а дальше 0,1,2.....7 - цифры с DS3231 берутся - вод собстна и поставил или. Ща только что лампа выключилась (выставил >= 18 || < 7) Вроде работает... Необходимы полевые испытания)))
по мне так тоже достаточно 1го IF и потом тупо ELSE, ибо это время ВНЕ 7-21
Accelero
05.09.2015, 20:38
то есть тупо дергать дачный сервак напрямую по IP не полуится для получения данных
Всмысле напрямую? Минуя вэбморду?
по мне так тоже достаточно 1го IF и потом тупо ELSE
Дык там фишка в том, что колхоз из двух прог - для RTC DS3231 и DHT11, поэтому от else я отказался или я олень?:dash:
Accelero, "элс" тебе замелил бы второй "иф". тупо "если больше 7 И меньше 21 то write pin HIGH, елсе write pin LOW" или наоборот... когда там у тя свет гореть должен, ночью или днем? я забыл :) но суть не меняется
Accelero
05.09.2015, 20:59
Accelero, "элс" тебе замелил бы второй "иф". тупо "если больше 7 И меньше 21 то write pin HIGH, елсе write pin LOW"
Вот говнокод всего колхоза - не будет ли элс времени перекликаться с температурой? Дык мой вариант живой в итоге-то?
#include <DS3231.h>
#include <EEPROM.h>
#include "DHT.h"
#define DHTPIN 2
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
//Массив, содержащий время компиляции
char compileTime[] = __TIME__;
char compileDate[] = __DATE__;
DS3231 Clock(SDA, SCL);
Time RTC_Time;
void setup()
{
Serial.begin(115200);
Serial.println("DHTxx test!");
dht.begin();
Clock.begin();
//Получаем число из строки, зная номер первого символа
byte hour = getInt(compileTime, 0);
byte minute = getInt(compileTime, 3);
byte second = getInt(compileTime, 6);
unsigned int hash = hour * 60 * 60 + minute * 60 + second;
if (EEPROMReadInt(0) != hash) {
//Сохраняем новый хэш
EEPROMWriteInt(0, hash);
// Записываем время в часы
Clock.adjust(compileDate, compileTime);
}
}
void loop()
{
float h = dht.readHumidity();
float t = dht.readTemperature();
//Для запроса времени в структуру "Time"
RTC_Time = Clock.getTime();
if (isnan(t) || isnan(h)) {
Serial.println("Failed to read from DHT");
} else {
Serial.print("Humidity: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(t);
Serial.println(" *C");
}
if (RTC_Time.hour >= 7 < 18) //&& RTC_Time.min >= 00) время включения освещения
{
digitalWrite(10, HIGH);
}
if (RTC_Time.hour >= 18 || RTC_Time.hour < 7)
{
digitalWrite(10, LOW);
}
delay (100);
if(t <= 14) //если тмпература равна или ниже ?, включаем ИК лампу
{
digitalWrite(11, HIGH);
}
if(t >= 17) //если тмпература равна или выше ?, выключаем ИК лампу и доппечку
{
digitalWrite(11, LOW);
digitalWrite(12, LOW);
}
if(t <= 10) //если тмпература равна или ниже ?, включаем доппечку
{
digitalWrite(12, HIGH);
}
//Вывод дня недели
Serial.print(Clock.getDOWStr());
Serial.print(" ");
//Вывод даты
Serial.print(Clock.getDateStr());
Serial.print(" -- ");
//Вывод времени.
Serial.println(Clock.getTimeStr());
delay(100);
}
char getInt(const char* string, int startIndex) {
return int(string[startIndex] - '0') * 10 + int(string[startIndex+1]) - '0';
}
//Запись двухбайтового числа в память
void EEPROMWriteInt(int address, int value)
{
EEPROM.write(address, lowByte(value));
EEPROM.write(address + 1, highByte(value));
}
//Чтение числа из памяти
unsigned int EEPROMReadInt(int address)
{
byte lowByte = EEPROM.read(address);
byte highByte = EEPROM.read(address + 1);
return (highByte << 8) | lowByte;
}
ща Толян запилит прогу, не курятник, гриль будет))))))))
RTC_Time.hour и t разные переменные, else относится к предыдущему if, и ни в коем разе ни к какому другому.
примерно так:
}
if (RTC_Time.hour >= 7 && <=18)
{
digitalWrite(10, HIGH);
}
else
{
digitalWrite(10, LOW);
}
delay (100); на кой лят оно тут? самая страшная штука во всем твоем коде, срочно гугли как избавиться.
Так то конечно и твой вариант работать будет, тут по сути без разницы, как понимаешь так и делаешь :)
а выводить время в серийный порт тебе жизненно необходимо? тут гора библиотек для хрен пойми чего, и все чтоб тупо включать лампочку?
Accelero
05.09.2015, 21:14
на кой лят оно тут?
Это чтоб глаза от монитора com-порта не о..ели)):wacko: А так да - delay злостное зло!
элс относится к впередиидущему if
Что-то не понял? Может к предыдущему? Впереди у меня уже температурное управление:dntknw:
а выводить время в серийный порт тебе жизненно необходимо?
Это для отладки на макете. шильд 1602 с кнопками есть, но он цук жрет пять пинов - ща жду с али i2c 1602 моник.
Это чтоб глаза от монитора com-порта не о..ели)):wacko: А так да - delay злостное зло!
Что-то не понял? Может к предыдущему? Впереди у меня уже температурное управление:dntknw:
эм... странным образом у меня в голове смешались "предыдущий" и "впереди идущий" :biggrin: Типа все что вверху оно "спереди" :)
Accelero
05.09.2015, 21:20
Типа все что вверху оно "спереди"
Устроил мне, понимаешь, когнитивный батхёрт)))
RTC_Time.hour и t разные переменные, else относится к предыдущему if, и ни в коем разе ни к какому другому.
примерно так:
}
if (RTC_Time.hour >= 7 && <=18)
{
digitalWrite(10, HIGH);
}
else
{
digitalWrite(10, LOW);
}
на кой лят оно тут? самая страшная штука во всем твоем коде, срочно гугли как избавиться.
Так то конечно и твой вариант работать будет, тут по сути без разницы, как понимаешь так и делаешь :)
а выводить время в серийный порт тебе жизненно необходимо? тут гора библиотек для хрен пойми чего, и все чтоб тупо включать лампочку?
боюсь делей стоит чтоб прога в бесоенечный цикл не ушла
Добавлено через 1 минуту
Всмысле напрямую? Минуя вэбморду?
Дык там фишка в том, что колхоз из двух прог - для RTC DS3231 и DHT11, поэтому от else я отказался или я олень?:dash:
да.
веб морда для дачи - и веб морда с мобилы - по сути одно и тоже для юзера.
а вот скрипт который будлет по HTTP дергать сервак - в случае локалки - тупо к серваку обращается зная его хост/ip, а в случае инета - не знает и нужно прокидывать проксю.
вот и думаю как сделать...
BahoSSS, у нее принцип работы это бесконечный цикл. просто искусственно увеличивается время цикла
Accelero
05.09.2015, 21:47
Да я вообще эту прогу лепил на базе скетча для включения RTC, там ещё секундная задержка стояла после запроса секунд, но я её убрал.
Accelero
06.09.2015, 20:32
Протестил на макетке прогу - вроде нормуль все!:nice: Правда пришлось инвертировать сигналы управления, т.к. блок реле на LOW срабатывает, а я ещё, мудвин, забыл программно подтягивающие резисторы в атмеге врубить:dash: Короче после жаханий собрал все в кузов - завтра тест в боевых потно-говенопыльных условиях)))
[Для просмотра ссылки/изображения нужно войти или зарегистрироваться]
т.к. блок реле на LOW срабатывает
пересади нагрузку на нормально разомкнутый контакт
Accelero
06.09.2015, 20:52
пересади нагрузку на нормально разомкнутый контакт
Не понял))) Да все работает, просто хай/лоу местами в скетче поменял и добавил поддтяжку:)
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
digitalWrite(12, HIGH);
Accelero, у реле есть 2 выхода - нормальноразомкнутый и нормальнозамкнутый. "нормально" это когда обмотка реле обесточена. А у тебя будет нагрузка включаться если обесточить МК - на каждом реле должно быть 2 выхода и 1 вход +2 питание обмотки. Ну не то чтобы уж прям ДОЛЖНО, но скорей всего есть
Accelero
06.09.2015, 20:59
Accelero, у реле есть 2 выхода - нормальноразомкнутый и нормальнозамкнутый. "нормально" это когда обмотка реле обесточена. А у тебя будет нагрузка включаться если обесточить МК - на каждом реле должно быть 2 выхода и 1 вход +2 питание обмотки
Есть смысл переставить - ну эт не долго! По идее если у меня тухнет МК, то тухнет и блок реле. Кстати на блоке реле есть резюки подтяжки - если управляющая нога в "воздухе", то реле молчит.
Accelero, короче... если low это реле отключено. А лампочка обогрев при этом у тебя включается?
vBulletin® v3.8.6, Copyright ©2000-2025, Jelsoft Enterprises Ltd. Перевод: zCarot