Рассмотрим еще один датчик, связанный с обеспечением безопасности для умного дома. Это модуль датчика присутствия HC-SR501 на основе пироэлектрического эффекта (рис. 4.39).
Рис. 4.39. Датчик присутствия HC-SR501.
Состоит из самого PIR-датчика (Pyroelectric (Passive) InfraRed sensor) и схемы управления. Такие датчики часто используются в охранных системах и в быту для обнаружения движения в помещении.
Модуль имеетс два переменных резистора и перемычку для настройки режима (рис. 4.40). Потенциометр Sx регулирует чувствительность прибора. Чувствительность влияет на размер детектируемого объекта и дистанцию обнаружения объекта.
Потенциометр Tx регулирует время срабатывания T. Если датчик обнаружил движение, он генерирует на выходе положительный импульс длиной T.
Перемычка переключает режим датчика. В режиме L на выходе при каждом срабатывании датчика появляется отдельный импульс. В режиме H при срабатывании датчика на выходе будет сигнал HIGH в течении некоторого периода времени T. По окончании периода, сигнал на выходе вернется в исходное состояние, и датчик будет ждать следующего срабатывания.
Рассмотрим подключение модуля датчика присутствия HC-SR501 к плате Arduino Mega и модулю NodeMcu ESP8266.
4.8.1. Подключение модуля датчика присутствия HC-SR501 к плате Arduino Mega
Для подсчета срабатываний модуля датчика HC-SR501 будем использовать внешние прерывания на вход 18 платы Arduino Mega. Это прерывание int5. Схема подключения модуля датчика присутствия HC-SR501 к плате Arduino Mega показана на рис. 4.41.
Рис. 4.41. Схема подключений датчика присутствия HC-SR501 к плате Arduino Mega
Загрузим на плату Arduino Mega скетч вывода счетчика срабатываний датчика HC-SR501 и вывода в последовательный порт Arduino. Счетчик инкрементируется при переходе уровня на входе 18 с LOW на HIGH – это процедура обработки внешнего прерывания incCounterHCSR501(). Каждые 2000 мсек (INTERVAL_GET_DATA=2000), мы выводим значение счетчика в последовательный порт.
Содержимое скетча представлено в листинге 4.16.
Листинг 4.16
#define INTERVAL_GET_DATA 2000 // интервала измерений, мс
// пин, к которому подключен датчик
#define HCSR501PIN 18
// счетчик срабатыаний
int counterHCSR501=0;
// переменная для интервала измерений
unsigned long millis_int1=0;
void setup() {
Serial.begin(9600);
attachInterrupt(5,incCounterHCSR501,RISING);
}
void loop() {
if(millis()-millis_int1 >= INTERVAL_GET_DATA) {
// получение данных счетчика срабатываний HC-SR501
int counter= get_data_counterHCSR501();
// выводим значения газа в ppm
Serial.print("counter=");
Serial.println(counter);
// старт интервала отсчета
millis_int1=millis();
}
}
// получение данных счетчика срабатываний HC-SR501
int get_data_counterHCSR501() {
// вернуть значение счетчика срабатываний HC-SR501
return counterHCSR501;
}
void incCounterHCSR501() {
// инкремент счетчика
counterHCSR501=counterHCSR501+1;
}
Загрузим скетч на плату Arduino Mega, откроем монитор последовательного порта и увидите вывод значений счетчика (рис. 4.42).
Рис. 4.42. Вывод счетчика срабатываний датчика присутствия HC-SR501 в монитор последовательного порта.
Скачать данный скетч можно на сайте www.arduino-kit.ru по ссылке .
4.8.2. Подключение модуля датчика присутствия HC-SR501 к модулю NodeMcu ESP8266
Теперь рассмотрим подключение модуля датчика присутствия HC-SR501 к модулю NodeMcu ESP8266. Для подсчета срабатываний модуля датчика HC-SR501 будем использовать внешние прерывания на вход 18 модулю NodeMcu ESP8266. Это прерывание int5. Схема подключения модуля датчика присутствия HC-SR501 к модулю NodeMcu показана на рис. 4.43.
Рис. 4.43. Схема подключений датчика присутствия HC-SR501 к NodeMcu ESP8266
Загрузим на модуль NodeMcu скетч вывода счетчика срабатываний датчика HC-SR501 и вывода в последовательный порт Arduino. Счетчик инкрементируется при переходе уровня на входе D6 с LOW на HIGH – это процедура обработки внешнего прерывания incCounterHCSR501(). Каждые 2000 мсек (INTERVAL_GET_DATA=2000), мы выводим значение счетчика в последовательный порт.
Содержимое скетча представлено в листинге 4.16.
Листинг 4.17
#define INTERVAL_GET_DATA 2000 // интервала измерений, мс
// пин, к которому подключен датчик
#define HCSR501PIN D6
// счетчик срабатыаний
int counterHCSR501=0;
// переменная для интервала измерений
unsigned long millis_int1=0;
void setup() {
Serial.begin(9600);
attachInterrupt(HCSR501PIN,incCounterHCSR501,RISING);
}
void loop() {
if(millis()-millis_int1 >= INTERVAL_GET_DATA) {
// получение данных счетчика срабатываний HC-SR501
int counter= get_data_counterHCSR501();
// выводим значения газа в ppm
Serial.print("counter=");
Serial.println(counter);
// старт интервала отсчета
millis_int1=millis();
}
}
// получение данных счетчика срабатываний HC-SR501
int get_data_counterHCSR501() {
// вернуть значение счетчика срабатываний HC-SR501
return counterHCSR501;
}
void incCounterHCSR501() {
// инкремент счетчика
counterHCSR501=counterHCSR501+1;
}
Загрузим скетч на модуль NodeMcu, откроем монитор последовательного порта и увидите вывод значений счетчика (рис. 4.44).
Рис. 4.44. Вывод счетчика срабатываний датчика присутствия HC-SR501 в монитор последовательного порта
Скачать данный скетч можно на сайте www.arduino-kit.ru по ссылке .