Перейти к содержимому

IPB Style© Fisana
 



Микроконтроллер Arduino в террариуме.


Сообщений в теме: 24

#21 Bullfrog

    Личинка

  • Проверенные
  • PipPip
  • 59 сообщений

Отправлено 06 June 2017 - 12:45

давно не был здесь <_< <_< <_<
так она и поливает и туман пускает.
поменял релюшку на твердотельную.Механика щелкает да и глючит %) %) долго с ней мучился.
Dendrobates leucomelas 2.1.3
Dendrobates tinctorius cobalt 0.0.4

#22 Aleksandr_N

    Икринка

  • Проверенные
  • Pip
  • 26 сообщений

Отправлено 08 June 2017 - 20:45

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

#23 Bullfrog

    Личинка

  • Проверенные
  • PipPip
  • 59 сообщений

Отправлено 10 June 2017 - 16:35

Если у вас все стоит на таймерах и все работает. То подумайте три раза перед чем ставить на arduino.
Сам был на гране поставить опять на таймера :'( :'( :'(



#include <Wire.h>
#include <RTClib.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
//------------------------------------------------------------------
#define DHTPIN 2 // Считывающий пин с датчика
#define DHTTYPE DHT22 // Модель датчика
#define tPIN 7 // Пин управления температурой
#define hPIN 5 // Пин управления влажностью
RTC_DS1307 RTC;
const int RelayChn1 = 6;
const int RelayChn2 = 8;


//-----------------------------------------------------------------
LiquidCrystal_I2C lcd(0x27,20,4);
DHT dht(DHTPIN, DHTTYPE);

int tStatus = HIGH; // определяем переменную, отвечающую за состоянеие нагревателя HIGH=выкл, LOW=вкл
int temp = 21; // Желаемая температура в градусах Цельсия (изменить на нужную)
int hStatus = HIGH; // определяем переменную, отвечающую за состоянеие увлажнителя HIGH=выкл, LOW=вкл
int hum = 70; // Желаемая влажность (изменить на нужную)



//СВЕТ//-----------------------------------------------------------
const long StartRelCn_1 = 32400; //Время срабатывания в ПЕРВОМ канале релейного модуля (в секундах от начала суток)
const long DurationCh_1 = 50400; //ДЛИТЕЛЬНОСТЬ срабатывания реле в ПЕРВОМ канале (в секундах)

//ТУМАН------------------------------------------------------------
const long StartRelCn_2 = 39600;// 11.00
const long DurationCh_2 = 120 ;

const long StartRelCn_2A = 50400;// 14.00
const long DurationCh_2A = 120 ;

const long StartRelCn_2B = 57600;// 16.00
const long DurationCh_2B = 120 ;

const long StartRelCn_2C = 64800;// 18.00
const long DurationCh_2C = 120 ;

const long StartRelCn_2E = 69480;// 19.30
const long DurationCh_2E = 120 ;

const long StartRelCn_2F = 72000;// 20.00
const long DurationCh_2F = 120 ;

const long StartRelCn_2G = 75600;// 21.00
const long DurationCh_2G = 120 ;

//-----------------------------------------------------------------
byte termometru[8] = //icon температура
{
B00100,
B01010,
B01010,
B01110,
B01110,
B11111,
B11111,
B01110
};

byte picatura[8] = //icon влажнасть
{
B00100,
B00100,
B01010,
B01010,
B10001,
B10001,
B10001,
B01110,
};


void setup()
{
Wire.begin();
RTC.begin();
//---------------------------------------------------------
Serial.begin(9600); // Инициализируем COM-порт
dht.begin(); // Инициализируем датчик

pinMode(RelayChn1,OUTPUT); //Инициализируем порт для ПЕРВОГО канала как ВЫХОД
pinMode(RelayChn2,OUTPUT); //Инициализируем порт для ВТОРОГО канала как ВЫХОД

digitalWrite(RelayChn1,HIGH); //Устанавливаем на входах релейного модуля ВЫСОКИЙ уровень
digitalWrite(RelayChn2,HIGH); //Т.к. используемый релейный модуль с опторазвязкой - управляется инверсной логикой

pinMode(tPIN, OUTPUT); // Определяем пин для управления температурой как Вывод
digitalWrite(tPIN, tStatus); // Притягиваем пин к начальному статусу (Выкл)

pinMode(hPIN, OUTPUT); // Определяем пин для управления температурой как Вывод
digitalWrite(hPIN, tStatus); // Притягиваем пин к начальному статусу (Выкл)

//---------------------------------------------------------
lcd.begin(16,2);
lcd.backlight();
lcd.clear();
lcd.createChar(1,termometru);
lcd.createChar(2,picatura);
Serial.begin(9600);

}
void loop()
{
//------------------------------------------------------

int h = dht.readHumidity(); // Считываем влажность
int t = dht.readTemperature(); // Считываем температуру
// tStatus = (t > temp) ? LOW:HIGH;
if (t > temp) tStatus = LOW; else tStatus = HIGH;// Если температура меньше желаемой, то статус обогревателя=Вкл, в противном случае Выкл
digitalWrite(tPIN, tStatus);
// hStatus (h < hum) hStatus ? LOW:HIGH;
if (h < hum) hStatus = LOW; else hStatus = HIGH; // Если влажность меньше желаемой, то статус увлажнителя=Вкл, в противном случае Выкл




digitalWrite(hPIN, hStatus);
Serial.print("t=");
Serial.print(t);
Serial.print(" h%=");
Serial.println(h); // Отправляем информацю о климате на COM-порт

DateTime myTime = RTC.now(); //Читаем данные времени из RTC при каждом выполнении цикла

//--------------------------Раздел обработки реле по времени --------------
long utime = myTime.unixtime(); //сохраняем в переменную - время в формате UNIX
utime %= 86400; //Сохраняем в этой же переменной остаток деления на кол-во секнд в сутках,
//Это дает количество секунд с начала текущих суток

//--------------------------------------СВЕТ-----------------------------------
if ((utime >= StartRelCn_1) &&
(utime < (StartRelCn_1+DurationCh_1)))

{
digitalWrite(RelayChn1,LOW); //Устанавливаем на ПЕРВОМ входе релейного модуля НИЗКИЙ уровень - реле срабатывает
}
else //во всех остальных случаях
{
digitalWrite(RelayChn1,HIGH); //Устанавливаем на ПЕРВОМ входе релейного модуля ВЫСОКИЙ уровень - реле выключается
}

//-------------------------------------ТУМАН ---------------------------------


if ((utime >= StartRelCn_2) &&

(utime < (StartRelCn_2+DurationCh_2)) or (utime >= StartRelCn_2A) &&

(utime < (StartRelCn_2A+DurationCh_2A)) or (utime >= StartRelCn_2B) &&

(utime < (StartRelCn_2B+DurationCh_2B)) or (utime >= StartRelCn_2C) &&

(utime < (StartRelCn_2C+DurationCh_2C)) or (utime >= StartRelCn_2E) &&

(utime < (StartRelCn_2E+DurationCh_2E)) or (utime >= StartRelCn_2F) &&

(utime < (StartRelCn_2F+DurationCh_2F)) or (utime >= StartRelCn_2G) &&

(utime < (StartRelCn_2G+DurationCh_2G)))
{
digitalWrite(RelayChn2,LOW); //Устанавливаем на ВТОРОМ входе релейного модуля НИЗКИЙ уровень - реле срабатывает
}
else
{
digitalWrite(RelayChn2,HIGH); //Устанавливаем на ВТОРОМ входе релейного модуля ВЫСОКИЙ уровень - реле выключается
}


afisare_temperatura();
data_si_ora();

}
void afisare_temperatura()
{
float h = dht.readHumidity();
float t = dht.readTemperature();
lcd.setCursor(0, 0);
lcd.write(1);
lcd.setCursor(2, 0);
lcd.print(t);
lcd.setCursor(4, 0);
lcd.print((char)223);
lcd.print("C ");
//--------------------------------------------------------------------------
lcd.setCursor(0, 1);
lcd.write(2);
lcd.setCursor(2, 1);
lcd.print(h);
lcd.setCursor(4, 1);
lcd.print(" ");
lcd.print("% ");
lcd.print(" Bullfrog");
}
void data_si_ora()
{

DateTime myTime = RTC.now(); //Читаем данные времени из RTC при каждом выполнении цикла
lcd.setCursor(11,0);
afisare2cifre(myTime.hour());
lcd.print(":");
afisare2cifre(myTime.minute());

delay(3000);

}
void afisare2cifre(int numar) { //this adds a 0 before single digit numbers
if (numar >= 0 && numar < 10) {
lcd.write('0');
}
lcd.print(numar);
}
Dendrobates leucomelas 2.1.3
Dendrobates tinctorius cobalt 0.0.4

#24 Aleksandr_N

    Икринка

  • Проверенные
  • Pip
  • 26 сообщений

Отправлено 11 June 2017 - 07:52

Спасибо, Буду пробовать.
А на счет корректной работы ардуино - вопрос конечно спорный. Большую роль играет везение.
По аквариумистам смотрю. У кого работает без сбоев годами, а кто перепрошивает постоянно, хотя всё но одном и пом же железе, да и программно один в один.
Я сам, больше доверяю промышленным изделиям, чем собранным "на коленке" в гараже, хотя..... два Стива в гараже собирали Apple ))

#25 Bullfrog

    Личинка

  • Проверенные
  • PipPip
  • 59 сообщений

Отправлено 11 June 2017 - 08:27

Не использовать механическое реле:/)) и все ок будет.
Dendrobates leucomelas 2.1.3
Dendrobates tinctorius cobalt 0.0.4





Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анононимных

Copyright © 2018 ExoFrogs