Датчик приближения (proximity sensor) или инфракрасный датчик (IR Sensor) – это электронное устройство, которое излучает инфракрасные лучи и на основе последующего приема отраженных от препятствий лучей может сделать определенные выводы об окружающей обстановке, например, может использоваться для обнаружения движения. Подобные датчики находят широкое применение в современной электронике и особенно в проектах робототехники, например, его можно использовать для создания робота, следующего вдоль линии или робота, объезжающего препятствия.
На нашем сайте ранее мы рассматривали использование инфракрасного датчика в следующих проектах:
- тахометр на Arduino;
- аналоговый спидометр на основе Arduino и инфракрасного датчика;
- робот-пылесос на Arduino для автоматической уборки помещений;
- подключение инфракрасного датчика к Raspberry Pi.
Необходимые компоненты
- Плата Arduino Uno (купить на AliExpress).
- Модуль инфракрасного датчика (IR Sensor) (купить на AliExpress).
- Макетная плата.
- Соединительные провода.
Реклама: ООО "АЛИБАБА.КОМ (РУ)" ИНН: 7703380158
Распиновка инфракрасного датчика
Модуль инфракрасного датчика содержит 3-пиновый коннектор для связи с “внешним миром”. Его распиновка показана на следующем рисунке.
VCC – контакт, через который подается питания на датчик. В нашем случае его необходимо подключить к контакту 5V платы Arduino.
OUT – выходной контакт датчика, работающий с логическими уровнями 5V TTL. Уровень LOW на этом контакте свидетельствует о том, что движения не выявлено, уровень HIGH свидетельствует о наличии движения.
GND – общий провод (земля). Его необходимо подключить к контакту земли платы Arduino.
Как работает модуль инфракрасного датчика
Принцип работы инфракрасного датчика достаточно прост, он состоит из двух основных компонентов: инфракрасного передатчика и инфракрасного приемника. Инфракрасным передатчиком служит излучающий ИК диод, а инфракрасным приемником – фотодиод.
Модуль инфракрасного датчика начинает работу когда на его излучающий ИК диод подано напряжение, при этом он испускает инфракрасные лучи. Лучи распространяются в пространстве, отражаются от препятствий и снова возвращаются к датчику, где улавливаются фотодиодом. Если препятствие (объект) находится близко, уровень отраженного света будет высок, если же объект находится далеко, то уровень отраженного света будет составлять небольшую величину.
При подаче питания на инфракрасный датчик на свой выходной контакт он выдает уровень Low, который может быть считан платой Arduino или любым другим микроконтроллером.
В большинстве электронных проектов данный датчик используется для обнаружения каких либо препятствий. Он находит широкое применение у радиолюбителей благодаря своей низкой стоимости и низкого энергопотребления, при этом он отличается достаточно большим диапазоном обнаружения препятствий.
Кроме передающего ИК диода и фотодиода модуль инфракрасного датчика содержит компаратор на основе операционного усилителя, который используется для преобразования поступающего аналогового сигнала в цифровой сигнал. Также в составе датчика есть потенциометр, с помощью которого можно отрегулировать его чувствительность.
Схема модуля инфракрасного датчика приведена на следующем рисунке.
Как видите, его схема достаточно проста и содержит набор простых, “массовых” компонентов. При желании вы даже можете собрать эту схему самостоятельно.
Схема проекта
Схема подключения инфракрасного датчика к плате Arduino Uno представлена на следующем рисунке.
Выход датчика необходимо подключить к любому цифровому контакту платы Arduino. В нашем случае это контакт D9. Считывать состояние этого контакта в плате Arduino можно потом двумя способами: обычным путем, в бесконечном цикле проверяя состояние этого контакта (high или low), либо с помощью прерываний (рекомендуется для сложных проектов).
Запитать инфракрасный датчик можно от 5V или 3.3V. Внешний вид собранной конструкции проекта приведен на следующем рисунке.
Объяснение программы для Arduino для подключения инфракрасного датчика
Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.
Код программы достаточно прост – в нем нам будет необходимо непрерывно проверять состояние (HIGH или LOW) контакта D9 платы Arduino, к которому подключен инфракрасный датчик. Код программы начнем с объявления двух глобальных переменных, в одной из которых будет храниться номер контакта, к которому подключен инфракрасный датчик, а во второй – номер контакта, к которому подключен светодиод.
1 2 |
int IRSensor = 9; // connect IR sensor module to Arduino pin D9 int LED = 13; // connect LED to Arduino pin 13 |
Далее, в функции setup() мы инициализируем последовательную связь со скоростью 115200 бод и зададим режимы работы используемых контактов (на ввод или вывод данных).
1 2 3 4 5 6 |
void setup(){ Serial.begin(115200); // Init Serial at 115200 Baud Rate. Serial.println("Serial Working"); // Test to check if serial is working or not pinMode(IRSensor, INPUT); // IR Sensor pin INPUT pinMode(LED, OUTPUT); // LED Pin Output } |
Затем в функции void loop() мы будем в бесконечном цикле считывать состояние контакта, к которому подключен инфракрасный датчик, с помощью функции digitalRead() и сохранять это значение в переменной sensorStatus. Если считанное состояние равно high, это будет обозначать, что датчиком обнаружено движение – мы будем выводить сообщение об этом в окно монитора последовательной связи.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
void loop(){ int sensorStatus = digitalRead(IRSensor); // Set the GPIO as Input if (sensorStatus == 1) // Check if the pin high or not { // if the pin is high turn off the onboard Led digitalWrite(LED, LOW); // LED LOW Serial.println("Motion Detected!"); // print Motion Detected! on the serial monitor window } else { //else turn on the onboard LED digitalWrite(LED, HIGH); // LED High Serial.println("Motion Ended!"); // print Motion Ended! on the serial monitor window } } |
Тестирование работы проекта
На следующей GIF картинке показано тестирование работы нашего проекта. На ней вы можете увидеть что встроенный светодиод платы Arduino загорается при обнаружении инфракрасным датчиком движения.
Исходный код программы (скетча)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
// Arduino IR Sensor Code int IRSensor = 9; // контакт, к которому подключен инфракрасный датчик int LED = 13; // контакт, к которому подключен светодиод void setup() { Serial.begin(115200); // инициализируем последовательную связь со скоростью 115200 бод Serial.println("Serial Working"); // Test to check if serial is working or not pinMode(IRSensor, INPUT); // режим работы контакта на ввод данных pinMode(LED, OUTPUT); // режим работы контакта на вывод данных } void loop() { int sensorStatus = digitalRead(IRSensor); // считываем состояние контакта, к которому подключен инфракрасный датчик if (sensorStatus == 1) // если состояние контакта равно high { // if the pin is high turn off the onboard Led digitalWrite(LED, LOW); // выключаем светодиод Serial.println("Motion Ended!"); // выводим сообщение Motion Ended! в окно монитора последовательной связи } else { //else turn on the onboard LED digitalWrite(LED, HIGH); // включаем светодиод Serial.println("Motion Detected!"); // выводим сообщение Motion Detected! в окно монитора последовательной связи } } |