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

Содержание

Инфракрасный датчик расстояния Ардуино

Датчик расстояния (или препятствий) используется в электронных игрушках или бытовых приборах. Он несколько отличается от детекторов движения, так как использует для определения расстояний луч света, испускаемый инфракрасным светодиодом. Отражаясь от препятствий, луч попадает на сенсоры, отчего на выходном электроде появляется сигнал. Его величина зависит от расстояния до препятствия. Рабочая область сравнительно мала, от 10 до 80 см (самые мощные модели способны регистрировать отражения от препятствий на расстоянии 1.5 м). Однако, этого вполне хватает для оснащения бытовых роботов-пылесосов, игрушек и прочих устройств.

Подобные модели имеют немало недостатков и ограничений. На них оказывают влияние помехи, случайные отражения, блики глянцевых поверхностей. С увеличением расстояния повышается риск ложного срабатывания, поэтому для ответственных технологических систем такие датчики не используются. Кроме того, их быстродействие невелико и может составлять до 2 секунд. Для бытовых устройств с малой скоростью движения это несущественно, но для производственных процессов такая задержка недопустима.

Как подключить ультразвуковой датчик к Ардуино

Для этого занятия нам потребуется:

  • плата Arduino Uno / Arduino Nano / Arduino Mega;
  • макетная плата;
  • УЗ дальномер HC-SR04;
  • 1 светодиод и резистор 220 Ом;
  • провода «папа-папа» и «папа-мама».


Схема подключения ультразвукового датчика к Arduino Uno

Схема подключения указана на рисунке выше. Отметим, что ультразвуковой дальномер HC-SR04 имеет диапазон измерения от 2 см до 400 см, работает при температурах от 0° до 60° С. Точность измерения составляет ± 1 см, рабочее напряжение датчика до 5,5 В. Для начала мы используем простой скетч, без использования библиотеки Ultrasonic. После подключения к Arduino дальномера HC-SR04 загрузите следующий скетч:

Скетч для подключения датчика hc-sr04 к Arduino

int trigPin = 8; // назначаем имя для Pin8
int echoPin = 9; // назначаем имя для Pin9
 
void setup() { 
  Serial.begin (9600); // подключаем монитор порта
  pinMode(trigPin, OUTPUT); // назначаем trigPin (Pin8), как выход
  pinMode(echoPin, INPUT); // назначаем echoPin (Pin9), как вход
} 
 
void loop() { 
  int duration, cm; // назначаем переменную "cm" и "duration" для показаний датчика
  digitalWrite(trigPin, LOW); // изначально датчик не посылает сигнал
  delayMicroseconds(2); // ставим задержку в 2 ммикросекунд

  digitalWrite(trigPin, HIGH); // посылаем сигнал
  delayMicroseconds(10); // ставим задержку в 10 микросекунд
  digitalWrite(trigPin, LOW); // выключаем сигнал

  duration = pulseIn(echoPin, HIGH); // включаем прием сигнала

  cm = duration / 58; // вычисляем расстояние в сантиметрах

  Serial.print(cm); // выводим расстояние в сантиметрах
  Serial.println(" cm");

  delay(1000); // ставим паузу в 1 секунду
}

Пояснения к коду:

  1. для подключения выходов Trig и Echo на датчике сонара Ардуино можно использовать любые цифровые входы на микроконтроллере;
  2. чтобы получить значение датчика в миллиметрах следует использовать следующую формулу для расчета: .

Модуль ИК дальномера KY-032

Модуль предназначен для обнаружения препятствий без непосредственного контакта с ними. На печатной плате модуля располагается ИК-светодиод и ИК-фотоприемник, когда интенсивность отраженного от препятствия излучения превышает заданный порог, формируется сигнал срабатывания датчика.

Модуль имеет размер 45 х 16 х 12 мм, массу 4 г, в печатной плате модуля предусмотрено крепежное отверстие диаметром 3 мм. На плате имеется четырехконтактный разъем, через который осуществляется питание модуля и передача информации. Назначение выводов разъема следующее: «GND» — общий провод, «+»– питание +5В, «OUT» — информационный выход, «EN» — управление режимом работы. Для индикации подачи питания на датчик служит светодиод «Pled», при срабатывании загорается светодиод «Sled».

На информационном цифровом выходе «OUT» появляется низкий логический уровень, если в поле зрения датчика имеется препятствие, иначе на выходе высокий логический уровень. В этом можно убедиться, загрузив в память Arduino UNO программу AnalogInput2, тогда при срабатывании датчика в мониторе последовательного порта программы Arduino IDE будет наблюдаться следующая картина.

По данным продавцов , датчик может обнаруживать препятствия на расстоянии от 2 до 40 см. Автору настоящего обзора удалось добиться срабатывания датчика на расстоянии 5,5-3,5 см от белого препятствия (лист бумаги). Черную шероховатую поверхность (бокс CD-дисков) датчик не видит совсем, черную глянцевую поверхность датчик регистрирует расстояния около 2 см.

Согласно документации, для настройки частоты модуляции ИК-импульсов на частоту 38 кГц служит подстроечный резистор промаркированный 103, а для регулирования чувствительности датчика следует использовать подстроечный резистор промаркированный 507. как хорошо видно на предыдущих фотографиях на плате доставшейся автору оба переменных резистора имеют маркировку 103. Возможно это брак в данном конкретном устройстве. Может быть этим и объясняется малая дальность действия датчика.

Датчик потребляет ток 4-5 мА в рабочем режиме и 5-6 мА при срабатывании. Если настроить датчик на минимально расстояние срабатывания, то можно немного уменьшить ток потребления (примерно на 1 мА). На данной фотографии, также видно, сто при срабатывании датчика загорелся светодиод «Sled».

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

Таким образом, с одно стороны датчик можно использовать по назначению, однако по факту этот датчик не превосходит более простые ИК-датчики расстояния

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, предпринимать необходимые действия: менять направление движения робота, включать свет в помещении и т.п.

Фоторезистор ардуино и датчик освещенности

фоторезистор

Самый популярный и доступный вариант датчика на рынке – это модели массового выпуска китайских компаний, клоны изделий производителя VT. Там не всегда можно разораться, кто и что именно производит тот или иной поставщик, но для начала работы с фоторезисторами вполне подойдет самый простой вариант.

Начинающему ардуинщику можно посоветовать купить готовый фотомодуль, который выглядит вот так:

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

Российскому радиолюбителю можно посоветовать обратить на российский датчик ФР. Встречающиеся в продаже ФР1-3, ФР1-4 и т.п. — выпускались ещё в союзовские времена. Но, несмотря на это, ФР1-3 – более точная деталь. Из этого следует и разница в цене За ФР просят не более 400 рублей. ФР1-3 будет стоить больше тысячи рублей за штуку.

Маркировка фоторезистора

Современная маркировка моделей, выпускаемых в России, довольно простая. Первые две буквы — ФотоРезистор, цифры после чёрточки обозначают номер разработки. ФР -765 — фоторезистор, разработка 765. Обычно маркируется прямо на корпусе детали

У датчика VT в схеме маркировке указаны диапазон сопротивлений. Например:

  • VT83N1 — 12-100кОм (12K – освещенный, 100K – в темноте)
  • VT93N2 — 48-500кОм (48K – освещенный, 100K – в темноте).

Иногда для уточнения информации о моделях продавец предоставляет специальный документ от производителя. Кроме параметров работы там же указывается точность детали. У всех моделей диапазон чувствительности расположен в видимой части спектра. Собирая датчик света нужно понимать, что точность срабатывания — понятие условное. Даже у моделей одного производителя, одной партии, одной закупки отличаться она может на 50% и более.

На заводе детали настраиваются на длину волны от красного до зелёного света. Большинство при этом «видит» и инфракрасное излучение. Особо точные детали могут улавливать даже ультрафиолет.

Достоинства и недостатки датчика

Основным недостатком фоторезисторов является чувствительность к спектру. В зависимости от типа падающего света сопротивление может меняется на несколько порядков. К минусам также относится низкая скорость реакции на изменение освещённости. Если свет мигает — датчик не успевает отреагировать. Если же частота изменения довольно велика — резистор вообще перестанет «видеть», что освещённость меняется.

К плюсам можно отнести простоту и доступность. Прямое изменение сопротивления в зависимости от попадающего на неё света позволяет упростить электрическую схему подключения. Сам фоторезистор очень дешев, входит в состав многочисленных наборов и конструкторов ардуино, поэтому доступен практически любому начинающему ардуинщику.

Датчик препятствий на NE555

Этот проект призван продемонстрировать NE555 в ее типичной работе. Роль данной микросхемы будет заключаться в генерации сигнала, контролирующего работу ИК-диода. В одной из предыдущих статей мы использовали встроенный инфракрасный приемник TSOP для создания тестера дистанционного управления RTV. Но в этот раз, мы обойдемся без пульта ДУ, т.к. инфракрасный передатчик мы  построим сами.

Хорошо, но какое это имеет отношение к датчику препятствий? Диод, управляемый нашей схемой, будет постоянно светиться в инфракрасном диапазоне, но не будет работать постоянно. Это будет сигнал, модулированный с частотой 36 кГц, то есть тот, который обнаруживается нашим TSOP.

Поэтому разместим TSOP и ИК-диод рядом друг с другом. Если перед этой парой есть препятствие, свет, излучаемый диодом, будет отражаться от объекта и попадать в приемник — благодаря чему мы сможем обнаружить препятствие. Так что мы построим настоящий датчик препятствий!

Принцип работы инфракрасного датчика

Приведенная выше иллюстрация представляет собой лишь представление о работе такого датчика. На самом деле его поле зрения будет немного другим. Но мы проверим это на практике, потом также объясним, что это за серая стена между передатчиком и приемником.

Элементы, необходимые для выполнения этого упражнения:

  • 1 × инфракрасный приемник TSOP31236,
  • 1 × микросхема NE555,
  • Резистор 1 × 10 кОм,
  • Резистор 3 × 1 кОм,
  • Резистор 1 × 100 Ом,
  • Резистор 3 × 330 Ом,
  • 2 × 220 мкФ конденсатор,
  • Конденсатор 3 × 100 нФ,
  • Конденсатор 1 × 10 нФ,
  • 1 × 1N4148 диод,
  • 1 × светодиод (выберите свой любимый цвет),
  • 1 × ИК-светодиод (инфракрасный),
  • Батарея 4 × AA,
  • 1 × корзина для 4 батареек АА,
  • 1 × контактная пластина,
  • Комплект соединительных проводов.

Конструкция и параметры

Конструктивно датчик представляет собой печатную плату 31 x 14 мм, на плате имеется одно крепежное отверстие.

Инфракрасный датчик препятствия — плата печатная

Масса датчик 2,7 г. Для питания и передачи информации на датчике имеется трех контактный разъем, выводы которого промаркированы.

Трехконтактный разъем подключения датчика

Устройство питается постоянным напряжением в диапазоне от 3,3 до 5 В, ток потребления составляет 25 мА при напряжении питания 3,3 В и 40 мА при напряжении 5 В.

На датчике размещен инфракрасные светодиод и фотоприемник. Наличие препятствия определяется по интенсивности отраженного инфракрасного излучения. Подстроечным резистором на плате датчика можно установить требуемую чувствительность устройства. По заявлениям производителя датчик реагирует на препятствия в диапазоне от 2 до 30 см, угол зрения датчика 35 градусов. У автора получилось настроить датчик на препятствия в диапазоне 3-8 см, хотя возможно проблема в том, что испытывался только один датчик, к тому же угол зрения датчика, действительно весьма широк. Не следует также забывать, что различные поверхности отражают инфракрасное излучение по разному, более «блестящая», в данном диапазоне, поверхность будет обнаружена с большего расстояния, чем темная. В любом случае, этот датчик является «оружием ближнего боя».

ИК датчик препятствия — размер платы

Когда в поле зрения датчика появляется препятствие, на его информационном выходе устанавливается сигнал логического нуля. Если в поле зрения препятствия нет, то на выходе сигнал логической единицы. На плате датчика имеются два светодиода, один – индикатор питания, а другой — индикатор срабатывания датчика, который загорается при появлении в зоне видимости препятствия.

Принципиальная схема сервопривода на NE555

Эта схема также основана на NE555, но его типичное применение было изменено. В типичной нестабильной конфигурации сумма сопротивлений R1 + R2 отвечает за продолжительность высокого состояния, и только R2 является низким состоянием. При изменении высокого состояния мы также меняем время низкого состояния. Это определенное неудобство, когда низкий статус всегда должен быть одинаковым.

Измененная схема NE555 в нестабильной конфигурации

При добавлении одного диода 1N4148, роли этих резисторов разделяются: зарядный ток конденсатора C2 протекает через R1 и диод D1. Диод открывается, потому что сопротивление резистора R2 намного больше, чем R1 (на него будет подаваться большее напряжение). После того, как внутренний транзистор вывода 7 будет закорочен на массу, диод закроется и C2 разрядится только через R2.

Элементы, необходимые для выполнения данной сборки схемы:

  • 1 × сервопривод,
  • 1 × микросхема NE555,
  • Резистор 1 × 56 кОм,
  • Резистор 1 × 1 кОм,
  • Потенциометр 1 × 5 кОм,
  • 1 × 1000 мкФ конденсатор,
  • 1 × 220 мкФ конденсатор,
  • Конденсатор 3 × 100 нФ,
  • 1 × 470 нФ конденсатор,
  • 1 × 1N4148 диод,
  • Батарея 4 × AA,
  • 1 × блок для 4 батареек АА,
  • 1 × макетная плата,
  • Комплект соединительных проводов.

Принципиальная схема выглядит следующим образом:

Схема сервопривода на базе NE555 — генератор сигналов

Как и раньше — здесь мы также разделили схему на два отдельных блока. На этот раз второй блок очень простой (он только подключает сервопривод к источнику питания и к сигналу, описываемому как SERVO, то есть к третьему выводу NE555.

Схема сервопривода на базе NE555 — сервопривод с блоком питания

Вот примерная реализация схемы на макетной плате, а ниже, как и раньше, вы можете найти подробную пошаговую инструкцию.

Пример реализации схемы сервопривода на NE555

Шаг 1

Расположите правильно на плате NE555 (обращая внимание на углубление)

Шаг 2. Ставим конденсаторы С1 (100 нФ) и С2 (220 мкФ). Подключаем первый вывод NE555 к земле.

Шаг 1: Подключение к NE555 Шаг 2: Соединения с NE555

Шаг 3. Соединяем второц вывод схемы с шестой, а четвертую — с плюсовой шиной питания.

Шаг 4. Собираем элементы возле ножки №6. Конкретно это конденсатор С4 емкостью 470 нФ. Дополнительно там видны резистор R2 (56 кОм) и диод 1N4148.

Обязательно обратите внимание на направление проводимости диода!

Шаг 3: Подключите C4, R2 и диод 1N4148 Шаг 4: Подключите резистор и потенциометр

Шаг 5. Подсоедините ножку №8 к положительной шине питания. Подключаем резистор R1 (1 кОм) и затем подключаем к нему потенциометр. Мы хотим получить регулируемый резистор, поэтому используем средний вывод и один из крайних выводов (любой). Подключаем средний вывод к плюсовой шине питания. Добавляем конденсатор С3, подключив пятый вывод NE555 к земле.

Шаг 6. Подключаем линии питания, которые находятся с одной и другой стороны платы. Добавляем конденсаторы С5 (100 нФ) и С6 (1000 мкФ). Они стабилизируют питание схемы, когда двигатель потребляет больше тока.

Шаг 5: Последующие подключения Шаг 6: Подключение сервопривода и конденсаторов

В конце правильно подключаем сервопривод — для этого используем 3 провода:

Готовая система с подключенным сервоприводом

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

Возможная неровная работа сервооси можно объяснить колебаниями напряжения питания. Такие падения напряжения возникают на контактах макетной платы при запуске сервопривода. Дополнительный конденсатор смягчит этот эффект, но не устранит его полностью. Любые более сильные вибрации (особенно в крайних положениях) также являются результатом работы сервопривода.

Схема ИК датчика без контроллера

А далее схема аналогичного датчика на TTL микросхемах, это для тех кто не любит микроконтроллеров и прошивок.

Еще одна приятная особенность этого датчика — возможность корректировать положение ИК-диодов, то есть если они установлены под прямым углом — будет самый широкий диапазон расстояний, если речь идет о видимости датчика по бокам — при увеличении минимального расстояния, с которого объект может быть обнаружен посередине, то есть в области нескольких сантиметров в центре перед датчиком ничего не обнаружено — объект должен быть слегка отодвинут. Но если слегка наклоним их внутрь, то сможем резко изменить условия работы и обнаружить даже тонкие объекты.

Если датчик не обнаруживает никаких отражений после ожидания — это означает что в пределах видимости препятствий нет и можно ехать вперед.

Расчет элементов в схеме

Для эффективного использования NE555 необходимо рассчитать значения ключевых элементов — соответствующие формулы приведены в каталожной заметке. Наиболее важные из них описаны ниже. В сети также есть множество онлайн-калькуляторов, которые помогают с такими расчетами. Однако стоит знать, откуда взялись результаты.

Для моностабильной конфигурации

Время импульса можно рассчитать по одной простой формуле:

Время импульса = ln (3) R C

Где:

  • R — величина сопротивления резистора,
  • C — емкость конденсатора (в фарадах),
  • для Ln (3) мы подставим значение логарифма, то есть ~ 1,1.

Для нестабильной конфигурации

В этом расположении значения элементов зависят от времени высокого и низкого уровня, которое мы хотим получить. Расчеты довольно простые:

Высокий = ln (2) · ( Ra + Rb ) · C Низкий = ln (2) · Rb · C

Где:

  • Ra — величина сопротивления резистора Ra,
  • Rb — величина сопротивления резистора Rb,
  • C — емкость конденсатора (в фарадах),
  • для Ln (2) , мы подставим значение логарифма, т.е. ~ 0,693.

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

Недостатки

В силу отработанности аппаратной платформы, хорошо документированных схем, простоты разработки ПО и дешевизны PIR-датчики на Ардуино не обладают особыми недостатками в рамках возлагаемых на них задач. Возможности их применения ограничиваются естественными пределами ИК-технологии, периферийным оборудованием и заложенными в прошивку контроллера функциями.

Из недостатков отметим долгую инициализацию: многим образцам на переход в рабочий режим после первого включения требуется около минуты, на протяжении которой велик шанс ложных срабатываний. Кроме того, они не способны отличить человека от другого теплого объекта; для этого требуется иной класс устройств.

Пример работы

Рассмотрим ситуацию использования датчика на примере микроконтроллера Ардуино Уно и сенсора HC-SR501. Его характеристики:

  • рабочее напряжение постоянного тока — 4.5–20 В;
  • ток покоя — ≈ 50 мкА;
  • выходное напряжение — 3.3 В;
  • диапазон температур — от −15 до +70 градусов Цельсия;
  • габариты — 32×24 мм;
  • угол детектирования — 110 градусов;
  • дистанция срабатывания — до 7 метров.

В указанном сенсоре установлены два пироэлектрических датчика IRA-E700.

Сверху они прикрыты сегментированной полусферой. Каждый сегмент — фокусирующая тепло на определенный участок ПИР-датчика линза.

Внешний вид устройства:

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

Настройка

ИК-модуль HC-SR501 весьма прост в настройке и дешев. У него есть перемычка для конфигурирования режима и пара подстроечных резисторов. Общая чувствительность настраивается первым потенциометром: чем она выше, тем шире зона «видимости» гаджета».

Другой потенциометр управляет временем срабатывания устройства: если обнаружено перемещение, на выходе создается положительный электрический импульс определенной длины (от 5 до 300 секунд).

Следующий управляющий элемент — перемычка. От нее зависит режим работы.

  • в позиции L время отсчитывается от первого срабатывания. То есть, к примеру, если человек зайдет в помещение, система среагирует и включит свет на указанное настройкой потенциометра время. Когда оно истечет, выходной сигнал возвращается к начальному показателю, и комплекс перейдет в режим ожидания следующей активации;
  • в позиции H обратный отсчет будет начинаться после каждого детектирования события движения, а любое перемещение станет обнулять таймер. В этом положении перемычка стоит по умолчанию.

Соединение датчика с контроллером

Подключение датчика движения к Ардуино следует выполнять по указанной схеме:

Пин OUT соединяется с пином 2 Уно, а VCC подсоединено к контакту +5 В. Принципиальная схема конструкции:

Программная часть

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

В нем при обнаружении гаджетом движения на последовательный порт отправляется 1, а в ином случае уходит значение 0. Это простейшая программа, с помощью которой можно протестировать собранный датчик.

Модифицируем устройство добавлением реле, которое станет включать свет. Принципиальная схема подключения:

Макет:

Программа для реализации данного функционала:

Теперь, если собрать компоненты по схеме, загрузить скетч в Ардуино и соединить систему с электросетью дома, по сигналу сенсора перемещения контроллер заставит сработать реле, а то, в свою очередь, включит свет.

Примеры

Рассмотрим тестовый пример, который отправляет строку Hello from #<счётчик>:

Отправка

#include <Gyver433.h>
Gyver433_TX<2> tx;  // указали пин

void setup() {
}

char data[] = "Hello from #xx"; // строка для отправки
byte count = 0;                 // счётчик для отправки

void loop() {
  // добавляем счётчик в строку
  data = (count / 10) + '0';
  data = (count % 10) + '0';
  if (++count >= 100) count = 0;
  tx.sendData(data);
  delay(100);
}

Приём

#include <Gyver433.h>
Gyver433_RX<2, 20> rx;  // указали пин и размер буфера

void setup() {
  Serial.begin(9600);  
  attachInterrupt(0, isr, CHANGE);  // прерывание пина радио по CHANGE
}

// спец. тикер вызывается в прерывании
void isr() {
  rx.tickISR();
}

void loop() {
  if (rx.gotData()) {                   // если успешно принято больше 0
    Serial.write(rx.buffer, rx.size);   // выводим
    Serial.println();
  }
}

Библиотека позволяет отправлять данные любого типа (массив, структура) любой длины, что охватывает все возможные сценарии работы с радио.