Помогите со скетчем... Автоматизация)))

Shamzelia
Offline
Зарегистрирован: 30.05.2015

Проблема с прописыванием реакции по датчику sensorPin (аналоговый)

Релюха 3 ну никак не реагирует (((

 

#include <Wire.h>        // Добавляем необходимые библиотеки
#include <LiquidCrystal_I2C.h>
#include <dht11.h>
dht11 DHT;              // Объявление переменной класса dht11
#define DHT11_PIN 5      // Датчик DHT11 подключен к цифровому пину номер 4

#define RELAY1  9      //Порт реле 1                      
#define RELAY2  8      //Порт реле 2                      
#define RELAY3  7      //Порт реле 3                    
#define RELAY4  6      //Порт реле 4


byte degree[8] =        // Битовая маска символа градуса
{
  B00111,
  B00101,
  B00111,
  B00000,
  B00000,
  B00000,
  B00000,
};

byte temp[8] = //Иконка термометра
{
    B00100,
    B01010,
    B01010,
    B01110,
    B01110,
    B11111,
    B11111,
    B01110,
};

byte humidL[8] = //Иконка влажности
{
    B00000,
    B00000,
    B00011,
    B01110,
    B11000,
    B10000,
    B01110,
    B00011,
};
byte humidR[8] = //Иконка влажности
{
    B00000,
    B00000,
    B11000,
    B01110,
    B00011,
    B00001,
    B01110,
    B11000,
};

byte Light[8] = //Иконка света
{
    B00100,
    B10101,
    B10101,
    B01110,
    B11011,
    B01110,
    B10101,
    B10101,
};


byte MOISTURE[8] = //Иконка почвы
{
    B00100,
    B00100,
    B01010,
    B01010,
    B10001,
    B10001,
    B10001,
    B01110,
};
LiquidCrystal_I2C lcd(0x27,16,2);  // Задаем адрес и размерность дисплея

//Датчик влажности
int sensorPin = 0;    // Аналоговый порт 0 (порт данных)
int sensorValue = 0;  // Переменная для хранения значение из датчика
//Датчик света
int sensorPinL = 1;    // Аналоговый порт 1 (порт данных)
int sensorLight = 0;


void setup()
{
  lcd.init();                      // Инициализация lcd          
  lcd.backlight();                  // Включаем подсветку
  lcd.createChar(1, degree);        // Создаем символ под номером 1
  lcd.createChar(2, temp);
  lcd.createChar(3, humidL);
  lcd.createChar(4, humidR);
  lcd.createChar(5, Light);        //иконка солнышка
  lcd.createChar(6, MOISTURE);      //Иконка почвы
// Инициализация DATA pins для OUTPUT
  pinMode(RELAY1, OUTPUT);    
  pinMode(RELAY2, OUTPUT);
  pinMode(RELAY3, OUTPUT);
  pinMode(RELAY4, OUTPUT);
  digitalWrite(RELAY1,HIGH);          // Turns Relay Off
  digitalWrite(RELAY2,HIGH);          // Turns Relay Off
  digitalWrite(RELAY3,HIGH);          // Turns Relay Off
  digitalWrite(RELAY4,HIGH);          // Turns Relay Off
}

void loop()
{
  // Выводим показания влажности и температуры
  lcd.setCursor(0, 0);        // Устанавливаем курсор в начало 1 строки
  lcd.print("\3\4=  % ");    // Выводим текст
  lcd.setCursor(3, 0);
  lcd.print(DHT.humidity, 1);
  lcd.setCursor(7, 0);              // Устанавливаем курсор в начало 2 строки
  lcd.print("\2=  \1C ");    // Выводим текст, \1 - значок градуса
  lcd.setCursor(9, 0);          
  lcd.print(DHT.temperature,1);

// выводим показания влажности почвы
lcd.setCursor(0, 1);
lcd.print("\6=");
lcd.setCursor(2, 1);
lcd.print(analogRead(sensorPin));
//Выводим значение освещенности
lcd.setCursor(7, 1);
lcd.print("\5=  ");
lcd.setCursor(9, 1);
lcd.print(analogRead(sensorPinL));

//зададим диапазоны срабатываний для атмосферной влажности
if (DHT.humidity > 35) {
  digitalWrite(RELAY1,LOW);
}
else if (DHT.humidity < 18) {
  digitalWrite(RELAY1,HIGH);
}
//зададим диапазоны срабатываний для атмосферной температуры
if (DHT.temperature >= 29) {
  digitalWrite(RELAY2,LOW);
}
else if (DHT.temperature >= 28) {
  digitalWrite(RELAY2,HIGH);
}
//зададим диапазоны срабатываний для датчика влажности почвы
if (analogRead(sensorPin) > 5000) {
  digitalWrite(RELAY3,HIGH); //выключаем
}
else if (analogRead(sensorPin) < 2000 ) {
  digitalWrite(RELAY3,LOW); //включаем
}




  int chk;  
  ; // Мониторинг ошибок
  chk = DHT.read(DHT11_PIN);    // Чтение данных
  switch (chk){
  case DHTLIB_OK:
    break;
  case DHTLIB_ERROR_CHECKSUM:
    lcd.clear();
    lcd.print("Checksum error");
    break;
  case DHTLIB_ERROR_TIMEOUT:
    lcd.clear();
    lcd.print("Time out error");
    break;
  default:
    lcd.clear();
    lcd.print("Unknown error");
    break;
  }
  delay(1000);                  
}

 

Shamzelia
Offline
Зарегистрирован: 30.05.2015

И есть способ Аналоговые датчики в норм вид привести чтоб не 1024 а чтото 90%

vvadim
Offline
Зарегистрирован: 23.05.2012
int val = analogRead(0);
val = map(val, 0, 1023, 0, 100);

 

vvadim
Offline
Зарегистрирован: 23.05.2012
//зададим диапазоны срабатываний для датчика влажности почвы
if (analogRead(sensorPin) > 5000) {
  digitalWrite(RELAY3,HIGH); //выключаем
}
else if (analogRead(sensorPin) < 2000 ) {
  digitalWrite(RELAY3,LOW); //включаем
}

а что это за фигня 5000 и 2000?

если максимально 1023

http://arduino.ru/Reference/AnalogRead

Shamzelia
Offline
Зарегистрирован: 30.05.2015

со значениями (5000 и 2000) разобрался )) спасибо за пинки ))

А вот с кодом преобразования в божеский вид не очень (((   sensorValue = map(sensorValue, 0, 1023, 0, 100);

Ведь по логике при 1023 почва вообще сухая тоесть влажность = 0

а при 0 = 100?

Так?

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

при размещении длинного кода ставьте галочку "свернуть код" , "пронумеровать строки" - само собой

почва пропитана водой , датчик выдаёт 100% влажности
sensorValue = map(sensorValue, 0, 1023, 0, 100);

почва сухая , датчик выдаёт 100% сухости
sensorValue = map(sensorValue, 0, 1023, 100, 0);

всё зависит от того что вложено в переменную "sensorValue"

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

и что вы повесили на Relay1...4 ?
охладитель , нагреватель , опрыскиватель и осушитель ? или ? по коду не видно....

Shamzelia
Offline
Зарегистрирован: 30.05.2015
Так вроде, если я все правильнопонял )))  


#include <Wire.h>        // Добавляем необходимые библиотеки
#include <LiquidCrystal_I2C.h>
#include <dht11.h>
dht11 DHT;               // Объявление переменной класса dht11
#define DHT11_PIN 5      // Датчик DHT11 подключен к цифровому пину номер 4

#define RELAY1  9      //Порт реле 1                        
#define RELAY2  8      //Порт реле 2                        
#define RELAY3  7      //Порт реле 3                       
#define RELAY4  6      //Порт реле 4


byte degree[8] =         // Битовая маска символа градуса
{
  B00111,
  B00101,
  B00111,
  B00000,
  B00000,
  B00000,
  B00000,
};

byte temp[8] = //Иконка термометра
{
    B00100,
    B01010,
    B01010,
    B01110,
    B01110,
    B11111,
    B11111,
    B01110,
};

byte humidL[8] = //Иконка влажности 
{
    B00000,
    B00000,
    B00011,
    B01110,
    B11000,
    B10000,
    B01110,
    B00011,
};
byte humidR[8] = //Иконка влажности 
{
    B00000,
    B00000,
    B11000,
    B01110,
    B00011,
    B00001,
    B01110,
    B11000,
};

byte Light[8] = //Иконка света 
{
    B00100,
    B10101,
    B10101,
    B01110,
    B11011,
    B01110,
    B10101,
    B10101,
};


byte MOISTURE[8] = //Иконка почвы 
{
    B00100,
    B00100,
    B01010,
    B01010,
    B10001,
    B10001,
    B10001,
    B01110,
};
 
LiquidCrystal_I2C lcd(0x27,16,2);   // Задаем адрес и размерность дисплея

//Датчик влажности
int sensorPin = 0;    // Аналоговый порт 0 (порт данных)
// int sensorValue = 0;  // Переменная для хранения значение из датчика
int sensorValue = map(sensorValue, 0, 1023, 100, 0); 
//Датчик света
int sensorPinL = 1;    // Аналоговый порт 1 (порт данных)
// int sensorLight = 0;
int sensorLight = map(sensorLight, 0, 1023, 100, 0); 


void setup()
{
  lcd.init();                       // Инициализация lcd             
  lcd.backlight();                  // Включаем подсветку
  lcd.createChar(1, degree);        // Создаем символ под номером 1
  lcd.createChar(2, temp);
  lcd.createChar(3, humidL);
  lcd.createChar(4, humidR);
  lcd.createChar(5, Light);         //иконка солнышка
  lcd.createChar(6, MOISTURE);      //Иконка почвы
 //  Инициализация релюх 
  pinMode(RELAY1, OUTPUT);       
  pinMode(RELAY2, OUTPUT);
  pinMode(RELAY3, OUTPUT);
  pinMode(RELAY4, OUTPUT);
   digitalWrite(RELAY1,HIGH);          // Off
   digitalWrite(RELAY2,HIGH);          // Off
   digitalWrite(RELAY3,HIGH);          // Off
   digitalWrite(RELAY4,HIGH);          // Off
}

void loop()
{
  // Выводим показания влажности и температуры
  lcd.setCursor(0, 0);        // Устанавливаем курсор в начало 1 строки
  lcd.print("\3\4=  % ");     // Выводим текст
  lcd.setCursor(3, 0); 
  lcd.print(DHT.humidity, 1);
  lcd.setCursor(7, 0);              // Устанавливаем курсор в начало 2 строки
  lcd.print("\2=  \1C ");    // Выводим текст, \1 - значок градуса
  lcd.setCursor(9, 0);             
  lcd.print(DHT.temperature,1);

// выводим показания влажности почвы
 lcd.setCursor(0, 1);
 lcd.print("\6=");
 lcd.setCursor(2, 1);
 lcd.print(analogRead(sensorPin));
//Выводим значение освещенности
 lcd.setCursor(7, 1);
 lcd.print("\5=   ");
 lcd.setCursor(9, 1);
 lcd.print(analogRead(sensorPinL));

 
//зададим диапазоны срабатываний для атмосферной влажности 
 if (DHT.humidity > 35) {
   digitalWrite(RELAY1,LOW);
 }
 else if (DHT.humidity < 18) {
   digitalWrite(RELAY1,HIGH);
 }
//зададим диапазоны срабатываний для атмосферной температуры
 if (DHT.temperature >= 29) {
   digitalWrite(RELAY2,LOW);
 }
 else if (DHT.temperature >= 28) {
   digitalWrite(RELAY2,HIGH);
 }
//зададим диапазоны срабатываний для датчика влажности почвы
 if (analogRead(sensorPin) > ) {
   digitalWrite(RELAY3,HIGH); //выключаем
 }
 else if (analogRead(sensorPin) < 2000 ) {
   digitalWrite(RELAY3,LOW); //включаем
 }




  int chk;    
  ; // Мониторинг ошибок
  chk = DHT.read(DHT11_PIN);    // Чтение данных
  switch (chk){
  case DHTLIB_OK:  
    break;
  case DHTLIB_ERROR_CHECKSUM:  
    lcd.clear(); 
    lcd.print("Checksum error");  
    break;
  case DHTLIB_ERROR_TIMEOUT:
    lcd.clear(); 
    lcd.print("Time out error");
    break;
  default:
    lcd.clear(); 
    lcd.print("Unknown error");
    break;
  }
  delay(1000);                     
}

 

DrLOR
Offline
Зарегистрирован: 14.04.2012

Если датчик влажности подобен http://www.ebay.com/itm/Soil-Hygrometer-Detection-Module-Soil-Moisture-Sensor-For-arduino-Smart-car-/261831593816?pt=LH_DefaultDomain_0&hash=item3cf6610f58

то через 1.5-2 мес  под влиянием электролиза перестанет работать((( и ничего не помогает(((

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

DrLOR пишет:

Если датчик влажности подобен http://www.ebay.com/itm/Soil-Hygrometer-Detection-Module-Soil-Moisture-Sensor-For-arduino-Smart-car-/261831593816?pt=LH_DefaultDomain_0&hash=item3cf6610f58

то через 1.5-2 мес  под влиянием электролиза перестанет работать((( и ничего не помогает(((

Помогают электроды из нержавейки.

DrLOR
Offline
Зарегистрирован: 14.04.2012

Спасибо!!!! На след год попробую опять поливать свою делянку по влажности, а не по времени)

Shamzelia
Offline
Зарегистрирован: 30.05.2015

Локовырял код но теперь проблема с релюхами реакцией на датчик аналоговый влажности реле №3

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

 

#include <Wire.h>        // Добавляем необходимые библиотеки
#include <LiquidCrystal_I2C.h>
#include <dht11.h>
dht11 DHT;               // Объявление переменной класса dht11
#define DHT11_PIN 5      // Датчик DHT11 подключен к цифровому пину номер 4

#define RELAY1  9      //Порт реле 1                        
#define RELAY2  8      //Порт реле 2                        
#define RELAY3  7      //Порт реле 3                       
#define RELAY4  6      //Порт реле 4


byte degree[8] =         // Битовая маска символа градуса
{
  B00111,
  B00101,
  B00111,
  B00000,
  B00000,
  B00000,
  B00000,
};

byte temp[8] = //Иконка термометра
{
    B00100,
    B01010,
    B01010,
    B01110,
    B01110,
    B11111,
    B11111,
    B01110,
};

byte humidL[8] = //Иконка влажности 
{
    B00000,
    B00000,
    B00011,
    B01110,
    B11000,
    B10000,
    B01110,
    B00011,
};
byte humidR[8] = //Иконка влажности 
{
    B00000,
    B00000,
    B11000,
    B01110,
    B00011,
    B00001,
    B01110,
    B11000,
};

byte Light[8] = //Иконка света 
{
    B00100,
    B10101,
    B10101,
    B01110,
    B11011,
    B01110,
    B10101,
    B10101,
};


byte MOISTURE[8] = //Иконка почвы 
{
    B00100,
    B00100,
    B01010,
    B01010,
    B10001,
    B10001,
    B10001,
    B01110,
};
 
LiquidCrystal_I2C lcd(0x27,16,2);   // Задаем адрес и размерность дисплея

void setup()
{
  lcd.init();                       // Инициализация lcd             
  lcd.backlight();                  // Включаем подсветку
  lcd.createChar(1, degree);        // Создаем символ под номером 1
  lcd.createChar(2, temp);
  lcd.createChar(3, humidL);
  lcd.createChar(4, humidR);
  lcd.createChar(5, Light);         //иконка солнышка
  lcd.createChar(6, MOISTURE);      //Иконка почвы
 //  Инициализация релюх 
  pinMode(RELAY1, OUTPUT);       
  pinMode(RELAY2, OUTPUT);
  pinMode(RELAY3, OUTPUT);
  pinMode(RELAY4, OUTPUT);
  //выключаем релюхи
   digitalWrite(RELAY1,HIGH);          // Off
   digitalWrite(RELAY2,HIGH);          // Off
   digitalWrite(RELAY3,HIGH);          // Off
   digitalWrite(RELAY4,HIGH);          // Off
}

void loop()
{
  // Выводим показания влажности и температуры
  lcd.setCursor(0, 0);        // Устанавливаем курсор в начало 1 строки
  lcd.print("\3\4=  % ");     // Выводим текст
  lcd.setCursor(3, 0); 
  lcd.print(DHT.humidity, 1);
  lcd.setCursor(7, 0);              // Устанавливаем курсор в начало 2 строки
  lcd.print("\2=  \1C ");    // Выводим текст, \1 - значок градуса
  lcd.setCursor(9, 0);             
  lcd.print(DHT.temperature,1);

// выводим показания влажности почвы
int SenPin = analogRead(0);    // Аналоговый порт 0 (порт данных)
int sensorValue = map(SenPin, 0, 1023, 100, 0); 
 lcd.setCursor(0, 1);
 lcd.print("\6=   % ");
 lcd.setCursor(2, 1);
 lcd.print(sensorValue);
//Выводим значение освещенности
int SenPinL = analogRead(1);    // Аналоговый порт 1 (порт данных)
int sensorLight = map(SenPinL, 0, 1023, 100, 0); 
 lcd.setCursor(7, 1);
 lcd.print("\5=   % ");
 lcd.setCursor(9, 1);
 lcd.print(sensorLight);

 
//зададим диапазоны срабатываний для атмосферной влажности 
 if (DHT.humidity > 35) {
   digitalWrite(RELAY1,LOW);
 }
 else if (DHT.humidity < 18) {
   digitalWrite(RELAY1,HIGH);
 }
//зададим диапазоны срабатываний для атмосферной температуры
 if (DHT.temperature >= 29) {
   digitalWrite(RELAY2,LOW);
 }
 else if (DHT.temperature >= 28) {
   digitalWrite(RELAY2,HIGH);
 }
//зададим диапазоны срабатываний для датчика влажности почвы
 if (analogRead(sensorValue) > 55) {
   digitalWrite(RELAY3,HIGH); //выключаем
 }
 else if (analogRead(sensorValue) < 50 ) {
   digitalWrite(RELAY3,LOW); //включаем
 }




  int chk;    
  ; // Мониторинг ошибок
  chk = DHT.read(DHT11_PIN);    // Чтение данных
  switch (chk){
  case DHTLIB_OK:  
    break;
  case DHTLIB_ERROR_CHECKSUM:  
    lcd.clear(); 
    lcd.print("Checksum error");  
    break;
  case DHTLIB_ERROR_TIMEOUT:
    lcd.clear(); 
    lcd.print("Time out error");
    break;
  default:
    lcd.clear(); 
    lcd.print("Unknown error");
    break;
  }
  delay(1000);                     
}

 

Shamzelia
Offline
Зарегистрирован: 30.05.2015

Какой значек можно применить к моему коду для атмосферной влажности и влажности почвы?

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

Shamzelia пишет:

Какой значек можно применить к моему коду для атмосферной влажности и влажности почвы?

капелька и над ней черточка - для атмосферной влажности

капелька и под ней черточка - для влажности почвы

думаю, будет наглядно и понятно

Shamzelia
Offline
Зарегистрирован: 30.05.2015

Супер спасибо за идею...   Тучку думал нарисовать но такое г... вышло )))

 

А с кодом и реле есть варианты?

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013

Чтобы понять что идет с датчика влажности - вам нужно с ним "Поиграться" - посмотреть как меняется analogRead(sensorValue)

в зависимости от состояния датчика. Тогда сразу будет понятно с чем надо сравнивать. А в будущем сделать откалибровать датчик.

Вообще измерьте напряжение мультиметром на этом входе.

Shamzelia
Offline
Зарегистрирован: 30.05.2015

Я это вижу на дисплее )))

// выводим показания влажности почвы
	int SenPin = analogRead(0);    // Аналоговый порт 0 (порт данных)
	int sensorValue = map(SenPin, 0, 1023, 100, 0);
	 lcd.setCursor(0, 1);
	 lcd.print("\6=   % ");
	 lcd.setCursor(2, 1);
	 lcd.print(sensorValue);

но при переходе за уровень 55 реле не выключается ((, а на уровне от 0-10 не включено (((

//зададим диапазоны срабатываний для датчика влажности почвы
 if (analogRead(sensorValue) >= 55) digitalWrite(RELAY3,HIGH); //выключаем
 if (analogRead(sensorValue) <= 50 ) digitalWrite(RELAY3,LOW); //включаем

поправил для наглядности ))

Shamzelia
Offline
Зарегистрирован: 30.05.2015

Советы будут?

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Shamzelia пишет:

Советы будут?

убиться об стенку не подойдет?

ибо нормальные люди когда собирают нечто из двух гвоздей то берут простой скеч который читает аналогый пин . втыкают свои гвозди в землю и смотрят что там читаеться. поливают и опять смотрят что читается.. и из этого делают вывод когда полито а когда нет. 

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

Shamzelia
Offline
Зарегистрирован: 30.05.2015

Прекрасно ))) на каждом форуме есть свой злобный писатель ) и всеже в Вашем ответе по существу 0 информации (где скетч? Пример подключения)

Так как пишете Вы, может писать любой школьник...
О и забыл... Обязательно вставляйте слова "погугли" , "кури маны", "RTFM" это и модно и опять таки показывает всем читатетелям новичкам, насколько вы круты ! И вообще богам до коментов опускатся не стоит! Или от вашего имнни пишет ваша arduina?

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

Shamzelia пишет:
Прекрасно ))) на каждом форуме есть свой злобный писатель ) и всеже в Вашем ответе по существу 0 информации (где скетч? Пример подключения) Так как пишете Вы, может писать любой школьник... О и забыл... Обязательно вставляйте слова "погугли" , "кури маны", "RTFM" это и модно и опять таки показывает всем читатетелям новичкам, насколько вы круты ! И вообще богам до коментов опускатся не стоит! Или от вашего имнни пишет ваша arduina?

на каждом форуме есть свой злобный писатель
это я !

где скетч? Пример подключения
кто тибе их пообещал ?

Или от вашего имнни пишет ваша arduina?
он такое сможет ( или смогет ) - думается иногда - что так он и есть !

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Shamzelia, вы очень не внимательны. Смотрим:

начало loop

120	// выводим показания влажности почвы
121	int SenPin = analogRead(0);    // Аналоговый порт 0 (порт данных)
122	int sensorValue = map(SenPin, 0, 1023, 100, 0); 

Вы прочли показание с нулевого порта (кстати корректнее писать A0), масштабировали его, и положили в переменную sensorValue , Но что мы видим ближе к концу loop :

150	//зададим диапазоны срабатываний для датчика влажности почвы
151	 if (analogRead(sensorValue) > 55) {
152	   digitalWrite(RELAY3,HIGH); //выключаем
153	 }
154	 else if (analogRead(sensorValue) < 50 ) {
155	   digitalWrite(RELAY3,LOW); //включаем
156	 }

Вы снова читате аналоговый вход,  подставляя ему вместо адреса порта своё значение влажности.

Radjah
Offline
Зарегистрирован: 06.08.2014

Зато у него няшные иконки есть. :)

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

Radjah пишет:

Зато у него няшные иконки есть. :)

Кстати о няшных иконках... У кого какие мысли/идеи есть насчет (няшной, не няшной - все равно) иконки для атмосферного давления? Высота до 8 точек, ширина - до 32.

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

vk007 пишет:

Кстати о няшных иконках... У кого какие мысли/идеи есть насчет (няшной, не няшной - все равно) иконки для атмосферного давления? Высота до 8 точек, ширина - до 32.

самая няшная иконка для давления.. вверх давление растет. вниз падает

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

Puhlyaviy пишет:

самая няшная иконка для давления.. вверх давление растет. вниз падает

иконка супер! :) жаль, в 8 точек ее не утиснуть чтобы была понятной

Shamzelia
Offline
Зарегистрирован: 30.05.2015

dimax пишет:

Shamzelia, вы очень не внимательны. Смотрим:

начало loop

120	// выводим показания влажности почвы
121	int SenPin = analogRead(0);    // Аналоговый порт 0 (порт данных)
122	int sensorValue = map(SenPin, 0, 1023, 100, 0); 

Вы прочли показание с нулевого порта (кстати корректнее писать A0), масштабировали его, и положили в переменную sensorValue , Но что мы видим ближе к концу loop :

150	//зададим диапазоны срабатываний для датчика влажности почвы
151	 if (analogRead(sensorValue) > 55) {
152	   digitalWrite(RELAY3,HIGH); //выключаем
153	 }
154	 else if (analogRead(sensorValue) < 50 ) {
155	   digitalWrite(RELAY3,LOW); //включаем
156	 }

Вы снова читате аналоговый вход,  подставляя ему вместо адреса порта своё значение влажности.

Это от того я его в конструкции if читаю, что не знаю как правильно ((( вот и прошу помощи

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Shamzelia, у вас там всё прочитано уже. Должно  быть так: if (sensorValue>55) {  и так далее...

Shamzelia
Offline
Зарегистрирован: 30.05.2015

Спасибо, попробую

Shamzelia
Offline
Зарегистрирован: 30.05.2015

Всем спасибо за наставления на путь истенный итог ниже, усе работает шеф!

#include <Wire.h>        // Добавляем необходимые библиотеки
#include <LiquidCrystal_I2C.h>
#include <dht11.h>
dht11 DHT;               // Объявление переменной класса dht11
#define DHT11_PIN 5      // Датчик DHT11 подключен к цифровому пину номер 4

#define RELAY1  9      //Порт реле 1                        
#define RELAY2  8      //Порт реле 2                        
#define RELAY3  7      //Порт реле 3                       
#define RELAY4  6      //Порт реле 4


byte degree[8] =         // Битовая маска символа градуса
{
  B00111,
  B00101,
  B00111,
  B00000,
  B00000,
  B00000,
  B00000,
};

byte temp[8] = //Иконка термометра
{
    B00100,
    B01010,
    B01010,
    B01110,
    B01110,
    B11111,
    B11111,
    B01110,
};

byte humidL[8] = //Иконка влажности 
{
    B00000,
    B00000,
    B00011,
    B01110,
    B11000,
    B10000,
    B01110,
    B00011,
};
byte humidR[8] = //Иконка влажности 
{
    B00000,
    B00000,
    B11000,
    B01110,
    B00011,
    B00001,
    B01110,
    B11000,
};

byte Light[8] = //Иконка света 
{
    B00100,
    B10101,
    B10101,
    B01110,
    B11011,
    B01110,
    B10101,
    B10101,
};


byte MOISTURE[8] = //Иконка почвы 
{
    B00100,
    B00100,
    B01010,
    B01010,
    B10001,
    B10001,
    B10001,
    B01110,
};
 
LiquidCrystal_I2C lcd(0x27,16,2);   // Задаем адрес и размерность дисплея

void setup()
{
  lcd.init();                       // Инициализация lcd             
  lcd.backlight();                  // Включаем подсветку
  lcd.createChar(1, degree);        // Создаем символ под номером 1
  lcd.createChar(2, temp);
  lcd.createChar(3, humidL);
  lcd.createChar(4, humidR);
  lcd.createChar(5, Light);         //иконка солнышка
  lcd.createChar(6, MOISTURE);      //Иконка почвы
 //  Инициализация релюх 
  pinMode(RELAY1, OUTPUT);       
  pinMode(RELAY2, OUTPUT);
  pinMode(RELAY3, OUTPUT);
  pinMode(RELAY4, OUTPUT);
  //выключаем релюхи
   digitalWrite(RELAY1,HIGH);          // Off
   digitalWrite(RELAY2,HIGH);          // Off
   digitalWrite(RELAY3,HIGH);          // Off
   digitalWrite(RELAY4,HIGH);          // Off
}

void loop()
{
  // Выводим показания влажности и температуры
  lcd.setCursor(0, 0);        // Устанавливаем курсор в начало 1 строки
  lcd.print("\3\4=  % ");     // Выводим текст
  lcd.setCursor(3, 0); 
  lcd.print(DHT.humidity, 1);
  lcd.setCursor(7, 0);              // Устанавливаем курсор в начало 2 строки
  lcd.print("\2=  \1C ");    // Выводим текст, \1 - значок градуса
  lcd.setCursor(9, 0);             
  lcd.print(DHT.temperature,1);

// выводим показания влажности почвы
int SenPin = analogRead(0);    // Аналоговый порт 0 (порт данных)
int sensorValue = map(SenPin, 0, 1023, 100, 0); 
 lcd.setCursor(0, 1);
 lcd.print("\6=  % ");
 lcd.setCursor(2, 1);
 lcd.print(sensorValue);
//Выводим значение освещенности
int SenPinL = analogRead(1);    // Аналоговый порт 1 (порт данных)
int sensorLight = map(SenPinL, 0, 1023, 100, 0); 
 lcd.setCursor(7, 1);
 lcd.print("\5=  % ");
 lcd.setCursor(9, 1);
 lcd.print(sensorLight);

 
//зададим диапазоны срабатываний для атмосферной влажности 
 if (DHT.humidity >= 35) digitalWrite(RELAY1,LOW);//включаем
 if (DHT.humidity <= 37) digitalWrite(RELAY1,HIGH);//выключаем
//зададим диапазоны срабатываний для атмосферной температуры
 if (DHT.temperature >= 29) digitalWrite(RELAY2,LOW);//включаем
 if (DHT.temperature <= 28) digitalWrite(RELAY2,HIGH);//выключаем
//зададим диапазоны срабатываний для датчика влажности почвы
if (sensorValue >= 55) digitalWrite(RELAY3,HIGH); //выключаем
if (sensorValue <= 50) digitalWrite(RELAY3,LOW); //включаем
//зададим диапазоны срабатываний для датчика света
//if (sensorLight >= 55) digitalWrite(RELAY4,HIGH); //выключаем
//if (sensorLight <= 50) digitalWrite(RELAY4,LOW); //включаем


  int chk;    
  ; // Мониторинг ошибок
  chk = DHT.read(DHT11_PIN);    // Чтение данных
  switch (chk){
  case DHTLIB_OK:  
    break;
  case DHTLIB_ERROR_CHECKSUM:  
    lcd.clear(); 
    lcd.print("Checksum error");  
    break;
  case DHTLIB_ERROR_TIMEOUT:
    lcd.clear(); 
    lcd.print("Time out error");
    break;
  default:
    lcd.clear(); 
    lcd.print("Unknown error");
    break;
  }
  delay(1000);                     
}

 

Shamzelia
Offline
Зарегистрирован: 30.05.2015

Теперь вопрос

Разорвал цепь питания датчика влажности реле 4

Хочу редко опрашивать датчик влажности и включать его (реле 4) только когда опрашиваю, но при этом часто опрашивать остальные датчики.

Пример раз в сутки включаем реле 4 и опрашиваем датчик, если сухо включаем реле 3 и поливаем пока не станет нормально )

Остальные датчики опрашиваем с частотой раз в 1 минут..

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

Shamzelia пишет:

 если сухо включаем реле 3 и поливаем пока не станет нормально )

Боюсь, когда станет нормально на датчике, вокруг него будет озеро. Скорее всего придеться экспериментально подобрать время полива. ИМХО.

Shamzelia
Offline
Зарегистрирован: 30.05.2015

Ну вот здесь я предпологаю что по лупу можно написать все что угодно, но вгот как ? Собственно вопрос )

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Shamzelia пишет:

Ну вот здесь я предпологаю что по лупу можно написать все что угодно, но вгот как ? Собственно вопрос )


Это не вопрос. Это вам в раздел "ищю исполнителя"

Shamzelia
Offline
Зарегистрирован: 30.05.2015

Форум одного хейтера? может всетаки по сути вопроса а не флудилку орнанизовывать..?

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

Shamzelia пишет:

Форум одного хейтера? может всетаки по сути вопроса а не флудилку орнанизовывать..?

Вот объясните, в чем обида? У вас самого есть мысли как это сделать? Пухлявый это сделает с закрытыми глазами.

Shamzelia
Offline
Зарегистрирован: 30.05.2015

нО вместо этого директ на заказ )))  Мы с ним не в одной теме переписываемся ))) но по существу очень мало... а жаль ..

можно делать луп в лупе? или задовать смещение для переменной с каждым опросом и потом ее уменьшать?

Чтото типа

Val1=1

loop

if sensorvalue <= 55 val1=10000

val1=val1-1000

delay = 1000

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

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

Shamzelia
Offline
Зарегистрирован: 30.05.2015

Хочу редко опрашивать датчик влажности и включать его (реле 4) только когда опрашиваю, но при этом часто опрашивать остальные датчики.

Пример раз в сутки включаем реле 4 и опрашиваем датчик, если сухо включаем реле 3 и поливаем пока не станет нормально )

Остальные датчики опрашиваем с частотой раз в 1 минут..

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

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

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

bwn пишет:

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


Датчик сырости через реле... прикинь до чего техника дошла... хорошо еще паровой котел изолентой не примотали.

Shamzelia
Offline
Зарегистрирован: 30.05.2015

Позже переделаю на транзистор ) пока нет в наличии (

За пинок по ссылке спасибо, отрезвел, переберу код )

Shamzelia
Offline
Зарегистрирован: 30.05.2015

Тоесть в логике мне нужно прописать несколько

long previousMillis = 0;       
long interval = 1000;  

для разных датчиков? Верно мыслю?

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Какой транзистор? Бабушкин ? Радио слушать?

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

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

Shamzelia пишет:

Тоесть в логике мне нужно прописать несколько

long previousMillis = 0;       
long interval = 1000;  

для разных датчиков? Верно мыслю?

Мыслите верно, только здесь лучше "unsigned long previousMillis = 0;", поищите, в чем разница.

maxi_10
Offline
Зарегистрирован: 05.01.2012

Shamzelia пишет:

Тоесть в логике мне нужно прописать несколько

long previousMillis = 0;       
long interval = 1000;  

для разных датчиков? Верно мыслю?

 

Для упрощения почитайте http://alxarduino.blogspot.ru/2013/09/ComfortablyBlinkWithoutDelay.html тут.

DO_EVERY(1000,{ ЧТО_НУЖНО_СДЕЛАТЬ1 });
 
 
bwn
Offline
Зарегистрирован: 25.08.2014

maxi_10, а вы уверены, что ТС надо настолько упрощать? Ведь ничему не научится, кроме как копипастить.