Конфликт оборудования
- Войдите на сайт для отправки комментариев
Чт, 16/03/2017 - 22:21
собираю умную теплицу и столкнулся с такой проблемой что когда у меня датчик освещённости показывает что свет есть ,то всё моё устройство останавливается и ничего не делает,а когда показывает что света нет,всё работает как надо. есть подозрение что конфликтует жк и датчик освещённости.
вот код:
//------------------------ //жк //#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: поправил название, загнал код в теги.
То разве конфликт. Вот когда сервопривод и вентилятор сговорятся и начнут вам мордулица править то будет конфликт. А пока только неотлаженый и криво вставленый код.
а что здесь не так? почему криво вставленный и не отлаженый?
замаркируйте строки со 150 по 162 И???
замаркируйте строки со 150 по 162 И???
Спасибо,я только что уже решил эту проблему. везде где я видел все скетчи были от других немного датчиков и в итоге к моему датчику нужен был особый подход. его просто нужно было переставить из аналогового в цифру и код изменить и всё. А вы не знаете какой адаптер по характеристикам(V,A) нужен для ардуино?влияет ли кол-во подключенных к нему датчиков на характеристики типа вольт,ампер?
я использую 3 ампера 9 вольт
я использую 3 ампера 9 вольт
А можно 9В и 6А или спалит нах?))))
я использую 3 ампера 9 вольт
А можно 9В и 6А или спалит нах?))))
при правильных проводах - нет!
я использую 3 ампера 9 вольт
А можно 9В и 6А или спалит нах?))))
при правильных проводах - нет!
а что значит при правильных проводах?
а что значит при правильных проводах?
Правильно прогретых, из безкислородной меди и с выверенным направлением. Не парься, это мы о своем.)))
Напряжение питания МК, обычно 5 или 3,3В. Ток определяется подключенной низковольтной периферией, можно посчитать или мультиметром померить. Из этих данных и исходить.