ИК локатор Робоклуба

Материал из roboforum.ru Wiki

Перейти к: навигация, поиск


Source(s): ИК локатор Робоклуба


Содержание

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

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


Чтобы повысить защиту локатора от фоновой засветки и помех используют, во-первых, свет инфракрасного диапазона, и, во-вторых, "подсветку цели" производят не непрерывным лучом, а импульсами. Если уровень сигнала с фотодатчика одинаков при включенной и при выключенной подсветке, то препятствие, скорее всего, отсутствует; если же в момент импульса подсветки сигнал с приемника заметно выше, чем во время паузы, то, с большой вероятностью, это вызвано наличием препятствия. В то же время, при отдельных импульсах возможны ложные срабатывания, а если давать импульсы непрерывно, то датчик начнет реагировать, к примеру, на солнечный свет или излучение люминесцентных ламп.


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


Source(s): ИК локатор Робоклуба


Приемники

Таких ИК-приемников довольно много. Познакомимся с ними на примере вполне типичной серии TSOP17хх производства Vishay Semiconductors. Изображение:Ir_locator_00.jpg

Серия включает семь моделей: TSOP1730, TSOP1733, TSOP1736, TSOP1737, TSOP1738, TSOP1740, TSOP1756, две последние цифры в обозначении модели соответствуют частоте несущей ИК-сигнала (30, 33, 36 и т.д. кГц). Схема приемников хорошо защищена от случайных импульсов и помех. Отсутствию сигнала (как и у большинства других ИК-приемников) соответствует высокий логический уровень на выходе ИК-приемника; при получении сигнала на выходе появляется импульс низкого уровня.

"Рабочий" сигнал должен отвечать следующим требованиям:

  • быть возможно ближе к частоте несущей для данной модели (например, 36 кГц для TSOP1736)
  • в пачке должно быть 10 или более импульсов
  • за пачкой от 10 до 70 импульсов должна следовать пауза длительностью не менее 14 импульсов


Source(s): ИК локатор Робоклуба


Изображение:ir_locator_01.jpg


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


Source(s): ИК локатор Робоклуба


Реализация

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


Source(s): ИК локатор Робоклуба


Изображение:Ir locator30.gif


ИК-излучатель (LED1) - любой светодиод, работающий в ИК-диапазоне, желательно ближе к 950нм. Должен подойти, к примеру, ИК-передатчик от практически любого пульта ДУ.

Светодиод управляется сигналом от контроллера по линии РВ4. Если вам удасться найти светодиод на ток до 20мА, то можно включить его прямо на выход контроллера, если же нет, то, как и в нашем случае, следует поставить транзистор (V1) в качестве ключа. Какой именно транзитор - не очень важно, лишь бы он был n-p-n типа и был расчитан на тот же ток, что и выбранный вами светодиод. Резистор R2 надо поставить таким, чтобы ток через светодиод не превышал допустимый для данной модели.

ИК-приемник (IF1) - TSOP1736, сигнал с него поступает на непосредственно на вход контроллера (линия РВ3). В отсутствие подходящего ИК-сигнала на выходе приемника присутствует высокий логический уровень, а при появлении сигнала - проходит импульс низкого уровня.

Обратите внимание: для "ответственных" приложений контроллер и ИК-приемник лучше включать в соответствии с рекомендациями изготовителей,
а керамический конденсатор примерно в 100нФ рядом с вводами питания контроллера - вещь во всех случаях обязательная ;) 

Индикатором в нашем случае служит "обычный" светодиод LED2, подключенный на линию РВ0 контроллера последовательно с токоорганичивающим резистором.

Разъем J1 используется для подключения программатора. Питание +5В подается на клемму Vcc и "землю". 

При желании локатор может быть изготовлен даже без печатной платы, в виде единого модуля размерами примерно 1х1х2см


Source(s): ИК локатор Робоклуба


Работа локатора

Локатор работает следующим образом: контроллер включает ИК-излучатель LED1 несколько раз с частотой около 36кГц, затем "смотрит", есть ли сигнал от ИК-приемника IF1 и если сигнал есть - зажигает индикатор LED2. Затем контроллер "ждет" несколько миллисекунд, после чего посылает следующую пачку ИК-импульсов, и так далее.

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

  • если посылаемые пачки импульсов "не возвращаются" (видны отдельные редкие вспышки индикатора в следствие случайных помех) - препятствие отсутствует;
  • если некоторые из посланных пачек детектируются приемником (частые более или менее регулярные вспышки индикатора) - препятствие *есть, но "далеко";
  • если приемник регистрирует каждую из посланных пачек (индикатор горит непрерывно) - препятствие "близко".


Source(s): ИК локатор Робоклуба


практическая сторона вопроса

Когда пришло время испытаний выяснилось что гибкие рупоры сделанные из картона заклеенного черной изолентой ( от сквозного прохождения ик лучей ) позволяют " выровнять " диаграмму направленности излучателя путем сжатия средней части щели рупора. Сами рупоры напоминаю насадку пылесоса. Один приклеен к другому в глубине, в углу ,находятся ик излучатель, в другом ик приемник соответственно. Внутри рупоры желательно сделать черными, будет меньше отражений, мешающих провести эксперимент и настройку. Таким образом сжав рупор посередине добился прохождения меньшей мощности ик излучения в центре дн , т.о мощность оказалась распределена относительно равномерно по сектору который охватывает излучатель ( именно излучатель, потому как рупор делался 90 градусов, а реально получился обзор около 70-80 градусов ). Разговор о диаграмме направленности подразумевал горизонтальную плоскость.


Source(s): ИК локатор Робоклуба


Регулировка и настройка

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

Если не касаться вопроса организации потока ИК-лючей и их приема (использования различных тубусов, линз и пр., взаимного расположения излучателя и приемника и т.д.), то по своей схемотехнике чувствительность локатора может регулироваться в довольно широких пределах. Так, в нашем случае зона "близко" может составлять от 5 до 20см, а ширина зоны "далеко" - от пары сантиметров до одного метра и более.

Иметь большую зону "далеко", в принципе, выгодно, поскольку частота импульсов индикатора здесь примерно пропорциональна расстоянию до препятствия и, таким образом, можно судить не только о наличии препятствия но и дистанции до него. Однако с увеличением этой зоны (через повышение общей чувствительности локатора) усиливается влияние помех, а также проявляется отражение сигнала не только от данного препятствия, но и прочих "подсвеченных" объектов. Для большинства приложений оказывается удобным, если локатор обнаруживает препятствие в 30-50см и считает, что препятствие "близко", когда оно находится в 10-15см от него.

Чувствительность локатора зависит от многих факторов и, соответственно, их можно в той или иной степени использовать для ее настройки.

Прежде всего, чувствительность локатора зависит от типа ИК-излучателя и тока через него. Ток, текущий через излучатель, определяется параметрами транзистора V1 и сопротивлением резистора R1. Таким образом, меняя сопротивление резистора можно менять и чувствительность локатора. В принципе, поставив последовательно с резистором R1 дополнительный подстроечный резистор, можно использовать его для регулирования чувствительности.

Если напряжение в цепи R1 - V1 - LED1 не стабилизируется специально (как в данной схеме), то ток через излучатель будет зависеть от напряжения питания схемы, причем сильно. Так, изменение напряжения питания на 0.1В дает изменение дальности обнаружения препятствия на 5 - 7см. Поэтому в "ответственных" случаях следует принимать специальные меры для стабилизации напряжения всей схемы, либо излучателя отдельно.

Однако наиболее удобный способ "зарезать" излишнюю чувствительность - изменить частоту несущей сигнала ИК-излучателя, поскольку, как видно из графика


Source(s): ИК локатор Робоклуба


Изображение:ir_locator_02.jpg

чувствительность ИК-приемника в сильнейшей степени от нее зависит.

Частота сигнала ИК-излучателя задается программно. Период сигнала складывается из длительности ипульса и длительности паузы между импульсами. Длительность импульса задается величиной переменной TIME1, а длительность паузы - переменной TIME2; соответственно, меняя эти значения (одновременно или независимо) можно настроить оптимальную для данного приложения чувствительность локатора.

Значения перменных TIME1, TIME2 и TIME3 в приводимом тексте программы даны для контроллера ATtiny12V с "заводскими" установками,
т.е. для тактовой частоты 1.2МГц; при другой тактовой частоте значения TIME1, TIME2 и TIME3 должны быть скорректированы.


Source(s): ИК локатор Робоклуба


Программа

;********************************************************************
;* ИК-локатор: ИК-светодиод на PB4 дает пачки импульсов с частотой
;* около 36кГц, а TSOP1736 на PB3 их отслеживает
;*                                       
;* MCU: ATtiny12@1MHz    (c) RoboClub 2003                   
;********************************************************************
 
 
.include "tn12def.inc"
 
    rjmp    RESET        ;reset handle
 
 
;* Объявление переменных
 
    .def  t1      = r1    ;счетчик для "длинных" задержек
    .def  temp    = r19    ;счетчик времени задержки
    .def  count   = r20    ;счетчик числа импульсов в пачке
 
;* Определения
 
    .equ  led    = 0    ;LED на PB0
    .equ  tsop   = 3    ;TSOP на PB3
    .equ  ir_led = 4    ;IR LED на PB4
 
;* Начало кода
 
RESET:
    sbi   DDRB, led        ;подключаем LED на выход PORTB линия 5
    sbi   DDRB, ir_led    ;подключаем IR LED на выход PORTB линия 3
        
    cbi   DDRB, tsop    ;подключаем TSOP на вход PORTB линия 2 
    sbi   PORTB,tsop    ;включаем "подтяжку"
 
;* Задание значений
 
    .equ  TIME1   =  4     ;длительность импульса
    .equ  TIME2   =  5     ;задержка между импульсами
    .equ  TIME3   =  20    ;задержка между пачками импульсов
    .equ  COUNT   =  10    ;число импульсов в пачке
 
 
; Главный цикл программы 
; ----------------------
start: 
        ldi       count, COUNT    ;загружаем в счетчик число импульсов в пачке
 
; цикл выдачи пачки импульсов
flash:     
        cbi       PORTB, ir_led    ;зажигаем IR LED
 
        ldi       temp, TIME1    ;загружаем в temp длительность импульса           
Delay1: dec       temp            ;уменьшаем на единицу temp, пока
        brne      Delay1            ;  не станет равным 0
 
        sbi       PORTB, ir_led    ;гасим IR LED 
        
        ldi       temp, TIME2    ;загружаем в temp длительность паузы между импульсами
Delay2: dec       temp            ;уменьшаем на единицу temp, пока 
        brne      Delay2        ;  не станет равным 0
 
        
        dec       count        ;уменьшаем на 1 счетчик числа импульсов
        brne      flash        ;если не 0, то посылаем следующий импульс
 
;когла пачка импульсов выдана - проверяем, есть ли сигнал от TSOP
    
        sbis    PINB, tsop    ;если уровень на выходе TSOP низкий (т.е. сигнал есть)
        rjmp    ledon        ;то идем зажигать LED
        cbi    PORTB, led    ;иначе гасим LED     
        rjmp    wait_next    ;и переходим к ожиданию следующей пачки
 
ledon:        sbi    PORTB, led    ;гасим LED 
 
;задержка перед следующей пачкой импульсов
wait_next:    
        
        clr    t1        ;сбрасываем t1 (т.е. t1=0 или, что тоже t1=256)
        ldi       temp, TIME3    ;устанавливаем число задержек
 
Delay3:     dec       t1        ;задержка по счетчику t1 от 256 до 0
        brne      Delay3        ;   т.е. 256*3 тактов 
        dec    temp        ;повторяем TIME3 раз задержку по t1
        brne      Delay3        ;   т.е. всего  (TIME3*256*3 + TIME3*3) тактов
 
        rjmp      start        ;переходим к началу главного цикла



Source(s): ИК локатор Робоклуба