Разработка Open Robotics: ИК-бампер

Правила форума
Правила раздела OpenRobotics

Разработка Open Robotics: ИК-бампер

Сообщение =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
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Разработка Open Robotics: ИК-бампер

Сообщение Duhas » 05 апр 2009, 14:40

а может сделать плату по дне эконом а там методом запайки разных наборов деталюшек менять ?!
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"
Аватара пользователя
Duhas
 
Сообщения: 6338
Зарегистрирован: 15 сен 2007, 13:03
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович

Re: Разработка Open Robotics: ИК-бампер

Сообщение =DeaD= » 05 апр 2009, 15:09

Duhas писал(а):а может сделать плату по дне эконом а там методом запайки разных наборов деталюшек менять ?!

А чего конкретно тут хочется поменять?
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Разработка Open Robotics: ИК-бампер

Сообщение Duhas » 05 апр 2009, 16:59

добавить туда или тиню какую мелкую или 555 таймер....и чтоб была возможность допустим на 1 впаять тиню и брать с нее такт на остальные...
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"
Аватара пользователя
Duhas
 
Сообщения: 6338
Зарегистрирован: 15 сен 2007, 13:03
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович

Re: Разработка Open Robotics: ИК-бампер

Сообщение =DeaD= » 05 апр 2009, 17:23

так размер мгновенно увеличится самого бампера и во всех случаях кроме 1 это будет зазря, думаю лучше потом отдельную платку генератора сделать, а пока можно сделать чтобы на 1 порт выдать из МК шим нужной частоты и просто его транслировать по всем.
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Разработка Open Robotics: ИК-бампер

Сообщение blindman » 10 апр 2009, 09:18

Не понял, а зачем 2 светодиода раздельно управляются?
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

Re: Разработка Open Robotics: ИК-бампер

Сообщение =DeaD= » 10 апр 2009, 11:57

Чтобы если что можно было попробовать определиться где препятствие - слева или справа, экономия типа :)
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Разработка Open Robotics: ИК-бампер

Сообщение blindman » 10 апр 2009, 11:59

Ну я так и подумал. Но есть ли смысл? Уж слишком близко диоды к ТСОПу и друг к другу.
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

Re: Разработка Open Robotics: ИК-бампер

Сообщение =DeaD= » 10 апр 2009, 12:09

Дык у диодов одевается юбочка и получается "сектор обстрела" порядка 60 градусов, а дальше диоды разводятся в разные стороны, чтобы их "сектора обстрела" не пересекались почти, тогда можем на 1 датчике сканировать 2 зоны.
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Разработка Open Robotics: ИК-бампер

Сообщение =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
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Разработка Open Robotics: ИК-бампер

Сообщение =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 секунд:
Поправка, если долго закрывать бампер то оно тоже через некоторое время будет считать что препятствия нет :(
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Разработка Open Robotics: ИК-бампер

Сообщение =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
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Разработка Open Robotics: ИК-бампер

Сообщение 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        ;переходим к началу главного цикла
Tomorrow will be. Better
Аватара пользователя
MiBBiM
 
Сообщения: 1866
Зарегистрирован: 29 окт 2007, 18:11
Откуда: Пермь
прог. языки: Brainfuck/Basic/Delphi/C++/Lisp/x86asm/JavaScript

Re: Разработка Open Robotics: ИК-бампер

Сообщение =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);
  };
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Разработка Open Robotics: ИК-бампер

Сообщение MiBBiM » 03 май 2009, 13:25

как вариант, завести на светодиод сигнал о приходе пачки. по величине интенсивности его свечения можно будет приблизительно определить процент пришедших пачек.
кста, в робоклубе задержка между импульсами чуть больше чем длительность импульса(свечения ик диода). мб это важно
Tomorrow will be. Better
Аватара пользователя
MiBBiM
 
Сообщения: 1866
Зарегистрирован: 29 окт 2007, 18:11
Откуда: Пермь
прог. языки: Brainfuck/Basic/Delphi/C++/Lisp/x86asm/JavaScript

След.

Вернуться в Разработка модулей

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11