SmartInkubatorV2 all bird Без энкодера
SmartInkubatorV2 all bird Без энкодера
Всем привет.
Хочу опубликовать код. Ввиду не единственной проблемы с не работающими кнопками "плюс и минус", предложенные скетчи Романом заточены под энкодер.
Изменения потерпели в скетче только, касаемо энкодера. Теперь кнопки можно подключать "по старинке" от минуса на нужные пины
В дальнейшем хочу русифицировать интерфейс скетча.
Хочу опубликовать код. Ввиду не единственной проблемы с не работающими кнопками "плюс и минус", предложенные скетчи Романом заточены под энкодер.
Изменения потерпели в скетче только, касаемо энкодера. Теперь кнопки можно подключать "по старинке" от минуса на нужные пины
В дальнейшем хочу русифицировать интерфейс скетча.
- Вложения
-
- SmartInkubatorV2_4e_auto_all_bird_Bez_encoder__.zip
- (8.1 КБ) 213 скачиваний
- Umka
- Команда UM
- Сообщения: 6274
- Зарегистрирован: 04 июн 2015, 13:45
- Откуда: Суджа
- Контактная информация:
Re: SmartInkubatorV2 all bird Без энкодера
Благодарю, доброе дело!
Re: SmartInkubatorV2 all bird Без энкодера
А проблема с датой так и осталась?
И еще вчера система словила глюк- завис контроллер Pro Mini: пришел с работы- показания с датчика dallas какой то набор цифр, перезапустил питание- все восстановилось, но за это время температура в инкубаторе успела опуститься до 28,5 градусов. Не пойму причины- свет не отключали. Может контакт где пропадал. Идет 10 день инкубации на автоскетче Романа...
И еще вчера система словила глюк- завис контроллер Pro Mini: пришел с работы- показания с датчика dallas какой то набор цифр, перезапустил питание- все восстановилось, но за это время температура в инкубаторе успела опуститься до 28,5 градусов. Не пойму причины- свет не отключали. Может контакт где пропадал. Идет 10 день инкубации на автоскетче Романа...
- Umka
- Команда UM
- Сообщения: 6274
- Зарегистрирован: 04 июн 2015, 13:45
- Откуда: Суджа
- Контактная информация:
Re: SmartInkubatorV2 all bird Без энкодера
Сторожевой таймер?
Re: SmartInkubatorV2 all bird Без энкодера
исправлена ошибка допущенная мной в подключенной библиотеке
- Вложения
-
- SmartInkubatorV2_4e_bez_encodera.zip
- (8 КБ) 290 скачиваний
Re: SmartInkubatorV2 all bird Без энкодера
Доброго времени суток!
Хочу оставить небольшой репорт.
Постройка инкубатора заняла не так много времени.
Первые 2 дня использовал термостат "W1209" т.к. с Китая не пришел термодатчик ds18b20, да и то оказался не такой, а в металлической трубке не мог установить ровную заданную температуру. В попытке его разобрать он был уничтожен, пришлось купить ds12b20 в магазине радио запчастей втридорога.
Повелся на цену Дешевого блока реле и не ожидал, что оно будет так часто и громко щелкать на нагреве. Приобрел твердотельное «Omron 2А» и инкуб стал абсолютно бесшумным.
[spoilerПотрошки] [/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 яйца проклюнулись и к шести утра следующих суток они начали "лупиться" остальные.
Первый раз инкубирую яйца.
Будут вопросы отвечу в меру своей подкованности
Хочу оставить небольшой репорт.
Постройка инкубатора заняла не так много времени.
Первые 2 дня использовал термостат "W1209" т.к. с Китая не пришел термодатчик ds18b20, да и то оказался не такой, а в металлической трубке не мог установить ровную заданную температуру. В попытке его разобрать он был уничтожен, пришлось купить ds12b20 в магазине радио запчастей втридорога.
Повелся на цену Дешевого блока реле и не ожидал, что оно будет так часто и громко щелкать на нагреве. Приобрел твердотельное «Omron 2А» и инкуб стал абсолютно бесшумным.
[spoilerПотрошки] [/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 яйца проклюнулись и к шести утра следующих суток они начали "лупиться" остальные.
Первый раз инкубирую яйца.
Будут вопросы отвечу в меру своей подкованности

- Umka
- Команда UM
- Сообщения: 6274
- Зарегистрирован: 04 июн 2015, 13:45
- Откуда: Суджа
- Контактная информация:
Re: SmartInkubatorV2 all bird Без энкодера
Под DHT22 я там делал функцию опроса, все работает.
Корпус такой лучше мышам скормить и склеить побольше и главное повыше.
Убегание ПИД до 99% можно остановить перед провертиванием переводом его вычисления в ручной режим.
и после завершения проветривания
Корпус такой лучше мышам скормить и склеить побольше и главное повыше.
Убегание ПИД до 99% можно остановить перед провертиванием переводом его вычисления в ручной режим.
Код: Выделить всё
myPID.SetMode(MANUAL);
Output = 200;
Код: Выделить всё
myPID.SetMode(AUTOMATIC);
Re: SmartInkubatorV2 all bird Без энкодера
Я так понимаю, эти функции надо вставить в блок скетча управления вентиляторами (проветривание)?
- Umka
- Команда UM
- Сообщения: 6274
- Зарегистрирован: 04 июн 2015, 13:45
- Откуда: Суджа
- Контактная информация:
Re: SmartInkubatorV2 all bird Без энкодера
ну да, это не функция, это просто пара вызовов класса функции.
Re: SmartInkubatorV2 all bird Без энкодера
Роман, это примерно так?:
//управляем вентиляторами///////////////////////////////////////////////////////
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);
}
}
//управляем вентиляторами///////////////////////////////////////////////////////
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);
}
}
Re: SmartInkubatorV2 all bird Без энкодера
Тямы не хватает его встроить, а этот скетч "SimpleSmartInkubatorDHT.ino" не видит этот датчик даже с поправками. Мб к следующему году получится прикрутить.Umka писал(а):Под DHT22 я там делал функцию опроса, все работает.

Я живу среди города в частном секторе и не думаю, что мне другой нужен. С этого вывел 10 на яйца и за глазаUmka писал(а):Корпус такой лучше мышам скормить и склеить побольше и главное повыше.

- Umka
- Команда UM
- Сообщения: 6274
- Зарегистрирован: 04 июн 2015, 13:45
- Откуда: Суджа
- Контактная информация:
Re: SmartInkubatorV2 all bird Без энкодера
Работает там dht. Многие проверяли. Чего ему не работать?
Ну, для 10шт инкубатор заводить мне бы лень было. Хотя каждому своё.
Ну, для 10шт инкубатор заводить мне бы лень было. Хотя каждому своё.
Re: SmartInkubatorV2 all bird Без энкодера
Здравствуйте!
Я новичок в Ардуино. Подскажите пож-та, как подключить дисплей по I2C (А4 и А5) и таймер реального времени по I2C (А4 и А5). У меня Nano.
Я новичок в Ардуино. Подскажите пож-та, как подключить дисплей по I2C (А4 и А5) и таймер реального времени по I2C (А4 и А5). У меня Nano.
-
- Сообщения: 85
- Зарегистрирован: 07 янв 2016, 06:52
- Откуда: Севастополь
Re: SmartInkubatorV2 all bird Без энкодера
Привет. Ну вот, а я нигде не цеплял 1,5к. Это плохо?
- Umka
- Команда UM
- Сообщения: 6274
- Зарегистрирован: 04 июн 2015, 13:45
- Откуда: Суджа
- Контактная информация:
Re: SmartInkubatorV2 all bird Без энкодера
А она на модулях бывает. Но по 10К. Посмотри на часах и на датчике, должны быть. И Ардуино внутреннюю подтяжку пинов включает. Без подтяжки шина работать не будет. Там активные сигналы как раз от питания к земле шину тянут. Как и 1wire тоже.
Re: SmartInkubatorV2 all bird Без энкодера
Здравствуйте, я пробую сделать инкубатор по вашому скетчу но немогу разобратся с управлением мотора, ви сделали управление через 1 пін, а как мне сделать через два пина (без енкодера) которие управляют двума реле с концевиками на отключение. Спасибо.
- Umka
- Команда UM
- Сообщения: 6274
- Зарегистрирован: 04 июн 2015, 13:45
- Откуда: Суджа
- Контактная информация:
Re: SmartInkubatorV2 all bird Без энкодера
А зачем 2 пина? Ну, управляйте двумя реле с одного пина.
Re: SmartInkubatorV2 all bird Без энкодера
И все же немогу разобратся,
[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.
[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 Без энкодера
А я не пойму в чем сложность то? Если реле переключающие, то пускай вместе включаются, просто разные группы контактов использовать https://photos.app.goo.gl/6Jl9y7ozQJPrPii82
Re: SmartInkubatorV2 all bird Без энкодера
Можно ли так сделать:
[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]
[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]
Re: SmartInkubatorV2 all bird Без энкодера
Скажите еще я вижу у Вас для подключения часов и lcd используются резистори по 1.5 КОм скажите а можно поставить по 1 кОм или по 2,2 кОм