"Народный" инкубатор

BigVal
BigVal аватар
Offline
Зарегистрирован: 10.01.2017

Umka пишет:

Лучше бы исходник с Layout дал или в чем ты там рисуешь. По фотке же не видно половину дорожек. Все в тумане. Думаешь кто-то будет по фотке плату повторять и еще потом ошибку исправлять? 

Роман исходник выше, 15 пост темы

Umka
Umka аватар
Offline
Зарегистрирован: 19.10.2012

Ну да, я думал та плата была позже допилена.

lean_74
Offline
Зарегистрирован: 22.12.2015

lean_74 пишет:

Нарисовал плату, правда это всего лишь 3-я моя плата в Sprint-Layout, посему сильно просьба не пинать.

https://yadi.sk/d/nCYIDGV73E2aRv

Вот  же выше дал ссылку, там в lay6

lean_74
Offline
Зарегистрирован: 22.12.2015

сейчас в корпус заталкиваю в коробочку из Леруа за 37руб., и правлю скетч под новые выводы

BigVal
BigVal аватар
Offline
Зарегистрирован: 10.01.2017

Роман добрый день, вы бы лучше выложили ссылку по поводу проводящихся сейчас испытаний нового инкубатора. А то не все наверное ходят на Forumhouse. Может кому будет интересно. (Это не реклама).

Umka
Umka аватар
Offline
Зарегистрирован: 19.10.2012

Не вопрос. Начало тут https://www.youtube.com/watch?v=xPMhensZ3Pw

Но это совсем другой инкубатор (контроллер).

lean_74
Offline
Зарегистрирован: 22.12.2015

Umka пишет:

Не вопрос. Начало тут https://www.youtube.com/watch?v=xPMhensZ3Pw

Но это совсем другой инкубатор (контроллер).

Интерисует количество и диаметр вентиляционных отверстий, как впускных, так и выпускных., а меня сейчас три на вход, три на выход, диаметром 10мм, поставил одну небольшую ванночку, влажность без парогенератора 65,5% и не падает, он даже не включается, поставил вторую такую влажность выросла до 85,5 - парогениратор вообще вынул, за ненадобностью. И так вопрос:

1.Добавить отверстий? для лучшего воздухообмена, или их диаметр, или оставить как есть?

температуру держит отлично, на уставку выходит быстро.

lean_74
Offline
Зарегистрирован: 22.12.2015

6 день инкубации

Не дождавшись ответа от Романа загрузил 20 шт яиц, доверия к которым мало, т.к. возраст петушка 2 года, влажность регулируем площадью ванночек, просверлил еще 2 выходных отверстия, теперь три входных и пять выходных.

Umka
Umka аватар
Offline
Зарегистрирован: 19.10.2012

А как же я могу ответить не видя инкубатора? И даже видя не скажу наверняка. Я пошел по пути измерения CO2. Будем смотреть что покажут приборы в конце инкубации. Уже температура контрольного яйца выше прочих. 

http://zftlab.org/pages/2017021400.html

И похоже с нем вода закончилась http://esp8266.flymon.net/?macs=18FE34E0C1DF,18FE34DB15A6&graphs=hum,temp,co2,rssi,gpio&period=1h

А вот тепловизор типа http://zftlab.org/files/examples_js/ver_15a_umka.html

lean_74
Offline
Зарегистрирован: 22.12.2015

Мой снаружи 50Х50Х62 см, толщина стенок 5 см - какая то медицинская коробка с крышкой, внутри сделал две камеры одна 39Х39Х38 и другая примерно 10Х39Х39 

на седьмой день инкубации "забраковал" 6 штук - 4 не оплод, два погибшие эмбрионы, ну я не специалист, первый раз это делал.

так как у тебя Роман  сделано, я думаю, не каждый осилит. Сильно много электроники и сложность ее настройки не привлечет, а наоборот- отпугнет "потенциального покупателя". По моему, чем проще, тем лучше , по крайней мере для такого ленивого "колхозника", как я  :).

lean_74
Offline
Зарегистрирован: 22.12.2015

Вот чудо и случилось. Первые два появились на свет. Остальные еще пищат из своих яиц.

lean_74
Offline
Зарегистрирован: 22.12.2015

Из 14 оставшихся яиц, вылупилось к вечеру 5 цыплят, один уже прокрутился, но вылазить пока не хочет. еще есть два проклюнувшихся яйца, что будет назавтра - посмотрим. вывод затянутый,  потому что яЙца были очень большие, т.к. курам и петуху уже 2,5 года, куры разнеслись и иногда несут даже двухжелтковые, пытался собрать более-менее по размеру, но не сильно получилось. посему такой вот выход. плюс когда собирал на улице был мороз 30 градусов может какие яйца и поморозил. если к утру к пяти имеющимся еще 3 вылупятся, считаю для первого раза результат отличным. В воскресенье договорился взять 20 гусиных яиц от заводчиков - тут и будем проверять выводимость.

bwn
Offline
Зарегистрирован: 25.08.2014

С гусиками не торопитесь, они сложные в выводе.

lean_74
Offline
Зарегистрирован: 22.12.2015

bwn пишет:

С гусиками не торопитесь, они сложные в выводе.

Да договорился уже, как то некрасиво переобуваться. Будем завтра все мыть, а воскресенье вечером закладывать.

Umka
Umka аватар
Offline
Зарегистрирован: 19.10.2012

А был опыт выведения гусей? Не так все просто с ними.

lean_74
Offline
Зарегистрирован: 22.12.2015

Umka пишет:

А был опыт выведения гусей? Не так все просто с ними.

Нет опыта не было, значит будет. В 90-е , когда жрать было нечего, я держал доволно большое хозяйство, корова с теленком, поросята, кролики, куры, так что меня это не пугает, это после 2000-х стали жить лучше, всю живность перевели, будем вспоминать.

lean_74
Offline
Зарегистрирован: 22.12.2015

Сделал новую версию инкубатора на промини https://yadi.sk/d/iH2s0-ZR3GRrxh правда скачал перевернутый шаблон

0001#include <avr/wdt.h>
0002//#include <LiquidCrystal_I2C.h>
0003#include <LiquidCrystal.h>
0004#include <EEPROM.h>
0005//#include "DHT.h"
0006#include <Si7021.h> //мой датчик влажности
0007#include <OneWire.h>
0008#include <Wire.h>
0009#define START_CONVERT 0
0010#define READ_TEMP 1
0011 
0012 
0013 
0014//#define DHTPIN 11     // what digital pin we're connected to
0015//#define DHTTYPE DHT11   // DHT 11, DHT 22
0016//DHT dht(DHTPIN, DHTTYPE);
0017SI7021 si7021; //раскоментировать, если используем датчик si7021.
0018 
0019//LiquidCrystal_I2C lcd(0x27, 16, 2);  // инициализация библиотеки дисплея
0020LiquidCrystal lcd(17, 16, 15, 14, 13, 12);// (RS, E, DB4, DB5, DB6, DB7)
0021 
0022//номера выводов кнопок
0023//#define EXT_HEATING                  // ИСПОЛЬЗУЕМ ДОП.НАГРЕВАТЕЛЬ ВМЕСТО УВЛАЖНИТЕЛЯ. Если нужен увлажнитель, просто закомментируйте эту строку.
0024#define heater_pin 7                  // нагреватель
0025#define humidifer_pin 4               // увлажнитель
0026//#define fan_pin 10                     // вентилятор
0027#define alarm_pin 9                   // пин аварии
0028//#define beeper_pin 17                   //пищалка по аварии
0029 
0030//#define turn_pin 9                     // управление поворотом вперед
0031//#define pin9 9                    // проверка
0032//#define extend_heater_pin 8         // дополнительный нагреватель
0033#define button_minus_pin 0            //пин кнопки "минус"
0034#define button_plus_pin  1            //пин кнопки "плюс"
0035#define button_enter_pin 10           //пин кнопки "enter"
0036#define DS18B20_Pin 11                 //пин термометра
0037//Пин 2 Вход обработки прерывания для детектора нуля и управления семистором
0038 
0039OneWire ds(DS18B20_Pin);
0040 
0041// Контакты   Bl Pi Ye  Or
0042int pins[] = {3, 5, 6, 8}; //Задаем пины по порядку для шаговика
0043int phases = 8; //  Для полушагового режима
0044 
0045// Для полушагового режима
0046bool motorPhases[8][4] = { // [phase][pin]
0047  // -------- pins ----------
0048  // Winding    A  B  A  B
0049  // Motor Pin  1  2  3  4
0050  // Color      Bl Pi Ye Or
0051  {             1, 1, 0, 0},
0052  {             0, 1, 0, 0},
0053  {             0, 1, 1, 0},
0054  {             0, 0, 1, 0},
0055  {             0, 0, 1, 1},
0056  {             0, 0, 0, 1},
0057  {             1, 0, 0, 1},
0058  {             1, 0, 0, 0}
0059};
0060int phase = 0;
0061int _step = 1; // Если у шага поменять знак, на -1 - изменится направление вращения шаговика.
0062 
0063boolean button_minus;                // статус нажатия кнопок
0064boolean button_plus;
0065boolean button_enter;
0066boolean value = HIGH; // переменная состояния релешки увлажнителя
0067 
0068unsigned long currentTime;            // задаем переменные для тайминга поворота
0069unsigned long loopTime;
0070unsigned long serialTime; //this will help us know when to talk with processing
0071 
0072boolean hotFlag1 = 0;              // флаг включения обогревателя основного   1-ошибка, включать нельзя
0073//boolean fanFlag = 0;        // флаг включения вентилятора проветривания 1-включено проветривание
0074unsigned long trhMillis = 0;
0075unsigned long humMillis = 0;
0076 
0077boolean flag = 0;
0078int clockTime = 0; // флаг того что выводим температуру или влажность
0079unsigned long lastMillis = millis();
0080int TimeTemp = 4;  //время следующего измерения температуры в секундах
0081int TimeTurn = 20;  //время поворота в десятых долях секунды
0082byte TurnNow = 0; // текущая задержка времени для переворота
0083const unsigned long TRHSTEP   = 300UL;  // Период опроса датчиков
0084 
0085//int counter=0;//для проверки вачдога
0086 
0087volatile uint8_t minut = 0;
0088//volatile uint8_t chas=0;
0089int chas = 0;
0090volatile uint8_t sec = 0;
0091int den = 0;
0092int oldden = 0;
0093int oldchas = 0;
0094 
0095int temp = 0; // температура Далласа
0096float temp1 = 0; // температура Далласа с десятыми
0097float temp2 = 0; // температура DHT, si7021
0098float hum = 0;
0099 
0100int del = 80;                     // переменная ожидания между выборами меню
0101unsigned int interval = 200;      // интервал сколько будет длиться цикл while, после чего перейдёт к следующему меню.(кол-во итераций)
0102 
0103boolean out = 0; //управление симистором yul-i-an
0104int reg, er, zad; //    yul-i-an
0105double I, Kp = 3, Ki = 0.45, Kd = 0.6, pre_err, err; //    yul-i-an
0106 
0107//unsigned long alarmDelay;
0108 
0109float needTemp = 37.6;                  // нужная для текущего дня температура инкубации (по умолчанию)
0110float needHum = 60.5;                   // ---- влажность
0111int ventTime = 2;                       // длительность проветривания
0112boolean needTurn = false;               // нужен ли поворот яиц?
0113int bird = 0;
0114 
0115// make some custom characters:
0116byte znak_g[8] = {//г
0117  0b11111,
0118  0b10001,
0119  0b10000,
0120  0b10000,
0121  0b10000,
0122  0b10000,
0123  0b10000,
0124  0b00000
0125};
0126byte znak_b[8] = {//Б
0127  0b11111,
0128  0b10001,
0129  0b10000,
0130  0b11110,
0131  0b10001,
0132  0b10001,
0133  0b11110,
0134  0b00000
0135};
0136 
0137byte znak_p[8] = {
0138  0b11111,
0139  0b10001,
0140  0b10001,
0141  0b10001,
0142  0b10001,
0143  0b10001,
0144  0b10001,
0145  0b00000
0146};
0147byte znak_i[8] = {
0148  0b10001,
0149  0b10001,
0150  0b10011,
0151  0b10101,
0152  0b11001,
0153  0b10001,
0154  0b10001,
0155  0b00000
0156};
0157 
0158byte znak_l[8] = {
0159  0b00111,
0160  0b01001,
0161  0b10001,
0162  0b10001,
0163  0b10001,
0164  0b10001,
0165  0b10001,
0166  0b00000
0167};
0168 
0169byte light_znak[8] = {
0170  0b10000,
0171  0b10000,
0172  0b10000,
0173  0b11110,
0174  0b10001,
0175  0b10001,
0176  0b01110,
0177  0b00000
0178};
0179 
0180byte znak_u[8] = {
0181  0b10001,
0182  0b10001,
0183  0b10001,
0184  0b01111,
0185  0b00001,
0186  0b10001,
0187  0b01110,
0188  0b00000
0189};
0190 
0191 
0192byte znak_ia[8] = {
0193  0b01111,
0194  0b10001,
0195  0b10001,
0196  0b01111,
0197  0b00101,
0198  0b01001,
0199  0b10001,
0200  0b00000
0201};
0202byte znak_d[8] = {
0203  0b01110,
0204  0b01010,
0205  0b01010,
0206  0b01010,
0207  0b01010,
0208  0b11111,
0209  0b10001,
0210  0b00000
0211};
0212byte znak_ch[8] = {
0213  0b10001,
0214  0b10001,
0215  0b10001,
0216  0b01111,
0217  0b00001,
0218  0b00001,
0219  0b00001,
0220  0b00000
0221};
0222byte znak_c[8] = {
0223  0b10010,
0224  0b10010,
0225  0b10010,
0226  0b10010,
0227  0b10010,
0228  0b10010,
0229  0b11111,
0230  0b00001
0231};
0232 
0233//расчет мощности по ПИД закону регулирования
0234//_------------------------------------------------------------
0235#define kP 6//коэффициент пропорциональности 6
0236#define p_min 0.0//минимум П составляющей - не < 0
0237#define p_max 100.0//максимум П составляющей - не > 100
0238#define kI 0.100//коэффициент интегрирования 0.025
0239#define i_min 0.0//минимум И составляющей
0240#define i_max 30.0//максимум И составляющей
0241#define kd 0//коэффициент диференциирования
0242#define d_ctl 7.0//зона пропорциональности ust-d_ctl
0243#define out_min 0//минимальный выходной %
0244#define out_max 100//максимальный выходной %
0245//возвращает необходимую мощность
0246uint8_t PIctl(float temp, float ust) {
0247 
0248  uint8_t out = 0; //uint8_t
0249  static float i = 0;
0250  static float ed = 0; ///
0251  float e, p;
0252  float d;///
0253  e = (ust - temp); //ошибка регулирования
0254  p = (temp < ust - d_ctl) ? p_max : (temp > ust) ? p_min : (kP * e); //П составляющая
0255  i = (i < i_min) ? i_min : (i > i_max) ? i_max : i + (kI * e); //И составляющая
0256  d = kd * (e - ed); //Д составляющая
0257  ed = e; ///
0258  out = (p + i + d < out_min) ? out_min : (p + i + d > out_max) ? out_max : p + i + d;
0259  //вывод для настройки
0260  //     Serial.print(" e  ");
0261  //      Serial.print(e);
0262  //      Serial.print("  p ");
0263  //      Serial.print(p);
0264  //      Serial.print("  i ");
0265  //      Serial.print(i);
0266  //      Serial.print("  out ");
0267  //      Serial.println(out);
0268  return out;
0269}
0270//---------------------------------------------------------------
0271 
0272 
0273 
0274void readSet() {
0275  den = EEPROM_int_read(100);
0276  chas = EEPROM_int_read(102);
0277  int bird;                  // выбор птицы
0278  int r_array[6][4][5] = {
0279    {{2, 382, 600, 0, 1}, {12, 376, 600, 3, 1}, {15, 374, 480, 10, 1}, {18, 370, 855, 10, 0}},
0280    {{2, 378, 550, 0, 1}, {7, 378, 500, 3, 1}, {14, 378, 500, 10, 1}, {16, 375, 700, 0, 0}},
0281    {{7, 382, 700, 0, 1}, {14, 378, 600, 0, 1}, {25, 378, 600, 10, 1}, {28, 375, 855, 0, 0}},
0282    {{2, 380, 600, 0, 1}, {7, 378, 550, 0, 1}, {29, 375, 450, 10, 1}, {30, 370, 750, 0, 0}},
0283    {{7, 378, 700, 0, 1}, {14, 378, 600, 0, 1}, {27, 378, 600, 15, 1}, {30, 375, 855, 0, 0}},
0284    {{8, 377, 650, 0, 1}, {14, 377, 500, 0, 1}, {25, 375, 650, 10, 1}, {28, 375, 655, 10, 0}},
0285  };
0286//ковалев
0287//    {{2, 382, 650, 0, 1}, {12, 377, 540, 5, 1}, {18, 374, 480, 20, 1}, {20, 371, 855, 10, 0}},  // chick
0288//    {{2, 382, 600, 0, 1}, {12, 376, 600, 3, 1}, {15, 374, 480, 10, 1}, {18, 370, 855, 10, 0}},  // quail
0289//    {{7, 381, 700, 0, 1}, {13, 376, 600, 3, 1}, {25, 373, 560, 20, 1}, {30, 370, 855, 10, 0}},  // duck
0290//    {{15, 380, 610, 5, 1}, {26, 375, 520, 20, 1}, {27, 374, 690, 10, 0}, {35, 370, 800, 0, 0}}, // muskus
0291//    {{3, 379, 630, 0, 0}, {13, 378, 540, 3, 1}, {26, 375, 560, 20, 1}, {30, 372, 590, 10, 0}},  // goose
0292//    {{6, 379, 560, 0, 1}, {12, 376, 530, 3, 1}, {26, 373, 520, 20, 1}, {30, 370, 855, 10, 0}},  // turkey
0293 
0294  //Serial.println("readset=");
0295 
0296  bird =  EEPROM_int_read(110);
0297  for (int d = 4; d >= 0; d--) {
0298    if (den <= r_array[bird][d][0]) { //у Ковалева < ,а у меня <= 
0299      needTemp = float(r_array[bird][d][1]) / 10; //
0300      needHum = float(r_array[bird][d][2]) / 10; //
0301      ventTime = r_array[bird][d][3];
0302      needTurn = r_array[bird][d][4];
0303    }
0304  }
0305  //TimeTurn=  EEPROM_int_read(98);
0306//    EEPROM.write(10, TurnNow);
0307//int turnPeriod = EEPROM_int_read(104);
0308TurnNow = EEPROM.read(120);
0309//int intTurnNow=TurnNow;
0310//if ((intTurnNow<0) || (intTurnNow>turnPeriod) ){
0311//  TurnNow=0;
0312//  EEPROM.write(120, TurnNow);
0313//}
0314  if (den > 36 || den < 0) {
0315    den = 0; //
0316  }
0317  if (chas > 24) {
0318    chas = 0; //
0319  }
0320  if (minut > 60) {
0321    minut = 0; //
0322  }
0323 
0324}
0325 
0326void setup() {
0327  wdt_disable(); // запретили как можно скорее собаку, что-бы не уйти в бесконечный ребут
0328//  Serial.begin(9600);
0329  //   readSet();
0330  lcd.begin(16,2);
0331//  lcd.backlight();     // Включаем подсветку дисплея
0332  lcd.clear();
0333 
0334  // create a new character
0335  //  lcd.createChar(5, znak_g);//г
0336  lcd.createChar(5, znak_b);//Б
0337  lcd.createChar(1, znak_i);//И
0338  lcd.createChar(2, znak_p);//П
0339  lcd.createChar(3, znak_l);//Л
0340  lcd.createChar(4, light_znak);  // мягкий хнак
0341  lcd.createChar(7, znak_d);  //Д
0342  lcd.createChar(8, znak_c); //Ц
0343  lcd.createChar(6, znak_u);//У
0344 
0345  lcd.setCursor(0, 0);
0346 
0347  lcd.print("   HAPO");
0348  lcd.write(7);
0349  lcd.print("H");
0350  lcd.write(4);
0351  lcd.print("|");
0352  lcd.write(1);
0353  lcd.setCursor(0, 1);
0354  lcd.print("   ");
0355  lcd.write(1);
0356  lcd.print("HK");
0357  lcd.write(6);
0358  lcd.write(5);
0359  lcd.print("ATOP");
0360 
0361 
0362 
0363  Wire.begin();        // старт I2C
0364 
0365  //   dht.begin();
0366  si7021.begin(); // Runs : Wire.begin() + reset() // старт датчика влажности
0367  delay(3000);// подождем пока датчик запуститься, и завтавка погорит
0368  si7021.setHumidityRes(12); // Humidity = 12-bit / Temperature = 14-bit //максимальное разрешение
0369 
0370 
0371  lcd.createChar(5, znak_g);//г
0372  readSet();  // читаем настройки из еепром
0373 
0374 
0375 
0376  // настройкa часов
0377  TCCR1A = (1 << WGM11); //режим14 FAST PWM
0378  TCCR1B = (1 << CS12) | (1 << WGM13) | (1 << WGM12); //делить частоту CPU на 256
0379  ICR1 = 62499; // (16000000MHz /div256) -1 = 1 раз в секунду
0380  TIMSK1 = (1 << TOIE1); //разрешить прерывание
0381 
0382  tempProcess(START_CONVERT);//конвентируем dallas
0383 
0384  attachInterrupt(0, zero_crosss_int, RISING);//внешнее прерывание на D2
0385 
0386  //pinMode(extend_heater_pin, OUTPUT);      //пин дополнительного нагревателя. Переводим в 1 чтобы не включать реле.
0387  //digitalWrite(extend_heater_pin, HIGH);
0388  pinMode(heater_pin, OUTPUT);
0389//  pinMode(turn_pin, OUTPUT);      // устанавливаем выводы
0390  //  pinMode(pin9, INPUT);      // устанавливаем выводы
0391//  digitalWrite(turn_pin, LOW);
0392  //digitalWrite(turn_pin2, HIGH);
0393  pinMode(humidifer_pin, OUTPUT);
0394  digitalWrite(humidifer_pin, LOW);
0395//  pinMode(fan_pin, OUTPUT);
0396//  digitalWrite(fan_pin, LOW);
0397  pinMode(alarm_pin, OUTPUT);
0398  digitalWrite(alarm_pin, HIGH);
0399  pinMode(button_minus_pin, INPUT_PULLUP); //подтягиваем входы кнопок к плюсу встроенными резисторами
0400  pinMode(button_plus_pin, INPUT_PULLUP);
0401  pinMode(button_enter_pin, INPUT_PULLUP);
0402   
0403  for (int i = 0; i < 4; i++) pinMode(pins[i], OUTPUT);//настраиваем выводы для шаговика
0404  for (int i = 0; i < 4; i++) digitalWrite(pins[i], LOW);
0405   
0406   
0407//  alarmDelay = millis();
0408 
0409  wdt_enable(WDTO_8S); // активировали таймер, каждые 8 секунд его нужно сбрасывать
0410 
0411}
0412 
0413ISR (TIMER1_OVF_vect) {
0414  sec++ ; //инкремент переменной каждую секунду
0415  if (sec > 59) {
0416    sec = 0;
0417    minut++;
0418  }
0419  if (minut > 59) {
0420    minut = 0;  // при записи каждый час хватит памяти на 11 лет
0421    chas++;
0422  }
0423  if (chas > 23) {
0424    chas = 0;  //readSet(); но нам главное знать день инкубации
0425    den++;
0426  }
0427  if (den > 36) {
0428    den = 0;  // частный случай для нас не принципиальный, у нас день инкубации
0429  }
0430}
0431 
0432void loop() {
0433  wdt_reset(); // говорим собаке что "В Багдаде все спокойно", начинается очередной отсчет 8-х секунд.
0434//  Serial.print("pin9=");
0435//  Serial.println(digitalRead(alarm_pin));
0436//  Serial.print("chas=");
0437//  Serial.println(chas);
0438//  Serial.print("oldchas=");
0439//  Serial.println(oldchas);
0440//  Serial.print("oldden=");
0441//  Serial.println(oldden);
0442//  Serial.print("button_plus=");
0443//  Serial.println(button_plus);
0444//  Serial.println("   ");
0445 
0446  if (oldchas != chas) { // раз в час сохраняем время
0447    EEPROM_int_write(102, chas);
0448    oldchas = chas;
0449    turn(needTurn);
0450    wdt_reset();
0451  }
0452  if (oldden != den) { // раз в день читаем настройки заново
0453    EEPROM_int_write(100, den);
0454    readSet();
0455    oldden = den;
0456  }
0457  button_read();
0458  if (!button_enter) {
0459    delay(del); //
0460    lcd.clear();
0461    menu();
0462  }
0463  if (!button_plus) {
0464    delay(del);
0465//   lcd.clear();
0466//   alarmDelay = millis();    // задержка аварии по нажатии кнопки Минус
0467  }
0468  if (!button_minus) {
0469                                                                                                                                                             delay(del);
0470    lcd.clear();
0471  //  digitalWrite(turn_pin, !digitalRead(turn_pin));       // включаем/выключаем реле поворота по кнопке Плюс
0472      lcd.setCursor(3, 0);
0473      lcd.write(2);
0474      lcd.print("EPEBOPOT");  // перепелка
0475 
0476   //  _step=- _step;
0477     for (int k = 0; k <127; k++) {// 4076 на полный оборот передаточное число 63.68395:1
0478        phase += _step;
0479        if (phase > 7) phase = 0;
0480        if (phase < 0) phase = 7;
0481       
0482        for (int i = 0; i < 4; i++) {
0483          digitalWrite(pins[i], ((motorPhases[phase][i] == 1) ? HIGH : LOW));
0484        }
0485        // Пауза на вращение на один полушаг
0486         delayMicroseconds(8000);
0487         wdt_reset();
0488     }
0489  }else //отключаем пины шаговика, чтобы не грелся понапрасну 
0490    for (int i = 0; i < 4; i++) {// тут проверочку сделать, чтобы все время не отключать, уже отключенный, поворот
0491    digitalWrite(pins[i], LOW);
0492  }
0493 
0494  lcd.setCursor(0, 0);
0495  if (millis() > serialTime)
0496  {
0497    getSensors(); // получаем данные с датчиков
0498 
0499    PID();//расчитываем ПИД yul-i-an
0500    serialTime += 1200;//1200
0501// err=needTemp-temp1;
0502// Serial.print("needTemp=");
0503// Serial.println(needTemp);
0504// Serial.print("temp1=");
0505// Serial.println(temp1);
0506// Serial.print("err=");
0507// Serial.println(err);
0508// Serial.print("zad=");
0509// Serial.println(zad);
0510//     Serial.print("fanFlag=");
0511//     Serial.println(fanFlag);
0512//     Serial.print("hotFlag1=");
0513//     Serial.println(hotFlag1);
0514//     Serial.print("needTemp=");
0515//     Serial.println(needTemp);
0516//      Serial.println("");
0517  }
0518 
0519  if (flag == 0)
0520  {
0521    lastMillis = millis();
0522    clockTime = !clockTime;
0523    flag = 1;
0524  }
0525 
0526  if (millis() - lastMillis >= TimeTemp * 1000) {
0527    flag = 0;
0528  }
0529  if (clockTime == 1) {
0530    lcd.setCursor(0, 0); // выводим часы и день инкубации
0531    if (chas < 10) lcd.print(" ");
0532    lcd.print(chas, DEC);
0533    lcd.print(":");
0534    if (minut < 10)lcd.print(0);
0535    lcd.print(minut, DEC);
0536    lcd.print(" ");
0537    lcd.write(7);
0538    lcd.print("EH");
0539    lcd.write(4);
0540    lcd.print(" ");
0541    lcd.print(den, DEC);
0542    lcd.print("     ");
0543    lcd.setCursor(0, 1);
0544    lcd.print("P=");
0545    lcd.print(zad);              // печать температуры на дисплей temp%10
0546//    lcd.print((char)223);
0547    lcd.print("% ");
0548    printbird(bird);
0549  }
0550  else {
0551 
0552    lcd.setCursor(0, 0);                 // устанавливаем курсор в 0-ом столбце, 0 строка (начинается с 0)
0553    lcd.print("T1=");
0554    lcd.print(temp / 10, 1);            // печать температуры на дисплей temp
0555    lcd.print(".");
0556    lcd.print(temp % 10, 1);            // печать температуры на дисплей temp%10
0557 
0558    lcd.print((char)223);
0559    lcd.print(" (");
0560    lcd.print(needTemp, 1);
0561    lcd.print((char)223);
0562    lcd.print(")   ");
0563    lcd.setCursor(0, 1);
0564    lcd.print("H =");
0565    lcd.print(hum, 1);           // печать влажности на дисплей
0566    lcd.print("%");
0567    lcd.print(" (");
0568    lcd.print(needHum, 1);
0569    lcd.print("%) ");
0570 
0571  }
0572 
0573  getSensors(); // получаем данные с датчиков
0574  humidifer(needHum);
0575  //  turn(needTurn); // переворот перенесли при смене каждого часа
0576  fan(ventTime);
0577  alarm(needTemp);
0578 
0579//  if (fanFlag) { //если флаг вентилятора включен выключем тены до температуры 32 градуса и включаем вентилятор
0580//    digitalWrite(fan_pin, LOW); //
0581//    if (temp1 >= 32)
0582//    { hotFlag1 = 1;
0583//    } else  {
0584//      hotFlag1 = 0; //
0585//    }
0586 
0587//  } else {
0588//    //       digitalWrite(extend_heater_pin, HIGH); //поверить!!!!
0589////    digitalWrite(fan_pin, HIGH); //
0590//    hotFlag1 = 0;
0591//  }
0592 
0593}
0594 
0595 
0596//регулятор ПИД
0597void PID() {
0598  err = needTemp - temp1;
0599  if (hotFlag1 == 0) I = I + err; //если проветривание или авария не включаем
0600 
0601  //   zad=Kp*err+(Ki*I*0.25)+(Kd*(err-pre_err)/0.25);
0602  zad = PIctl(temp1, needTemp); //расчет мощности
0603  pre_err = err;
0604  if (temp1 >= 39.5) //это при перегреве
0605  {
0606    zad = 0;
0607    I = 0;
0608  }
0609  if (zad < 0) {
0610    zad = 0;
0611    I = 0;
0612  }
0613  if (zad > 100) {
0614    zad = 100;
0615  }
0616  //   Serial.print("reg=");
0617  //   Serial.println(reg);
0618 
0619}
0620//Внешнее прерывание детектора нуля
0621void zero_crosss_int()
0622{
0623  ResOut();//Вызов функции управления симистором по алгоритму Брезенхема
0624}
0625 
0626//управление симистором
0627void ResOut() {
0628  delayMicroseconds(1230);//для попадания в ноль
0629  reg = zad + er;
0630  if (reg < 50) {
0631    out = 0;
0632    //    PORTD &= ~_BV(PD6); // установить "0" на линии 6 порта D
0633    //    PORTD &= ~(1 << 6);
0634    er = reg ;
0635 
0636  }
0637  else {
0638    out = 1;
0639    //    PORTD |= _BV(PD6);
0640    // PORTD |= (1 << 6);
0641    er = reg - 100;
0642  }
0643  if (hotFlag1 == 0) {
0644    digitalWrite(heater_pin, out); //если проветривание или авария не включаем
0645 
0646  }
0647  else {
0648    digitalWrite(heater_pin, LOW);
0649 
0650  }
0651}
0652 
0653 
0654void button_read() {//функция проверки нажатия кнопки
0655  button_minus = digitalRead(button_minus_pin); //запоминаем значение кнопки
0656  button_plus = digitalRead(button_plus_pin); //запоминаем значение кнопки
0657  button_enter = digitalRead(button_enter_pin); //запоминаем значение кнопки
0658// if (!button_minus || !button_plus || !button_enter) beeper(50);
0659  wdt_reset();
0660}
0661 
0662 
0663//меню
0664void menu() {
0665  startInk();
0666  time_setup_chas();
0667  time_setup_minut();
0668  bird_setup();
0669  turn_setup();
0670  //  turn_time_setup();
0671//  alarm_setup();
0672//  vent_setup();
0673}
0674 
0675// записываем в память день начала инкубации
0676void startInk() {
0677  String str_menu = "START INK";
0678  int perem_menu = den;
0679  int adress_errom = 100;
0680  int perem_max = 36;
0681  String str_perem = "Day";
0682  den = setup_menu(str_menu, perem_menu, adress_errom, perem_max, str_perem);
0683}
0684//устанавливаем часы
0685void time_setup_chas() {
0686  String str_menu = "SETUP HOUR";
0687  int perem_menu = chas;
0688  int adress_errom = 102;
0689  int perem_max = 23;
0690  String str_perem = "Hour";
0691  chas = setup_menu(str_menu, perem_menu, adress_errom, perem_max, str_perem);
0692}
0693//устанавливаем минуты
0694void time_setup_minut() {
0695  String str_menu = "SETUP minute";
0696  int perem_menu = minut;
0697  int adress_errom = 0;
0698  int perem_max = 59;
0699  String str_perem = "minute";
0700  minut = setup_menu(str_menu, perem_menu, adress_errom, perem_max, str_perem);
0701}
0702 
0703//выбираем птицу /////////////////////////////////////////////////////////
0704 
0705void bird_setup() {
0706  String str_menu = "SETUP bird";
0707  int perem_menu = bird;
0708  int adress_errom = 110;
0709  int perem_max = 5;
0710  String str_perem = "bird";
0711  bird = setup_menu(str_menu, perem_menu, adress_errom, perem_max, str_perem);
0712}
0713 
0714 
0715//устанавливаем поворот
0716void turn_setup() {
0717  int turnPeriod = EEPROM_int_read(104);              //период поворота лотков в часах
0718 
0719  String str_menu = "TURN SETUP";
0720  int perem_menu = turnPeriod;
0721  int adress_errom = 104;
0722  int perem_max = 12;
0723  String str_perem = "TURN Hour";
0724  turnPeriod = setup_menu(str_menu, perem_menu, adress_errom, perem_max, str_perem);
0725}
0726 
0727////устанавливаем время переворота
0728//void turn_time_setup() {
0729//int TimeTurn=EEPROM_int_read(98);                //период поворота лотков в часах
0730//
0731//String str_menu= "TURN TIME";
0732//int perem_menu=TimeTurn;
0733//int adress_errom=98;
0734//int perem_max=99;
0735//String str_perem="TURN time";
0736//TimeTurn= setup_menu(str_menu,perem_menu,adress_errom,perem_max,str_perem);
0737//}
0738 
0739 
0740//устанавливаем сигнализацию
0741//void alarm_setup() {
0742//  int  alarmTemp = EEPROM_int_read(106);
0743//  String str_menu = "ALARM SETUP";
0744//  int perem_menu = alarmTemp;
0745//  int adress_errom = 106;
0746//  int perem_max = 10;
0747//  String str_perem = "T.Alarm +- C";
0748//  alarmTemp = setup_menu(str_menu, perem_menu, adress_errom, perem_max, str_perem);
0749//}
0750 
0751//устанавливаем вентиляцию
0752//void vent_setup() {
0753//  int fanTemp = EEPROM_int_read(108);
0754//  String str_menu = "A.FAN SETUP";
0755//  int perem_menu = fanTemp;
0756//  int adress_errom = 108;
0757//  int perem_max = 40;
0758//  String str_perem = "T.Fan C";
0759//  fanTemp = setup_menu(str_menu, perem_menu, adress_errom, perem_max, str_perem);
0760//}
0761 
0762int setup_menu(String str_menu, int perem_menu, int adress_errom, int perem_max, String str_perem) {
0763  lcd.clear();
0764  delay(del);
0765  button_read();
0766  lcd.setCursor(0, 0);
0767  lcd.print(str_menu);
0768  lcd.print("         ");
0769  delay(1000);
0770  int x = 0;
0771  while (1) {
0772    x++;
0773    if (x > interval) break;
0774    button_read();
0775    if (adress_errom != 0) perem_menu = EEPROM_int_read(adress_errom);
0776    if (!button_enter) {
0777      delay(del);
0778      lcd.clear(); //очищаем экран
0779      break;
0780    }
0781    if (!button_minus) {
0782      perem_menu--;
0783      if (perem_menu < 0) perem_menu = perem_max;
0784      if (adress_errom != 0) EEPROM_int_write(adress_errom, perem_menu);
0785      lcd.clear();
0786      readSet();
0787    }
0788 
0789    if (!button_plus) {
0790      perem_menu++;
0791      if (perem_menu > perem_max) perem_menu = 0;
0792      if (adress_errom != 0) EEPROM_int_write(adress_errom, perem_menu);
0793      lcd.clear();
0794      readSet();
0795    }
0796    if (adress_errom != 0) perem_menu = EEPROM_int_read(adress_errom);
0797 
0798    lcd.setCursor(0, 0);
0799    if (str_perem == "bird") {
0800      lcd.print("BIRD ");
0801      printbird(perem_menu);
0802 
0803      lcd.print("           ");
0804 
0805    } else {
0806      lcd.print(str_perem);
0807      lcd.print("= ");
0808      lcd.print(perem_menu);
0809      lcd.print("           ");
0810    }
0811    lcd.setCursor(0, 1);
0812    lcd.print("START NEXT +1");
0813    delay(del);
0814  }
0815  return perem_menu;
0816}
0817 
0818void printbird(int nbird) {
0819  switch (nbird) {
0820    case 0:
0821      lcd.print("K");  // курица
0822      lcd.write(6);
0823      lcd.print("P");  // курица
0824      lcd.write(1);
0825      lcd.write(8);
0826      lcd.print("A    ");  // курица
0827      break;
0828    case 1:
0829      lcd.write(2);
0830      lcd.print("EPE");  // перепелка
0831      lcd.write(2);
0832      lcd.print("E");  // перепелка
0833      lcd.write(3);
0834      lcd.print("KA ");  // перепелка
0835      break;
0836    case 2:
0837      lcd.write(6);
0838      lcd.print("TKA      ");   // утка
0839      break;
0840    case 3:
0841      lcd.write(1);
0842      lcd.print("H");  // индоутка
0843      lcd.write(7);
0844      lcd.print("O");  // индоутка
0845      lcd.write(6);
0846      lcd.print("TKA  ");   // утка
0847      break;
0848    case 4:
0849      lcd.write(5);
0850      lcd.write(6);
0851      lcd.print("C");  // гусь
0852      lcd.write(4);
0853      lcd.print("      ");  // гусь
0854      break;
0855    case 5:
0856      lcd.write(1);
0857      lcd.print("H"); // индюк
0858      lcd.write(7);
0859      lcd.print("|OK    "); // индюк
0860 
0861      break;
0862  }
0863 
0864}
0865 
0866 
0867void getSensors() {
0868  unsigned long curMillis = millis();          // Получаем текущее время работы
0869  if (curMillis - trhMillis >= TRHSTEP) {    // время для нового измерения?
0870    temp = tempProcess(READ_TEMP); //читаем темпратуру с далласа
0871    temp1 = float(temp) / 10;
0872    tempProcess(START_CONVERT); // сразу запрос на конвертацию
0873  }
0874 
0875  // Demonstrate non-blocking calls
0876  if (curMillis - trhMillis >= TRHSTEP * 4) {    // время для нового измерения?
0877 
0878    //    hum = dht.readHumidity(); //получение темпрературы и влажности с DHT11
0879    //    temp2 = dht.readTemperature();
0880    temp2 = si7021.readTemp(); //получение темпрературы и влажности с si7021
0881    hum = si7021.readHumidity();
0882 
0883    trhMillis = curMillis;
0884  }
0885 
0886}
0887 
0888//управляем влажностью
0889void humidifer(float set_humidity) {
0890  //float humidity;
0891 
0892  unsigned long curMillis = millis();
0893 
0894  if (curMillis >= humMillis + 2000) {
0895// Serial.print("curMillis=");
0896// Serial.println(curMillis);
0897// Serial.print("humMillis=");
0898// Serial.println(humMillis);
0899// Serial.print("hum=");
0900// Serial.println(hum);
0901// Serial.print("set_humidity=");
0902// Serial.println(set_humidity);
0903// Serial.print("value=");
0904// Serial.println(value);
0905//  Serial.print("pin9=");
0906//  Serial.println(digitalRead(alarm_pin));
0907//  Serial.print("pin4=");
0908//  Serial.println(digitalRead(humidifer_pin));
0909 
0910    humMillis = curMillis;
0911 
0912    //   if (set_humidity >= hum) digitalWrite(humidifer_pin, HIGH); //сравниваем измеренную влажность с заданной
0913    //  else if (set_humidity -5 < hum) digitalWrite(humidifer_pin, LOW); //если влажность низкая, включаем увлажнитель
0914    if ((hum >= set_humidity + 2) || (hum <= set_humidity - 2)) {
0915      if ((hum <= set_humidity - 2) && (value == LOW)) {
0916        value = HIGH;
0917      }
0918      if ((hum >= set_humidity + 2) && (value == HIGH)) {
0919        value = LOW;
0920      }
0921      digitalWrite(humidifer_pin, value);
0922 
0923    }
0924  }
0925 
0926 
0927}
0928 
0929//управляем поворотом
0930void turn(boolean needTurn) {
0931  wdt_disable(); // запретили как можно скорее собаку, что-бы не уйти в бесконечный ребут
0932 
0933  //TurnNow
0934  int turnPeriod = EEPROM_int_read(104);              //период поворота лотков в часах
0935// int turnCommand;
0936  if (turnPeriod == 0) return; //если нулевой период поворота, то не поворачиваем яйца.
0937  TurnNow++;
0938  int intTurnNow=TurnNow;
0939  if ((intTurnNow <= turnPeriod) && (intTurnNow >= 0)){
0940  EEPROM.write(120, TurnNow);
0941  }else {
0942    TurnNow=0;
0943  EEPROM.write(120, TurnNow); 
0944    }
0945   
0946// int turnCommand = TurnNow;
0947// currentTime = millis();
0948// Serial.print("turnPeriod=");
0949// Serial.println(turnPeriod);
0950// Serial.print("TurnNow=");
0951// Serial.println(TurnNow);
0952// Serial.print("intTurnNow=");
0953// Serial.println(intTurnNow);
0954// Serial.print("needTurn=");
0955// Serial.println(needTurn);
0956  // Serial.print("loopTime=");
0957  // Serial.println(loopTime);
0958  // Serial.println("   ");
0959 
0960  if ((needTurn == true) && (turnPeriod==intTurnNow)) {
0961     
0962    lcd.clear();
0963      lcd.setCursor(3, 0);
0964      lcd.write(2);
0965      lcd.print("EPEBOPOT");  //
0966    
0967     _step=- _step;
0968     for (int k = 0; k <2038; k++) {//4076 на полный оборот передаточное число 63.68395:1
0969        phase += _step;
0970        if (phase > 7) phase = 0;
0971        if (phase < 0) phase = 7;
0972       
0973        for (int i = 0; i < 4; i++) {
0974          digitalWrite(pins[i], ((motorPhases[phase][i] == 1) ? HIGH : LOW));
0975        }
0976        // Пауза на вращение на один полушаг
0977         delayMicroseconds(10000);// максимум 20000 мин 1000
0978       //  wdt_reset();
0979     }
0980        for (int i = 0; i < 4; i++) {//чтобы шаговик не грелся лишнего
0981          digitalWrite(pins[i], LOW);
0982        }
0983 
0984//   loopTime = currentTime;    // в loopTime записываем новое значение
0985    //    }
0986    //  }
0987  }
0988    wdt_enable(WDTO_8S); // активировали таймер, каждые 8 секунд его нужно сбрасывать
0989 
0990}
0991 
0992//управляем авариями
0993void alarm(float needTemp) {
0994  int alarmTemp = EEPROM_int_read(106);
0995  if (temp1 > 39.5) { //|| temp1 < (needTemp - alarmTemp)
0996//    beeper(10);
0997    digitalWrite(alarm_pin, LOW); //если измеренная температура выше заданной на величину аварии
0998  }
0999  else digitalWrite(alarm_pin, HIGH); //то включаем аварийный сигнал.
1000 
1001}
1002 
1003//void beeper(int duration) {
1004//  tone(beeper_pin, 2000, duration);
1005//}
1006 
1007 
1008//управляем вентиляторами
1009void fan(int fanTime) {
1010  int fanTemp = EEPROM_int_read(108);
1011  if ((chas == 7 && minut < fanTime) || (chas == 19 && minut < fanTime) || (temp1 > 39.5)) { //fanTemp=395
1012    // digitalWrite( fan_pin, LOW);
1013//    fanFlag = 1;
1014 
1015    //если наступило время проветривания или измеренная температура выше заданной на величину авариито включаем продувку.
1016    //    digitalWrite(extend_heater_pin, HIGH);  // при этом отключаем обогрев
1017    //    digitalWrite(heater_pin, LOW);
1018    hotFlag1 = 1;
1019    //   hotFlag2 = 1;
1020  }
1021  else {
1022//    fanFlag = 0;
1023    hotFlag1 = 0;
1024  }
1025 
1026  //digitalWrite(fan_pin, HIGH); //иначе выключаем.
1027 
1028  //    hotFlag1 = 1;
1029  //    hotFlag2 = 1;
1030  //
1031 
1032}
1033 
1034// вольтметр
1035//void voltmeter() {
1036//  float outputValue = 0;
1037//  outputValue = float(analogRead(voltmeter_pin)) / 63, 9;
1038//  //if(outputValue < 4.5) beeper(50);
1039//  //Serial.print("Voltage = " );
1040//  //Serial.println(outputValue);
1041//  lcd.setCursor(14, 3);
1042//  lcd.print("V");
1043//  lcd.print(outputValue, 1);
1044//}
1045//
1046//// Печать мощности нагрвателя
1047//void outpuPower() {
1048//  lcd.setCursor(14, 3);
1049//  lcd.print("W");
1050//  lcd.print(Output, 0);
1051//  lcd.print(" ");
1052//}
1053 
1054 
1055//==============================
1056int tempProcess(boolean ch) {
1057  int t = 0;
1058  if (!ch) {
1059    ds.reset();
1060    ds.write(0xCC);
1061    ds.write(0x44);
1062  }
1063  else {
1064    ds.reset();
1065    ds.write(0xCC);
1066    ds.write(0xBE);
1067    t = ds.read();
1068    t = t | (ds.read() << 8);
1069    //return  t>>4;//целые *C, десятые отброшены
1070    //return  (t+8)>>4;//целые *С с округлением
1071    return  (t * 10) >> 4; //целое в десятых *C (214=>21,4*C)
1072  }
1073}
1074// чтение
1075int EEPROM_int_read(int addr) {
1076  byte raw[2];
1077  for (byte i = 0; i < 2; i++) raw[i] = EEPROM.read(addr + i);
1078  int &num = (int&)raw;
1079  return num;
1080}
1081 
1082// запись
1083void EEPROM_int_write(int addr, int num) {
1084  byte raw[2];
1085  (int&)raw = num;
1086  for (byte i = 0; i < 2; i++) EEPROM.write(addr + i, raw[i]);
1087}
1088//пример int
1089//// запись
1090//EEPROM_int_write(12, 1000); // адрес 12 (+2 байта)
1091//EEPROM_int_write(14, 2000); // адрес 14 (+2 байта)
1092//EEPROM_int_write(16, 3000); // адрес 16 (+2 байта)
1093//// чтение
1094//int d = EEPROM_int_read(12);
1095//int e = EEPROM_int_read(14);
1096//int f = EEPROM_int_read(16);

 

Spiker
Offline
Зарегистрирован: 18.06.2016

Здравствуйте, где  скачать библиотеку ?

#include <avr/wdt.h>

Umka
Umka аватар
Offline
Зарегистрирован: 19.10.2012

Эту не надо качать - системная!

Spiker
Offline
Зарегистрирован: 18.06.2016

Umka пишет:

Эту не надо качать - системная!

Спасибо .

Лёвчег
Offline
Зарегистрирован: 07.02.2016

Замечательный проект! Спасибо за работу. Единственное чего нехватает, так это номинала элементов. В остальном 5+!

 

Лёвчег
Offline
Зарегистрирован: 07.02.2016

Всё, разобрался. Толька не совсем понял чё за микруха к шаговику идет. Если ULN2003APG, тогда 4 и 5 нужно местами поменять. Верно?

И ещё вопрос. Почему DHT11 (22) и DS18B20 на одном 11 пине?

Лёвчег
Offline
Зарегистрирован: 07.02.2016

В общем я так понимаю, мне никто не ответит...

Но всё же. Уважаемые, подскажите, почкму дисплей по I2C не хочет работать? Показывает кубики. Хотел освободить пины которые задействованы на дисплей, но чёт бред выходит.

bwn
Offline
Зарегистрирован: 25.08.2014

Лёвчег пишет:

В общем я так понимаю, мне никто не ответит...

Но всё же. Уважаемые, подскажите, почкму дисплей по I2C не хочет работать? Показывает кубики. Хотел освободить пины которые задействованы на дисплей, но чёт бред выходит.

Сканер I2C, что показывает? Пока не получите адреса всех подключенных внешних устройств через их протоколы, нахрена скетч основной заливать? Или считаете себя джедаем проводов?

Лёвчег
Offline
Зарегистрирован: 07.02.2016

У дисплея стандартный (0x27, 16, 2). Много где именно его ставил.

Скеч без изменений не устраивает из-за того что я не вкуриваю как поставить DHT11 и DS18B20, так как они оба на 11 пин подключаются. Этож бред? А больше свободных пинов нема.

Или я в чём то ошибаюсь?

bwn
Offline
Зарегистрирован: 25.08.2014

Действительно на одном пине. Логика - DHT измеритель влажности и температуры, ДС-ка  не нужна.
По дисплею, если действительно работает, попробуйте со своей библиотекой (их хренова гора) запустить только отображение информации из скетча ТС (закомментить все лишнее), возможно используются другие методы, тогда сравнивать с примерами из вашей библы и корректировать в скетче.

bwn
Offline
Зарегистрирован: 25.08.2014

bwn пишет:

Действительно на одном пине. Логика - DHT измеритель влажности и температуры, ДС-ка  не нужна.
По дисплею, если действительно работает, попробуйте со своей библиотекой (их хренова гора) запустить только отображение информации из скетча ТС (закомментить все лишнее), возможно используются другие методы, тогда сравнивать с примерами из вашей библы и корректировать в скетче.

P/S DHT, не лучшее решение для инкубатора. Весьма брехливый показометр, а на инкубационных значениях влажности тем более. Лучше потратьте денег и посмотрите на что то вроде SHT** или как у ТС.

Лёвчег
Offline
Зарегистрирован: 07.02.2016

Других нету в наличие, а ждать долго. 

Спасибо за разъяснения! В таком случае не вижу смысла подключать дисплей по I2C. 

Ещё раз спасибо!!!

Umka
Umka аватар
Offline
Зарегистрирован: 19.10.2012

Сезон вроде закончился, а вы тут шумите!

bwn
Offline
Зарегистрирован: 25.08.2014

Umka пишет:
Сезон вроде закончился, а вы тут шумите!

Та ладно, у меня круглогодичный с интервалом в три недели (перепелки).

bwn
Offline
Зарегистрирован: 25.08.2014

Лёвчег пишет:

Других нету в наличие, а ждать долго. 

Спасибо за разъяснения! В таком случае не вижу смысла подключать дисплей по I2C. 

Ещё раз спасибо!!!

SHT10, брал здесь. Не реклама, хотя регулярно к ним ныряю.

Umka
Umka аватар
Offline
Зарегистрирован: 19.10.2012

Дорого же.
У нас htu21 и то дешевле http://u-m.biz/shop/index.php?route=product/product&path=63&product_id=88

bwn
Offline
Зарегистрирован: 25.08.2014

Umka пишет:
Дорого же. У нас htu21 и то дешевле http://u-m.biz/shop/index.php?route=product/product&path=63&product_id=88

У меня SHT в корейцах стоят, так что для меня вариантов не было. 

Umka
Umka аватар
Offline
Зарегистрирован: 19.10.2012

Так это клон sht21, он лучше sht10. Плюс плата со стабом уже и согласование уровней, а не голый датчик без платы. Впрочем кому и dht11 датчик :)

bwn
Offline
Зарегистрирован: 25.08.2014

Там же место штатное + плата-переходник. Не стал влезать в конструкцию, работает и хорошо.

Лёвчег
Offline
Зарегистрирован: 07.02.2016

Нихрена у них цены!!! Не, я думаю, что +-5% влажности так сильно погоду не сделают. Так что по мне лучше связка DHT и DS.

bwn
Offline
Зарегистрирован: 25.08.2014

Тогда зачем связка, калибруйте температуру и влажность DHT в требуемом диапазоне и пользуйтесь им.

Umka
Umka аватар
Offline
Зарегистрирован: 19.10.2012

Сломается ваш dht в инкубаторе. Проходили. Да и показывает он погоду на соседней улице. Запаритесь калибровать.

Лёвчег
Offline
Зарегистрирован: 07.02.2016

bwn пишет:

Тогда зачем связка, калибруйте температуру и влажность DHT в требуемом диапазоне и пользуйтесь им.

Я сказал только про влажность. А вот на счет температуры, знающие люди говорят, что каждая десятка важна.

 

 

Лёвчег
Offline
Зарегистрирован: 07.02.2016

Umka пишет:
Сломается ваш dht в инкубаторе. Проходили. Да и показывает он погоду на соседней улице. Запаритесь калибровать.

Ну и пускай. Главное если получится хотябы 2-3 выводка сделать, и на этом хорошо. Пока нормальные запчастили жду из "поднебесной".

lean_74
Offline
Зарегистрирован: 22.12.2015

Лёвчег пишет:

Ну и пускай. Главное если получится хотябы 2-3 выводка сделать, и на этом хорошо. Пока нормальные запчастили жду из "поднебесной".

Всем привет, отсутсвовал по случаю поступления моего сына в Питере в мед.университет на бютжет, можете поздравлять. извиняюсь за оффтоп.

Лёвчег, советую прислушаться к советам Романа (Umka) и не использовать DTH11, я просто их сдуру купил пять штук, надо же было куда-то использовать, потом все равно заменил все на Si7021.

Лёвчег
Offline
Зарегистрирован: 07.02.2016

lean_74 пишет:

Всем привет, отсутсвовал по случаю поступления моего сына в Питере в мед.университет на бютжет, можете поздравлять. извиняюсь за оффтоп.

Примите мои поздравления за сына! Удачи ему в учёбе!!!

lean_74 пишет:

Лёвчег, советую прислушаться к советам Романа (Umka) и не использовать DTH11, я просто их сдуру купил пять штук, надо же было куда-то использовать, потом все равно заменил все на Si7021.

Да я тоже потом заменю, просто в данный момент нет других, а ждать из китая долго. Про покупку у нас вообще молчу, цены конские, да и срок доставки не на много меньше!

А инкубатор срочно собрать нужно. Родственники обещают к концу недели 5 десятков перепилинных яиц подогнать за так.

lean_74
Offline
Зарегистрирован: 22.12.2015

Лёвчег пишет:

Примите мои поздравления за сына! Удачи ему в учёбе!!!

Спасибо!

Лёвчег пишет:

Да я тоже потом заменю, просто в данный момент нет других, а ждать из китая долго. Про покупку у нас вообще молчу, цены конские, да и срок доставки не на много меньше!

А инкубатор срочно собрать нужно. Родственники обещают к концу недели 5 десятков перепилинных яиц подогнать за так.

Практика показывает, в этом деле торопиться не стоит, нужно собрать и "погонять" инкубатор, проверить температуру и влажность, если надо откалибровать, У меня Далласы на 0,7 градуса из одной партии врут. 

Umka
Umka аватар
Offline
Зарегистрирован: 19.10.2012

С возвращением lean_74

 

lean_74
Offline
Зарегистрирован: 22.12.2015

Umka пишет:

С возвращением lean_74

Рома, привет! С телефона не совсем удобно, завтра на форуме пообщаемся.

Лёвчег
Offline
Зарегистрирован: 07.02.2016

[/quote]

Практика показывает, в этом деле торопиться не стоит, нужно собрать и "погонять" инкубатор, проверить температуру и влажность, если надо откалибровать, У меня Далласы на 0,7 градуса из одной партии врут. 

[/quote]

 

Как калибровать? Точных измерителей нет. Остаётся надеяться)

Umka
Umka аватар
Offline
Зарегистрирован: 19.10.2012

Лёвчег пишет:

Как калибровать? Точных измерителей нет. Остаётся надеяться)

Ректально :) Вполне точный вариант. Ради науки так сказать...

А вообще 0,3 туда-сюда это вообще не важно. Поверьте. Я уже много десятков тысяч вывел.

bwn
Offline
Зарегистрирован: 25.08.2014

Umka пишет:

Лёвчег пишет:

Как калибровать? Точных измерителей нет. Остаётся надеяться)

Ректально :) Вполне точный вариант. Ради науки так сказать...

Та ладно, запугаешь человека.)))) Левчег, подмышку его, подмышку.

Umka
Umka аватар
Offline
Зарегистрирован: 19.10.2012

Ну там же смайлик. 

А я вот очередные 300 яиц достал в выводной шкаф. Наклюнутых много. Электрики в начале месяца активно светом баловались. По 20 часов не было. Дизель выручал. Ну, посмотрим что вылупится. 

Лёвчег
Offline
Зарегистрирован: 07.02.2016

bwn пишет:

Левчег, подмышку его, подмышку.

Гениально!!! Спасибо)