Вторник, 23.04.2024, 10:33
| RSS
[SEARCH_TITLE]
[SEARCH_FORM]
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Архив - только для чтения
Форум » Мастерская » Новичкам » Ик - бампер с робоклуба
Ик - бампер с робоклуба
SpaceДата: Вторник, 29.01.2008, 20:55 | Сообщение # 1








Зарегистрирован 25.12.2007
Группа: Администраторы
Сообщений: 1103
Статус: Offline
Вот несколько схем ик и прошивка(hex) в архиве

Прикрепления: 0287739.gif (6.9 Kb) · 9867643.gif (4.7 Kb) · 5948630.zip (15.2 Kb)
 
SpaceДата: Пятница, 01.02.2008, 20:05 | Сообщение # 2








Зарегистрирован 25.12.2007
Группа: Администраторы
Сообщений: 1103
Статус: Offline

Все детали подписанны на разведённой плате(навидите курсор на деталь)
Прикрепления: 2841675.jpg (20.8 Kb) · 0173763.rar (28.9 Kb)
 
SpaceДата: Воскресенье, 03.02.2008, 17:18 | Сообщение # 3








Зарегистрирован 25.12.2007
Группа: Администраторы
Сообщений: 1103
Статус: Offline
Принцип действия

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Программа

;********************************************************************
;* ИК-локатор: ИК-светодиод на PB4 дает пачки импульсов с частотой
;* около 36кГц, а TSOP1736 на PB3 их отслеживает
;*
;* MCU: ATtiny12@1MHz © 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 ;переходим к началу главного цикла

Прикрепления: 5757500.jpg (10.4 Kb) · 7688105.jpg (17.4 Kb) · 3055633.gif (5.5 Kb)
 
ShyrikДата: Понедельник, 04.02.2008, 22:58 | Сообщение # 4








Зарегистрирован 18.01.2008
Группа: Администраторы
Сообщений: 47
Город: Тула
Статус: Offline
Если посидеть и подумать, то можно разобраться cry
 
SpaceДата: Воскресенье, 17.02.2008, 16:58 | Сообщение # 5








Зарегистрирован 25.12.2007
Группа: Администраторы
Сообщений: 1103
Статус: Offline
Quote (Les)
Темная штука cool . Вот только жаль, что нет программы на СИ, так как в асме ничего не понимаю cry

devil devil devil

Нашёл на робофоруме прогу на си biggrin
Должна работать

Code
#include<avr/io.h>
#include<avr/delay.h>
#define time 1.157407407//время задержки
#define F_CPU 4000000UL

int main(void)
{
PORTB = PORTD = 0xFF;
//на РВ3 стоит ИК приемник
DDRB |=_BV(PB4);//ИК светодиод

DDRD |=_BV(PD6);//cветодиод

while(1)
{
int i;
for(i=0;i<10;i++){
_delay_loop_1(time);
PORTB&=~_BV(PB4);//включаем ИК светодиод
_delay_loop_1(time);
PORTB|=_BV(PB4);//выкл Ик светодиод
}

int u;
for(u=0;u<14;u++){

if(bit_is_clear(PINB,PB3)){//если есть сигнал на Ик приемнике
PORTD &=~_BV(PD6);//Включаем светодиод
}else{
PORTD|=_BV(PD6);//если нет сигнала - выключаем

}

}

}
}

Сделал платы 2 для ик-локатора, но пока не собирал
Прикрепления: 1307557.jpg (23.3 Kb)
 
SpaceДата: Воскресенье, 24.02.2008, 14:21 | Сообщение # 6








Зарегистрирован 25.12.2007
Группа: Администраторы
Сообщений: 1103
Статус: Offline
Должен реагировать. Я то же самое пробовал. Всё работало. Только надо настройкой заниматься. Так как у меня он работал через раз sad
 
SpaceДата: Воскресенье, 01.06.2008, 17:52 | Сообщение # 7








Зарегистрирован 25.12.2007
Группа: Администраторы
Сообщений: 1103
Статус: Offline
Там достаточно перегородки между тсопом и ик - диодом. Или термоусадку насадить на ик-диод. Примерно так:
Прикрепления: 4966233.jpg (40.0 Kb)
 
StefanДата: Пятница, 27.03.2009, 00:39 | Сообщение # 8








Язык программированя: Баском. Бейсик
Зарегистрирован 27.03.2009
Группа: Новички
Сообщений: 21
Город: Антрацит
Статус: Offline
Привет. У вас случайно нет прошивки на бампер для тини2313, или хотябы на бейсике для баскома. Буду очень рад если выложите.
Взгляните на моего робота,, что скажите.
Прикрепления: 4147125.jpg (335.1 Kb) · 2033466.jpg (344.9 Kb)


Сообщение отредактировал Stefan - Пятница, 27.03.2009, 00:55
 
Bass85Дата: Пятница, 27.03.2009, 10:54 | Сообщение # 9








Зарегистрирован 12.02.2009
Группа: Опытные
Сообщений: 422
Статус: Offline
А чо там делает 10 реле если я правельно понял? эта штука двигаетса?
 
SpaceДата: Пятница, 27.03.2009, 17:08 | Сообщение # 10








Зарегистрирован 25.12.2007
Группа: Администраторы
Сообщений: 1103
Статус: Offline
Видео на просмотр wink
Вот тебе программа. Только под себя поправь. Автор FireFly
Code
'Пример работы инфракрасного датчика препятствия на основе TSOP2136

$regfile = "m8def.dat" 'используем Mega8
$crystal = 16000000 'частота кварцевого резонатора 16mHz

'Генерация частоты 36kHz
'Настраиваем Timer1

Config Timer1 = Counter , Edge = Rising , Prescale = 8 , Compare A = Toggle

' Расчитываем Compare1a
' тактовая частота (kHz) / частота TSOPa (kHz) / 2 = Compare
' 16000 / 36 / 2 = 222

Compare1a = 222

'PortB.1 - выход сигнала
'PinC.0 - считываем состояние TSOPa
'Portd.0 - сигнальный светодиод

Config Pinb.1 = Output
Config Portd.0 = Output
Config Pinc.0 = Input

Start Timer1
Do
If Pinc.0 = 0 Then
Portd.0 = 1
Else
Portd.0 = 0
End If
Loop

End
 
StefanДата: Пятница, 27.03.2009, 20:16 | Сообщение # 11








Язык программированя: Баском. Бейсик
Зарегистрирован 27.03.2009
Группа: Новички
Сообщений: 21
Город: Антрацит
Статус: Offline
За прогу большое спасибо. Видео выложу завтра.

Кстати вы не делали видеопередатчики.

 
SpaceДата: Пятница, 27.03.2009, 22:18 | Сообщение # 12








Зарегистрирован 25.12.2007
Группа: Администраторы
Сообщений: 1103
Статус: Offline
я нет sad

Добавлено (27.03.2009, 22:18)
---------------------------------------------
и создай по своему роботу отдельную тему. там выложи и видео и фоток по больше. опиши , что он у тебя делает. ну вообщем во всей красе покажи его

 
sashaДата: Воскресенье, 05.04.2009, 19:17 | Сообщение # 13








Язык программированя: Си и баском(учусь)
Зарегистрирован 16.02.2009
Группа: Новички
Сообщений: 371
Город: Актюбинск
Статус: Offline
кто нить делал датчик на ATtiny12? как работает? с какого дистанция ловит?

-=Наша_зависимость_от_роботов_возрастает_с_каждым_днем=-
 
StefanДата: Вторник, 21.04.2009, 15:42 | Сообщение # 14








Язык программированя: Баском. Бейсик
Зарегистрирован 27.03.2009
Группа: Новички
Сообщений: 21
Город: Антрацит
Статус: Offline
Попробавал сделать датчик, но вот проблема он не работает.

Пасматрите где у меня ошибки в прошивке. если они есть.

$regfile = "2313def.dat"
$crystal = 4000000
Config Timer1 = Counter , Edge = Rising , Prescale = 8 , Compare A = Toggle
Compare1a = 55
Config PortD.0 = Output
Config PortD.1 = Output
Config PortD.2 = Input
Start Timer1
Do
If PortD.2 = 0 Then
PortD.1 = 1
Else
PortD.1 = 0
End If
Loop

End

Приёмник на 36 кГц

 
sashaДата: Вторник, 21.04.2009, 16:39 | Сообщение # 15








Язык программированя: Си и баском(учусь)
Зарегистрирован 16.02.2009
Группа: Новички
Сообщений: 371
Город: Актюбинск
Статус: Offline
на каждый контроллере выход ШИМ определенное! например на меге8 выход шим B1 и B2 (для B2 в программе изменения ввести нужно будет) все ИК к B1(как раз это прога который тебе дали для меги8)
там формулы рассчета приведены! будет генерировать это прога на 16MHz кварце! если кварц другой поставишь нужно прогу менят! а то у тя не получиться 36kHz! кажется так!


-=Наша_зависимость_от_роботов_возрастает_с_каждым_днем=-
 
Форум » Мастерская » Новичкам » Ик - бампер с робоклуба
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск: