Как сделать ик датчик на ардуино

Добавил пользователь Дмитрий К.
Обновлено: 04.10.2024

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

Благодаря своей дешевизне, простоте, экономичности и универсальности, ИК пульт всегда будет занимать свое место среди устройств дистанционного управления, наряду с Bluetooth, радио, и WiFi.

Принцип действия

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

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

Чтобы сигнал от пульта ДУ принимался ИК приемником Ардуино, пульт должен быть настроен на соответствующую частоту. Поэтому не каждый пульт ДУ подойдет для нашего ИК приемника.

Схема подключения

Разберем на распиновку ИК приемника. Традиционный ИК-приемник имеет три контакта:

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

Давайте же соберем что-нибудь!

Задача

Светодиод, управляемый дистанционно.

Необходимые компоненты

Итак, нам понадобится:

  • 1 пульт ДУ. Подойдет практически любой ИК пульт дистанционного управления.
  • Плата Ардуино, макетная плата, перемычки

В качестве светодиода будем использовать встроенный светодиод ардуино.

Схема сборки

Соберем такую схему:


Скетч

Для работы нашего скетча нам понадобится специальная библиотека – Arduino-IRremote, которую потребуется установить.

Загрузим в ардуино такой скетч:

Результат

Если вы используете типовой пульт ДУ для ардуино, то нажимайте на кнопку 1, и встроенный светодиод будет то зажигаться, то гаснуть.

Если вы используете какой-то другой пульт, то программу потребуется настроить на код нажимаемой вами кнопки. Для этого программа выводит все коды, получаемые от пульта.

Объяснение

Для работы с пультом нам потребуется объявить два объекта: типа IRrecv – для приемника и типа decode_results – для разбора полученных приемником данных.

decode_results irData; // переменная для получения данных от ИК приемника

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

Чтобы приемник начал работать на прием, необходимо его включить. Мы это делаем в функции setup():

Метод decode() позволяет получить данные от приемника.

Если decode() возвращает значение > 0, то сигнал поступил, и его можно проанализировать.

Чтобы понять какой именно сигнал получил, мы анализируем свойство value объекта данных:

Чтобы продолжить получение данных, надо вызвать метод resume():

Заключение

Теперь вы умеете управлять устройством Ардуино не вставая с дивана ?. Не нужно разводить кнопки. Или кнопки можно просто продублировать пультом.

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

Уличная преступность очень распространена в современном веке. Каждый должен чувствовать себя в безопасности, когда он дома, когда спит ночью или днем. Таким образом, многие системы охранной сигнализации доступны на рынке. Эти системы очень эффективны, но дороги. Охранная сигнализация или охранная сигнализация — это в основном электронное устройство, которое подает звуковой сигнал, когда обнаруживает нарушителя в доме. Мы можем создать схему охранной сигнализации дома, которая будет практически одинаково эффективна для определенного диапазона расстояний и будет очень дешевой.


Эта статья о том, как сделать тревогу злоумышленника, используя Arduino и ИК-датчик. Когда ИК-датчик обнаружит злоумышленника, он отправит сигнал Arduino, и Arduino подаст сигнал тревоги. Эта схема очень проста и будет разработана на Veroboard. Этот Veroboard будет установлен в том месте дома, где существует большая опасность проникновения злоумышленника внутрь дома.

Как спроектировать систему охранной сигнализации на основе ИК-датчика?

Лучший подход к запуску любого проекта — составить список компонентов и провести краткое изучение этих компонентов, потому что никто не захочет зацикливаться на середине проекта только из-за отсутствующего компонента. Давайте составим список компонентов, приобретем их и начнем с проекта. Плата Vero предпочтительна для сборки схемы на оборудовании, потому что, если мы собираем компоненты на макете, они могут отсоединиться от него, и, следовательно, цепь станет короткой, предпочтительнее Veroboard.

Шаг 1: Сбор компонентов (оборудование)

Шаг 2: Необходимые компоненты (программное обеспечение)

После загрузки Proteus 8 Professional создайте схему на нем. Я включил здесь симуляции программного обеспечения, чтобы новичкам было удобно спроектировать схему и выполнить соответствующие подключения на оборудовании.

Шаг 3: Работа Цепи

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

Шаг 4: Сборка компонентов

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

  1. Возьмите Veroboard и протрите его сторону медным покрытием скребковой бумагой.
  2. Теперь поместите компоненты аккуратно и достаточно близко, чтобы размер цепи не стал слишком большим
  3. Возьмите две части женских заголовков и поместите их на Veroboard таким образом, чтобы расстояние между ними было равно ширине нано-доски Arduino. Позже мы будем монтировать плату Arduino nano в этих женских заголовках.
  4. Тщательно сделайте соединения, используя паяльник. Если при выполнении соединений была допущена какая-либо ошибка, попробуйте демонтировать соединение и снова правильно припаять соединение, но, в конце концов, соединение должно быть надежным.
  5. После того, как все соединения выполнены, проведите проверку целостности. В электронике проверка непрерывности — это проверка электрической цепи, чтобы проверить, протекает ли ток по желаемому пути (что это определенно полная цепь). Проверка непрерывности выполняется путем установки небольшого напряжения (проводного в сочетании со светодиодом или компонентом, создающим шум), например, пьезоэлектрическим динамиком) по выбранному пути.
  6. Если проверка целостности пройдена, это означает, что цепь выполнена надлежащим образом. Теперь он готов к проверке.
  7. Подключите аккумулятор к цепи.

Теперь проверьте все соединения, посмотрев на схему ниже:


Принципиальная электрическая схема

Шаг 5: Начало работы с Arduino

Если вы еще не знакомы с Arduino IDE, не беспокойтесь, потому что пошаговая процедура настройки и использования Arduino IDE с платой микроконтроллера описана ниже.

Шаг 6: Понимание кода

Код этого проекта достаточно хорошо прокомментирован и очень прост для понимания. Но все же, это кратко объяснено ниже.

1. При запуске инициализируются контакты Arduino, которые впоследствии будут подключены к светодиоду и зуммеру. Также объявлена ​​переменная, которая будет хранить некоторые значения во время выполнения. Затем начальное состояние PIR устанавливается на LOW, что означает, что первоначально сообщается, что движение не обнаружено.

int ledPin = 5; // выбираем вывод для светодиода
int Buzzer = 6; // выбираем штырь для зуммера
int inputPin = 2; // выбираем входной контакт (для ИК-датчика)
int pirState = LOW; // мы начинаем, предполагая, что движение не обнаружено
int val = 0; // переменная для чтения и сохранения статуса пина для дальнейшего использования

2. void setup () — это функция, в которой мы инициализируем контакты платы Arduino, которые будут использоваться как INPUT или OUTPUT. Скорость передачи данных также устанавливается в этой функции. Скорость в бодах — это скорость передачи битов в секунду, с которой микроконтроллер связывается с внешними устройствами.

void setup () pinMode (ledPin, OUTPUT); // объявляем светодиод как выход
pinMode (Зуммер, ВЫХОД); // объявляем зуммер как вывод
pinMode (inputPin, INPUT); // объявляем датчик как вход
Serial.begin (9600); // установить скорость передачи 9600
>

3. void loop () — это функция, которая снова и снова запускается в цикле. В этой функции микроконтроллер запрограммирован так, что если он обнаруживает движение, он посылает сигнал зуммеру и светодиоду и включает их. Если движение не обнаружено, оно ничего не сделает.

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


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

Для Arduino существует прекрасная библиотека IRemote которая делает построение разнообразных ИК систем управления очень простым. Но при решении даже такой простой задачи как транскодер обязательно находятся проблемы которые интересно решать.
Итак для начала нам необходим интегральный ИК приёмник типа TSOP312 или соответствующий шилд для Arduino. Не стоит забывать что ИК приёмников существует очень много и цоколёвка у них меняется случайным образом. Например я использовал некий безымянный элемент по цоколёвке совпадающий с TSOP382 но в уменьшенном корпусе и без разделительного ключа.

Собранная схема нужна нам для получения кодов команд от обеих пультов, к несчастью снять команды с устройства для которого пульт утерян несколько сложнее. Вы можете всё-таки найти пульт донор, воспользоваться универсальным пультом подобрав код (а зачем тогда вам тогда транскодер, раз уж пульт подошёл?) или попытавшись воспользоваться данными из интернет баз по IR кодам. Самым простым для меня оказалось воспользоваться приложением под андроид, эмулирующий нужный мне пульт.
Для чтения данных используем пример IRrecvDumpV2 из поставки IRremote, если ваш пульт относится к распознаваемым библиотекой то сырой результат сканирования вам не понадобится, хотя например пульт от LG у меня ложно распознавался как Samsung и не заработал при попытке отправлять команды через sendLG.

Encoding: SAMSUNG
Code: 34346897 (32 bits)
Timing[67]:
+4450, -4350 + 600, — 500 + 600, — 500 + 600, -1600
+ 600, -1600 + 600, — 500 + 600, -1600 + 600, — 500
+ 600, — 500 + 600, — 500 + 600, — 500 + 600, -1600
+ 600, -1600 + 600, — 500 + 600, -1600 + 600, — 500
+ 600, — 500 + 600, — 500 + 600, -1600 + 600, -1600
+ 600, — 500 + 600, -1600 + 600, — 500 + 600, — 500
+ 600, — 500 + 550, -1650 + 550, — 550 + 550, — 550
+ 550, -1650 + 550, — 550 + 550, -1650 + 550, -1600
+ 600, -1600 + 600
unsigned int rawData[67] = ; // SAMSUNG 34346897
unsigned int data = 0x34346897;


Такой код отлично работает, в switch теперь достаточно вписать нужное число case для кнопок и всё будет работать. Но не тут то было. Коды rawData записываются в виде массива int а у нас платформа на микроконтроллере. Память для переменных будет съедена уже пятью командами длиной по 100 элементов. А ведь на пультах бывает и по 25 кнопок.
Проблемы нет если не пользоваться сырым представлением данных, для этого в библиотеке есть возможность слать команды известными протоколами, например для пультов совместимых с Sony это sendSony. В библиотеке уже реализованы пульты известных производителей, но с ходу разобраться с моим пультом у меня не получилось. Поэтому переходим к более примитивным способам экономии памяти которые помогут тем у кого пульты совсем уж нестандартные.
Первое что приходит в голову это задавать rawData не в виде int, а перейти на байт. Все значения в этом массиве это результат чтения ИК сигнала таймером с периодом 50 миллисекунд, а так как эти данные кратны 50, то разделив их на 50 мы ничего не потеряем. Верхний предел будет ограничен значением 50*255=12750, а это 12 секунд, чего будет достаточно даже для декодирования неспешной азбуки Морзе — если такая необходимость возникнет.
В библиотеку был добавлен метод принимающий на вход байты, что сократило потребления памяти вдвое


Только вот памяти под переменные у Arduino всего два килобайта а это максимом 40 команд по 50 байтов. Нам необходимо больше памяти. И эту память мы извлечём из сегмента команд. Достаточно зарезервировать один массив достаточного размера и набивать его перед отправкой чередой присваиваний. Итого из кодового сегмента на одну команду будет тратиться около 100 байт, но ведь и места для кода у нас не меньше десяти килобайт. Так что на средний пульт со ста кнопками нам уже хватит.
Дабы не набивать руками присваивания в библиотеку был добавлен пример IRrecvDumpRawByte который выводит сырые данные не только в форме байтов но и в виде блока присваиваний


Пример уже написанного скетча который позволяет управлять Samsung DVD HR-755 при помощи пульта Daewoo R40A01 находится в примерах под именем DaewooR40A01toDVDHR755Transcoder. Pull request на добавление примеров в общую ветку пока никто не принял поэтому скачать модифицированную библиотеку можно с форка .





















Под катом находятся фотографии интеграции Arduino Nano внутрь этого DVD рекордера, Arduino Mini конечно занимает ощутимо меньше места, но под рукой была только Nano. Питание я взял с панели управления. Сигнал со встроенного приёмника был подключен к Arduino а параллельно ему был напаян ещё один ИК приёмник, расположенный с противоположной стороны от первого. Тем же навесным монтажом на него был напаян ИК светодиод. В принципе этого повторения можно было бы избежать — но сигнал с ИК приёмника инвертирован — поэтому напрямую завести ТТЛ сигнал на устройство не получится — а городить инвертор на логике или транзисторе я уже не стал.

Несмотря на то, что в моём случае сырые данные отлично работали, эксперименты с остальным домашним оборудованием показали что далеко не все захваченные сигналы корректно работали при попытке управления конкретным устройством. Команда включения кондиционера так и не заработала, хотя если он был уже включён смена режимов работала корректно. Колонка от LG тоже отказалась воспринимать сырые команды, но отлично реагировала на отправку кодов через sendSamsung. При этом пять собранных по знакомых телевизора отлично реагировали на сырые данные. Вариант с разной частотой сигнала я опробовал — это никак не помогло. Возможно проблема лежит в частоте дискретизации сигнала в 50 мс. Судя по работоспособности команд формата Samsung на технике LG, протокол стоит формализовать в виде отдельного модуль по аналогии с ir_LG.cpp ir_JVC.cpp ir_Dish.cpp, подобрав для конкретного устройства заголовок и параметры кодирования нулей и единиц. Наверное разбор написания такого протокола послужит неплохой темой для статьи.

Ну и в дополнение, вторая большая ИК библиотека для Arduino это IRLib. Она обладает схожим функционалом, в ней есть даже готовый модуль для разбора ИК протоколов для десктопа. Был проведён быстрый сравнительный тест чтения сырых данных который не выявил разницы в отсчётах по сравнению с IRemote. Из плюсов, в IRLib уже есть пример определения на какой частоте работает ИК передатчик. Пример Samsung36 фактически реализует разбор протокола по данным из сети интернет. Кроме того, документация отлично расписывает подключение ИК приёмников с каскадированием и много чего ещё. Хотя на мой взгляд, IRemote гораздо проще в понимании и использовании.

Здравствуй, дорогой читатель! Сегодняшняя статья посвящена созданию простой домашней системы безопасности, при помощи доступных компонентов. Это маленькое и дешёвое устройство поможет тебе защитить ваше жилище от проникновения при помощи Arduino, датчика движения, дисплея и динамика. Питаться устройство сможет от батарейки или USB-порта компьютера.

КАК ОНО РАБОТАЕТ?

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

Для более широкого радиуса действия используют линзы Френеля, которые собирают ИК-излучение с разных направлений и концентрируют его на самом датчике.

ик-датчик

На рисунке видно, как линза искажает лучи, которые падают на неё.

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

Когда происходит изменение уровня ИК излучения в диапазоне действия, это будет обрабатываться на Arduino после чего на LCD дисплее будет выводится статус, светодиод будет мигать, а спикер пищать.

ЧТО НАМ ПОТРЕБУЕТСЯ?

    (или любая другая плата Arduino-совместимая плата). (16 символов по две строки)
  1. Один разъём для подключения кроны к Arduino (хотя можно использовать и обычный динамик)
  2. USB-кабель - только для программирования (прим. пер.: с нашими Arduino он всегда идёт в комплекте!)
  3. Компьютер (опять же только для того, чтобы написать и загрузить программу).

Кстати, если не хочется покупать все эти детали по отдельности - рекомендуем обратить внимание на наши стартовые наборы. К примеру, всё необходимое и даже больше есть в нашем стартовом наборе Кавасаки-2.

ПОДКЛЮЧАЕМ!

Подключение датчика движения очень простое:

  1. Пин Vcc подключаем к 5V Ардуино.
  2. Пин Gnd подключаем к GND Ардуино.
  3. Пин OUT подключаем к цифровому пину №7 от Arduino

подключение датчика движения

Теперь присоединим светодиод и спикер. Тут всё так же просто:

  1. Короткую ножку (минус) светодиода подключаем к земле
  2. Длинную ножку (плюс) светодиода подключаем к выходу №13 Arduino
  3. Красный провод спикера к выходу №10
  4. Чёрный провод – к земле

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

И теперь самое сложное – подключение LCD дисплея 1602 к Arduino. Дисплей у нас без I2C, поэтому потребуется много выходов Arduino, но результат будет того стоить. Схема представлена ниже:

Схема подключения 1602 к Arduino

Нам нужна только часть схемы (у нас не будет регулировки контраста потенциометром). Поэтому требуется сделать лишь следующие:

Читайте также: