Открытый скетч автопрограммы инкубатора.
-
- Сообщения: 80
- Зарегистрирован: 07 янв 2016, 06:52
- Откуда: Севастополь
Re: Открытый скетч автопрограммы инкубатора.
Измерение температуры и влажности записал прямо сюда.
Так правильно или нет?
[code//используем терморегулятор ////////////////////////////////////////////
void thermostat(float tempPoint, float set_humidity) {
DateTime now = RTC.now();
unsigned long now1 = millis();
float alarmTemp;
EEPROM_read(5, alarmTemp);
humid = myHumidity.readHumidity();
temp = myHumidity.readTemperature();
if (digitalRead(door_pin)) { //дверь закрыта *для концевика закрыто - разомкнуто
myPID.SetMode(AUTOMATIC);
heater_off = false;
}
else { //дверь открыта
heater_off = true;
alarmDelay = millis();
myPID.SetMode(MANUAL);
Output = 0;
}
Setpoint = tempPoint;
Input = temp;
myPID.Compute();
if (now1 - windowStartTime > WindowSize) { //время для перещелкивания периода окна
windowStartTime = windowStartTime + WindowSize;
........
...........
.......
}
if (Output > (now1 - windowStartTime) && temp < 39.9 && heater_off == false) digitalWrite(heater_pin, HIGH);
else digitalWrite(heater_pin, LOW);
}
][/code]
Так правильно или нет?
[code//используем терморегулятор ////////////////////////////////////////////
void thermostat(float tempPoint, float set_humidity) {
DateTime now = RTC.now();
unsigned long now1 = millis();
float alarmTemp;
EEPROM_read(5, alarmTemp);
humid = myHumidity.readHumidity();
temp = myHumidity.readTemperature();
if (digitalRead(door_pin)) { //дверь закрыта *для концевика закрыто - разомкнуто
myPID.SetMode(AUTOMATIC);
heater_off = false;
}
else { //дверь открыта
heater_off = true;
alarmDelay = millis();
myPID.SetMode(MANUAL);
Output = 0;
}
Setpoint = tempPoint;
Input = temp;
myPID.Compute();
if (now1 - windowStartTime > WindowSize) { //время для перещелкивания периода окна
windowStartTime = windowStartTime + WindowSize;
........
...........
.......
}
if (Output > (now1 - windowStartTime) && temp < 39.9 && heater_off == false) digitalWrite(heater_pin, HIGH);
else digitalWrite(heater_pin, LOW);
}
][/code]
Re: Открытый скетч автопрограммы инкубатора.
Роман добрый день.
Как в скетче поменять датчик влажности SHT10 на DHT22 .
Как в скетче поменять датчик влажности SHT10 на DHT22 .
Re: Открытый скетч автопрограммы инкубатора.
Здравствуйте!
Хотел бы уточнить по логике программы. У вас получение температуры с DS18B20 происходит раз в 1,2 секунды с запаздыванием на 0,45 сек после завершения преобразования. Но опрос и команда на получение (строки со звездочкой) зачем то барабанят без остановки в течении 0,9 секунд. Или я что то не так понял?
Хотел бы уточнить по логике программы. У вас получение температуры с DS18B20 происходит раз в 1,2 секунды с запаздыванием на 0,45 сек после завершения преобразования. Но опрос и команда на получение (строки со звездочкой) зачем то барабанят без остановки в течении 0,9 секунд. Или я что то не так понял?
Код: Выделить всё
void getSensors() {
unsigned long curMillis = millis(); // Получаем текущее время работы
if (curMillis - trhMillis >= TRHSTEP) { // время для нового измерения?
* sensors.requestTemperatures();
* temp1Ink = sensors.getTempCByIndex(0);
* if (temp1Ink == -127.0) temp1Ink = 85.0;
}
if (curMillis - trhMillis >= TRHSTEP * 4) { // время для нового измерения?
measActive = true;
measType = TEMP;
sht.meas(TEMP, &rawData, NONBLOCK); // измеряем температуру.
trhMillis = curMillis;
}
Re: Открытый скетч автопрограммы инкубатора.
Добрый всем день!
Роман, видел анонс блока "тандем", на сайте ни слова о нем, видимо на сайт рук не хватает )
Будет ли вариант "тандема" с датчиком СО2 MH-Z19 и исполнительной частью для него(вентиляция)?
Роман, видел анонс блока "тандем", на сайте ни слова о нем, видимо на сайт рук не хватает )
Будет ли вариант "тандема" с датчиком СО2 MH-Z19 и исполнительной частью для него(вентиляция)?
- Umka
- Команда UM
- Сообщения: 6274
- Зарегистрирован: 04 июн 2015, 13:45
- Откуда: Суджа
- Контактная информация:
Re: Открытый скетч автопрограммы инкубатора.
Такой вариант возможен, но пока не занимался им. Обсуждать пока нечего, блок еще не вышел в продажу.
Re: Открытый скетч автопрограммы инкубатора.
По-моему это бессмысленно и нелогично.Umka писал(а):Ну и что?
- Umka
- Команда UM
- Сообщения: 6274
- Зарегистрирован: 04 июн 2015, 13:45
- Откуда: Суджа
- Контактная информация:
Re: Открытый скетч автопрограммы инкубатора.
Тут без задержки конвертация. По хорошему надо поменять местами запрос температуры и преобразование. Поставьте в цикле вывод в порт счетчик миллисекунд и посмотрите.
Re: Открытый скетч автопрограммы инкубатора.
Просто в вашем коде есть момент когда термометр преобразует температуру (750 мсек), а контроллер долбит его командами на конвертацию и опросами температуры без остановки.
Сейчас сам свой регулятор пишу, шлифую код, наткнулся на ваш вариант. Я бы сделал, что бы обращение к термометру было один раз за период опроса, например так. Хочется ожидать от коммерческого продукта, что там все идеально...
Сейчас сам свой регулятор пишу, шлифую код, наткнулся на ваш вариант. Я бы сделал, что бы обращение к термометру было один раз за период опроса, например так. Хочется ожидать от коммерческого продукта, что там все идеально...

Код: Выделить всё
*TRHSTEP =1200;
*bool read_temp=false;
void getSensors() {
unsigned long curMillis = millis(); // Получаем текущее время работы
* if (read_temp && (curMillis - trhMillis >= TRHSTEP-450)) { // время для нового измерения? Через 750 мсек после команды на преобразование
temp1Ink = sensors.getTempCByIndex(0);
* read_temp=false;
if (temp1Ink == -127.0) temp1Ink = 85.0;
}
if (curMillis - trhMillis >= TRHSTEP) { // время для нового измерения?
measActive = true;
measType = TEMP;
sht.meas(TEMP, &rawData, NONBLOCK); // измеряем температуру.
* sensors.requestTemperatures();
* read_temp=true;
trhMillis = curMillis;
}
- Umka
- Команда UM
- Сообщения: 6274
- Зарегистрирован: 04 июн 2015, 13:45
- Откуда: Суджа
- Контактная информация:
Re: Открытый скетч автопрограммы инкубатора.
Это не коммерческий код, а открытый, опубликован как есть. Кто хочет пусть дописывает. В закрытом совсем по другому все, но он не публикуется. По моему все честно. В этом коде много чего можно переписать, но и так можно работать. В любом коде так, просто снаружи не видно. И где тут контроллер без остановки долбит запросами температуры? Ну, выдаст датчик старое значение и всё. Из-за чего шум поднимать. Надо просто брать значение температуры, потом запускать конвертацию и ждать наступления следующего цикла. В закрытом коде библиотека dallastemperature не используется.
Вот же условие для запроса температуры
Кто мешает TRHSTEP сделать 1000мС? А надо только поменять местами запрос температуры и команду на конвертацию. Всё! Или мы друг-друга не понимаем. Я этим кодом уже 2 года не занимаюсь. Мы сейчас вообще DS редко где применяем. Слишком они медленные и точность так себе. Один плюс - мало проводов надо и далеко можно уносить от контроллера.
Вот же условие для запроса температуры
Код: Выделить всё
if (curMillis - trhMillis >= TRHSTEP) { // время для нового измерения?
Re: Открытый скетч автопрограммы инкубатора.
Может быть...Umka писал(а):Или мы друг-друга не понимаем. Я этим кодом уже 2 года не занимаюсь. Мы сейчас вообще DS редко где применяем.

А что вместо DS с лучшей точностью, если не секрет?
- Umka
- Команда UM
- Сообщения: 6274
- Зарегистрирован: 04 июн 2015, 13:45
- Откуда: Суджа
- Контактная информация:
Re: Открытый скетч автопрограммы инкубатора.
SHT21-35. Быстрее раз в 5 не только по счету, но и по температурной инерции. И по влажности точные и по температуре куда лучше DS. Но DS неубиваемые и для телеметрии годные, для логгера в качестве дополнительных термометров, для отопления дома, для подвалов, мороза, пыльных мест...
Re: Открытый скетч автопрограммы инкубатора.
На данный момент проходит испытание контроллера инкубатора версии V2_4F , выяснил один момент, авария срабатывает как нужно , но выключить энкодером не получается, приходится перезагружать выключением ардуино. В чем может быть проблема
- Umka
- Команда UM
- Сообщения: 6274
- Зарегистрирован: 04 июн 2015, 13:45
- Откуда: Суджа
- Контактная информация:
Re: Открытый скетч автопрограммы инкубатора.
Я код не трогал больше года, не знаю что там могло сломаться. Возможно и в программе косяк. Но пока нет времени на неё. Разберетесь самостоятельно?
Re: Открытый скетч автопрограммы инкубатора.
Роман и еще один вопрос , по подключению часов реального времени. В инструкции написано "Подключается в разрыв провода модуля дисплея".Если я подключаю параллельно к с I2C к пинам А4 А5 то на дисплее пустое место в скобках где должно отображаться время.
- Umka
- Команда UM
- Сообщения: 6274
- Зарегистрирован: 04 июн 2015, 13:45
- Откуда: Суджа
- Контактная информация:
Re: Открытый скетч автопрограммы инкубатора.
А сами часы идут?
Re: Открытый скетч автопрограммы инкубатора.
Если раскоментировать эти строки то появляется время
//windowStartTime = millis();
//RTC.adjust(DateTime(__DATE__, __TIME__)); //раскоментируйте для установки системмных даты и времени
//windowStartTime = millis();
//RTC.adjust(DateTime(__DATE__, __TIME__)); //раскоментируйте для установки системмных даты и времени
- Umka
- Команда UM
- Сообщения: 6274
- Зарегистрирован: 04 июн 2015, 13:45
- Откуда: Суджа
- Контактная информация:
Re: Открытый скетч автопрограммы инкубатора.
Это из компьютера время берется при компиляции и прошивке скетча. Потом надо закомментировать и снова прошить. Потом выключить и включить блок. Если время забудет - батарейка сдохла или не контачит в часах.
Re: Открытый скетч автопрограммы инкубатора.
Добрый вечер, друзья!
Sht10 нуждается в корректировке?
У меня он показывает т: 63 градуса
Влажность: 99-100%
Если да то как откорректировать влажность?
Спасибо!
Sht10 нуждается в корректировке?
У меня он показывает т: 63 градуса
Влажность: 99-100%
Если да то как откорректировать влажность?
Спасибо!
- Umka
- Команда UM
- Сообщения: 6274
- Зарегистрирован: 04 июн 2015, 13:45
- Откуда: Суджа
- Контактная информация:
Re: Открытый скетч автопрограммы инкубатора.
SHT10 откалиброван на заводе. Ваш видимо вышел из строя.
Re: Открытый скетч автопрограммы инкубатора.
Здравствуйте!
Смущает массив:
и обращение к нему:
Переменная d принимает значения от 4 до 0, но в массиве нет 4-го индекса! Код надо исправлять.
И еще вопрос по режимам. Судя по коду задумано так, что для кур первый период длится всего 1 день? Этого достаточно? А последний начнется с 19-го дня? Но если после 19 дня перегрузить контроллер (или он сам перезагрузится), то режим инкубации уже не считается с массива режимов, и значения режима будут приняты по-умолчанию:
что не будет соответствовать этому режиму инкубации, и может повлиять на результат инкубации не лучшим образом.
Думаю это надо иметь ввиду тем кто просто заливает прошивку в контроллер.
Смущает массив:
Код: Выделить всё
int r_array[6][4][5] = {
{{2, 382, 650, 0, 1}, {12, 377, 540, 5, 1}, {18, 374, 480, 20, 1}, {20, 371, 855, 10, 0}}, // chick
{{2, 382, 600, 0, 1}, {12, 376, 600, 3, 1}, {15, 374, 480, 10, 1}, {18, 370, 855, 10, 0}}, // quail
{{7, 381, 700, 0, 1}, {13, 376, 600, 3, 1}, {25, 373, 560, 20, 1}, {30, 370, 855, 10, 0}}, // duck
{{15, 380, 610, 5, 1}, {26, 375, 520, 20, 1}, {27, 374, 690, 10, 0}, {35, 370, 800, 0, 0}}, // muskus
{{3, 379, 630, 0, 0}, {13, 378, 540, 3, 1}, {26, 375, 560, 20, 1}, {30, 372, 590, 10, 0}}, // goose
{{6, 379, 560, 0, 1}, {12, 376, 530, 3, 1}, {26, 373, 520, 20, 1}, {30, 370, 855, 10, 0}}, // turkey
};
Код: Выделить всё
for (int d = 4; d >= 0; d--) {
if (currentDay < r_array[bird][d][0]) {
needTemp = float(r_array[bird][d][1] / 10.0);
needHum = float(r_array[bird][d][2] / 10.0);
ventTime = r_array[bird][d][3];
needTurn = r_array[bird][d][4];
}
И еще вопрос по режимам. Судя по коду задумано так, что для кур первый период длится всего 1 день? Этого достаточно? А последний начнется с 19-го дня? Но если после 19 дня перегрузить контроллер (или он сам перезагрузится), то режим инкубации уже не считается с массива режимов, и значения режима будут приняты по-умолчанию:
Код: Выделить всё
float needTemp = 37.6; // нужная для текущего дня температура инкубации (по умолчанию)
float needHum = 60.5; // ---- влажность
int ventTime = 2; // длительность проветривания
Думаю это надо иметь ввиду тем кто просто заливает прошивку в контроллер.
- Umka
- Команда UM
- Сообщения: 6274
- Зарегистрирован: 04 июн 2015, 13:45
- Откуда: Суджа
- Контактная информация:
Re: Открытый скетч автопрограммы инкубатора.
Верно. Надо 3 поставить.And писал(а):Переменная d принимает значения от 4 до 0, но в массиве нет 4-го индекса! Код надо исправлять.
Да, первый день прогрев до 38. Так и задумано так и рекомендуют.And писал(а):что для кур первый период длится всего 1 день?
После 19 дня яйца в выводной шкаф переносят. Для большинства не актуально.And писал(а):Но если после 19 дня перегрузить контроллер (или он сам перезагрузится), то режим инкубации уже не считается с массива режимов, и значения режима будут приняты по-умолчанию
Этот скетч как есть опубликован, некогда заниматься его правками. Но он открытый и все могут принять участие. Найдете баг - пишите, поправим. Самому искать пока некогда - сезон! К осени можно и перелопатить код будет.
Re: Открытый скетч автопрограммы инкубатора.
T1 постоянно показывает 85 град. Есть там датчик или нет, без разницы. В чем может быть причина? Сам скетч я не трогал.
- Umka
- Команда UM
- Сообщения: 6274
- Зарегистрирован: 04 июн 2015, 13:45
- Откуда: Суджа
- Контактная информация:
Re: Открытый скетч автопрограммы инкубатора.
Нет датчика. Ошибка в его подключении.