Сигнализация 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);
}
}
}