Конфликт оборудования
- Войдите на сайт для отправки комментариев
Чт, 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В. Ток определяется подключенной низковольтной периферией, можно посчитать или мультиметром померить. Из этих данных и исходить.