DTH 11 и Rele

Wats0n
Offline
Зарегистрирован: 10.02.2019

Всем Привет ! и заранее Спасибо!

Помогите вставить в скейч включение  и выключение реле  времени. Пробовал через delay , работает не коркктно(

#include <dht.h>
 
#define dht_apin A0 // Analog Pin sensor is connected to
 
dht DHT;
int rele1 = 2;
int rele2 = 3;
int rele3 = 4;
void setup(){
 
 
  pinMode(rele2, OUTPUT);
   pinMode(rele3, OUTPUT); 
 pinMode(rele1, OUTPUT);
 
 
  Serial.begin(9600);
  delay(1000);//Delay to let system boot
  Serial.println("DHT11 Humidity & temperature Sensor\n\n");
  delay(1000);//Wait before accessing Sensor
 
}//end "setup()"
 
void loop(){
  //Start of Program 
 
 
    DHT.read11(dht_apin);
    
    Serial.print("Current humidity = ");
    Serial.print(DHT.humidity);
    Serial.print("%  ");
    Serial.print("temperature = ");
    Serial.print(DHT.temperature); 
    Serial.println("C  ");
    
    delay(1000);//Wait 5 seconds before accessing sensor again.
  
 
   if(DHT.temperature < 15.00) digitalWrite(rele2,HIGH);
  if(DHT.temperature > 20.00) digitalWrite(rele2,LOW);
 
\
  
  //Fastest should be once every two seconds.
 
}// end loop()
sadman41
Offline
Зарегистрирован: 19.10.2016

Код тоже вставлен некорректно. 

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Для начала, уважаемый, вставьте программу по правилам форума.

Да и расскажите заодно про "реле времени" - а то его как-то не видно.

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Уважаемый, Ваша программа, как я понял, опрашивает датчик и принимает решение по включению или выкючению реле.

Не надо так часто опрашивать датчик - сделайте это раз в 10 секунд т.е. увеличте delay(10000) и проблемы исчезнут. Я сомневаюсь, что 10 секунд критично для Ваших процессов. А лучше поставить delay(5000) в 36 и 42 строках.

Wats0n
Offline
Зарегистрирован: 10.02.2019

Не помогло, датчиксчитывает показания через 50с. возможно я не так что то написал?

#include <dht.h>

#define dht_apin A0 // Analog Pin sensor is connected to
 
dht DHT;
int rele1 = 2;
int rele2 = 3;
void setup(){

 
  pinMode(rele2, OUTPUT);
 pinMode(rele1, OUTPUT);

 
  Serial.begin(9600);
  delay(5000);//Delay to let system boot
  Serial.println("DHT11 Humidity & temperature Sensor\n\n");
  delay(5000);//Wait before accessing Sensor
 
}//end "setup()"
 
void loop(){
  //Start of Program 

 
    DHT.read11(dht_apin);
    
    Serial.print("Current humidity = ");
    Serial.print(DHT.humidity);
    Serial.print("%  ");
    Serial.print("temperature = ");
    Serial.print(DHT.temperature); 
    Serial.println("C  ");
    
    delay(10000);//Wait 5 seconds before accessing sensor again.
  
 
   if(DHT.temperature < 15.00) digitalWrite(rele2,HIGH);
  if(DHT.temperature > 20.00) digitalWrite(rele2,LOW);

    digitalWrite(rele1,HIGH);
    delay(30000);
    digitalWrite(rele1,LOW );
    delay(10000);

  
  //Fastest should be once every two seconds.
 
}// end loop()

 

b707
Offline
Зарегистрирован: 26.05.2017

Wats0n пишет:

возможно я не так что то написал?

вполне возможно. Пока не понятно, что вы вообще хотели написать и что не работает

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

вот это 

delay(10000);//Wait 5 seconds before accessing sensor again.

нихрена не 5 секунд задершка

Wats0n
Offline
Зарегистрирован: 10.02.2019

 

[/quote]

вполне возможно. Пока не понятно, что вы вообще хотели написать и что не работает

[/quote]

датчик температуры считывает данные не раз в 10сек. а в 50 сек. Если увеличить время вкл и выкл  реле то и считывание  времени датчика увеличиваеться. я так понимаю delay для реле с DHT11 не дружит?

b707
Offline
Зарегистрирован: 26.05.2017

Wats0n пишет:

датчик температуры считывает данные не раз в 10сек. а в 50 сек. Если увеличить время вкл и выкл  реле то и считывание  времени датчика увеличиваеться. я так понимаю delay для реле с DHT11 не дружит?

нет, это вы с логикой не дружите

Если у вас сначала задержка 10 сек в строке 35, а потом еще 30 сек в строке 42 и 10 сек - в строке 44.

Всего - 10 + 30 + 10 = 50 секунд

работает ровно так, как написано

Wats0n
Offline
Зарегистрирован: 10.02.2019

b707 пишет:

Wats0n пишет:

датчик температуры считывает данные не раз в 10сек. а в 50 сек. Если увеличить время вкл и выкл  реле то и считывание  времени датчика увеличиваеться. я так понимаю delay для реле с DHT11 не дружит?

нет, это вы с логикой не дружите

Если у вас сначала задержка 10 сек в строке 35, а потом еще 30 сек в строке 42 и 10 сек - в строке 44.

Всего - 10 + 30 + 10 = 50 секунд

работает ровно так, как написано

Подскажите как правильно написать ?

b707
Offline
Зарегистрирован: 26.05.2017

Wats0n пишет:

Подскажите как правильно написать ?

вы не обьяснили, чего вы хотите добиться от программы

Wats0n
Offline
Зарегистрирован: 10.02.2019

b707 пишет:

Wats0n пишет:

Подскажите как правильно написать ?

вы не обьяснили, чего вы хотите добиться от программы

   if(DHT.temperature < 15.00) digitalWrite(rele2,HIGH);
  if(DHT.temperature > 20.00) digitalWrite(rele2,LOW); 
rele1  вкл. на 30сек. выкл 10сек. и так по кругу
kalapanga
Offline
Зарегистрирован: 23.10.2016

Wats0n пишет:

   if(DHT.temperature < 15.00) digitalWrite(rele2,HIGH);
  if(DHT.temperature > 20.00) digitalWrite(rele2,LOW); 
rele1  вкл. на 30сек. выкл 10сек. и так по кругу

Если из скетча, который в сообщении #4, выкинуть строку 35, то он будет в точности соответствовать этому "алгоритму". Если он Вас не устраивает, значит Вы недостаточно точно формулируете задачу. Попробуйте хотя бы сформулировать, чем то что есть Вас не устраивает. Только обычным человеческим языком. Что работает не так?

У меня свои догадки есть, но когда Вы сами всё по полочкам разложите, решить задачку проще будет. Но скорее всего BlinkWithoutDelay опять изучать нужно или таймеры Деда Семёна.

b707
Offline
Зарегистрирован: 26.05.2017

Ватсон, заканчивайте тупить. Если вы не в состоянии сформулировать задачу обычным русским языком. то уж на языке программирования у вас точно никаких шансов нет.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Не, ну чо вы набросились, теперь то: 

Wats0n пишет:

   if(DHT.temperature < 15.00) digitalWrite(rele2,HIGH);
  if(DHT.temperature > 20.00) digitalWrite(rele2,LOW); 
rele1  вкл. на 30сек. выкл 10сек. и так по кругу

вапще всё понятно стало...

Wats0n
Offline
Зарегистрирован: 10.02.2019

b707 пишет:

Ватсон, заканчивайте тупить. Если вы не в состоянии сформулировать задачу обычным русским языком. то уж на языке программирования у вас точно никаких шансов нет.

Мне необходимо

температура меньше 15 -реле 2 выкл.

температура больше 20 -реле 2 вкл.

реле 1 выкл. -18 часов (64 800 000)

реле 1 вкл. -6 часов (21 600 000)

так понятнее ?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Wats0n пишет:

так понятнее ?

Нет. 

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

DetSimen пишет:

Нет. 

Та че непонятного? Делей на 64 800 000 микросекунд, а потом на 21 600 000 микросекунд.

b707
Offline
Зарегистрирован: 26.05.2017

bwn пишет:

Та че непонятного? Делей на 64 800 000 микросекунд, а потом на 21 600 000 микросекунд.

температуру. выходит, раз в сутки меряем? :)

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

b707 пишет:

температуру. выходит, раз в сутки меряем? :)

Ну а че у градусника ресурс сажать?))))

To TC, сядьте все таки и рапишите последовательно, по пунктам, что в какой момент и при каких условиях должна делать ваша программа.

kalapanga
Offline
Зарегистрирован: 23.10.2016

Wats0n пишет:

Мне необходимо

температура меньше 15 -реле 2 выкл.

температура больше 20 -реле 2 вкл.

реле 1 выкл. -18 часов (64 800 000)

реле 1 вкл. -6 часов (21 600 000)

так понятнее ?

Не понятнее. Всё то же самое только вместо секунд уже какие-то часы появились...

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

Есть датчик DHT подключенный к пину такому-то, реле 1 и реле 2 подключенные к пинам таким-то. Реле включаются подачей высокого (или низкого?) уровня. Начальное состояние реле при включении устройства должно быть такое-то (включено или выключено).

После включения устройства необходимо раз в N секунд/минут/часов снимать показания датчика и в зависимости от полученного значения изменять состояние реле 2. Если значение < 15 то..., если значение > 20 то....

После включения устройства реле 1 должно циклически изменять состояние - включаться на Non секунд/минут/часов затем выключаться на Noff секунд/минут/часов.

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

Ну как, угадал?

Wats0n
Offline
Зарегистрирован: 10.02.2019

kalapanga пишет:

Wats0n пишет:

Мне необходимо

температура меньше 15 -реле 2 выкл.

температура больше 20 -реле 2 вкл.

реле 1 выкл. -18 часов (64 800 000)

реле 1 вкл. -6 часов (21 600 000)

так понятнее ?

Не понятнее. Всё то же самое только вместо секунд уже какие-то часы появились...

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

Есть датчик DHT подключенный к пину такому-то, реле 1 и реле 2 подключенные к пинам таким-то. Реле включаются подачей высокого (или низкого?) уровня. Начальное состояние реле при включении устройства должно быть такое-то (включено или выключено).

После включения устройства необходимо раз в N секунд/минут/часов снимать показания датчика и в зависимости от полученного значения изменять состояние реле 2. Если значение < 15 то..., если значение > 20 то....

После включения устройства реле 1 должно циклически изменять состояние - включаться на Non секунд/минут/часов затем выключаться на Noff секунд/минут/часов.

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

Ну как, угадал?

Все именно так ! Спасибо