SmartInkubatorV2 all bird Без энкодера

Общий раздел для всех подразделов форума.
Edvard
Сообщения: 18
Зарегистрирован: 02 мар 2017, 05:20
Откуда: Новосибирск

SmartInkubatorV2 all bird Без энкодера

Сообщение Edvard » 07 апр 2017, 06:54

Всем привет.
Хочу опубликовать код. Ввиду не единственной проблемы с не работающими кнопками "плюс и минус", предложенные скетчи Романом заточены под энкодер.
Изменения потерпели в скетче только, касаемо энкодера. Теперь кнопки можно подключать "по старинке" от минуса на нужные пины
В дальнейшем хочу русифицировать интерфейс скетча.
Вложения
SmartInkubatorV2_4e_auto_all_bird_Bez_encoder__.zip
(8.1 КБ) 139 скачиваний

Аватара пользователя
Umka
Команда UM
Сообщения: 6274
Зарегистрирован: 04 июн 2015, 13:45
Откуда: Суджа
Контактная информация:

Re: SmartInkubatorV2 all bird Без энкодера

Сообщение Umka » 07 апр 2017, 11:34

Благодарю, доброе дело!

Regulserg
Сообщения: 29
Зарегистрирован: 13 янв 2017, 19:44
Откуда: Тольятти

Re: SmartInkubatorV2 all bird Без энкодера

Сообщение Regulserg » 07 апр 2017, 17:26

А проблема с датой так и осталась?
И еще вчера система словила глюк- завис контроллер Pro Mini: пришел с работы- показания с датчика dallas какой то набор цифр, перезапустил питание- все восстановилось, но за это время температура в инкубаторе успела опуститься до 28,5 градусов. Не пойму причины- свет не отключали. Может контакт где пропадал. Идет 10 день инкубации на автоскетче Романа...

Аватара пользователя
Umka
Команда UM
Сообщения: 6274
Зарегистрирован: 04 июн 2015, 13:45
Откуда: Суджа
Контактная информация:

Re: SmartInkubatorV2 all bird Без энкодера

Сообщение Umka » 07 апр 2017, 19:46

Сторожевой таймер?

Edvard
Сообщения: 18
Зарегистрирован: 02 мар 2017, 05:20
Откуда: Новосибирск

Re: SmartInkubatorV2 all bird Без энкодера

Сообщение Edvard » 08 апр 2017, 03:00

исправлена ошибка допущенная мной в подключенной библиотеке
Вложения
SmartInkubatorV2_4e_bez_encodera.zip
(8 КБ) 184 скачивания

Edvard
Сообщения: 18
Зарегистрирован: 02 мар 2017, 05:20
Откуда: Новосибирск

Re: SmartInkubatorV2 all bird Без энкодера

Сообщение Edvard » 17 май 2017, 12:10

Доброго времени суток!
Хочу оставить небольшой репорт.
Постройка инкубатора заняла не так много времени.
Первые 2 дня использовал термостат "W1209" т.к. с Китая не пришел термодатчик ds18b20, да и то оказался не такой, а в металлической трубке не мог установить ровную заданную температуру. В попытке его разобрать он был уничтожен, пришлось купить ds12b20 в магазине радио запчастей втридорога.
Повелся на цену Дешевого блока реле и не ожидал, что оно будет так часто и громко щелкать на нагреве. Приобрел твердотельное «Omron 2А» и инкуб стал абсолютно бесшумным.
[spoilerПотрошки]
IMG_20170517_183637.jpg
IMG_20170517_184229.jpg
[/spoiler]
конечно все по топорному.
Дни считаются исправно, зависов, залипаний.
Часы прошивал отдельно от основного скетча, потом отключал их, лил скетч инкубатора и подключал часы обратно.

Состав и затраты:
1. Корпус пенопласт "Несушка 2" на 77 яиц / подарил сосед
2. Нагревательные элементы 220В 70Вт / 700р
3. Arduino nano (Китай)/ 131р
4. Реле Omron 2A / 170р
5. Часы реального времени ds1307 / 130р
6. Термодатчики ds18b20 2шт / 220р
7. Дисплей ЖК 2004 с зеленой подсветкой / 230р
8. Двух канальный блок реле (позже на авто переворот поставлю) / 58р
9. Гигрометр DHT22 (Китай) / 240р (не установлен т.к. не разобрался со скетчем)
10. Гигрометр с выносным датчиком (Китай)/ 194р
11. Корпус был взят от мозгов ПММ / был
12. Кнопки 3шт. / 60р
13. Блок питания от зарядки мобильного телефона 5в 500mA / был
Итог: 2133р

У меня наблюдалась небольшая проблема после 12 дня инкубации утром и вечером, когда по времени включается проветривание, отключались нагреватели, вроде все как положено, но мощность, указанная на дисплее в процентах до ходила до 99%. А потом продолжался режим инкубации, и температура взлетала до 40 градусов.
Проблема решалась путем перезагрузки "дуни". Днем позже до меня дошло что для этого нам может помочь термостат "W1209" и питание дуни я погнал через его реле выставив при этом порог температуры в 38,7. И на этом я забыл об этой проблеме.
На 20 день 3 яйца проклюнулись и к шести утра следующих суток они начали "лупиться" остальные.
Первый раз инкубирую яйца.
Будут вопросы отвечу в меру своей подкованности :lol:

Аватара пользователя
Umka
Команда UM
Сообщения: 6274
Зарегистрирован: 04 июн 2015, 13:45
Откуда: Суджа
Контактная информация:

Re: SmartInkubatorV2 all bird Без энкодера

Сообщение Umka » 17 май 2017, 12:26

Под DHT22 я там делал функцию опроса, все работает.
Корпус такой лучше мышам скормить и склеить побольше и главное повыше.
Убегание ПИД до 99% можно остановить перед провертиванием переводом его вычисления в ручной режим.

Код: Выделить всё

myPID.SetMode(MANUAL); 
Output = 200;
и после завершения проветривания

Код: Выделить всё

myPID.SetMode(AUTOMATIC);

Regulserg
Сообщения: 29
Зарегистрирован: 13 янв 2017, 19:44
Откуда: Тольятти

Re: SmartInkubatorV2 all bird Без энкодера

Сообщение Regulserg » 18 май 2017, 11:17

Я так понимаю, эти функции надо вставить в блок скетча управления вентиляторами (проветривание)?

Аватара пользователя
Umka
Команда UM
Сообщения: 6274
Зарегистрирован: 04 июн 2015, 13:45
Откуда: Суджа
Контактная информация:

Re: SmartInkubatorV2 all bird Без энкодера

Сообщение Umka » 18 май 2017, 11:21

ну да, это не функция, это просто пара вызовов класса функции.

Regulserg
Сообщения: 29
Зарегистрирован: 13 янв 2017, 19:44
Откуда: Тольятти

Re: SmartInkubatorV2 all bird Без энкодера

Сообщение Regulserg » 18 май 2017, 11:49

Роман, это примерно так?:

//управляем вентиляторами///////////////////////////////////////////////////////
void fan(int fanTime) {
//float tempInk = sht1x.readTemperatureC();
DateTime now = RTC.now();
if ((now.hour() == 7 && now.minute() < fanTime) || (now.hour() == 19 && now.minute() < fanTime) || needFan == 1) {
digitalWrite(fan_pin, LOW);
//если наступило время проветривания или измеренная температура выше заданной на величину аварии, то включаем продувку.
digitalWrite(extend_heater_pin, HIGH); // при этом отключаем обогрев
digitalWrite(heater_pin, LOW);
heater_off = true;
myPID.SetMode(MANUAL);
Output = 200;
}
else {
digitalWrite(fan_pin, HIGH); //иначе выключаем.
heater_off = false;
myPID.SetMode(AUTOMATIC);
}
}

Аватара пользователя
Umka
Команда UM
Сообщения: 6274
Зарегистрирован: 04 июн 2015, 13:45
Откуда: Суджа
Контактная информация:

Re: SmartInkubatorV2 all bird Без энкодера

Сообщение Umka » 18 май 2017, 12:10

Да.

Edvard
Сообщения: 18
Зарегистрирован: 02 мар 2017, 05:20
Откуда: Новосибирск

Re: SmartInkubatorV2 all bird Без энкодера

Сообщение Edvard » 18 май 2017, 15:29

Umka писал(а):Под DHT22 я там делал функцию опроса, все работает.
Тямы не хватает его встроить, а этот скетч "SimpleSmartInkubatorDHT.ino" не видит этот датчик даже с поправками. Мб к следующему году получится прикрутить. :lol:
Umka писал(а):Корпус такой лучше мышам скормить и склеить побольше и главное повыше.
Я живу среди города в частном секторе и не думаю, что мне другой нужен. С этого вывел 10 на яйца и за глаза ;)

Аватара пользователя
Umka
Команда UM
Сообщения: 6274
Зарегистрирован: 04 июн 2015, 13:45
Откуда: Суджа
Контактная информация:

Re: SmartInkubatorV2 all bird Без энкодера

Сообщение Umka » 18 май 2017, 15:44

Работает там dht. Многие проверяли. Чего ему не работать?

Ну, для 10шт инкубатор заводить мне бы лень было. Хотя каждому своё.

Djon1980
Сообщения: 1
Зарегистрирован: 02 мар 2018, 05:11

Re: SmartInkubatorV2 all bird Без энкодера

Сообщение Djon1980 » 02 мар 2018, 05:16

Здравствуйте!
Я новичок в Ардуино. Подскажите пож-та, как подключить дисплей по I2C (А4 и А5) и таймер реального времени по I2C (А4 и А5). У меня Nano.

Аватара пользователя
Umka
Команда UM
Сообщения: 6274
Зарегистрирован: 04 июн 2015, 13:45
Откуда: Суджа
Контактная информация:

Re: SmartInkubatorV2 all bird Без энкодера

Сообщение Umka » 02 мар 2018, 11:58

Изображение

SergeiCRIM
Сообщения: 80
Зарегистрирован: 07 янв 2016, 06:52
Откуда: Севастополь

Re: SmartInkubatorV2 all bird Без энкодера

Сообщение SergeiCRIM » 02 мар 2018, 19:28

Привет. Ну вот, а я нигде не цеплял 1,5к. Это плохо?

Аватара пользователя
Umka
Команда UM
Сообщения: 6274
Зарегистрирован: 04 июн 2015, 13:45
Откуда: Суджа
Контактная информация:

Re: SmartInkubatorV2 all bird Без энкодера

Сообщение Umka » 03 мар 2018, 05:25

А она на модулях бывает. Но по 10К. Посмотри на часах и на датчике, должны быть. И Ардуино внутреннюю подтяжку пинов включает. Без подтяжки шина работать не будет. Там активные сигналы как раз от питания к земле шину тянут. Как и 1wire тоже.

grifon26
Сообщения: 10
Зарегистрирован: 03 мар 2018, 09:35

Re: SmartInkubatorV2 all bird Без энкодера

Сообщение grifon26 » 03 мар 2018, 09:39

Здравствуйте, я пробую сделать инкубатор по вашому скетчу но немогу разобратся с управлением мотора, ви сделали управление через 1 пін, а как мне сделать через два пина (без енкодера) которие управляют двума реле с концевиками на отключение. Спасибо.

Аватара пользователя
Umka
Команда UM
Сообщения: 6274
Зарегистрирован: 04 июн 2015, 13:45
Откуда: Суджа
Контактная информация:

Re: SmartInkubatorV2 all bird Без энкодера

Сообщение Umka » 03 мар 2018, 11:39

А зачем 2 пина? Ну, управляйте двумя реле с одного пина.

grifon26
Сообщения: 10
Зарегистрирован: 03 мар 2018, 09:35

Re: SmartInkubatorV2 all bird Без энкодера

Сообщение grifon26 » 10 мар 2018, 15:14

И все же немогу разобратся,
[spoiler]void turn(boolean needTurn) {
int turnPeriod;
int turnCommand;
EEPROM_read(11, turnPeriod);
lcd.setCursor(13, 4);
lcd.print("R");
if (turnPeriod == 0)
{ lcd.print(" OFF ");
return;
}
if (turnPeriod < 13) turnCommand = turnPeriod;
else if (turnPeriod > 12 && turnFlag == 0) { //если произошел поворот (сброшен флаг) и значение в памяти 13, то
turnCommand = random(1, 6); //берем случайное значение часов 1-6
turnFlag = 1; //защелкиваем флаг вычисления случайных значений до следующего поворота
}
currentTime = millis() / 1000;
lcd.print((loopTime - currentTime + turnCommand * 3600UL) / 60UL);
lcd.print("m");
if (needTurn == true) {
if (currentTime > (loopTime + turnCommand * 3600UL)) { // 3600000 сравниваем текущий таймер с переменной loopTime + период поворота в часах.
digitalWrite(povorot_vlivo_pin, !digitalRead(povorot_vlivo_pin)); // включаем/выключаем реле поворота
loopTime = currentTime; // в loopTime записываем новое значение
turnFlag = 0; //сбрасываем флаг поворота
}
}
}[/spoiler]
как сделать на два реле?
первое реле управлается на пин povorot_vlivo_pin
второе на povorot_vpravo_pin
Наверное нужно включить еще одную переменную , если повернулось вправо - то =1 если влево то =0.

Аватара пользователя
Umka
Команда UM
Сообщения: 6274
Зарегистрирован: 04 июн 2015, 13:45
Откуда: Суджа
Контактная информация:

Re: SmartInkubatorV2 all bird Без энкодера

Сообщение Umka » 10 мар 2018, 15:47

А я не пойму в чем сложность то? Если реле переключающие, то пускай вместе включаются, просто разные группы контактов использовать https://photos.app.goo.gl/6Jl9y7ozQJPrPii82

grifon26
Сообщения: 10
Зарегистрирован: 03 мар 2018, 09:35

Re: SmartInkubatorV2 all bird Без энкодера

Сообщение grifon26 » 11 мар 2018, 10:57

Можно ли так сделать:
[spoiler]void turn(boolean needTurn) {
int turnPeriod;
int turnCommand;
int povorot;
EEPROM_read(11, turnPeriod);
EEPROM_read(19, povorot);
lcd.setCursor(10, 0);
lcd.print("R");
if (poworot == 1) {
if (turnPeriod == 0)
{ lcd.print(" OFF ");
return; //если нулевой период поворота, то не поворачиваем яйца.
}
if (turnPeriod < 13) turnCommand = turnPeriod;
else if (turnPeriod > 12 && turnFlag == 0) {
turnCommand = random(1, 6);
turnFlag = 1;
}
currentTime = millis() / 1000;
lcd.print((loopTime - currentTime + turnCommand * 3600UL) / 60UL);
lcd.print("m");
if (needTurn == true) {
if (currentTime > (loopTime + turnCommand * 3600UL)) {
digitalWrite(turn_pin_r, HIGH);
delay(15000);
EEPROM_write(19, 2);
loopTime = currentTime;
turnFlag = 0;
}
}
}
if (poworot == 2) {
if (turnPeriod == 0)
{ lcd.print(" OFF ");
return; //если нулевой период поворота, то не поворачиваем яйца.
}
if (turnPeriod < 13) turnCommand = turnPeriod;
else if (turnPeriod > 12 && turnFlag == 0) {
turnCommand = random(1, 6);
turnFlag = 1;
}
currentTime = millis() / 1000;
lcd.print((loopTime - currentTime + turnCommand * 3600UL) / 60UL);
lcd.print("m");
if (needTurn == true) {
if (currentTime > (loopTime + turnCommand * 3600UL)) {
digitalWrite(turn_pin_l, HIGH);
delay(15000);
EEPROM_write(19, 1);
loopTime = currentTime;
turnFlag = 0;
}
}
}[/spoiler]

grifon26
Сообщения: 10
Зарегистрирован: 03 мар 2018, 09:35

Re: SmartInkubatorV2 all bird Без энкодера

Сообщение grifon26 » 12 мар 2018, 19:16

Скажите еще я вижу у Вас для подключения часов и lcd используются резистори по 1.5 КОм скажите а можно поставить по 1 кОм или по 2,2 кОм

Аватара пользователя
Umka
Команда UM
Сообщения: 6274
Зарегистрирован: 04 июн 2015, 13:45
Откуда: Суджа
Контактная информация:

Re: SmartInkubatorV2 all bird Без энкодера

Сообщение Umka » 12 мар 2018, 19:51

Это где?

grifon26
Сообщения: 10
Зарегистрирован: 03 мар 2018, 09:35

Re: SmartInkubatorV2 all bird Без энкодера

Сообщение grifon26 » 13 мар 2018, 05:00

i2c.jpg

Ответить