Обнаружение движения является одной из важнейших функций в системах охранной сигнализации, выключателях света и многих других домашних и промышленных применениях. Для обнаружения движения можно использовать несколько подходов, например, PIR датчик, который обнаруживает изменение инфракрасной энергии, выделяемой телом человека, и на основании этого способен обнаруживать наличие человека в контролируемой зоне.
В этой статье мы рассмотрим подключение доплеровского датчика движения (Doppler Radar Sensor) RCWL-0516 к плате Arduino Nano. RCWL-0516 представляет собой датчик обнаружения движения, который обнаруживает движение объектов, которые полностью или частично отражают радиоволны (даже если они находятся за стенами или другими материалами). Он способен обнаруживать не только людей, но и другие движущиеся объекты. Еще RCWL-0516 называют микроволновым датчиком движения или датчиком движения на эффекте Доплера.
Необходимые компоненты
- Плата Arduino Nano (купить на AliExpress).
- RCWL-0516 Doppler Radar Sensor (доплеровский датчик движения) (купить на AliExpress).
- Резистор 220 Ом (купить на AliExpress).
- Светодиод (купить на AliExpress).
Доплеровский датчик движения (Doppler Radar Sensor) RCWL-0516
Доплеровский датчик движения RCWL-0516 — способен определять движение объектов (препятствий), которые полностью или частично отражают радиоволны (люди, животные, металлы и т.д.), даже если они находятся за деревом (дверью), стеной (гипс, бетон), пластиками, стеклами и т.д. В основе работы датчика лежит эффект Доплера — изменение частоты отражённой волны вследствие движения излучателя, приёмника или отражателя. В данном модуле частота излучаемой им радиоволны меняется вследствие движения отражателя (препятствия). Модуль построен на базе чипа RCWL-9196 который оснащён передатчиком и приёмником. Датчик сработает если приёмник примет сигнал, частота которого незначительно отличается от частоты сигнала передатчик. Датчик обнаруживает движение во всем диапазоне от 0 до 360 градусов - слепых зон нет.
Распиновка датчика показана на следующем рисунке.
Назначение контактов датчика RCWL-0516:
- OUT - выход датчика (устанавливается в «1» при наличии движений + задерживается на 2 секунды после их прекращения).
- VIN - вход напряжения питания, от +4 до +28 В постоянного тока.
- GND - вход питания (общий).
- 3V3 - выход стабилизированного напряжения питания 3,3 В (можно использовать для питания микроконтроллеров).
- COS - вход разрешения (подтянут внутренним сопротивлением чипа). Если на данном выводе установить уровень логического «0», то после сброса триггера, он не будет устанавливаться (датчик перестанет реагировать на движения).
Выход «OUT» можно подключать к любому контакту платы Arduino. Вход «COS» можно оставить не подключённым, т.к. он подтянут внутренним сопротивлением чипа, следовательно, разрешает работу триггера. Напряжение питания датчика составляет от 4 до 28 В постоянного тока, подаётся на выводы «VIN» и «GND» модуля.
Предупреждение: не подключайте питание к выходу «3V3» датчика! Контакт датчика «3V3» является выходом стабилизированного напряжения 3,3 В. От этого напряжения можно запитывать другие маломощные устройства, например, микроконтроллер.
Когда датчик срабатывает, на его выходе «OUT» устанавливается уровень логической «1». Датчик снабжен триггером, который удерживает уровень логической «1» на выходе «OUT» в течении 2 сек ±30% после прекращения движения.
Если датчик многократно срабатывает, например, постоянно фиксирует движения в течении 10 секунд, то уровень логической «1» на выходе «OUT» будет установлен на 12 секунд с момента первого срабатывания (10 секунд во время фиксации движений + 2 секунды после их прекращения, пока не «сбросится» триггер).
Технические характеристики датчика RCWL-0516:
1. Входное напряжение питания (VIN): 4… 28 В постоянного тока.
2. Потребляемый ток: до 3 мА (номинально 2,8 мА).
3. Дальность обнаружения: до 9 м (номинально до 5 м).
4. Мощность передатчика: до 30 мВт (номинально до 20 мВт).
5. Частота передатчика: 3,181 ГГц.
6. Время задержки до сброса триггера: 2 сек ±30%.
7. Выходное напряжение питания (3V3): 3,2… 3,4 В (номинально 3,3 В).
8. Максимальный ток на выходе «3V3»: до 100 мА.
9. Рабочая температура: -20… +80 °С.
10. Температура хранения: -40… +100 °С.
11.Габариты: 17,3х35,9 мм
12. Вес: 4 гр.
Схема проекта
Схема подключения доплеровского датчика движения RCWL-0516 к плате Arduino представлена на следующем рисунке.
Как видите, схема подключения датчика RCWL-0516 к плате Arduino достаточно проста: его контакты VIN и GND соединяются с контактами 5V и GND платы Arduino Nano, а его выход (контакт OUT) соединяется с контактом D12 платы Arduino Nano. Светодиод подключен к контакту D3 платы Arduino Nano.
Внешний вид собранной на макетной плате конструкции проекта показан на следующем рисунке.
Объяснение программы для Arduino
Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.
В коде программы сначала объявим используемые контакты.
1 2 |
int Sensor = 12; int LED = 3; |
Затем, в функции setup() инициализируем последовательную связь со скоростью 9600 бод для целей отладки и установим режимы работы используемых контактов (на ввод или вывод данных).
1 2 3 4 5 6 |
void setup() { Serial.begin(9600); pinMode (Sensor, INPUT); pinMode (LED, OUTPUT); Serial.println("Waiting for motion"); } |
Далее, внутри функции loop(), мы будем считывать состояние контакта, к которому подключен датчик движения, с помощью функции digitalRead(). И если значение на данном контакте больше 0, мы будем включать светодиод, иначе мы будем выключать светодиод.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
void loop() { int val = digitalRead(Sensor); //Read Pin as input if((val > 0) && (flg==0)) { digitalWrite(LED, HIGH); Serial.println("Motion Detected"); flg = 1; } if(val == 0) { digitalWrite(LED, LOW); Serial.println("NO Motion"); flg = 0; } |
После того как аппаратная часть проекта будет готова, загрузите программу в плату Arduino. Откройте окно монитора последовательного порта на скорости 9600 бод и совершайте какие-нибудь движения неподалеку от датчика – наблюдайте как будет включаться/выключаться светодиод и будут печататься соответствующие сообщения в окне монитора последовательной связи.
PIR датчик против доплеровского датчика движения RCWL-0516 - что лучше
PIR датчики обнаруживают движение с помощью обнаружения тепла, излучаемого человеческим телом. Они идеально подходят для случаев, когда заранее известны образцы (шаблоны) движения, например, на дорожке (аллее). Чтобы иметь хорошую площадь покрытия PIR датчик необходимо располагать на некотором возвышении и под правильным углом, соответственно, его легко может обнаружить и сломать злоумышленник.
С другой стороны, микроволновые датчики (подобные RCWL-0516) идеальны для больших площадей. Они имеют значительно лучшую чувствительность по сравнению с PIR датчиками, но они могут иногда ложно срабатывать, например, из-за деревьев, качающихся под действием ветра. Но зато они могут обнаруживать движение сквозь некоторые препятствия: пластик, стекло, тонкие стены.
Большинство PIR датчиков подвержено влиянию климата, особенно высоких температур. Их чувствительность оставляет желать лучшего в случае если температура окружающей среды превышает 35 градусов Цельсия. В то же время микроволновые датчики обеспечивают устойчивую работу в диапазоне температур от -20°C до 45°C. По сравнению с PIR датчиками микроволновые датчики имеют больший жизненный цикл и могут корректно работать даже после 100 тыс. часов непрерывной работы.
То есть, каждый из этих датчиков хорош по своему, нельзя сказать, что какой то из них во всем лучше чем другой. Но если вам нужен всепогодный датчик для обнаружения движения на большой площади с высокой точностью, то вам лучше использовать микроволновый датчик (подобный RCWL-0516).
Исходный код программы (скетча)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
int Sensor = 12; int LED = 3; void setup() { Serial.begin(9600); pinMode (Sensor, INPUT); pinMode (LED, OUTPUT); Serial.println("Waiting for motion"); } void loop() { int val = digitalRead(Sensor); //Read Pin as input if((val > 0) && (flg==0)) { digitalWrite(LED, HIGH); Serial.println("Motion Detected"); flg = 1; } if(val == 0) { digitalWrite(LED, LOW); Serial.println("NO Motion"); flg = 0; } } |
А на кой болт тут вообще ардуина?
Конкретно в этой простой схеме плату Ардуино можно исключить и сигнал с выхода датчика подавать напрямую на светодиод, но если вы будете делать какой-нибудь реальный проект на основе этого датчика, то есть при обнаружении им движения выдавать какую-нибудь информацию на ЖК дисплей, передавать эту информацию куда-нибудь в другое место, включать какие-нибудь исполнительные механизмы и т.д., то в них без Ардуино или другой аналогичной платы (или микроконтроллера) уже не обойтись. Статья то учебная, которая просто объясняет что такое датчик движения RCWL-0516 и как его подключить к плате Arduino