г. Москва, ул.Новороссийская, дом 21, к.64. м.Люблино,ПН-ПТ с 10.00 до 19.30 и СБ с 12.00 до 16.00
+7(985) 997-37-74
05.10.2016

PIRSense

05.10.2016

 Название говорит само за себя. Основным элементом является пироэлектрический сенсор.

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

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

Возможности у этого датчика разнообразны, например, он может работать без применения микроконтроллера, может коммутировать напряжение от 5 до 24 В, то есть он 100% сгодится для аварийной системы питания в зданиях. Но для нас такой способ не подошел по двум причинам: 1) нужно коммутировать переменное напряжение 220 В; 2) нужно возможность точно настраивать время коммутации. Соответственно мы применили плату ArduinoNANOс микроконтроллером ATMega328 и релейный модуль.

 

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

Схема подсоединения достаточно проста ко 2 цифровому пину ArduinoNANOподключается 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

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