нужна программа для управления инкубатором

Василий Владимирович
Offline
Зарегистрирован: 18.12.2015

Форумчане! Нужна программа для управления инкубатором.

а) Нужно контролировать температуру и влажность, соответственно включая 3 реле

1- влажность

2 и 3 - температуру, на 2 нагревателя, т.е. 2 контура, один на 37 гр.С, и второе реле 37,8 гр.С к примеру.

б) нужно чтобы температура нагрева менялась в течении периода инкубации, допустим 21 день, с 1 по 18 день - 37,8 (второй контур), а с 19-21 день - 37,5 гр.С;

так же и влажность - чтоб за 21 день, менялась трижды - 55%/45%/75%

в) Еще надо, чтобы была возможность выбрать вид птицы - курица и утка. Т.е. 21 и 26 дней инкубации и у утиных яиц несколько другие параметры темп.и влажности.

г) обязательно переворот яиц, 6 раз/сут., в течении первых 15 дней инкубации к примеру (куры), а в остальные дни, переворот не работает.

д) обязательно включение реле вентилятора проветривания инкубатора 2 раза в сутки на 20 мин - к примеру с 12 по 19 день инкубации

е)еще надо сделать систему оповещения (красная лампа - "ВНИМАНИЕ!"), в случае малого количества воды в баке (поплавковый датчик например), или в случае низкой влажности или особо низкой температуры - выход из строя нагревателя или испарителя.

  Все это возможно сделать на:

 -  3,2 " TFT жк-дисплей касание + TFT 3,2 " защита + мега 2560 ATmega2560 r3

или

 -  20 x 4 жк-дисплей жк-модули 2004 жк-дисплей жк-модуль с из светодиодов синий жк-подсветки белый знаки + мега 2560

или

ARM Cortex-M3 мини-stm32 stm32F103VEt6 

ж)кнопки ручного включения - переворот,вентиляция, пуск, стоп, "+ 1 день", "сброс дни",вкл/откл - авторежима - НАДО!

з) светодиоды шт 1 0 - на подсветку "задачи" тоже надо.

На экране отображается текущая темп, влажность и день инкубации, а также какая птица выбрана.

 

Если есть смельчаки - пишите и сюда и на майл

vintech2016@yandex.kz

Надеюсь на сотрудничество!

И с Наступающим Вас!!!

 

 

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

А смелым быть обязательно?

StudioGippopotam@gmail.com

MacSim
Offline
Зарегистрирован: 28.11.2012

С армом тебе тут не подскажут, да и не нужен он для таких задачь.

Намылил на почту. Пиши.

Надо усовершенствовать, подскажу как.

Температуру хоть каждые 5 минут разную, это легко. Зачем два нагревателя?

Подробнее опиши на мыло.

! С контрольными не помогаю.

Василий Владимирович
Offline
Зарегистрирован: 18.12.2015

ОК! напишу подробности на мыло.

DrProg
Offline
Зарегистрирован: 07.08.2015

Зачем копировали плохо переведенные названия модулей с Алиэкспресса, ссылки лучше выкладывайте в следующий раз.

А вообще задача стандартная, и Меги для нее даже много, можно сделать на Про Мини, он компактнее, дешевле и не хуже. Экранчик можно и 20х4, но для отображения температуры, влажности, дня и названия птицы его тоже многовато, вполне подойдет 16х2, причем и меню на нем удобнее использовать: верхняя строка заголовок, нижняя параметр. Все остальное это датчики, реле и, возможно, сервоприводы/моторы (для переворота яиц), хотя и это можно сделать через реле. 

И еще что посоветую, для аварийных ситуаций установить SMS-модуль, чтобы он пищал на телефон если яйца начнут перегреваться, замерзать или еще в чем то нуждаться. Недорого, но намного удобнее и наблюдателя разгрузит. Сможете несколько инкубаторов контролировать одновременно. )

Василий Владимирович
Offline
Зарегистрирован: 18.12.2015

Спасибо. Со многим, согласен! :)

А на счет SMS- модуля, это Вы верно подсказали.

Я думаю, обязательно применим Ваше предложение.

MikSer
Offline
Зарегистрирован: 27.01.2012

Писал что то для инкубатора, но идею не развили и бросили как есть. Если поможет, то вот:

#include <Wire.h>
#include <LiquidCrystal_I2C.h>  

#include <dht11.h>
#include <RTClib.h>
#include <MenuBackend.h>
#include <EEPROM.h>
#include <OneWire.h>
#include <DallasTemperature.h>

#define DHT1PIN A0
//#define TonePin 11
#define ButtonPin A3
#define Relay1 3
#define Relay2 4
#define Relay3 5
#define Relay4 6
#define Relay5 7
#define Relay6 8

#define ONE_WIRE_BUS 10
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

//IRrecv irrecv(IrPin);
//decode_results results; 
int button; // button press

dht11 DHT1;
RTC_DS1307 rtc;
LiquidCrystal_I2C lcd(0x27,16,2);

//*************** мои переменные ************************

// DHT11
byte Temperature=30; //температура в градусах
byte Humidity=60;   //влажность в процентах
// вентилятор вытяжки CO2
byte IntervalCo=4; // интервал включения в часах
byte PeriodCo=2; // период включения в секундах
// поворотный лоток
byte IntervalRotary=4; // интервал включения в часах
byte PeriodRotary=2; // период включения в минутах
// вентилятор вентиляции
byte PeriodAir=10; // период работы в сек (при вкл. мокрого тена)
byte TemperatureAir=35; // порог температуры для вкл. вентиляции
// время дата
byte Date;
byte Month;
int Year;
byte Hour, Minute;
// DS18B20
double MinTemp=39.00; //температура в градусах

//***********************************
char Buffer[17]; //буфер для вывода времени
//************************************



int lastButtonPushed = 0;
byte MenuOnOff = 1;
byte RunCo=0;
byte RunRotation=0;
//byte RunAiring=0;
//byte RunHum=0;

uint32_t previousCoTime = 0;
uint32_t previousRotationTime = 0;
//uint32_t previousAiringTime = 0;



//Menu variables
MenuBackend menu = MenuBackend(menuUsed,menuChanged);
//initialize menuitems
MenuItem menu1Item1 = MenuItem("DHT Sensor");
MenuItem menuItem1SubItem1 = MenuItem("Temperature",'1');
MenuItem menuItem1SubItem2 = MenuItem("Humidity",'2');
MenuItem menu1Item2 = MenuItem("Co2 Cooler");
MenuItem menuItem2SubItem1 = MenuItem("Interval",'3');
MenuItem menuItem2SubItem2 = MenuItem("Period",'4');
MenuItem menu1Item3 = MenuItem("Rotation Pad");
MenuItem menuItem3SubItem1 = MenuItem("Interval",'5');
MenuItem menuItem3SubItem2 = MenuItem("Period",'6');
MenuItem menu1Item4 = MenuItem("Airing cooler");
MenuItem menuItem4SubItem1 = MenuItem("Period",'7');
MenuItem menuItem4SubItem2 = MenuItem("Temperature",'8');
MenuItem menu1Item5 = MenuItem("Set DateTime");
MenuItem menuItem5SubItem1 = MenuItem("Date",'9');
MenuItem menuItem5SubItem2 = MenuItem("Month",'a');
MenuItem menuItem5SubItem3 = MenuItem("Year",'b');
MenuItem menuItem5SubItem4 = MenuItem("Hour",'c');
MenuItem menuItem5SubItem5 = MenuItem("Minute",'d');
MenuItem menu1Item6 = MenuItem("Save Data",'e');
MenuItem menu1Item7 = MenuItem("Load Data",'f');
MenuItem menu1Item8 = MenuItem("DS18B20 Sensor",'g');

void setup()
{ 
  lcd.init();                
  lcd.backlight();
  lcd.setCursor(1,0);
  lcd.print("Master of Eggs");
  lcd.setCursor(1,1);
  lcd.print("dipsoft.com.ua");
  lcd.setCursor(0,0);

  sensors.begin(); //18b20

  pinMode(ButtonPin, INPUT_PULLUP);

  //  irrecv.enableIRIn();

 
  pinMode(Relay1, OUTPUT);
  pinMode(Relay2, OUTPUT);
  pinMode(Relay3, OUTPUT);
  pinMode(Relay4, OUTPUT);
  pinMode(Relay5, OUTPUT);
  pinMode(Relay6, OUTPUT);

  delay(1000);

  Wire.begin();
  rtc.begin();
  if (! rtc.isrunning()) {
    rtc.adjust(DateTime("Jun 17 2014","12:00:00"));
  }

  menuSetup();
  LoadData();

  Date=rtc.now().day();
  Month=rtc.now().month();
  Year=rtc.now().year();
  Hour=rtc.now().hour();
  Minute=rtc.now().minute();

  previousCoTime=rtc.now().unixtime();
  previousRotationTime=previousCoTime;
  // previousAiringTime=previousCoTime;

}

void SaveData() {
  byte addr=0;
  byte MyYear=2000;
  EEPROM.write(addr++, Temperature);
  EEPROM.write(addr++, Humidity);
  EEPROM.write(addr++, IntervalCo);
  EEPROM.write(addr++, PeriodCo);
  EEPROM.write(addr++, IntervalRotary);
  EEPROM.write(addr++, PeriodRotary);
  EEPROM.write(addr++, PeriodAir);
  EEPROM.write(addr++, TemperatureAir);
  EEPROM.write(addr++, ((int(MinTemp*100) >> 0) & 0xFF));
  EEPROM.write(addr++, ((int(MinTemp*100) >> 8) & 0xFF));


  //  EEPROM.write(addr++, Date);
  //  EEPROM.write(addr++, Month);
  //  EEPROM.write(addr++, ((Year >> 0) & 0xFF));
  //  EEPROM.write(addr++, ((Year >> 8) & 0xFF));
  //  EEPROM.write(addr++, Hour);
  //  EEPROM.write(addr++, Minute);

}

void LoadData() {
  byte addr=0;

  Temperature = EEPROM.read(addr++);
  Humidity =    EEPROM.read(addr++);
  IntervalCo = EEPROM.read(addr++);
  PeriodCo = EEPROM.read(addr++);
  IntervalRotary = EEPROM.read(addr++);
  PeriodRotary = EEPROM.read(addr++);
  PeriodAir = EEPROM.read(addr++);
  TemperatureAir = EEPROM.read(addr++);

  MinTemp = float((((EEPROM.read(addr++) << 0) & 0xFF) + ((EEPROM.read(addr++) << 8) & 0xFF00))/100.00);
  //  Date = EEPROM.read(addr++);
  //  Month = EEPROM.read(addr++);
  //  Year=((EEPROM.read(addr++) << 0) & 0xFF) + ((EEPROM.read(addr++) << 8) & 0xFF00);
  //  Hour = EEPROM.read(addr++);
  //  Minute = EEPROM.read(addr++);

}

void menuSetup() {
  //настроить menu
  menu.getRoot().add(menu1Item1);
  //************************************
  menu1Item1.addRight(menu1Item2).addRight(menu1Item3).addRight(menu1Item4).addRight(menu1Item5).addRight(menu1Item6).addRight(menu1Item7).addRight(menu1Item8).addRight(menu1Item1);
  menu1Item1.addLeft(menu1Item8).addLeft(menu1Item7).addLeft(menu1Item6).addLeft(menu1Item5).addLeft(menu1Item4).addLeft(menu1Item3).addLeft(menu1Item2).addLeft(menu1Item1);
  //*******************************************
  menu1Item1.add(menuItem1SubItem1).addRight(menuItem1SubItem2).addRight(menuItem1SubItem1);
  menuItem1SubItem1.addLeft(menuItem1SubItem2).addLeft(menuItem1SubItem1);
  //*******************************************
  menu1Item2.add(menuItem2SubItem1).addRight(menuItem2SubItem2).addRight(menuItem2SubItem1);
  menuItem2SubItem1.addLeft(menuItem2SubItem2).addLeft(menuItem2SubItem1);
  //*******************************************
  menu1Item3.add(menuItem3SubItem1).addRight(menuItem3SubItem2).addRight(menuItem3SubItem1);
  menuItem3SubItem1.addLeft(menuItem3SubItem2).addLeft(menuItem3SubItem1);
  //*******************************************
  menu1Item4.add(menuItem4SubItem1).addRight(menuItem4SubItem2).addRight(menuItem4SubItem1);
  menuItem4SubItem1.addLeft(menuItem4SubItem2).addLeft(menuItem4SubItem1);
  //*******************************************
  menu1Item5.add(menuItem5SubItem1).addRight(menuItem5SubItem2).addRight(menuItem5SubItem3).addRight(menuItem5SubItem4).addRight(menuItem5SubItem5).addRight(menuItem5SubItem1);
  menuItem5SubItem1.addLeft(menuItem5SubItem5).addLeft(menuItem5SubItem4).addLeft(menuItem5SubItem3).addLeft(menuItem5SubItem2).addLeft(menuItem5SubItem1);
  //*******************************************

  menu.toRoot();

}

void loop()
{
  byte chk1 = DHT1.read(DHT1PIN);
  byte Tmp1 = DHT1.temperature;
  byte Hum1 = DHT1.humidity;

  sensors.requestTemperatures();
  double MTmp = sensors.getTempCByIndex(0);

  DateTime now = rtc.now();
  //********************************  CO2 *****************************************************  
  unsigned long ValCo=IntervalCo*3600;
  if (previousCoTime==now.unixtime() && RunCo==0) {
    previousCoTime = now.unixtime()+ValCo;  //интервал включения
    digitalWrite(Relay3, HIGH);
    RunCo=1;
  }
  if (ValCo-(previousCoTime-now.unixtime())==PeriodCo && RunCo==1) {  //продолжительность работы
    digitalWrite(Relay3, LOW);
    RunCo=0;
  }
  //********************************  Rotation *****************************************************  
  unsigned long ValRotation=IntervalRotary*3600;
  if (previousRotationTime==now.unixtime() && RunRotation==0) {
    previousRotationTime = now.unixtime()+ValRotation;  //интервал включения
    digitalWrite(Relay4, HIGH);
    RunRotation=1;
  }
  if (ValRotation-(previousRotationTime-now.unixtime())==PeriodRotary*60 && RunRotation==1) {  //продолжительность работы
    digitalWrite(Relay4, LOW);
    RunRotation=0;
  }
  //********************************      temperature big *****************************
  if (Tmp1>=Temperature) {
    digitalWrite(Relay1, LOW);
  } 
  else {
    digitalWrite(Relay1, HIGH);
  }
  //********************************      temperature mini*****************************
  if (MTmp>=MinTemp) {
    digitalWrite(Relay6, LOW);
  } 
  else {
    digitalWrite(Relay6, HIGH);
  }
  //********************************      вентиляция при срабатывании порога температуры *****************************
  if (Tmp1>=TemperatureAir) {
    digitalWrite(Relay5, HIGH);
  } 
  else  {
    digitalWrite(Relay5, LOW);
  }
  //********************************      humidity мокрый тен *********************
  if (Hum1>=Humidity) {
    digitalWrite(Relay2, LOW);
  } 
  else {
    digitalWrite(Relay2, HIGH);
    //   previousAiringTime=now.unixtime();
    //   digitalWrite(Relay5, HIGH);
  }

  // if (now.unixtime()-previousAiringTime>=PeriodAir) {
  //    digitalWrite(Relay5, LOW);
  //  }


  readButtons(); 
  if (MenuOnOff==1) {
    lcd.setCursor(0,0);
    lcd.print("T");
    lcd.print(Tmp1);
    lcd.print((char)223);
    lcd.print(",H");
    lcd.print(Hum1);
    lcd.print("%,");
    lcd.print(MTmp);
    lcd.print((char)223);

    sprintf(Buffer, "%02d.%02d.%04d %02d:%02d",now.day(),now.month(),now.year(),now.hour(), now.minute());
    lcd.setCursor(0,1);
    lcd.print(Buffer);
  } 
  else {
    navigateMenus();
  }
  delay(100);                
}  

void menuChanged(MenuChangeEvent changed){
  MenuItem newMenuItem=changed.to; 
  lcd.clear();
  lcd.setCursor(0,0); 
  if (newMenuItem.getName()=="MenuRoot") {
    lcd.print("Main Menu");
  } 
  else lcd.print(newMenuItem.getName());
  lcd.setCursor(0,1); 
  switch(newMenuItem.getShortkey()) {
  case '1':
    lcd.print(Temperature);
    break;
  case '2':
    lcd.print(Humidity);
    break;
  case '3':
    lcd.print(IntervalCo);
    break;
  case '4':
    lcd.print(PeriodCo);
    break;
  case '5':
    lcd.print(IntervalRotary);
    break;
  case '6':
    lcd.print(PeriodRotary);
    break;
  case '7':
    lcd.print(PeriodAir);
    break;
  case '8':
    lcd.print(TemperatureAir);
    break;
  case '9':
    PrintTime();
    break;
  case 'a':
    PrintTime();
    break;
  case 'b':
    PrintTime();
    break;
  case 'c':
    PrintTime();
    break;
  case 'd':
    PrintTime();
    break;
  case 'g':
    lcd.print(MinTemp);
    break;
  }
}

void PrintTime() {
  sprintf(Buffer, "%02d.%02d.%04d %02d:%02d",Date,Month,Year,Hour,Minute);
  lcd.print(Buffer);
}

void menuUsed(MenuUseEvent used){
  lcd.clear();
  lcd.setCursor(0,0); 
  lcd.print("Please wait");
  if (used.item.getShortkey()=='e') {
    SaveData();
  }
  if (used.item.getShortkey()=='f') {
    LoadData();
  } 
  if (used.item.getShortkey()=='9' || used.item.getShortkey()=='a' || used.item.getShortkey()=='b' || used.item.getShortkey()=='c' || used.item.getShortkey()=='d')  {
    CorrectTime();
  }
  menu.toRoot();  //back to Main
}


void  readButtons(){  //read buttons status
  int z = analogRead(ButtonPin);
  if (z > 1010) button = 0;                                           
  else if (z > 10 && z < 20) button = 1;                     
  else if (z > 40 && z < 55) button = 2;                
  else if (z > 70 && z < 85) button = 3;                
  else if (z > 100 && z < 110) button = 4;             
  else if (z > 130 && z < 140) button = 5; 
  else if (z > 150 && z < 165) button = 6;
  else button = 0;
  lastButtonPushed=button;
  if (button==1)  {
    if (MenuOnOff==1) {
      MenuOnOff=0;
      menu.toRoot();
    } 
    else {
      MenuOnOff=1;
    }
  }
 
}

void navigateMenus() {
  MenuItem currentMenu=menu.getCurrent();
  switch (lastButtonPushed){
  case 6:
    if(!(currentMenu.moveDown())){ 
      menu.use();
    }
    else{     
      menu.moveDown();
    } 
    break;
  case 1:
    if (!(currentMenu.moveUp())){
      menu.moveLeft();
      menu.moveUp();
    } 
    else {
      menu.moveUp();
    } 
    break;
  case 2:
    menu.moveLeft();
    break;      
  case 3:
    menu.moveRight();
    break;
  case 4:
    lcd.setCursor(0,1);
    if (currentMenu.getShortkey()=='1') {
      Temperature++;
      if (Temperature==101) Temperature=1;
      lcd.print(Temperature);
      lcd.print(" ");
    } 
    else
      if (currentMenu.getShortkey()=='2') {
        Humidity++;
        if (Humidity==101) Humidity=1;
        lcd.print(Humidity);
        lcd.print(" ");
      } 
      else
        if (currentMenu.getShortkey()=='3') {
          IntervalCo++;
          if (IntervalCo==13) IntervalCo=1;
          lcd.print(IntervalCo);
          lcd.print(" ");
        } 
        else
          if (currentMenu.getShortkey()=='4') {
            PeriodCo++;
            if (PeriodCo==61) PeriodCo=1;
            lcd.print(PeriodCo);
            lcd.print(" ");
          } 
          else
            if (currentMenu.getShortkey()=='5') {
              IntervalRotary++;
              if (IntervalRotary==13) IntervalRotary=1;
              lcd.print(IntervalRotary);
              lcd.print(" ");
            } 
            else
              if (currentMenu.getShortkey()=='6') {
                PeriodRotary++;
                if (PeriodRotary==61) PeriodRotary=1;
                lcd.print(PeriodRotary);
                lcd.print(" ");
              } 
              else
                if (currentMenu.getShortkey()=='7') {
                  PeriodAir++;
                  if (PeriodAir==61) PeriodAir=1;
                  lcd.print(PeriodAir);
                  lcd.print(" ");
                } 
                else
                  if (currentMenu.getShortkey()=='8') {
                    TemperatureAir++;
                    if (TemperatureAir==101) TemperatureAir=1;
                    lcd.print(TemperatureAir);
                    lcd.print(" ");
                  } 
                  else
                    if (currentMenu.getShortkey()=='9') {
                      Date++;
                      if (Date==32) Date=1;
                      //      lcd.print(Date);
                      PrintTime();
                    } 
                    else
                      if (currentMenu.getShortkey()=='a') {
                        Month++;
                        if (Month==13) Month=1;
                        PrintTime();
                      } 
                      else
                        if (currentMenu.getShortkey()=='b') {
                          Year++;
                          if (Year==2021) Year=2014;
                          PrintTime();
                        } 
                        else
                          if (currentMenu.getShortkey()=='c') {
                            Hour++;
                            if (Hour==24) Hour=0;
                            PrintTime();
                          } 
                          else
                            if (currentMenu.getShortkey()=='d') {
                              Minute++;
                              if (Minute==60) Minute=0;
                              PrintTime();
                            }
                            else
                              if (currentMenu.getShortkey()=='g') {
                                MinTemp=MinTemp+0.10;
                                if (MinTemp>=45.00) MinTemp=35.00;
                                lcd.print(MinTemp);
                                lcd.print(" ");
                              }
    break;      
  case 5:
    // menu.moveDown();
    lcd.setCursor(0,1);
    if (currentMenu.getShortkey()=='1') {
      Temperature--;
      if (Temperature==0) Temperature=100;
      lcd.print(Temperature);
      lcd.print(" ");
    } 
    else
      if (currentMenu.getShortkey()=='2') {
        Humidity--;
        if (Humidity==0) Humidity=100;
        lcd.print(Humidity);
        lcd.print(" ");
      } 
      else
        if (currentMenu.getShortkey()=='3') {
          IntervalCo--;
          if (IntervalCo==0) IntervalCo=12;
          lcd.print(IntervalCo);
          lcd.print(" ");
        } 
        else
          if (currentMenu.getShortkey()=='4') {
            PeriodCo--;
            if (PeriodCo==0) PeriodCo=60;
            lcd.print(PeriodCo);
            lcd.print(" ");
          } 
          else
            if (currentMenu.getShortkey()=='5') {
              IntervalRotary--;
              if (IntervalRotary==0) IntervalRotary=12;
              lcd.print(IntervalRotary);
              lcd.print(" ");
            } 
            else
              if (currentMenu.getShortkey()=='6') {
                PeriodRotary--;
                if (PeriodRotary==0) PeriodRotary=60;
                lcd.print(PeriodRotary);
                lcd.print(" ");
              } 
              else
                if (currentMenu.getShortkey()=='7') {
                  PeriodAir--;
                  if (PeriodAir==0) PeriodAir=60;
                  lcd.print(PeriodAir);
                  lcd.print(" ");
                } 
                else
                  if (currentMenu.getShortkey()=='8') {
                    TemperatureAir--;
                    if (TemperatureAir==0) TemperatureAir=100;
                    lcd.print(TemperatureAir);
                    lcd.print(" ");
                  } 
                  else
                    if (currentMenu.getShortkey()=='9') {
                      Date--;
                      if (Date==0) Date=31;
                      PrintTime();
                    } 
                    else
                      if (currentMenu.getShortkey()=='a') {
                        Month--;
                        if (Month==0) Month=12;
                        PrintTime();
                      } 
                      else
                        if (currentMenu.getShortkey()=='b') {
                          Year--;
                          if (Year==2013) Year=2020;
                          //    lcd.print(Year);
                          PrintTime();
                        } 
                        else
                          if (currentMenu.getShortkey()=='c') {
                            Hour--;
                            if (Hour==-1) Hour=23;
                            PrintTime();
                          } 
                          else
                            if (currentMenu.getShortkey()=='d') {
                              Minute--;
                              if (Minute==-1) Minute=59;
                              PrintTime();
                            }
                            else
                              if (currentMenu.getShortkey()=='g') {
                                MinTemp=MinTemp-0.10;
                                if (MinTemp<=35.00) MinTemp=45.00;
                                lcd.print(MinTemp);
                                lcd.print(" ");
                              }

    break;

  }
  lastButtonPushed=0; //reset the lastButtonPushed variable
}
void CorrectTime() {
  char AdjTime[9];
  char AdjDate[12];
  sprintf(AdjTime,"%02d:%02d:%02d",Hour,Minute,0);
  switch(Month) {
  case 1: 
    sprintf(AdjDate,"Jan %02d %04d",Date,Year);
    break;
  case 2: 
    sprintf(AdjDate,"Feb %02d %04d",Date,Year);
    break;
  case 3: 
    sprintf(AdjDate,"Mar %02d %04d",Date,Year);
    break;
  case 4: 
    sprintf(AdjDate,"Apr %02d %04d",Date,Year);
    break;
  case 5: 
    sprintf(AdjDate,"May %02d %04d",Date,Year);
    break;
  case 6: 
    sprintf(AdjDate,"Jun %02d %04d",Date,Year);
    break;
  case 7: 
    sprintf(AdjDate,"Jul %02d %04d",Date,Year);
    break;
  case 8: 
    sprintf(AdjDate,"Aug %02d %04d",Date,Year);
    break;
  case 9: 
    sprintf(AdjDate,"Sep %02d %04d",Date,Year);
    break;
  case 10: 
    sprintf(AdjDate,"Oct %02d %04d",Date,Year);
    break;
  case 11: 
    sprintf(AdjDate,"Nov %02d %04d",Date,Year);
    break;
  case 12: 
    sprintf(AdjDate,"Dec %02d %04d",Date,Year);
    break;
  }
  rtc.adjust(DateTime(AdjDate,AdjTime));
}

 

inspiritus
Offline
Зарегистрирован: 17.12.2012

А сворачивать код не судьба ?

Василий Владимирович
Offline
Зарегистрирован: 18.12.2015

выложу ссылки на то что заказал с китая (придет наверное в конце января)

1) Ардуино Уно

http://ru.aliexpress.com/item/high-quality-UNO-R3-MEGA328P-CH340-CH340G-for-Arduino-UNO-R3-USB-CABLE/32463270115.html?detailNewVersion=2

2) модуль памяти с батарейкой 

http://ru.aliexpress.com/item/Data-Logger-for-Arduino-Data-Logging-Shield/2000580294.html

3) Мега 2560+TFT 3,2"

http://ru.aliexpress.com/item/3-2-TFT-LCD-Touch-TFT-3-2-Shield-Mega-2560-ATmega2560-r3-Free-shipping/2002832323.html?detailNewVersion=2

4) модули реле - 1/2/4 шт

http://ru.aliexpress.com/item/5v-12v-24v-optional-1channel-1-Channel-Relay-Module-high-Level-Triger-for-PIC-AVR/32431257139.html?detailNewVersion=2

 

http://ru.aliexpress.com/item/5V-9V-12V-24V-2-Channel-Relay-Module-with-Optocoupler-Low-Level-Triger-for-Arduino/32415292059.html

 

http://ru.aliexpress.com/item/5V-9V-12V-24V-4-Channel-Relay-Module-With-Opto-Isolation-Support-High-Level-Triggered-For/32413529268.html?detailNewVersion=2

5)модуль с батарейкой часов

http://ru.aliexpress.com/item/DS3231-AT24C32-IIC-Module-Precision-Real-Time-Clock-Memory-Module-For-Arduino/1984693922.html?detailNewVersion=2

6) плата расширения под датчики 2560 (не знаю, нужна ли будет для этого проекта)

 http://ru.aliexpress.com/item/Freeshipping-MEGA-Sensor-Shield-V1-0-dedicated-sensor-expansion-board-electronic-building-blocks/1971466849.html

7) датчики темп и влажности DHT22 (по даташит вроде поточнее чем 11, но сам е проверял)

http://ru.aliexpress.com/item/DHT22-Digital-Temperature-And-Humidity-Sensor-Dropshipping/1984981185.html

 

8) датчики темп DS18B20

http://ru.aliexpress.com/item/Waterproof-DS18B20-Digital-Temperature-Sensor-Probe-100cm-Wire-Cable-Dropshipping/1984652817.html

 

9) модуль по SD

 http://ru.aliexpress.com/item/Micro-SD-Card-Module-Mini-TF-Card-Read-and-Write-Module-with-SPI-Interface/2042049716.html

 

10)клавиатурка на 8 сенсорных площадок (возможно не понадобится)

http://ru.aliexpress.com/item/TTP226-8-channel-capacitive-touch-switch-digital-touch-sensor-module/2007189103.html

 

11) плата расширения для УНО (ну или я так понял)

http://ru.aliexpress.com/item/Freeshipping-Electronic-blocks-for-sensor-shield-V4-0-for-arduino/1973169286.html

 

12) ЛСД четырехстрочный

http://ru.aliexpress.com/item/20x4-LCD-Modules-2004-LCD-Module-with-LED-Blue-Backlight-White-Character-Free-Shipping-Dropshipping/2008653280.html

 

13)еще мембранная клавиатурка 4х4

http://ru.aliexpress.com/item/16-Key-4-x-4-Membrane-Switch-Keypad-4x4-4-4-Matrix-Array-Matrix-keyboard/1973062645.html

 

еще выписал Ардуинки НАНО, проводки и прочее по мелочи.

 

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

 

 

 

 

 

 

 

vk007
Offline
Зарегистрирован: 16.06.2015

В качестве датчика температуры и влажности для инкубатора SHT21 предпочтительней будет. Да - дороже, но и точнее.

http://ru.aliexpress.com/item/New-1pc-For-Standard-SHT21-Digital-Tempera...

prometheus
Offline
Зарегистрирован: 31.05.2011

Зачем такие сложности, денег не знаете куда потратить ? :)))

1. На том же али - есть куча готовых контроллеров для инкубатора.

Да, в них нет режимов инкубации (куры, утки, гуси и т.п.) и нет градации эмбриональному развитию (с 0 по 2 сутки 38,3, потом 37,8 до 18,5 суток и т.п.). Это делается "оператором" инкубатора :) Вы сами или кто другой - все равно будете вокруг инкубатора кружить ежедневно - вот и будете менять температурно-влажностный режим.

2. Контроллер инкубатора - это всего лишь 20% задачи. Какой бы функциональности вы в него не заложили, самое главное в инкубаторе это аэродинамика :))) То как будет идти конвекция и нагрев воздуха. 

3. У вас в пункте "д" - ошибка.

Во-первых, проветривать нужно со 2-х суток инкубации. Допустим каждые 10-15 минут на 10-15 секунд. Цель процедуры - удалить углекислый газ, который выделяется из яйца при эмбриональном развитии.

Во-вторых, цель проветривания - поддержание температуры, т.к. после 13 суток эмбрион сам начинает активно выделять тепло и его нужно отводить.

prometheus
Offline
Зарегистрирован: 31.05.2011

vk007 пишет:

В качестве датчика температуры и влажности для инкубатора SHT21 предпочтительней будет. Да - дороже, но и точнее.

http://ru.aliexpress.com/item/New-1pc-For-Standard-SHT21-Digital-Tempera...

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

Почему?

Датчик температуры (регулирующий) размещается за нагревательным элементом. А датчик влажности - непосредственно в камере инкубатора.

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

vk007
Offline
Зарегистрирован: 16.06.2015

prometheus пишет:

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

Да шо вы говорите! Бедные мои цыплята, надо будет им как-то намекнуть, что они вылупились в инкубаторе с неподходящим датчиком. Хотя, врядли это приведет их к панике.

prometheus
Offline
Зарегистрирован: 31.05.2011

vk007 пишет:

prometheus пишет:

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

Да шо вы говорите! Бедные мои цыплята, надо будет им как-то намекнуть, что они вылупились в инкубаторе с неподходящим датчиком. Хотя, врядли это приведет их к панике.

У вас инкубатор на сколько яиц? Нагреваете лампочками? Вода в ваночках? Какой процент задохликов?

Для инкубаторов с активной циркуляцией воздуха, размещение датчиков температуры и влажности в одном месте НЕВОЗМОЖНО - показания будут неправильными.

Влажность зависит не только от кол-ва молекул воды в воздухе, но и от скорости движения воздуха. Скорость движения воздуха в камере и у нагревательного элемента - РАЗНЫЕ. У вас показания будут неправильные. Вместо 55% будет все 75%

vk007
Offline
Зарегистрирован: 16.06.2015

Ага, инкубатор из ящика из-под яблок, грею резиновой грелкой, вода в стакане...

DHT22 и DS18B20 ну конечно же супер точные датчики, поди намного точнее и надежнее SHT21 будут.

Да какая мне разница, какая влажность и температура возле нагревателя??? Мне намного важнее удерживать их в норме возле яиц. Мало одного - накупите сто штук и облепите весь инкубатор, кто не дает?

На этом откланиваюсь, а ТС пускай уже сам решает, что ставить.

Василий Владимирович
Offline
Зарегистрирован: 18.12.2015

Теперь опишу "железо" инкубатора. Который уже готов. И работает.

Но надо будет электроннику поставить на Ардуино, а Сименс - убрать (сильно жирно для инкубатора на 500 яиц)

Ну это конечно при условии что "новые мозги", смогут так же справляться как и Сименс Лого!

Этот инкубатор полный - автомат. То есть заложил яйца и забыл
Собран на PLC контроллере "Seimens LOGO!" и двух дополнительных модулях расширения для него. Сразу скажу - очень затратно.Поэтому хочу заменить Сименс на Ардуино. Но они у меня были, поэтому я применил. Программу для ЛОГО писал сам. 

 Я применил в инкубаторе 2-х ступенчатый нагрев. (1 реле - 2 лампы 40и 60Вт/ 2е реле - 2 лампы 40 и 60 Вт). Во первых лампами дешево (поставил матовые небольшие ОSRАМ). То есть 4 лампочки. Если и сгорит одна - не страшно.
    Сначала терморегулировка была через ЛОГО!, платиновый термодатчик PT100, - мне не понравилось что не точная регулировка происходит и шаг более 0,1 Гр.С. Поэтому сейчас все 4 лампы объеденены в один контур и включаются одновременно.
Я решил проблему установкой дополнительно цифрового регулятора, а уже ЛОГО! регулирует это цифр.реле с 7-ми сегментными индикаторами - показаниями.
То же проделал и с регулятором влажности - поставил цифровой.
Как вы понимаете - все это удорожает и без того не дешевую конструкцию.
Хотя можно Сименс и заменить китайцем в 2 раза дешевле.
     Увлажняю воздух, путем выдува теплого потока в вонночку с водой внизу инкубатора, в которой по поплавку, доливается снаружи вода (из 30 л канистры) помпой от аквариума 15 ваттной. А увеличение влажности происходит путем включения питания на расположенной там же в ванночке - ультразвукового испарителя. Супер работает! И стоит копейки и потребляет 10 Вт.- 24 V!
      Яйца переворачиваются у меня мотор-редуктором от микроволновки 3 об/мин.-c прикрепленной шпилькой М8 и гайкой, которая по "солидольной" шпильке ездиет и двигает планку, на которой 9 выпирающих упоров, каждая для своего поддона под яйца. Поддоны получается опираются почти по центру на два штырька, а сзади, как раз на вот эту планку. Которая поднимает и опускает все поддоны. Яйца таким образом перекатываются на 180Гр. и так 6 раз в сутки, на автомате, или еще от нажатия кнопки на панели в ручном режиме.
в верхнем и нижнем положении лотков - стоят микрокнопки они зажигают ЛЭД - положения лотка на панели, а по центру шпильки у меня стоит концевичек, проходя через который ЛОГО! начинает отсчет времени, когда примерно лоток поднялся и останавливает переворот. Но так как мотор-редуктор у меня уж больно медленный + шаг шпильки маленький, получается что лотки переворачивают яйца - 12-13 минут!!!
Поэтому решил применить на новом инкубаторе приводы замков дверей автомобилей. Там уже мотор и концевики встроенны и готовый узел стоит копейки в любом автомагазине и на Алиэкспресс.
  Ну вроде о железе все!
 
На фото есть панель, которую тоже сам делал, вот по такому типу и надо бы сделать электроннику.
1.запускаешь питание
2. выбираешь вид птицы
3. нажимаешь "пуск"
4. все работает в автоматическом режиме, (на фото есть таблица точных параметров для куринных и гусинных яиц)
  желательно чтобы еще был выбор - утинные и перепелинные - там несколько другие параметры темп, влажности, проветривания и срока инкубации.
5.должны быть кнопки вкл в ручную - переворот яиц, проветривание- 20минут, увлажнение - допустим 2 мин, ПУСК, СТОП, "+1 день", сброс. Кнопка "+1день" - для того если вдруг произошел катастрофический сбой, перезапуск и выбор дня инкубации и ПОЕХАЛИ дальше
Кнопка "сброс"- если вдруг надо обнулить программу на Первый день инкубации. (можно и сделать вместо нее кнопку "- 1 день)
 
 
На экране Ардуино - TFT или LCD четырехстрочном - показания "день инкубации", темп.текущая, влажность текущая, и вид выбранной птицы
 
На панели светодиодами 5мм подсвечиваются - Пуск/Стоп/положение лотка (стрелка вверх или вниз)/ВНИМАНИЕ! (в случае аварийных ситуаций/ вентилятор проветривания/момент работы увлажнителя/Внимание - мало воды в баке!
 
Вот значит, как то так.....
 
Василий Владимирович
Offline
Зарегистрирован: 18.12.2015

SHT21 - просто не втречал его . Учту и закажу. Спасибо

Василий Владимирович
Offline
Зарегистрирован: 18.12.2015

prometheus пишет:

Зачем такие сложности, денег не знаете куда потратить ? :)))

1. На том же али - есть куча готовых контроллеров для инкубатора.

Да, в них нет режимов инкубации (куры, утки, гуси и т.п.) и нет градации эмбриональному развитию (с 0 по 2 сутки 38,3, потом 37,8 до 18,5 суток и т.п.). Это делается "оператором" инкубатора :) Вы сами или кто другой - все равно будете вокруг инкубатора кружить ежедневно - вот и будете менять температурно-влажностный режим.

2. Контроллер инкубатора - это всего лишь 20% задачи. Какой бы функциональности вы в него не заложили, самое главное в инкубаторе это аэродинамика :))) То как будет идти конвекция и нагрев воздуха. 

3. У вас в пункте "д" - ошибка.

Во-первых, проветривать нужно со 2-х суток инкубации. Допустим каждые 10-15 минут на 10-15 секунд. Цель процедуры - удалить углекислый газ, который выделяется из яйца при эмбриональном развитии.

Во-вторых, цель проветривания - поддержание температуры, т.к. после 13 суток эмбрион сам начинает активно выделять тепло и его нужно отводить.

 

1. Контроллеры готовые есть, но они мне не нужны. По тем причинам которые вы сами в пункте 1 и описали.

Машина тоже доставляет человека к точке. Причем любая - и Лексус РХ300 и "Москвич-412"

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

3.Ошибки в пункте "д" нет. - Это проверенные режимы инкубации. Выводимость отличная.

Ваш способ тоже действенный, я не сомневаюсь. Не первый инкубатор делаю.

У меня в инкубаторе как увидите на фотках стоит на вдув один вентилятор сзади сверху, второй на выдув - снизу на двери. Там же стоят шторки открывающиеся от вотока воздуха. За счет такой компановки постоянно есть приток свежего воздуха во внутрь, "тепловой насос". Благо щели позволяют :)

Датчик СО2 пока ставить не буду - на шару прокатывает!

На счет цели проветривания - знаю. 

Но.. спасибо за дельную консультацию. Вот такими и должны быть дебаты!

Василий Владимирович
Offline
Зарегистрирован: 18.12.2015

prometheus пишет:

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

Почему?

Датчик температуры (регулирующий) размещается за нагревательным элементом. А датчик влажности - непосредственно в камере инкубатора.

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

 

 - все просто - датчик и температуры и влажности размещается внутри инкубатора и не возле нагревателя. Возле нагревателя стоит термозащита от перегрева. Она там стоит и датчик не нужен.

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

Активный или пассивный воздухообмен - в любом случае - температура и влажность требуется заданная на яйце!

prometheus
Offline
Зарегистрирован: 31.05.2011

Василий Владимирович пишет:
 - все просто - датчик и температуры и влажности размещается внутри инкубатора и не возле нагревателя. Возле нагревателя стоит термозащита от перегрева. Она там стоит и датчик не нужен

Влажность и температура в идеале меряется на яйцах!

В многокамерных инкубаторах ставить регулирующие датчики (датчики, по которым идет регуляция) внутри камеры - неправильно, будет перегрев.

Для плавной и точной регулировки, температура воздуха измеряется на выходе из зоны нагрева (у нагревателя). Пока она дойдет до рабочей зоны (где располагаются яйца) температура только на первых этапах будет падать. А потом, когда инкубатор прогреется и все внутренние стенки станут на уровне заданной температуры, температура в целом стабилизируется, как у датчика нагревателя.

Но тут есть 4 момента: скорость движения воздуха, турбулентность, характер нагрева, теплоизоляция.

Влажность - 100% измеряется в рабочей камере, поэтому я и писал, что датчик 2 в одном - не годится, т.к. температуру нужно мерить в зоне нагрева, а влажность - в самой камере.

 

Василий Владимирович
Offline
Зарегистрирован: 18.12.2015

prometheus пишет:

Для плавной и точной регулировки, температура воздуха измеряется на выходе из зоны нагрева (у нагревателя). Пока она дойдет до рабочей зоны (где располагаются яйца) температура только на первых этапах будет падать. А потом, когда инкубатор прогреется и все внутренние стенки станут на уровне заданной температуры, температура в целом стабилизируется, как у датчика нагревателя.

Но тут есть 4 момента: скорость движения воздуха, турбулентность, характер нагрева, теплоизоляция.

Влажность - 100% измеряется в рабочей камере, поэтому я и писал, что датчик 2 в одном - не годится, т.к. температуру нужно мерить в зоне нагрева, а влажность - в самой камере.

Я с вами совершенно согласен. Дело в том, что я измерял температуру в различных зонах инкубатора одновременно. Подобрал длину "теплового потока из печки" нужным мне образом. Тепловой поток подается на зеркало воды ванночки, там смешивается с влажным воздухом подается выше по инкубатору. Мощность 4 лампочек не велика. Нивелируется скачек из печки металл.экраном вокруг ламп.

Скорость нагрева не бешенная, прогревается вся система медленно и равномерно.

Лотки под яйца - вспененный ПВХ, тоже "нежно" как зад курицы, держат тепло.

Контролировал температуру конкретно и на яйце, и внизу камеры и в верхних лотках.

 

Главное!!!! что мне надо - программа для Ардуино и совет в необходимых комплектующих.

Остальное - дело техники. 

Вам огромное спасибо, приятно общаться с человеком, который по существу темы дает дельные советы.

Это я не иронизирую. Значит мой проект сдвинется.

Ребят! Еще посоветуйте программу - эмулятор Ардуино. Пока не пришли ко мне модули, я буду "исголяться"....

 

Василий Владимирович
Offline
Зарегистрирован: 18.12.2015

Кстати о датчике SHT21 - почитал его даташит, не очень он впечатляет. То что надежный это плюс, а вот градацияизмерения влажности  2%, - а температуры - 0,3 Гр.С - Это не совсем для инкубаторов.

Надо 1%/0,1 Гр.С

prometheus
Offline
Зарегистрирован: 31.05.2011

Василий Владимирович пишет:

Кстати о датчике SHT21 - почитал его даташит, не очень он впечатляет. То что надежный это плюс, а вот градацияизмерения влажности  2%, - а температуры - 0,3 Гр.С - Это не совсем для инкубаторов.

Надо 1%/0,1 Гр.С

По влажности точность измерения 2% - это очень точно для датчиков такого типа.

Обычно ставится датчик с точностью 5%, реже  3%.

 

Касательно температуры 0,3 - это тоже шикарно. Обычная точность у самых распространенных датчиков 0,5 градуса.

0,1 точность вы просто так не получите, можно идти по пути платиновых датчиков температуры, но там все сложно с измерениями, просто ардуиной не обойдетесь нужнен специальный АЦП и правильное опорное напряжение.

Василий Владимирович
Offline
Зарегистрирован: 18.12.2015

prometheus пишет:

 

Обычно ставится датчик с точностью 5%, реже  3%.

Касательно температуры 0,3 - это тоже шикарно. Обычная точность у самых распространенных датчиков 0,5 градуса.

0,1 точность вы просто так не получите, можно идти по пути платиновых датчиков температуры, но там все сложно с измерениями, просто ардуиной не обойдетесь нужнен специальный АЦП и правильное опорное напряжение.

не соглашусь по поводу температуры. Влажность - согласен - 2% пойдет, 5% это уж перебор!!

У меня на инкубаторе стоят два цифровых регулятора влажности - 1%....

http://ru.aliexpress.com/item/New-2014-year-AC220V-Digital-WH8040-Humidi...

и температуры - 0,1%,..

http://ru.aliexpress.com/item/Freeshipping-W1209-Mini-thermostat-Temperature-controller-Incubation-thermostat-temperature-control-switch/32225252366.html?spm=2114.031020208.3.10.lRyYQp&ws_ab_test=searchweb201556_6,searchweb201644_4_79_78_77_82_83_80_62_81_61,searchweb201560_5

причем оба китай и не дорогие.

...ООО_ОО_отвечаю! Работают 1% и 0,1 Гр.С

Я по этой причине от Pt100 (платинового аналогового на ЛОГО и отказался - он не такой точный)

prometheus
Offline
Зарегистрирован: 31.05.2011

Василий Владимирович пишет:

не соглашусь по поводу температуры. Влажность - согласен - 2% пойдет, 5% это уж перебор!!

У меня на инкубаторе стоят два цифровых регулятора влажности - 1%....

http://ru.aliexpress.com/item/New-2014-year-AC220V-Digital-WH8040-Humidi...

и температуры - 0,1%,..

http://ru.aliexpress.com/item/Freeshipping-W1209-Mini-thermostat-Temperature-controller-Incubation-thermostat-temperature-control-switch/32225252366.html?spm=2114.031020208.3.10.lRyYQp&ws_ab_test=searchweb201556_6,searchweb201644_4_79_78_77_82_83_80_62_81_61,searchweb201560_5

причем оба китай и не дорогие.

...ООО_ОО_отвечаю! Работают 1% и 0,1 Гр.С

Я по этой причине от Pt100 (платинового аналогового на ЛОГО и отказался - он не такой точный)

Буду вас расстраивать :)

То что вы привели в качестве примера - там нет точности 0,1 Гр.С

Там точность в лучшем случае 0,5 градуса.

Василий Владимирович
Offline
Зарегистрирован: 18.12.2015

prometheus пишет:

Буду вас расстраивать :)

То что вы привели в качестве примера - там нет точности 0,1 Гр.С

Там точность в лучшем случае 0,5 градуса.

Да ладноооооо!

У меня что глаз нет - хотите сказать!

Он у меня уже стоит в инкубаторе и работает

Стоит и работает! Там есть точность 0,1 гр.С - проверенно.

согласно тех описанию датчика - действительно точность 0,5 Гр.С. (именно датчика, а не контроллера)

Но я проверял показания, при изменении на 0,1 и 0,2 градуса. Проверял ртутным термометром. Все работает.

Причем Если бы это было не так, то этот регулятор бы не включал нагрев при 37,5 , а выключал нагрев при 37,7.

Так что теория еще ни есть практика. На деле этот регулятор работает как положено.

Вот кусок текста из даташит - которая многое объясняет:

Режим – конвертации температуры Основные функциональные возможности DS18B20 - его температурный преобразователь. Разрешающая способность температурного преобразователя может быть изменена пользователем и составляет 9, 10, 11, или 12 битов, соответствуя приращениям (дискретности измерения температуры) 0.5 °C, 0.25°C, 0.125°C, и 0.0625°C, соответственно. Разрешающая способность по умолчанию установлена 12- бит. В исходном состоянии DS18B20 находится в состоянии покоя (в неактивном состоянии). Чтобы начать температурное измерение и преобразование, ведущий должен подать команду начала конвертирования температуры [0х44]. После конвертирования, полученные данные запоминаются в 2-байтовом регистре температуры в оперативной памяти, и DS18B20 возвращается к неактивному состоянию. Если DS18B20 включен с внешним питанием, ведущий может контролировать конвертирование температуры (после команды [0х44]) по состоянию шины. DS18B20 будет формировать (ответ на слот времени чтения от устройства управления) логический «0» когда происходит температурное преобразование. И логическую «1», когда конвертирование выполнено. Если DS18B20 включен с паразитным питанием, эта технология уведомления не может быть использована, так как шину нужно подать высокий уровень (напряжение питания) в течение всего времени температурного преобразования. В этом случае устройство управления должно самостоятельно контролировать время конвертирования.

http://voron.ua/files/pdf/maxim/ds18b20-rus.pdf

 

 

bankir_1986
Offline
Зарегистрирован: 23.03.2015

Не путай погрешность и разрешение. Это все таки разные вещщи.

Разрешение до 0,1 и точность 0,5 это - фактическая темп. 36,6 а может показывать от 36,1 до 37,1 

prometheus
Offline
Зарегистрирован: 31.05.2011

Вы путаете точность измерения и дискретность.

То, что датчик выдает циферки с разницей в 0,1 градуса не значит, что реальное значение температуры таким и является.

Точность измерения у этих датчиков минимум 0,5 градуса. Это значит, возьмите 2-3-4-5-Х таких датчиков поместите их в одну точку и смотрите показания, будет разброс значений МИНИМУМ 0,5 градусов между ними.

А дискретность 0,1 - это обычная величина.

Как правило, в интервале температура 25-40 градусов для этих датчиков зависимость линейная, поэтому их калибруют и значения получаются где-то близкие к эталонному, НО и в этом случае от погрешности в пол градуса не уйти :)

Василий Владимирович
Offline
Зарегистрирован: 18.12.2015

bankir_1986 пишет:

Не путай погрешность и разрешение. Это все таки разные вещщи.

Разрешение до 0,1 и точность 0,5 это - фактическая темп. 36,6 а может показывать от 36,1 до 37,1 

...эээээ, значит так:

1. В нормальных контроллерах как то что я выложил по ссылке, есть куча параметров настройки

и гетерезис, и смещение (путем поверки ртутным термометром), и прочие включая регулировку диапазона от -50 до 150

все настроенно, все работает. Я ничего не путаю - говорю как есть.

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

2. Мне надо программу и схему. Мне спорить с вами НЕ НАДО!

Размышлять на тему как же все работает и должно - мне тоже не надо. У меня работает, выводимость отличная.

На вот этом как вы считаете не точном контроллере. Если такая "неточность" будет достигнута на Ардуино, с будет полный автомат, с регулировкой по всему периоду инкубации - мне будет ЗА ГЛАЗА!

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

Тема: программа для инкубатора.

Задача: - возможно ли в параметрах описанных мной выше создать контроллер на ардуино?

Если он плохо работает с датчиками и точности нет - есть решение проблемы, пусть он управляется совмесно с контроллерами цифровыми. Вот и все!

prometheus
Offline
Зарегистрирован: 31.05.2011

Василий Владимирович пишет:
1. В нормальных контроллерах как то что я выложил по ссылке, есть куча параметров настройки

и гетерезис, и смещение (путем поверки ртутным термометром), и прочие включая регулировку диапазона от -50 до 150

Параметры настройки тут не причем.

Оно все работает, просто ТОЧНОСТЬ там не 0,1 градуса, а 0,5 градуса.

И дело ни в контроллере. Дешевые датчики температуры точнее не покажут. Все остальное - настройки, это просто поправочные коэффициенты для калибровки - типа, чтоб точнее было.

 

Да, у ртутного термометра тоже есть погрешность в измерениях :))))

Если прибор по ГОСТу на нем обязательно напишут, какая у него погрешность.

DrProg
Offline
Зарегистрирован: 07.08.2015

Очередной геморройный заказ за 300 руб.

Василий Владимирович
Offline
Зарегистрирован: 18.12.2015

р.с. вот еще в отступлении немного от темы программирования Ардуино.

Я писал выше, что у меня была проблема с Сименс лого! при подключении датчика pt100 через преобразователь 4-20мА, что не смог добиться градуировки температуры ниже 0,8-1 гр.С.

Причину я понял, но уже позже, когда привязал к ЛОГО этот, цифровой регулятор.

Причина походу в том, что преобразователь 4-20мА работает в диапазоне 0-400 Гр.С, а дискретность ЛОГО - (щас точно не скажу) по моему 20000. Там такая зависимость, что при таком преобразователе один шаг получается около 1 Градуса. Для меня это много.

  Я нашел и заказал преобразователи 4-20мА - с диапазоном 0-50 Гр.С. То есть надеюсь уменьшу шаг в 8 раз.

Ну Сименс потом пойдет на большой инкубатор - комнату. Благо и программа отработана.

А вообще была бы "песня в ночи", если бы по мере повышения температуры в инкубаторе - напряжение на лампы понижалось! и так же обратно. Слышал, что есть такие регуляторы. Но на практике не применял.

Василий Владимирович
Offline
Зарегистрирован: 18.12.2015

Лучший ГОСТ моя "подмышка" - медицинский поверенный термометр показывает у меня подмышкой 36,6 - или он врет на 0,5 гр?

А? если у меня цифр.контроллер выключает нагрев при 38,0 гр. а медицинский при этом показывает 37,6 - то "значит всет мой цифровик" на 0,4 гр. Так? Несколько проверок в течении часа это показали.

Далее захожу в параметры настройки контроллера и смещаю на 0,4гр.

Все! Эврика! Он показывает Ровно то что и медицинский!...

Насамом первом моем инкубаторе - 12 лет назад делал, стояла простое аналоговое устройство с резистором-регулятором. Влажность менялась - тазиком с водой, поворот был ручной 3-4 раза в сутки. Проветривал открывая дверцу инкубатора - выводимость была порядка 70%. Так что давайте не будем изобретать велосипед. Меня устраивает то что есть из железа.

Останемся каждый при своем мнении.

prometheus
Offline
Зарегистрирован: 31.05.2011

Василий Владимирович пишет:
А вообще была бы "песня в ночи", если бы по мере повышения температуры в инкубаторе - напряжение на лампы понижалось! и так же обратно. Слышал, что есть такие регуляторы. Но на практике не применял.

Это называется ПИД-регуляция.

prometheus
Offline
Зарегистрирован: 31.05.2011

Василий Владимирович пишет:
Лучший ГОСТ моя "подмышка" - медицинский поверенный термометр показывает у меня подмышкой 36,6 - или он врет на 0,5 гр?

Термометр, термоментру - рознь.

Если говорить, про ГОСТовские, там погрешность в районе 0,2-0,1 градуса (как правило равна цене деления).

Василий Владимирович пишет:
Далее захожу в параметры настройки контроллера и смещаю на 0,4гр.

Все! Эврика! Он показывает Ровно то что и медицинский!...

Ваша эврика работает, но не так как вы себе ее представляете :)))

Это называется калибровка. Но от этого этот датчик не стал измерять точнее, у него по прежнему погрешность 0,5 градуса. Это значит в одну милисекунду - один результат, а на другую милисекунду - другой. И разница между ними может быть 0,5 градуса. Он может в одно время показывать "правильно", а уже в другой раз - "почти правильно".

Василий Владимирович пишет:
Насамом первом моем инкубаторе - 12 лет назад делал, стояла простое аналоговое устройство с резистором-регулятором.

Останемся каждый при своем мнении.

Никто не говорит, что работать не будет.

Просто вы заявляете желаемую точность 0,1 градуса.

А я вам говорю - это, физически в данных критериях устройства, невозможно. Реальная погрешность будет 0,5 градуса. У вас на дисплейчике будет выводиться, все как положено 37,8 градуса. Но по факту, реальная температура может быть в интервале от 37,3 до  38,3. Вот и вся дискуссия.

MacSim
Offline
Зарегистрирован: 28.11.2012

 

0,1 точность вы просто так не получите, можно идти по пути платиновых датчиков температуры, но там все сложно с измерениями, просто ардуиной не обойдетесь нужнен специальный АЦП и правильное опорное напряжение.

ПОЛУЧИТЕ!

Можно и на меге ;-) у програмиста должен быть бубен, с его помощью и писать прогу. Все получается.

Василий Владимирович
Offline
Зарегистрирован: 18.12.2015

Хорошо, я с Вами согласен.

MacSim
Offline
Зарегистрирован: 28.11.2012

prometheus пишет:

Василий Владимирович пишет:
А вообще была бы "песня в ночи", если бы по мере повышения температуры в инкубаторе - напряжение на лампы понижалось! и так же обратно. Слышал, что есть такие регуляторы. Но на практике не применял.

Это называется ПИД-регуляция.

Я изучил токарный станок и знаю его как свои три пальца :-)

Легко.

Делал оборудование для вакуумного стола, там нагреватели 20 штук стояли. Тестовая макетная плата спаенная для одного нагревателя дома лежит.

MacSim
Offline
Зарегистрирован: 28.11.2012

Василий Владимирович пишет:

Лучший ГОСТ моя "подмышка" - медицинский поверенный термометр показывает у меня подмышкой 36,6 - или он врет на 0,5 гр?

у любого оборудования есть свои допуски. и если пишеться 1градус, то это не означает ровно 1. даже у медицинского градусника есть своя погрешность.

Погрешность можно програмно уменьшить.

MacSim
Offline
Зарегистрирован: 28.11.2012

Если почитать как собраны промышленные инкубаторы и какую они дают погрешность.... уфф

Но и карица с яиц встает. Так, что важена рациональная достаточность. но если можно до 0.1 то почемубы и не сделать

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

Ну холивар развели. Я на ардуину вообще попал через инкубатор. Когда на моем Suro вылетел нагревательный ключ, а цена ремонта в шок повергла. Судорожно вспомнил увлечение 20 летней давности. А в нутрях инкуба нашлась в качестве мозгов Atmega8.
Теперь по порядку, заявленной погрешности в 0,5гр. после калибровки будет за глаза. Точность-погрешность определяется технологией изготовления, не меняется во времени (кроме естественного старения) и в интересующем нас диапазоне 36-42 градуса поправка будет всегда одинакова. Далее для сомневающихся, вы где видели инкубатор, а также и курицу, у которых температура была одинакова на всей площади воздействия, сверху (у курицы под пузом) теплее, снизу (у курицы по краям холоднее) и этот разброс в 0,2-0,4градуса запрограммирован самой природой. Кстати когда у меня вылетел симистор на нагрев, вывод прошел под тепловентилятором без контроллеров, температуру уличным градусником в центре примерно поймал и оставил вентилятор на таком расстоянии.
Мощности 328 Atmegi хватит с запасом, управление займет 10% памяти, остальное меню и свистелки-перделки.
Датчики действительно лучше SHT, по влажности для такой цены, ничего нет. Температура так же как и у DS.
ПИД регулирование и другие полезности использовал в своей конструкции Umka, он кстати вроде и платы как готовые, так и для самопая продает (поищите по форуму с его ником). Правда типы птиц он не прикручивал.
Самое сложное, не создание термостата, а именно организация тепло-воздухообмена внутри инкуба. ИМХО.

Василий Владимирович
Offline
Зарегистрирован: 18.12.2015

bwn - грамотный и краткий ответ.

Я тоже считаю, не надо раздувать кучу мыслей и уходить в сторону.

Механика готова, нужно мозги Немецкие - заменить на Китайские.

И все! Меня устроют допуски и погрешности обычного китайского цифрового регулятора - пусть там 0,5, пусть там 0,1... Как есть так есть.

Спорить - ни к чему.

MacSim
Offline
Зарегистрирован: 28.11.2012

bwn пишет:

Датчики действительно лучше SHT, по влажности для такой цены, ничего нет. Температура так же как и у DS.
ПИД регулирование и другие полезности использовал в своей конструкции Umka, он кстати вроде и платы как готовые, так и для самопая продает (поищите по форуму с его ником). Правда типы птиц он не прикручивал.
 

STH тоже разные бывают. А вот по точности температуры DS лучше.

UMKA поисщу. Если покажите спасибо.

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

Вот его инкубатор.
У меня в корейце SHT10 стоит, 3 года полет нормальный, инкуб в постоянной работе.

MacSim
Offline
Зарегистрирован: 28.11.2012

да на али sth разные есть. этот самый дешевый.

но смотрю на остальные их характеристики (меня больше по влажности интересуют) одинаковые.

В чем разница? Быстродействие?

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

MacSim пишет:

да на али sth разные есть. этот самый дешевый.

но смотрю на остальные их характеристики (меня больше по влажности интересуют) одинаковые.

В чем разница? Быстродействие?

Не в курсах, не заморачивался. Меня и птичек вполне устраивает.

qwertyy12
Offline
Зарегистрирован: 29.12.2015

1

qwertyy12
Offline
Зарегистрирован: 29.12.2015

bankir_1986 пишет:

Не путай погрешность и разрешение. Это все таки разные вещщи.

Разрешение до 0,1 и точность 0,5 это - фактическая темп. 36,6 а может показывать от 36,1 до 37,1 

приветствую у меня пару вопросов по контролеру

и нужна помощ в написании программы

 

Василий Владимирович
Offline
Зарегистрирован: 18.12.2015

bwn пишет:

Вот его инкубатор.
У меня в корейце SHT10 стоит, 3 года полет нормальный, инкуб в постоянной работе.

респект товарищу который это выложил.  

Будем брать на заметку!

Василий Владимирович
Offline
Зарегистрирован: 18.12.2015

MacSim пишет:

да на али sth разные есть. этот самый дешевый.

но смотрю на остальные их характеристики (меня больше по влажности интересуют) одинаковые.

В чем разница? Быстродействие?

ага, в быстродействии тоже.

к примеру у SHT21

время опроса датчика влажности 8 сек, что терпимо

а температуры 5сек/минимально и 30 сек/максимально - по моему это для инкубатора не "камильфо"

Василий Владимирович
Offline
Зарегистрирован: 18.12.2015

для сравнения время опроса ДС

Table 1. DS18B20 Conversion Times and Resolution Settings 

Resolution                   9 bit     10 bit     11 bit     12 bit
Conversion Time (ms) 93.75   187.5      375       750
LSB (°C)                        0.5      0.25      0.125     0.0625

Пруф: http://www.maximintegrated.com/en/app-notes/index.mvp/id/4377