Рейтинг@Mail.ru

Как подключить инфракрасный сенсор к Arduino

автор:
Be the first to comment! Arduino
Print Friendly, PDF & Email
Рассмотрим подключение нескольких инфракрасных сенсоров к Arduino.

Для проекта нам понадобятся:

1Описание и принцип действия ИК датчика препятствий

Инфракрасное (ИК) или infrared (IR) излучение – это невидимое человеческим глазом электромагнитное излучение в диапазоне длин волн от 0,7 до 2000 мкм. Вокруг нас существуют огромное количество объектов, которые излучают в данном диапазоне. Его иногда называют «тепловое излучение», т.к. все тёплые предметы генерируют ИК излучение.

Длины волн разных типов электромагнитного излучения
Длины волн разных типов электромагнитного излучения

Модули на основе ИК излучения используются, в основном, как детекторы препятствий для различного рода электронных устройств, начиная от роботов и заканчивая «умным домом». Они позволяют обнаруживать препятствия на расстоянии от нескольких сантиметров до десятков сантиметров. Расстояние до препятствия при этом определить с помощью ИК-сенсора невозможно.

Если оснастить, для примера, своего робота несколькими такими ИК модулями, можно определять направление приближения препятствия и менять траекторию движения робота в нужном направлении.

Модуль сенсора обычно имеет излучатель (светодиод) и детектор (фотодиод) в инфракрасном диапазоне. Инфракрасный светодиод излучает в пространство ИК излучение. Приёмник улавливает отражённое от препятствий излучение и при определённой интенсивности отражённого излучения происходит срабатывание. Чтобы защититься от видимого излучения, фотодиод имеет светофильтр (он выглядит почти чёрным), который пропускает только волны в инфракрасном диапазоне. Разные поверхности по-разному отражают ИК излучение, из-за чего дистанция срабатывания для разных препятствий будет отличаться. Выглядеть ИК модуль может, например, вот так:

Модуль с ИК излучателем и ИК приёмником
Модуль с ИК излучателем и ИК приёмником

Когда перед сенсором нет препятствия, на выходе OUT модуля напряжение логической единицы. Когда сенсор детектирует отражённое от препятствия ИК излучение, на выходе модуля напряжение становится равным нулю, и загорается зелёный светодиод модуля.

Помимо инфракрасного свето- и фотодиода важная часть модуля – это компаратор LM393 (скачать техническое описание на LM393 можно в конце статьи).

Компаратор LM393 модуля с ИК датчиком
Компаратор LM393 модуля с ИК датчиком

С помощью компаратора сенсор сравнивает интенсивность отражённого излучения с некоторым заданным порогом и устанавливает "1" или "0" на выходе. Потенциометр позволяет задать порог срабатывания ИК датчика (и, соответственно, дистанцию до препятствия).

2Подключение ИК датчика препятствийк Arduino

Подключение ИК модуля к Arduino предельно простое: VCC и GND модуля подключаем к +5V и GND Arduino, а выход OUT сенсора – к любому цифровому или аналоговому выводу Arduino. Я подключу его к аналоговому входу A7.

Модуль с инфракрасным датчиком подключён к Arduino Nano
Модуль с инфракрасным датчиком подключён к Arduino Nano

3Скетч Arduino для инфракрасного датчика препятствий

Скетч для работы с инфракрасным сенсором препятствий также предельно простой: мы будем читать показания с выхода модуля и выводить в монитор порта. А также, если ИК модуль обнаружил препятствие, будем сообщать об этом.

const int ir = A7;

void setup() {
  Serial.begin(115200);  
}

void loop() {
  int r = analogRead(ir); // r в диапазоне от 0 до 1023
  Serial.println(r);
  if (r < 100) { // т.к. используется аналоговый пин Arduino
    Serial.println("Detected!");
  }
  delay(100);
}

Напомню, в Arduino используется 10-разрядный АЦП, поэтому значение аналогового сигнала кодируется числом в диапазоне от 0 до 1023. При использовании аналогового входа Arduino предельные значения "0" или "1023" мы вряд ли получим с датчика, поэтому лучше использовать некоторый порог, например, равный 100: (r < 100). При использовании же цифрового вывода Arduino для чтения показаний инфракрасного датчика, можно можно написать (r == LOW) или (r == 0) или (r < 1).

Хорошая статья про аналоговые измерения на Arduino.

Думаю, довольно понятно, как найти применение такому модулю в ваших проектах. Необходимо периодически опрашивать состояние на выходе модуля, и как только напряжение меняется с HIGH на LOW, предпринимать необходимые действия: менять направление движения робота, включать свет в помещении и т.п.

4Подключение к Arduino модуля с инфракрасным приёмником

ИК датчик может состоять из одного только инфракрасного приёмника, как в этом случае:

ИК приёмник
ИК приёмник

Такой сенсор используется для детектирования и считывания различных инфракрасных сигналов. Например, таким датчиком можно принять управляющие сигналы ИК пульта от телевизора или другой бытовой техники. На модуле присутствует светодиод, который загорается, когда на приёмник попадает инфракрасное излучение. На выхода модуля – цифровой сигнал, который показывает, падает ли на сенсор ИК излучение или нет.

К Arduino модуль с ИК приёмником подключается тоже очень просто:

Пин модуляПин ArduinoНазначение
DATЛюбой цифровойПризнак наличия ИК излучения на входе приёмника
VCC+5VПитание
GNDGNDЗемля
Подключение ИК приёмника к Arduino
Подключение ИК приёмника к Arduino

Напишем скетч, в котором будем просто показывать с помощью встроенного светодиода, что на входе приёмника присутствует ИК излучение. В данном модуле аналогично с ранее рассмотренным на выходе DAT уровень "0", когда ИК излучение попадает на приёмник, и "1" когда ИК излучения нет.

const int ir = 2;

void setup() {
  pinMode(LED_BUILTIN, OUTPUT); // это 13-ый вывод Arduino со встроенным светодиодом
  pinMode(ir, INPUT);
}

void loop() {
  int r = digitalRead(ir);
  digitalWrite(LED_BUILTIN, r!=HIGH); // зажигаем светодиод, если модуль среагировал на ИК излучение
  // в противном случае - гасим
}

Если загрузить этот скетч в Arduino, направить на ИК приёмник ИК пульт и нажимать на нём разные кнопки, то мы увидим, что светодиод нашего индикатора быстро мигает. Разные кнопки – по-разному мигает.

Чтение команд ИК пульта с Arduino
Чтение команд ИК пульта с Arduino

Очевидно, что каждая команда закодирована своей бинарной последовательностью. Хотелось бы увидеть, какие именно команды приходят от пульта. Но прежде чем ответить на этот вопрос, нужно посмотреть другим способом, что же отправляет пульт. А именно – с помощью осциллографа. Подключим осциллограф к тому месту, где сигнал непосредственно излучается в пространство: к аноду инфракрасного светодиода.

Осциллограф отображает часть команды ИК пульта
Осциллограф отображает часть команды ИК пульта

На осциллограмме видна серия «пачек» импульсов примерно одинаковой длительности. Каждая «пачка» состоит из 24-х импульсов.

Осциллограф отображает часть команды ИК пульта
Осциллограф отображает часть команды ИК пульта

В таком виде довольно трудно увидеть, какой сигнал передаётся от пульта ДУ. Прелесть нашего приёмника в том, что он выполняет рутинную работу по оцифровке аналогового инфракрасного сигнала и выдаёт уже «красивый» цифровой сигнал. Давайте посмотрим его на осциллографе.

Подключение выхода с ИК приёмника и выхода ИК пульта к осциллографу
Подключение выхода с ИК приёмника и выхода ИК пульта к осциллографу

Вот так выглядит посылка пульта целиком. Здесь жёлтая линия – аналоговый сигнал пульта ДУ, голубая – цифровой сигнал с выхода ИК приёмника. Видно, что продолжительность передачи составляет примерно 120 мс.

Осциллограмма пакета с ИК пульта ДУ
Осциллограмма пакета с ИК пульта ДУ

При большем приближении видно, что высокочастотное заполнение, которое имеется в аналоговом сигнале, в цифровом сигнале с ИК приёмника отсутствует. Приёмник прекрасно справляется со своей задачей и показывает чистый цифровой сигнал. Видна последовательность коротких и длинных прямоугольных импульсов. Период коротких импульсов примерно 1,2 мс, длинных – в 2 раза больше.

Биты пакета ИК пульта, масштаб: 1 клетка – 200 мкс
Биты пакета ИК пульта, масштаб: 1 клетка – 200 мкс
Биты пакета ИК пульта, масштаб: 1 клетка – 1 мс
Биты пакета ИК пульта, масштаб: 1 клетка – 1 мс

Мы уже видели подобный сигнал, когда разбирали сигнал комнатной метеостанции. Возможно, здесь применяется тот же способ кодирования информации: короткие импульсы – это логический ноль, длинные – логическая единица.

Теперь по крайней мере понятно, с какой частотой необходимо опрашивать ИК датчик, чтобы принимать с него корректные данные: примерно 0,6 мс. Это период в два раза меньший, чем период коротких импульсов сигнала. Или, если рассматривать с точки зрения частоты, опрашивать приёмник нужно в 2 раза большей частотой (вспомним Найквиста).

Теперь напишем скетч, где будем обрабатывать команды от ИК пульта и выводить их в монитор последовательного порта.

const int ir = 2; // с выхода ИК приёмника
int t = 600; // период считываниями импульсов сигнала, в мкс

void setup() {
  Serial.begin(115200);
  pinMode(LED_BUILTIN, OUTPUT);
  pinMode(ir, INPUT);
}

void loop() {
  int r = digitalRead(ir);
  digitalWrite(LED_BUILTIN, r!=HIGH);
  // Чтобы не менять прошивку каждый раз,
  // можно задать время задержки в мкс по COM-порту:
  if (Serial.available()) {
    String s = Serial.readString();
    t = s.toInt();
    Serial.println("t=" + (String)t + "us");
  }
  // Если зафиксировали ИК излучение, обрабатываем команду пульта:
  if (r==LOW) {
    precess_ir(); 
  }
}

// Обработка команды с ИК пульта.
void precess_ir(){
  unsigned long val = 0;
  for (long i=0; i<32; i++){
    int r = digitalRead(ir);
    unsigned long v = r << i;
    val = val | v;
    delayMicroseconds(t);
   }
 Serial.println(val, HEX); 
}

Поэкспериментируем с данным скетчем и ИК приёмником.

Продолжение следует...

Last modified onСуббота, 23 Ноябрь 2019 13:03 Read 806 times
Ключевые слова: :

Поделиться

Print Friendly, PDF & Email

Leave a comment

  1. Arduino это...
  2. Arduino это...
  3. Arduino это...
Отличный способ начать знакомство с электроникой, микроконтроллерами и программированием!
Замечательное средство для создания собственных электронных устройств, которые пригодятся в быту или для развлечения!
Уникальный конструктор, для которого разработаны десятки совместимых датчиков и модулей!
next
prev