094-Датчик приближения на ИК-лучах (ATtiny13).

Автор: | 10.04.2013

 

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

 

Видео работы датчика:

Чем отличается такой датчик от, скажем, датчиков движения заводского исполнения (которые, кстати, стали очень доступными и недорогими)?

Главное отличие – это область применения. Готовые датчики все-таки больше ориентированы на большие помещения и контроль движения. В нашем случае датчик компактен и больше рассчитан на функции контроля приближения и предназначен для встраивания в готовые проекты.

 

Сфера использования может быть обширной:

— реакция объектов на приближение руки (например, интерактивные игрушки, автоматические устройства);
— открывание шкафчиков, дверей и тому подобное при приближении руки;
— зажигание света при проходе «контрольной точки»;
— ориентация в пространстве робота (контроль стен и препятствий);
— системы управления движеньями рук;
— сигнализация;
— …

1 Принцип работы.

 

Работает датчик очень просто. Устройство с определенным периодом  посылает импульсы при помощи IR-светодиода. Инфракрасные лучи, отражаясь от объекта, принимаются инфракрасным приемником TSOP. Объект есть – есть сигнал, объекта нет – нет и сигнала. Дабы не было ложных срабатываний от бытовых пультов, помех, импульсов при включении света, устройством передается определенная последовательность импульсов и при декодировании TSOP, все что не совпадает с этой последовательностью – отбрасывается. На бытовую технику (управляемую при помощи ИК-пультов) устройство не оказывает никакого воздействия, так как сигнал относительно слаб и промодулирован последовательностью которая нигде не используется.

 

2 Схема, плата.

094-Proximity_scheme.zip (Одна Загрузка)

 

Готовая плата IR драйвера

 

069-IR-driver-PCB1.zip (4475 Загрузок)

Конструктивно датчик собран на уже сделанной нами ранее плате IR-драйвера. Платка хорошо зарекомендовала себя в различных проектах, поэтому было принято решение и этот проект делать на ней же.
Незначительным изменением конструкции является установка переменного резистора для подстройки чувствительности датчика. Больше изменений нет. Компоненты, применяемые в конструкции, не критичны к номиналам – можно применять близкие к ним.

 

3 Прошивка микроконтроллера.

Для прошивки микроконтроллера (в  плате) нужно подключить программатор к соответствующим выводам:

094-main.zip (Одна Загрузка)
094-Fuse.png (6186 Загрузок)

Напоминаю:Для Algorithm Builder и UniProf галочки ставятся как на картинке.
Для PonyProg, AVR Studio, SinaProg галочки ставятся инверсно.
Фьюз-байты: Low=$7A, High=$FF
Как программировать микроконтроллеры читаем в FAQ.

 

4 Конструктивные особенности.

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

Уменьшить этот эффект можно несколькими способами:

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

— Другим способом решения этой проблемы – применение коррекции по освещенности, например, самым простым является применение фоторезистора в цепи регулировки чувствительности (последовательно с переменным резистором чувствительности). При более ярком освещении ток через фоторезистор увеличивается, что ведет к увеличению чувствительности и наоборот.

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

 

5 Работа датчика.

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

Если при работе датчика будет использоваться управление от бытового пульта, нужно пройти процедуру изучения кнопки (команды) пульта. В устройстве используется всего одна кнопка – переброс значения триггера. Для изучения кнопки необходимо обесточить устройство, «придавить» ножку выхода TSOP (на схеме ножка «Out») к «земле», включить устройство, отпустить ножку «Out» и нажать выбранную кнопку пульта. Теперь датчик начнет работать в штатном режиме.

При включении нескольких датчиков на близком расстоянии друг от друга (например, для контроля направления движения объекта) датчики будут мешать работе друг друга, так как их сигналы не синхронизированы. Для устранения этой проблемы используется вывод запрета инфракрасного излучения «LED-Запрет». На всех устройствах кроме одного этот вывод должен быть «прижат» к «земле». При этом все датчики будут работать от дного источника инфракрасного сигнала. Если одного излучающего светодиода недостаточно, то можно к выводу излучающего устройства подсоединять ИК-светодиоды в параллель (не забывая при этом о балластных резисторах).

 

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

 

6 Выводы.

По работе схемы есть как достоинство, так и недостатки.

Для начала недостатки:
— Зависимость работы устройства (чувствительности) от яркости освещения. Это решается, в некоторой степени, но проблема есть;
— Небольшая разрешающая способность (небольшие объекты будут «срабатывать» плохо);
— Небольшая дальность срабатывания (наличие отражающих стен и потолков уменьшают дальность, так как не позволяют увеличить чувствительность – появляются ложные срабатывания от отражений).

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

Как видно из видео, датчик довольно уверенно реагирует на руку в пределах полуметра. Уверенно работает от пульта и не мешает находящемуся рядом телевизору. Потребляемый ток лежит в пределах 10мА.  Запитать датчик можно от источников напряжением от 3 до 6 вольт (некоторые TSOP не могут работать ниже 5ти вольт – это нужно учитывать).

 

По устройству все.

094-Proximity_Sensor_Source.zip (5055 Загрузок)

 

Не забываем заглядывать в раздел модификаций на форуме! Там можно найти (или оставить свои) модификации этого и других устройств блога.

(Visited 47 882 times, 4 visits today)

094-Датчик приближения на ИК-лучах (ATtiny13).: 300 комментариев

  1. siema

    Евгений, спасибо! В этой части разобрался. Подвесил этот датчик над дверным карнизом, чтобы молодой человек 3-х лет мог в туалете со светом находится. Но на его белобрысенькую голову не срабатывает. А при поднятии чувствительности — переотражение от стен. Поменял на датчик движения :(. Но выход.
    Возникли вопросы.
    1. Необходимость загрузки файла EE_Probing_Seq в EEPROM? Каким образом задается значение?
    2. Это файл генерируется автоматически? Если Да, с какого места берёт данные?
    3. Как в AB попасть в подпрограмму обработки прерывания в режиме отладки?
    Заранее благодарю!

  2. admin Автор записи

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

  3. siema

    Евгений, добрый день!
    Разбираюсь с программой. Подскажите, пожалуйста, что отождествляют состояния регистра Status? Возможные состояния: 0, 1 и 2.
    Когда срабатывают и что делают процедуры _Add_Status и _Sub_Status?
    Спасибо за ответы.

  4. admin Автор записи

    Получается, что установка частоты импульсов не зависит от 150 -> OCR0B?
    — да, правильно. от значения OCR0B зависит только скважность импульсов (частота постоянна — 37,5кГц)
    При такой частоте устройство работает с TSOPами и 36кГц и 38кГц — разница будет лишь в чувствительности.

  5. siema

    Тактовая частота = 9,6 МГц -> Период = 104 нс -> Период переполнения 104 нс/256 = 26,667 мк -> Частота переполнения 37,5 МГц. Получается, что установка частоты импульсов не зависит от 150 -> OCR0B?
    Что делает процедура Output_Compare_0B, которая запускается с частотой 64 МГц.
    Эх, попросить бы Вас разъяснить весь алгоритм… Хочется создать мод и поднатареть на AB.

  6. siema

    Евгений, помогите пожалуйста знаниями по подбору несущей частоты. У меня TSOP 1838 не запустился. На пульт не реагирует.
    Тактовая частота = 9,6 МГц -> Период = 104 нс -> Частота переполнения 104 нс/256 = 26,667 мкс.
    Вы писали: «Если всё же необходимо изменить частоту, то она меняется предварительной записью значения в регистр счётчика OCR0B (в данной программе установлено 150 -> OCR0B, период переполнения 26,6 мкс, что соответствует 37,6 кГц).»
    Записью значения 150 в регистр OCR0B, мы устанавливаем значение TOP и получаем прерывания по совпадению 0B каждые 104 нс/150 = 15,625 мкс, что соответствует частоте 64 МГц. Дальше не могу найти ниточки до необходимых рабочих частот 36-38 МГц.

  7. siema

    Евгений. Спасибо. Экранированием добился 2 метров. Думаю мне хватит. Но больших дистанций добиться не смог.

  8. siema

    OK. Спасибо. Буду экранировать.

  9. admin Автор записи

    Pulse Forward Current vs. Pulse Duration
    Импульсный прямой ток в отношении к длительности импульса

    Для TSOP 4836 частота следования несущих импульсов, соответственно 36 КГц, а вот длительность этих импульсов не так важна. Поэтому можно выдавать на светодиод больший ток за счет длительности импульсов (например установив дифференцирующую цепочку ).

    Еще, попробуйте между TSOP и светодиодом установить непрозрачную перегородку (мне кажется у Вас присутствует паразитная засветка TSOP )

  10. siema

    Евгений, у Вас как всегда быстрые и толковые ответы.
    Для указанного в проекте TSOP 4836 я использовал TSAL 6400.
    Производитель TSOP в даташите указал светодиод , используемый в тестах (IR diode TSAL6200, IFm = 200 mA при меандре с длительностью импульса 0,1мс) при котором была достигнута дальность в …. 45 метров!
    200мА — ток не большой.
    Но по характеристикам эти оба светодиода идентичны. Неужели замена TSAL 6400 на TSAL 6200 устранит проблему?
    Подскажите пожалуйста длительность импульсов и частоту для определения предельного тока на светодиоде по даташит TSAL6200 Figure 3. Pulse Forward Current vs. Pulse Duration.
    Что такое: Длительность пачки=20, Длительность паузы единицы=20, Длительность паузы нуля=20+40?
    Фото: https://yadi.sk/d/aJz4YVU43E5bDc

  11. admin Автор записи

    Для увеличения дальности желательно использовать тот ИК-светодиод который прописан в даташите к Вашему TSOP. Ну и кардинальное решение проблемы — увеличивать ток излучающего ИК-светодиода (в импульсном режиме они способны выдерживать огромные токи — читайте даташит на Ваш светодиод)

  12. siema

    Схему собрал давно и вроде работала, пока не стал ее примерять под реальные нужды.
    Как-то маловато менее 0.5 метра под препятствие-человека.
    Плата установлена в корпус, светодиод установлен в трубку из под шариковой ручки.
    Фото выложу завтра.
    Кто как добился бОльших расстояний? Спасибо.

  13. admin Автор записи

    Это сделать можно, но сейчас таким заняться нету возможности. Может после нового года будет посвободней.

  14. kret_a_v

    доброго дня
    есть идея использовать данный датчик для без контактного умывальника
    как к примеру сделано на пике
    http://kazus.ru/shemes/showpage/0/1498/1.html
    но в описании работы этого датчика нет защиты от ложного срабатывания
    (имеется в виду отключения при наличии постоянной преграды — к примеру полотенце упало в умывальник)
    можно ли добавить в прошивку таймер выключения ?
    например , если преграда не убрана в течении 30-40 секунд происходит принудительное отключение датчика
    и только после того как преграда убрана ,восстанавливается работа в штатном режиме
    и не плохо было бы добавить режим тревоги при такой ситуации — зумер (пищалка от ПК)
    если такое возможно прошу помочь с прошивкой

  15. GetChiper Автор записи

    Программа написана не на С, соответственно нет исходника на С.

  16. vladimir68

    А можно прошивку не в hex, а на С?

  17. GetChiper Автор записи

    Скетча для Ардуино нет.
    Импульсы формируются аналогичные протоколу пультов NEC
    В сети полно статей по их спецификации (думаю есть и библиотеки для ардуино для их формирования, если поискать).

  18. vladimir68

    Доброго времени суток! Есть код для Arduino для этого датчика? Скиньте код, если не затруднит, либо скажите алгоритм и как сформулировать импульсы? Заранее спасибо!

  19. MitsuokaOroshi

    У меня тоже не все пульты он принимал. Благо разобрался с массовым браком МК и устройство стабильно работает. С Наступающим Вас! Вдохновения и успеха!

  20. pelya999

    снимаю свой вопрос, взял еще один пульт и заработало. спасибо автору за устройство

  21. pelya999

    пытаюсь запрограммировать пульт, но не в какую не выходит по выше описанному алгоритму. фьюзы 7А и FF. два пульта от телевизоров пробовал

  22. MitsuokaOroshi

    TSOP подкину другой. Пульт-телефон Samsung S4 Zoom, но и с другими пультами тоже самое. Питание пока он «под наблюдением» от 18650 li-on 4,2V. Но при 5V от ПК тоже самое. Надеюсь на TSOP.

  23. GetChiper Автор записи

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

    2 метра для TSOP — это очень мало. Где-то есть проблема. Толи TSOP проблемный, толи пульт. А как, кстати, с питанием? Нет помех?

  24. MitsuokaOroshi

    Возможно ли увеличить расстояние приема TSOP-а? Дальше 2 метров не принимает сигнал с пульта.

  25. MitsuokaOroshi

    Два последних прибывших мк удалось восстановить Fuse Doctor. Остальные телепортировались в мусор.Дурдом просто…

  26. GetChiper Автор записи

    Да, это как-то слишком неправильно…

  27. MitsuokaOroshi

    Занижение питания до 3.3V и понижение частоты на USB ASP ничего не меняют.

  28. MitsuokaOroshi

    Ребята это просто нереал какой-то! 6 МК из 2 разных точек продаж (городов) и все одно и тоже-ни один прогер не видит их, и Громова и USB ASP! Зато купленный более года назад МК прекрасно читается и шьется. Неужели такой массовый брак попер?!

  29. MitsuokaOroshi

    Это какой то капец. С параметрами BODLEVEL 1 и 2 вообще отказался работать. Приехавший новый МК оказался бракованным-не опознавался ничем. Вернул фьюзы на старом мк к прежним-заработал но не долго-стрельнул и замкнул конденсатор 10mkf по входу питания. Хотя питал все от USB. После удаления конденсатора обнаружил что яркость светодиода на выводе Status упала почти полностью. Более МК не сохраняет фьюзы-еще один труп. Наверное пора отложить пока его.

  30. MitsuokaOroshi

    Да, уже посмотрел калькулятор. Буду пробовать оба сразу.

  31. SVN

    MitsuokaOroshi :
    Я так понимаю Вы про этот параметр BODLEVEL1?

    Если выставить только BODLEVEL1, то это контроль 2,7 В. Если выставить только BODLEVEL0, то это контроль 1,8 В. А если выставить оба BODLEVEL1 и BODLEVEL0, то это контроль 4,3 В. Выбор за тобой. Я бы выбрал контроль 4,3 В.

  32. GetChiper Автор записи

    Да можно выставить этими фьюзами напряжение при котором МК вырубается.

  33. MitsuokaOroshi

    Я так понимаю Вы про этот параметр BODLEVEL1?

  34. MitsuokaOroshi

    Можно подробнее?

  35. SVN

    MitsuokaOroshi :
    По питанию итак стоят 0,1 и 10mkf. Единственное что осталось попробовать повысить емкость. А пока буду заказывать и пробовать другой МК.

    Не пробовал фьюзы для контроля питания выставить? Помогает уберечь EEPROM.

  36. MitsuokaOroshi

    По питанию итак стоят 0,1 и 10mkf. Единственное что осталось попробовать повысить емкость. А пока буду заказывать и пробовать другой МК.

  37. GetChiper Автор записи

    Нужно просто подобрать правильные номиналы сглаживающих конденсаторов по питанию.
    Керамику полюбому нужно ставить 0,1мкФ, а вот электролит нужно смотретью. Сильно большой плохо так как фронты подачи (и снятия) питания пологие. А маленький не будет сглаживать помехи. Для начала я-бы поставил 10мкФ, а потом попробовал-бы увеличивать.

  38. MitsuokaOroshi

    Тоисть между Reset и VCC

  39. MitsuokaOroshi

    GetChiper :
    Если ЕЕПРОМ слетает – это скорей всего проблема с питанием.

    Как думаете если прилепить простой супервизор из светодиода и резистора между reset и vdd? Была подобная проблема с другим устройством на 2313 и только так решилось. Хотя делалось их тоже два и один работает отлично а другой чудил слетом ЕЕПРОМ после отключения питания.

  40. GetChiper Автор записи

    Насчет 45 — не знаю.

  41. MitsuokaOroshi

    Обучение получается и на руку тоже отлично срабатывает. Странно другое, что один и тот же набок деталей. Но один датчик запоминает все другой нет. Разница только в МК как я ранее писал. Питание для обоих одно и тоже.Но других тинек 13 у меня под рукой нет потому спрашивал можно ли использовать 45-ю тиньку с той же прошивкой? Насколько мне известно у 45-й больше памяти.

  42. GetChiper Автор записи

    Если ЕЕПРОМ слетает — это скорей всего проблема с питанием.
    Если обучение вообще не получается TSOP или пульт

  43. MitsuokaOroshi

    @GetChiper
    Что это может быть, почему МК не запоминает пульт?

  44. MitsuokaOroshi

    Радость была не долгой, пока мы тут общаемся один из датчиков перестал запоминать пульт. Стоит обесточить и все, учить заново. Единственная разница между двумя датчиками это размер корпуса МК. Такого раньше не встречал, он больше обычного и все 3 других такие же. Но есть 45-я тинька. Можно ее притулить для проверки без изменения программы?

  45. GetChiper Автор записи

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

  46. MitsuokaOroshi

    В общем так: с пультом Openbox оба датчика заработали пока стабильно. Так же с хорошо управляются и телефоном Samsung S4 Zoom. Дело было НЕ в питании и не в монтаже. Просто датчик крайне переборчив к пультам. Было бы неплохо это устранить и добавить возможность привязки нескольких пультов к одному датчику. Это реально?

  47. MitsuokaOroshi

    Запитал от литиевой АКБ-ничего не изменилось.

  48. GetChiper Автор записи

    Ускорять датчик не желательно — во-первых могут появится ошибочные срабатывания, во-вторых чувствительность упадет.

  49. MitsuokaOroshi

    Поищу чем другим запитать. БП такой: HY1502D
    Просто на руку чаще всего отрабатывает отлично но в остальном-никак. Кстати возможно ускорить опрос датчика чтобы быстрее реагировал на руку? Задержка около секунды нужна что бы корректно принял отражение

Добавить комментарий