Инфракрасный датчик движения HC-SR501

 

Инфракрасный датчик движения HC-SR501 Инфракрасный датчик движения HC-SR501
Инфракрасный датчик движения HC-SR501 Инфракрасный датчик движения HC-SR501

Модель: HC-SR501

 

Инфракрасный датчик контроля движения

Чувствительность и время проведения могут быть скорректированы

Рабочее напряжение Диапазон: DC 4.5 В-20 В

Потребляемый ток: <60ua

Выходное напряжение: высокий/низкий уровень сигнала: 3.3 В TTL выход

Расстояние обнаружения: 3-7М (можно отрегулировать)

Дальность обнаружения: <140 °

Время задержки: 5-200 S (может быть скорректирована, по умолчанию 5S +-3%)

Задержка: 2.5 S (по умолчанию)

Рабочая температура: -20-+ 80 °C

Размер: 3.2 см x 2.4 см x 1.8 см

 

Инфракрасный датчик движения HC-SR501
Инфракрасный датчик движения HC-SR501

Подключение PIR датчика движения к Arduino

 Датчик выдает цифровой сигнал, так что все, что вам необходимо - считывать с пина Arduino сигнал HIGH (рбнаружено движение) или LOW (движения нет).

При этом не забудьте установить коннектор в позицию H!

Подайте питание 5 вольт на датчик. Землю соежинети с землей. После этого соедините пин сигнала с датчика с цифровым пином на Arduino. В данном примере использован пин 2.

Программа простая. По сути она отслеживает состояние пина 2. А именно: какой на нем сигнал: LOW или HIGH. Кроме того, віводится сообщение, когда состояние пина меняется: есть движение или движения нет.

Sketch code_1

/*

GND на любой из GND пинов­­­ ардуино

VCC на + 5 вольт на ардуино

OUT на любой из цифровых входов/выходов ардуино (в примере подсоединено к 2)

Самым простым примером работы с датчиком движения является следующий скетч. При обнаружении движения зажигается светодиод подключенный к пину 13, а также в порт пишется состояние датчика.

*/

 

#define pirPin 2
#define LedPin 13

void setup() {
  Serial.begin(9600);
  pinMode(pirPin, INPUT);
  pinMode(LedPin, OUTPUT);
}

void loop() {
  int pirVal = digitalRead(pirPin);

  //Если обнаружили движение
  if (pirVal == HIGH) {
    digitalWrite(LedPin, HIGH);
    Serial.println("Motion detected");
    delay(300);
  }  else  {
    Serial.println("No motion");
    digitalWrite(LedPin, LOW);
    delay(300);
  }
}

Sketch code_2

/*

* проверка PIR датчика движения

*/

int pirPin = 8;
int val;
 
void setup() {
  Serial.begin(9600);
}
 
void loop() {
  // Читаем состояние PIR
  val = digitalRead(pirPin);
  // Если обнаружили движение
  if (val == LOW) {
    // равно 0
    Serial.println("no movement");
  } else {
    // равно 1
    Serial.println("movement!");
  }
  delay(1000);
}

Sketch code_3

 

/*

* проверка PIR датчика движения

*/

int ledPin = 13;  // инициализируем пин для светодиода

int inputPin = 2;  // инициализируем пин для получения сигнала от пироэлектрического датчика движения

int pirState = LOW;  // начинаем работу программы, предполагая, что движения нет

int val = 0;  // переменная для чтения состояния пина

void setup() {

pinMode(ledPin, OUTPUT);  // объявляем светодиод в качестве  OUTPUT

pinMode(inputPin, INPUT);  // объявляем датчик в качестве INPUT

Serial.begin(9600);

}

void loop(){

val = digitalRead(inputPin);  // считываем значение с датчика

if (val == HIGH) {  // проверяем, соответствует ли считанное значение HIGH

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

if (pirState == LOW) {

// мы только что включили

Serial.println("Motion detected!");

// мы выводим на серийный монитор изменение, а не состояние

pirState = HIGH;

}

} else {

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

if (pirState == HIGH){

// мы только что его выключили

Serial.println("Motion ended!");

// мы выводим на серийный монитор изменение, а не состояние

pirState = LOW;

}

}

}

 

Для работы с пироэлектрическим датчиком не всегда нужен микроконтроллер. Порой можно обойтись и простым реле.