Не опрашивается DHT 11 !!!
- Войдите на сайт для отправки комментариев
Втр, 07/01/2014 - 19:53
Помогите люди добрые!!!
Идея такова : сделать в частном доме вентиляцию , для этого использовал arduino uno, dht11 ( в планах подключить 3 датчика ), датчик движения ( для туалета), реле и естественно вентилятор.
Проблема в том что при подключенном USB к компу и открытом окне монитора порта все работает!!! Но как только я подключаю внешнее питание ( блок 12 вольт) ардуинка перестает опрашивать датчик dht11 хотя на пир реагирует реле отлично счелкает выдерживает все паузы.
Не судите строго это первая программа .
Вот что смог неимоверными усилиями слепить :
#include <dht.h>
#define dht_dpin A0
dht DHT;
//Время калибровки датчика (10-60 сек. по даташиту)
int calibrationTime = 30;
//Время, в которое был принят сигнал отсутствия движения(LOW)
long unsigned int lowIn;
//Пауза, после которой движение считается оконченным
long unsigned int pause = 10000;
//Флаг. false = значит движение уже обнаружено, true - уже известно, что движения нет
boolean lockLow = true;
//Флаг. Сигнализирует о необходимости запомнить время начала отсутствия движения
boolean takeLowTime;
int pirPin = 2; //вывод подключения PIR датчика
int ledPin = 13; //вывод сигнального диода
int relayPin = 4; //реле пин
void setup()
{
Serial.begin(9600);
delay(300);
Serial.println("BJLA>I<HOCTb u TEMIIEPATyPA\n\n");
delay(700);
pinMode(pirPin, INPUT);
pinMode(ledPin, OUTPUT);
pinMode(relayPin, OUTPUT);
//!ВНИМАНИЕ! При использовании n-p-n реле необходимо в след. строчке поменять HIGH на LOW
digitalWrite(relayPin, HIGH);
delay(4000);
digitalWrite(pirPin, LOW);
//дадим датчику время на калибровку
for(int i = 0; i < calibrationTime; i++)
{
//Во время калибровки будет мигать сигнальный диод
i % 2 ? digitalWrite(ledPin, HIGH) : digitalWrite(ledPin, LOW);
delay(1000);
}
//По окончанию калибровки зажжем сигнальный диод
digitalWrite(ledPin, HIGH);
delay(50);
}
void loop()
{
Label :
DHT.read11(dht_dpin);
Serial.print("BJLA>I<HOCTb = ");
Serial.print(DHT.humidity);
Serial.print("% ");
Serial.print("TEMIIEPATyPA = ");
Serial.print(DHT.temperature);
Serial.println("C ");
delay(2000);
if(digitalRead(pirPin) == HIGH)goto label2 ;
if(DHT.humidity > 45)
{
digitalWrite(relayPin, LOW);
if(DHT.humidity < 45)
{
digitalWrite(relayPin, HIGH);
}
if (digitalRead(relayPin) == LOW)
{
goto Label;
}
}
//Если обнаружено движение
if(digitalRead(pirPin) == HIGH)
{
label2 :
Serial.print("1");
//Если до этого момента еще не включили реле
if(lockLow)
{
lockLow = false;
//Включаем реле.
//!ВНИМАНИЕ! При использовании n-p-n реле необходимо в след. строчке поменять LOW на HIGH
digitalWrite(relayPin, LOW);
delay(50);
Serial.print("2");
}
Serial.print("3");
takeLowTime = true;
}
Serial.print("4");
//Ели движения нет
if(digitalRead(pirPin) == LOW)
{
//Если время окончания движения еще не записано
if(takeLowTime)
{
Serial.print("5");
lowIn = millis(); //Сохраним время окончания движения
takeLowTime = false; //Изменим значения флага, чтобы больше не брать время, пока не будет нового движения
Serial.print("6");
}
//Если время без движение превышает паузу => движение окончено
Serial.print("7");
if(!lockLow && millis() - lowIn > pause)
{
Serial.print("8");
//Изменяем значение флага, чтобы эта часть кода исполнилась лишь раз, до нового движения
lockLow = true;
digitalWrite(relayPin, HIGH);
delay(50);
}
}
}
Ау люди помогите профану пожалуйста !!!! есть тут кто живой ?
Спасибо всем решил вопрос!!!!
Схему покажите пожалуйста.