Сигнализация v 1.0 Распаян диод температура и движения датчик без экрана

Дата публикации: 28.02.2015 14:53:08

// Система v 1.0 Распаян диод температура и движения датчик без экрана

//Время калибровки датчика (10-60 сек. по даташиту)

int calibrationTime = 30;

//Время, в которое был принят сигнал отсутствия движения(LOW)

long unsigned int lowIn;

//Пауза, после которой движение считается оконченным

long unsigned int pause = 5000;

//Флаг. false = значит движение уже обнаружено, true - уже известно, что движения нет

boolean lockLow = true;

//Флаг. Сигнализирует о необходимости запомнить время начала отсутствия движения

boolean takeLowTime;

int pirPin = 9; //вывод подключения PIR датчика

int ledPin = 8; //вывод сигнального диода

#include "DHT.h"

#define DHTPIN 2 // Подкинут пин датчика температуры

#define DHTTYPE DHT11 //тип датчика

DHT dht(DHTPIN, DHTTYPE);

void setup()

{

Serial.begin(9600);

pinMode(pirPin, INPUT);

pinMode(ledPin, OUTPUT);

digitalWrite(pirPin, LOW);

//дадим датчику время на калибровку

Serial.print("Calibrating");

for(int i = 0; i < calibrationTime; i++)

{

Serial.print(".");

delay(1000);

}

Serial.println(" done");

Serial.println("SENSOR ACTIVE");

tone(3,1000, 1000);

tone(3,1500, 500);

tone(3,700, 1000);

digitalWrite(ledPin, HIGH); // Включаем светодиод

delay(1000); // Ждем 1 секунду

digitalWrite(ledPin, LOW);

}

void loop()

{

float h = dht.readHumidity();

float t = dht.readTemperature();

// check if returns are valid, if they are NaN (not a number) then something went wrong!

if (isnan(t) || isnan(h)) {

Serial.println("Failed to read from DHT");

} else {

Serial.print("Humidity: ");

Serial.print(h);

Serial.print(" %\t");

Serial.print("Temperature: ");

Serial.print(t);

Serial.println(" *C");

}

//Если обнаружено движение

if(digitalRead(pirPin) == HIGH)

{

//Если еще не вывели информацию об обнаружении

if(lockLow)

{

lockLow = false;

Serial.println("Motion detected");

tone(3,1500, 2000);

digitalWrite(ledPin, HIGH); // Включаем светодиод

delay(1000); // Ждем 1 секунду

digitalWrite(ledPin, LOW);

}

takeLowTime = true;

}

//Ели движения нет

if(digitalRead(pirPin) == LOW)

{

//Если время окончания движения еще не записано

if(takeLowTime)

{

lowIn = millis(); //Сохраним время окончания движения

takeLowTime = false; //Изменим значения флага, чтобы больше не брать время, пока не будет нового движения

}

//Если время без движение превышает паузу => движение окончено

if(!lockLow && millis() - lowIn > pause)

{

//Изменяем значение флага, чтобы эта часть кода исполнилась лишь раз, до нового движения

lockLow = true;

Serial.println("Motion finished");

delay(50);

}

}

}