Давно я ничего не писал на тему Arduino, но исправляюсь. Сегодня мы поиграемся с датчиком движения HC-SR501. Забегая немного вперёд, скажу, что при правильной настройке он реагирует даже на кошку.
Устройство представляет собой инфракрасный пироэлектрический датчик движения с регулируемой чувствительностью. Также его можно настроить на разные режимы оповещения о срабатывании. Он может выдавать либо краткий импульс «на каждый чих», либо длительный импульс с регулируемой длительностью.
Документации на HC-SR501 и схем в сети полно, поэтому подробно расписывать не буду, а перейдём сразу к практике.
Подготовка
Переключим датчик на одиночный импульс, поставив перемычку в положение «L», а затем подключим его к плате Arduino (в примере использовалась Arduino Uno):
- общий вывод «GND» датчика подключим к выводу «GND» на плате;
- вывод питания «+Power» датчика подключим к выводу «5V» на плате;
- выход сигнала «Output» датчика подключим к выводу «A0» на плате (для Arduino Uno это вывод 14).
Подключаем плату к компьютеру и запускаем Arduino IDE. После этого набираем (или копируем отсюда, если вы слишком ленивы) следующий код:
void setup() { pinMode(14, INPUT); Serial.begin(9600); } int analogVal = 0; void loop() { analogVal = analogRead(14); Serial.println(analogVal, HEX); delay(1000); }
Датчик HC-SR501 пока лучше направить куда-то в сторону.
Проверка работы датчика
Нажимаем Ctrl+U и загружаем программу в плату. После этого нажимаем Ctrl+Shift+M для просмотра данных в последовательном порту.
Если там установлена скорость, отличная от той, которую мы задали в программе, установите такое же значение, а затем закройте и откройте монитор заново.
После этого старайтесь сидеть, не шевелясь, пока не увидите вывод в мониторе нулей. Иногда датчик может выводить небольшие значения в пределах 10, это тоже нормально.
Когда в мониторе увидите несколько нулей подряд, попробуйте сделать движение перед датчиком. Вместо нулей при этом будет выводиться число, соответствующее высокому уровню на выходе датчика. В моём случае значения были около 660 (или 294 в hex). При минимальной длительности сигнала это значение будет выдаваться около 3-4 секунд, а затем 6-7 секунд будет низкий уровень. При этом низкий уровень будет выдаваться независимо от движения перед датчиком, что является недостатком этого режима.
Можно поиграться с длительностью сигнала, а также с чувствительностью, регулируя это расположенными на плате датчика переменными резисторами. При чувствительности чуть выше средней мою тушку массой 80+ килограммов датчик обнаруживал примерно с 4 метров.
При почти максимальной чувствительности датчик уверенно обнаруживал движение кошки массой чуть более 2 килограммов. Это создание по имени Лея крутилось возле меня почти всё время, пока я возился с датчиком. При этом кошка вносила свои коррективы в показания.
Результаты проверки HC-SR501 отображены на скриншоте.
В следующем материале я покажу, как можно с датчиком HC-SR501 автоматизировать управление освещением, к примеру, в коридоре.
Comments: