Миниатюрный датчик для обнаружения движимых объектов в помещении или на улице. Принцип действия модуля AM312 основан на изменении уровня инфракрасного излучения, которое непременно произойдет, если в исследуемой области появится человек или теплокровное животное (иными словами, все тела, которые излучают тепло, влияют на уровень инфракрасного излучения). Данный датчик движения легко реагирует на подобные изменения. В его основе чувствительный к инфракрасному излучению диод, поверх которого расположена пластиковая полупрозрачная сфера, которая увеличивает угол обзора датчика до 90 градусов в абсолютной величине (от -45 до 45 градусов).
В отличие от версии HC-SR501 или HC-SR505, модуль обладает самыми компактными размерами: 25 x 13 x 13 мм. Имеется три контакта для подключения в электрическую схему: два контакта питания (положительная и отрицательная линии для уровня 3.3 либо 5 В постоянного тока), а также цифровой выход, на котором генерируется цифровой сигнал высокого (HIGH) или низкого (LOW) уровня в зависимости от наличия движения в области видимости датчика. Также небольших габаритов датчика удалось достичь путем удаления подстроечных резисторов и прочих компонентов для настройки работы модуля: он работает только в H-режиме (высокий уровень цифрового выходного сигнала при обнаружении движения), а чувствительность откалибрована с постоянным параметром.
Технические характеристики:
Название модуля: AM312
Напряжение питания: 2.7…5 В постоянного тока
Угол обзора: от -45 до +45 градусов
Дальность обнаружения: 3…5 м
Время между измерениями: 2 с
Размеры платы: 25 x 13 x 13 мм
Схема подключения датчика движения AM312 к Arduino:
Программный код для Arduino и датчика движения (включение встроенного светодиода D13 на плате при обнаружении движения):
int led = 13;
int sensor = 2;
int state = LOW;
int val = 0;
void setup() {
pinMode(led, OUTPUT);
pinMode(sensor, INPUT);
Serial.begin(9600);
}
void loop() {
val = digitalRead(sensor);
if (val == HIGH) {
digitalWrite(led, HIGH);
delay(500);
if (state == LOW) {
Serial.println("Motion detected!");
state = HIGH;
}
}
else {
digitalWrite(led, LOW);
delay(500);
if (state == HIGH) {
Serial.println("Motion stopped!");
state = LOW;
}
}
}