logo
+7 (495) 997-37-74
Москва, ул.Международная, 15




05.10.2016

PIRSense

05.10.2016

 В этой статье речь пойдёт о пироэлектрическом (PIR) сенсоре,

Слово PIR происходит от английского «Passive Infra Red», то есть датчик детектирует излучаемое человеком или животными тепло, которое находится в инфракрасном диапазоне. Такие датчики применяются во многих офисных зданиях, гостиницах и т. д.

В нашем случае использовался PIR датчик в составе модуля HC-SR501, который широко распространен в мире любителей Arduino и DIY проектов. Он есть и у нас в каталоге.

Это многофункциональный датчик, например, он может работать без применения микроконтроллера, может коммутировать напряжение от 5 до 24 В, то есть он годится для аварийной системы питания в зданиях. Но для нас такой способ не подошел по двум причинам: первая - нужно коммутировать переменное напряжение 220 В и вторая - нужна возможность точно настраивать время коммутации. Поэтому мы применили плату Arduino NANO с микроконтроллером ATMega328 и релейный модуль.

Схема подключения

Схема подсоединения достаточно проста: ко 2-му цифровому пину Arduino NANO подключается PIR сенсор HC-SR501, а к 8 и 9 пинам подключаются реле.

Программа

Были протестированы две программы, которые отличаются между собой логикой работы. Во второй версии применено прерывание на 2-м пине и функция interrupt.

Программа №1
Программа №2
int IRPin=2;
int RelPin1=8;
int RelPin2=9;
int flag;
unsigned long timer1;
unsigned long timer2;
void setup() {
  Serial.begin(9600);
  // 
pinMode(2,INPUT);
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
timer1=30; // В секундах. Время проиграша звукового сообщения
timer2=30; // В секундах. Время принудительной паузы
//flag=0;
}

void loop() {
  // 
if (digitalRead(2))
{
 // Serial.println(millis());
 //  Serial.println("HIGH");
  //flag=1;
  digitalWrite(8,LOW);
  digitalWrite(9,LOW);
  delay(timer1*1000);
  digitalWrite(8,HIGH);
  digitalWrite(9,HIGH);
  delay(timer2*1000);
}
else 
{
  
 digitalWrite(8,HIGH);
 digitalWrite(9,HIGH); 
}
}
int IRPin=2;
int RelPin1=8;
int RelPin2=9;
int flag;
unsigned long timer1;
unsigned long timer2;
void setup() {
  Serial.begin(9600);
  // 
//pinMode(2,INPUT);
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
timer1=30; // В секундах. Время проиграша звукового сообщения
timer2=30; // В секундах. Время принудительной паузы
attachInterrupt(0, PIRdetect, RISING);
flag=0;
}

void loop() {
  if (flag){
    Serial.println(millis());
  digitalWrite(8,LOW);
  digitalWrite(9,LOW);
  delay(timer1*1000);
  digitalWrite(8,HIGH);
  digitalWrite(9,HIGH);
  delay(timer2*1000);
  flag=0;
  }
}
void PIRdetect()
{
  Serial.println(millis());
flag=1;
}

 

Изображения собранного устройства

Так как устройство сделано на заказ, то у него должен быть презентабельный вид. Поэтому все аккуратно упаковано в корпус, распечатанный на 3D принтере.

   
   

#Элемик #arduinopong #elemik #electromicrolab

Если вам понравился проект, то расскажите о нем сделав репост в соцсетях. Это будет для нас стимулом рассказывать о новых наших проектах.