Технический форум по робототехнике.
=DeaD= » 05 апр 2009, 00:15
Собственно полуэконом, но в любом случае он будет грузить процессор МК при работе, зато экстремально дешевый будет и можно будет поставлять в варианте для самостоятельной сборки, причем скорее всего наборами по 2-4-6 штук.
Добавлено спустя 26 секунд:Габариты - 23х15мм
Добавлено спустя 1 час 30 минут 10 секунд:Подумал немного и убрал слово "Эконом"

просто ИК-бампер
Так как TSOP-1736 работает на длине волны 940нМ, то и ИК-диоды пока попробуем юзать L-7113F3BT, а вообще нужно любые ИК-диоды с буковками F3 - это с нужной длиной волны 940нМ, например, L-34F3C или L-53F3C еще есть.
PS: Заметка для себя - Диоды tsal-ы с углом рассеивания:
5100 - 10гр
4400 - 25гр
6200 - 17гр
- Вложения
-
OR-IRBUMP-X-brd.pdf
- (14.64 КиБ) Скачиваний: 103
-
OR-IRBUMP-X-sch.pdf
- (19.96 КиБ) Скачиваний: 119
-
OR-IRBUMP-X.zip
- (60.17 КиБ) Скачиваний: 33
Duhas » 05 апр 2009, 14:40
а может сделать плату по дне эконом а там методом запайки разных наборов деталюшек менять ?!
=DeaD= » 05 апр 2009, 15:09
Duhas писал(а):а может сделать плату по дне эконом а там методом запайки разных наборов деталюшек менять ?!
А чего конкретно тут хочется поменять?
Duhas » 05 апр 2009, 16:59
добавить туда или тиню какую мелкую или 555 таймер....и чтоб была возможность допустим на 1 впаять тиню и брать с нее такт на остальные...
=DeaD= » 05 апр 2009, 17:23
так размер мгновенно увеличится самого бампера и во всех случаях кроме 1 это будет зазря, думаю лучше потом отдельную платку генератора сделать, а пока можно сделать чтобы на 1 порт выдать из МК шим нужной частоты и просто его транслировать по всем.
blindman » 10 апр 2009, 09:18
Не понял, а зачем 2 светодиода раздельно управляются?
=DeaD= » 10 апр 2009, 11:57
Чтобы если что можно было попробовать определиться где препятствие - слева или справа, экономия типа

blindman » 10 апр 2009, 11:59
Ну я так и подумал. Но есть ли смысл? Уж слишком близко диоды к ТСОПу и друг к другу.
=DeaD= » 10 апр 2009, 12:09
Дык у диодов одевается юбочка и получается "сектор обстрела" порядка 60 градусов, а дальше диоды разводятся в разные стороны, чтобы их "сектора обстрела" не пересекались почти, тогда можем на 1 датчике сканировать 2 зоны.
=DeaD= » 11 апр 2009, 13:59
Рабочая версия:
- Вложения
-
OR-IRBUMP.zip
- (59.62 КиБ) Скачиваний: 31
-
OR-IRBUMP-brd.pdf
- (19.06 КиБ) Скачиваний: 35
-
OR-IRBUMP-sch.pdf
- (22.72 КиБ) Скачиваний: 65
=DeaD= » 02 май 2009, 23:03
Залип с бампером

((
Вот в этом коде (этот код уже устарел, актуальный см. ниже):
- Код: Выделить всё • Развернуть
#include "defines.h"
#include <ctype.h>
#include <stdint.h>
#include <stdio.h>
#include <string.h>
#include <avr/interrupt.h>
//#include <avr/pgmspace.h>
#include <util/delay.h>
#include "uart.h"
#include "i2c.h"
static void ioinit(void)
{
uart_init();
i2cInit();
};
FILE uart_str = FDEV_SETUP_STREAM(uart_putchar, uart_getchar, _FDEV_SETUP_RW);
int main(void)
{
MCUCSR |= 0x80; //Switch off JTAG, free port PC5
MCUCSR |= 0x80;
int time=(1000000/36000);
ioinit();
stdout = stdin = &uart_str;
printf("Ready B!\n");
DDRA=0x01;
while(1){
uint16_t x;
for(x=0; x<20; x++){
PORTA=0x01;
_delay_us(time >> 1);
PORTA=0x00;
_delay_us(time >> 1);
};
_delay_us(time*6);
uint8_t a=inb(PINA) & 0x02;
printf("%d ",a);
_delay_ms(50);
};
return 0;
}
Если в конце убрать задержку 50мс то всё работает, т.е. если проверка бампера идёт постоянно без остановки - тогда всё работает, но стоит вызывать проверку бампера 20 раз в секунду и всё, нифига не работает

((
Добавлено спустя 14 минут 42 секунды:При чем начинает нормально работать не сразу. Такое ощущение что внутри какой-то кондёр при приёме импульсов заряжается и потом нормально работает...
Добавлено спустя 1 минуту 11 секунд:Поправка, если долго закрывать бампер то оно тоже через некоторое время будет считать что препятствия нет

=DeaD= » 03 май 2009, 11:02
У кого протеус и WinAVR под рукой? Я уже нещадно глючу - у меня протеус 7.4 SP3 даже не хочет нормально УАРТ показывать

- Вложения
-
or-gate-irbumper-test-a01.zip
- (45.61 КиБ) Скачиваний: 18
-
IR-bumper-proteus-model.zip
- (14.4 КиБ) Скачиваний: 16
MiBBiM » 03 май 2009, 12:03
"Рабочий" сигнал должен отвечать следующим требованиям:
- быть возможно ближе к частоте несущей для данной модели (например, 36 кГц для TSOP1736)
- в пачке должно быть 10 или более импульсов
- за пачкой от 10 до 70 импульсов должна следовать пауза длительностью не менее 14 импульсов
а у вас задержка меньше 14ти импульсов.
Добавлено спустя 21 минуту 24 секунды:кстати, зачем каждый импульс вычислять значение задержки?
лучше
- Код: Выделить всё • Развернуть
int time=(1000000/36000/2);
...
for(x=0; x<20; x++){
PORTA=0x01;
_delay_us(time);
PORTA=0x00;
_delay_us(time);
};
_delay_us(time*28);
uint8_t a=inb(PINA) & 0x02;
- Код: Выделить всё • Развернуть
;********************************************************************
;* ИК-локатор: ИК-светодиод на 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 ;переходим к началу главного цикла
=DeaD= » 03 май 2009, 12:11
MiBBiM писал(а):"Рабочий" сигнал должен отвечать следующим требованиям:
- быть возможно ближе к частоте несущей для данной модели (например, 36 кГц для TSOP1736)
- в пачке должно быть 10 или более импульсов
- за пачкой от 10 до 70 импульсов должна следовать пауза длительностью не менее 14 импульсов
а у вас задержка меньше 14ти импульсов.
В последней версии код выглядит уже как:
- Код: Выделить всё • Развернуть
int time=33;
printf("-1-2-3- \n");
DDRA=0x01;
while(1){
uint16_t x;
for(x=0; x<36; x++){
PORTA=0x01;
_delay_loop_1(time);
PORTA=0x00;
_delay_loop_1(time);
};
uint8_t a=inb(PINA) & 0x02;
printf("%d\n",a);
//_delay_us(time*50);
_delay_ms(100);
};
MiBBiM » 03 май 2009, 13:25
как вариант, завести на светодиод сигнал о приходе пачки. по величине интенсивности его свечения можно будет приблизительно определить процент пришедших пачек.
кста, в робоклубе задержка между импульсами чуть больше чем длительность импульса(свечения ик диода). мб это важно