контроль за температурой воздуха паливом и освещением

yurkergq
Offline
Зарегистрирован: 24.01.2016

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

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

если ничего не знаешь ищи готовое

kriss
Offline
Зарегистрирован: 24.01.2014

у у 

kriss
Offline
Зарегистрирован: 24.01.2014

У меня много лет работает этот бокс, но пока без ардуино.    По рассаде успехи неплохие.   В электронике  и помидорах понимаю, а в программировании нет.   Контроль и регулирование  температуры на ардуино освоил. Сейчас методом тыка пробую управлять  светодиодной подсветкой по времени суток. Не могу подружиться  с дисплеем.    Помочь некому.

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

kriss пишет:

Не могу подружиться  с дисплеем.    Помочь некому.

Гони этот недружелюбный дисплей. И пригласи дружелюбный+дешевый 1602.))))

gena
Offline
Зарегистрирован: 04.11.2012

   Может для начала выводить данные через СОМ порт в ПК. Со временем будет видно, какие данные наиболее информационные и уже их на дисплей 1602.

romanikq
Offline
Зарегистрирован: 17.12.2015

Добрый день. Тоже занимаюсь с растениями  в исскуственом освещение.

Вот мой код только гуру не ругайтесь на него .


#include <EEPROM.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal.h>
#include <Wire.h> 
#include <DS3231.h>
char flag = 0;
char regim = 1;
byte  set_up , set_down , time_t , minute_t , time1_off , time1_on , time2_off , time2_on; 
//char set = 250;
LiquidCrystal lcd(13, 11, 10, 9, 7, 8);
DS3231  rtc(SDA, SCL);
Time  t;
#define ONE_WIRE_BUS 4

// Setup a oneWire instance to communicate with any OneWire devices
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);


void setup(void)
{
  DDRD |= (1<<2);// rele temperaturi
  DDRD |= (1<<3);// rele vremeni
   DDRB &= ~(1<<4); // button menu
 PORTB |= (1<<4);// button  menu high
 DDRD &= ~(1<<5); // button down
 PORTD |= (1<<5);// button  down high
 DDRD &= ~(1<<6); // button up
 PORTD |= (1<<6);// button  up high
sensors.begin();
lcd.begin(16,2); // columns, rows. use 16,2 for a 16x2 LCD, etc.
//lcd.clear(); // start with a blank screen
rtc.begin();
{
lcd.setCursor(1,0);
lcd.print("######");
lcd.setCursor(5,1);
lcd.print("######");
delay(2000);
}
//Serial.println("Test");
lcd.clear();
delay(100);
//PORTD |= (1<<2);
//PORTD |= (1<<3);
//delay(100);
//PORTD &= ~(1<<2);
//PORTD &= ~(1<<3);
set_up = EEPROM.read(1); // температура вверхний предел
set_down = EEPROM.read(2);//температура нижний предел
time1_off = EEPROM.read(3);// таймер 1 
time1_on = EEPROM.read(4);// таймер 1
time2_off = EEPROM.read(5);//таймер2
time2_on = EEPROM.read(6);//таймер2
//set_uplim = set_up; 
//sei();
//rtc.setTime(12, 0, 0);     // Set the time to 12:00:00 (24hr format)
  //rtc.setDate(1, 1, 2014);   // Set the date to January 1st, 2014

}


void work()
{
   //time_t = t.hour;
  // minute_t = t.min; 
//t = rtc.getTime();
sensors.requestTemperatures();
 byte S1 = sensors.getTempCByIndex(0);
//S1 = sensors.getTempC(oneThermometer);
lcd.setCursor(1,0);
lcd.print(set_down);
lcd.print("< ");
lcd.print( S1);
//lcd.setCursor(,0);
lcd.print("C >");
lcd.print( set_up);
//lcd.setCursor(0,1);
//lcd.print(t.date, DEC);
//lcd.print(" ");
//lcd.print (rtc.getMonthStr());
//lcd.print(" ");
//lcd.print(t.year, DEC);
lcd.setCursor(0,1);
lcd.print(time_t);
lcd.print(":");
lcd.print (minute_t);
lcd.setCursor(6,1);
lcd.print(" > ");
lcd.print(time1_on);
lcd.print("> ");
lcd.print(time1_off);
if (S1>set_up)
{
 
  PORTD &= ~(1<<2);
}
else if 
(S1<set_down) 
{   
PORTD |= (1<<2); 
}

if (time_t >=time1_on&& time_t <=time1_off-1 ) 
{
  PORTD |= (1<<3);
}
else 
     {
       PORTD &= ~(1<<3);
             }
      
}
 void loop()
 {
   time_t = t.hour;
   minute_t = t.min; 
   t = rtc.getTime();
  if (!(PINB & (1<<PINB4)) && flag == 0) // low 
  {
   regim++;
    flag=1; 
    lcd.clear();
  }
  if (PINB & (1<<PINB4) && flag == 1)  // high
  {
    flag=0;
  }
   if (regim==1)
  {
    work(); 
  }
   if (regim==2)
  {
   menu_up(); 
  }
   if (regim==3)
  {
    menu_down(); 
  }
  if (regim==4)
  {
    time_setting(); 
  }
  if (regim==5)
  {
    light_off(); 
  }
  if (regim==6)
  {
    light_on(); 
  }
   
  if (regim>6)
    {
      regim=1;
    }
   
   /*if (set_up != set_uplim )
   {
     cli();
    // EEPROM.write (1,set_up);
     set_uplim = set_up;
    sei();
    PORTD |= (1<<3);
   } 
   else {
     PORTD &= ~(1<<3);
   }*/
 }
 void menu_up ()
 
 {
  //int set; 
  lcd.setCursor(0,0);
lcd.print("tem up"); 
lcd.setCursor(7,0);
lcd.print(">");
lcd.print(set_up);
if (!(PIND & (1<<PIND6)))
{
 set_up = set_up + 1 ;
 if (set_up > 40)
    {
     set_up = 40; 
    }
EEPROM.write (1,set_up);
  
}
else if (!(PIND & (1<<PIND5)))
{
  set_up = set_up - 1;
  if (set_up < 20)
    {
     set_up = 20; 
    }
    EEPROM.write (1,set_up);
}

 delay(250);  
 }
 void menu_down ()
 
 {
  lcd.setCursor(0,1);
lcd.print("tem down"); 
lcd.setCursor(8,1);
lcd.print(">");
lcd.print(set_down);
if (!(PIND & (1<<PIND6)))
{
 set_down = set_down + 1 ;
 if (set_down > 40)
    {
     set_down = 40; 
    }
EEPROM.write (2,set_down);
  
}
else if (!(PIND & (1<<PIND5)))
{
  set_down = set_down - 1;
  if (set_down < 20)
    {
     set_down = 20; 
    }
    EEPROM.write (2,set_down);
}
   delay(250);
 }
 
 void time_setting ()
 {
 lcd.setCursor(0,0);
lcd.print("time-setting");  
   
lcd.setCursor(6,1);
lcd.print(time_t);
lcd.print(":");
lcd.print (minute_t);
   
   
   
 }
 void light_off()
 
 {
   
  lcd.setCursor(0,0);
lcd.print("time1 off"); 
lcd.setCursor(8,0);
lcd.print(">");
lcd.print(time1_off);
if (!(PIND & (1<<PIND6)))
{
 time1_off = time1_off + 1 ;
 if (time1_off > 24)
    {
     time1_off = 24; 
    }
EEPROM.write (3,time1_off);
  
}
else if (!(PIND & (1<<PIND5)))
{
  time1_off = time1_off - 1;
  if (time1_off < 0)
    {
     time1_off = 0; 
    }
    EEPROM.write (3,time1_off);
}
   delay(250); 
   
   
 }
 
 void light_on()
 {
   
  lcd.setCursor(0,1);
lcd.print("time1 on"); 
lcd.setCursor(8,1);
lcd.print(">");
lcd.print(time1_on);
if (!(PIND & (1<<PIND6)))
{
 time1_on = time1_on + 1 ;
 if (time1_on > 24)
    {
     time1_on = 24; 
    }
EEPROM.write (4,time1_on);
  
}
else if (!(PIND & (1<<PIND5)))
{
  time1_on = time1_on - 1;
  if (time1_on < 0)
    {
     time1_on = 0; 
    }
    EEPROM.write (4,time1_on);
}
   delay(250); 
   
   
   
 }
lex2k
Offline
Зарегистрирован: 17.12.2015

в помидорах не хрена не понимаю но делал такую штуку:

программа имеет два канала упраления 1 - по темперетуре 2- по времени. время ВКЛ и ВЫКЛ и температура ВКЛ и ВЫКЛ устанавливается через блютуф c любого Android девайса 
// контролер Duemilanove на 168, время берется с DS3231, температура с DHT11.  блютуф HC-05. время и температура ВКЛ и ВЫКЛ при изминении каждые 4 часа  сохраняются в eeprom  на DS3231 
// есть тест вкл\выкл реле.
надо кому? на 16 кбайт влезет
Nosferatu
Offline
Зарегистрирован: 04.11.2012

Для гидропоники нужно контролировать Ph раствора.

Нужен будет электрод от  Ph метра. У электрода принцип подключения, как у термопары: через усилитель и с термокомпенсацией.  Это самый сложный момент.

А управлять насосами и освещением, через реле это просто.