Конфликт оборудования

skotmak
Offline
Зарегистрирован: 14.03.2017

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

вот код: 

//------------------------
//жк
//#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F, 16, 2);
//------------------------
//датчик темпиратуры земли
#include <OneWire.h>
OneWire  ds(10);  //  pin 10
//------------------------
//датчик влажности темпиратуры воздуха
#include <stDHT.h>
DHT sens (DHT11);
//------------------------
//датчик влажности земли
int aPin=A0; // контакт подключения аналогового выхода датчика
int water_value=0; // переменная для сохранения значения датчика
int very_moist_value = 220; //327 значение изначально было
//------------------------
//датчик освещённости
int LDR = A5;     //пин подключения датчка A5
int LDRValue = 0;      // переменная для сохранения значения датчика
int light_sensitivity = 220;    //предел срабатывания реле на свет
//------------------------


void setup() {
  //Serial.begin(9600);
lcd.begin(); // инициализация жк
// Turn on the blacklight and print a message.
lcd.backlight();
//lcd.begin(16,2);
//lcd.clear();
//------------------------
//датчик влажности темпиратуры воздуха
pinMode(3, INPUT);
//digitalWrite(3, HIGH);
//------------------------
//реле
pinMode(7, OUTPUT);     //включаем канал реле на 7 пине
pinMode(6, OUTPUT);     //включаем канал реле на 6 пине

//------------------------

}

void loop() {
  //Serial.print("fahrenheit");
//------------------------
//датчик влажности темпиратуры воздуха
int t = sens.readTemperature(3);
int h = sens.readHumidity(3);
//------------------------
//датчик влажности земли
  int water_value = analogRead(aPin);                              // Считываем показания датчика YL-69 (от 0 до 1023, где 1023 - сухо)
  int water_value_percent = map(water_value,very_moist_value,1023,100,0);  // Переводим показания датчика YL-69 в проценты
  if (water_value < 500) 
      {
        digitalWrite(7, HIGH);
      }
    else
      {
        digitalWrite(7, LOW);
      }
//------------------------
//датчик темпиратуры земли
byte i;
  byte present = 0;
  byte type_s;
  byte data[12];
  byte addr[8];
  float celsius, fahrenheit;
  
  if ( !ds.search(addr)) {
    ds.reset_search();
    return;
  }
  for( i = 0; i < 8; i++) {
  }
  if (OneWire::crc8(addr, 7) != addr[7]) {   
      return;
  }
  // the first ROM byte indicates which chip
  switch (addr[0]) {
    case 0x10:
      
      type_s = 1;
      break;
    case 0x28:
      
      type_s = 0;
      break;
    case 0x22:
      
      type_s = 0;
      break;
    default:
      
      return;
  } 
  ds.reset();
  ds.select(addr);
  ds.write(0x44, 1);        // start conversion, with parasite power on at the end
  present = ds.reset();
  ds.select(addr);    
  ds.write(0xBE);         // Read Scratchpad
  for ( i = 0; i < 9; i++) {           // we need 9 bytes
    data[i] = ds.read(); 
  }
  int16_t raw = (data[1] << 8) | data[0];
  if (type_s) {
    raw = raw << 3; // 9 bit resolution default
    if (data[7] == 0x10) {
      // "count remain" gives full 12 bit resolution
      raw = (raw & 0xFFF0) + 12 - data[6];
    }
  } else {
    byte cfg = (data[4] & 0x60);
    // at lower res, the low bits are undefined, so let's zero them
    if (cfg == 0x00) raw = raw & ~7;  // 9 bit resolution, 93.75 ms
    else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms
    else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms
    //// default is 12 bit resolution, 750 ms conversion time
  }
  celsius = (float)raw / 16.0;
  fahrenheit = celsius * 1.8 + 32.0;
 //------------------------
 //датчик освещённости
   int LDRValue = analogRead(LDR);      //reads the ldr’s value through LDR 
   int light_value_percent = map(LDRValue,light_sensitivity,1023,100,0); 
    if (LDRValue < 500) 
      {
        digitalWrite(6, LOW);
      }
   else
      {
        digitalWrite(6, HIGH);
      }
 lcd.setCursor(0, 0);
      if (LDRValue < 500) 
      {
        lcd.print("light:yes       ");
      }
   else
      {
        lcd.print("light:no        ");

      }
          lcd.setCursor(0, 1);
  //------------------------
  lcd.print("Temp g=" + String(celsius) + "C   ");
  lcd.setCursor(0, 0);
  //------------------------
  delay(2000);
  lcd.print("Hum a:" + String(h) + "%");
  lcd.setCursor(0, 1);
  lcd.print("Temp a:" + String(t) + "C      ");
  //------------------------
  delay(2000);
  lcd.setCursor(0, 0);
  lcd.println("water v=" + String(water_value_percent) + "%      ");
  lcd.setCursor(0, 1);
  if (water_value < 500) 
      {
        
        lcd.print("poliv:no        ");
         
      }
    else
      {
        
        lcd.print("poliv:yes       ");
         
      }
  //------------------------
  delay(2000);
  lcd.setCursor(0, 0);
  lcd.println("----------------");
  lcd.setCursor(0, 1);
  lcd.println("----------------");

  
  
  delay(2000);
   
  //-----------------------


}

 

UPD 17.03.2017 18:09 МСК by Yarik.Yar: поправил название, загнал код в теги.

skotmak
Offline
Зарегистрирован: 14.03.2017

Logik пишет:

То разве конфликт. Вот когда сервопривод и вентилятор сговорятся и начнут вам мордулица править то будет конфликт. А пока только неотлаженый и криво вставленый код.

 

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

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

замаркируйте строки со 150 по 162 И???

skotmak
Offline
Зарегистрирован: 14.03.2017

ua6em пишет:

замаркируйте строки со 150 по 162 И???

Спасибо,я только что уже решил эту проблему. везде где я видел все скетчи были от других немного датчиков и в итоге к моему датчику нужен был особый подход. его просто нужно было переставить из аналогового в цифру и код изменить и всё. А вы не знаете какой адаптер по характеристикам(V,A) нужен для ардуино?влияет ли кол-во подключенных к нему датчиков на характеристики типа вольт,ампер?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

я использую 3 ампера 9 вольт

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

ua6em пишет:

я использую 3 ампера 9 вольт

А можно 9В и 6А или спалит нах?))))

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

bwn пишет:

ua6em пишет:

я использую 3 ампера 9 вольт

А можно 9В и 6А или спалит нах?))))

при правильных проводах - нет!

skotmak
Offline
Зарегистрирован: 14.03.2017

xDriver пишет:

bwn пишет:

ua6em пишет:

я использую 3 ампера 9 вольт

А можно 9В и 6А или спалит нах?))))

при правильных проводах - нет!

а что значит при правильных проводах?

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

skotmak пишет:

а что значит при правильных проводах?

Правильно прогретых, из безкислородной меди и с выверенным направлением. Не парься, это мы о своем.)))
Напряжение питания МК, обычно 5 или 3,3В. Ток определяется подключенной низковольтной периферией, можно посчитать или мультиметром померить. Из этих данных и исходить.