roboforum.ru

Технический форум по робототехнике.

ИК датчик

Re: ИК датчик

EdGull » 26 янв 2009, 20:36

красного который на PORTA.7 и зеленого на PORTA.5

Re: ИК датчик

Хуан Тортик » 26 янв 2009, 20:39

Вмоем предыдущем посте:

Хуан Тортик писал(а):
Зеленый: горит все время, пока работает контроллер
Красный(сигнализирует о препятствии): зажигается при появлении сигнала от TSOPа, тушится при его исчезновении

Re: ИК датчик

EdGull » 26 янв 2009, 20:48

а как ты думаешь, на какое время появляется сигнал от TSOPа? :wink:

Re: ИК датчик

Хуан Тортик » 26 янв 2009, 20:59

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

Если бы время его свечения было настолько маленькое, что его нельзя было бы увидеть, то он бы вообще никогда не работал. А у меня проблема в том, что он загорается тоько при резком появлении препятствия, а если медленно подносить, то срабатывает только на 2-3 см
На сигнал от TV пульта реагирует вполне сносно

Re: ИК датчик

EdGull » 26 янв 2009, 21:02

1. поставь человеческие задерки для светодиодов.
2. отклалибруй свои 14 микросекунд, реально там не 14 будет.

Re: ИК датчик

Vooon » 26 янв 2009, 21:05

Ваш код страшен, хоть причешу немного.

Код: Выделить всёРазвернуть
// vim:set ts=4 sw=4 et:

#include <io.h> // -> <tiny26.h>
#include <delay.h>

int main( void )
{
    //конфигурация портов
    DDRA  = 0b11101111;
    DDRB  = 0b11111111;
    PORTA = 0b11011111;
    PORTB = 0b00000000;

    while( 1 ) 
    {
        //цикл подачи пачки импульсов ик светодиодом
        for( char i = 0; i < 30; i++ )
        {
            delay_us(14);   // задержка 14 микросекунд, чтобы получилась частота примерно 36 кГц
            PORTB ^= 0x01;  // начало импульса
        }

        PORTB &= ~0x01;

        if( !PINA.4 )      // проверка: если на ноге PA4 (к ней TSOP подключен) ноль (есть сигнал)
            PORTA.7 = 0;    // то зажигаем красный светик
        else                // если нет сигнала
            PORTA.7 = 1;    // то красный светик не зажигаем/тушим после последнего включения

        delay_us( 1000 );      //пауза между пачками импульсов
    }

    return 0;
}


Поправил код. <Сергей>
* Точка с запятой не нужно ставить после блоков
* В цикле for нужно обнулять переменную вначале
* и просто допричесал

Re: ИК датчик

bersekter » 03 фев 2009, 00:24

Ммм... простите чайника за вопрос)))

Использую плату Arduino Duemilanove, с атмегой 168.
1) Использую тзоп 1756. Итак. Там ракладка ножек какая? как привидена здесь?
http://parts.roboclub.ru/index.shtml?ik

И тоже вопрос - сколько питания ему надо? я даю 3 вольта. Могу пять. Впрочем всё равно не фурычит))

2) использую диод - l-53f3bt (диаметр 5мм, волна 940 нм, 30 мВт). Почему то фотки его врут - на фотах у него три ножки, но это очевидный брет - диод с тремя ножками)) Так вот, у него очевидно их две. Одну сую в землю, вторую в диджитал пин. Ну, напрямую подключаю к атмеге. Код вроде написал верный, он написан в компиляторе для платы ардуино, по сути обычный си. Так вот, у меня там диод на 13-м разъёме должен гаснуть если есть препятствие. Он вообще постоянно горит.

Я сомневаюсь, что код не верен, но.. в чём тогда проблема???

Добавлено спустя 31 секунду:
Код: Выделить всёРазвернуть
int tsop = 8; //tsop на разъёме 8

int irLed = 11;  //ик-диод на разъёме 11

int Led = 13; //обычный диод на разъёме 13

int i, del=4, pause=14, num=10, val=0; /*переменные для: счётчик, время импульса, количество импульсов между пачками, количество импульсов в пачке, переменная для хранения сигнала с тсопа*/

void setup() //установка режима работы разъёмов.
{
  pinMode (irLed, OUTPUT); // разъём 11 на вывод
  pinMode(Led, OUTPUT); //разъём 13 на вывод
  pinMode(tsop, INPUT); // разъём 8 на ввод
}

void loop() //постоянно повторяющийся код
{
 
  for(i=0; i<num; i++) //цикл пофторяеца столько раз, сколько нужно импульсов
  {
    digitalWrite(irLed, HIGH); /зажигаем ик-диод/
    delay(del); //ждём 0,004 секунды
    digitalWrite(irLed, LOW); //гасим ик-диод
    delay(del+1); // ждём 0,005 секунды
  }

  val=digitalRead(tsop); //считываем значение сигнала тсопа.
 
  if (val==HIGH)
  {
    digitalWrite(Led, HIGH); //если сигнал высокий - то есть припятствия нет, то зажигаем диод
  }
  else
  {
    digitalWrite(Led, LOW); //если сигнал низкий - то есть препятствие есть, гасим диод
  }
 
  delay(pause*del); //ждём столько времени, сколько займёт пауза между пачками.
}
Последний раз редактировалось bersekter 03 фев 2009, 00:35, всего редактировалось 1 раз.

Re: ИК датчик

Myp » 03 фев 2009, 00:34

delay(del+1);

вот этой строчкой ты что делаешь ?


и вобще давай в студию выкладывай все твои математические расчёты времени работы ИК диода, какую частоту по твоему он выдаёт и сколько времени пауза

тсоп 1756 это значит частота должна быть 56 кГц
давай пиши как ты считал время которое будет светик гореть и время скока ему тухнуть

вместо ИК светика пробовал обычный светодиод подключать? он у тебя должен моргать весело)

Re: ИК датчик

bersekter » 03 фев 2009, 00:38

Простите, я код с пояснениями сделал сейчас)))

Так я не считал, по причине того, что в статье, которой я руководствовался не указано...

Плюс, мне потом поясняли, что пофиг на частоту, важна длинна волны.

Просвятите плиз))) :pardon: Я просто полный профан в схемотехнике)

Добавлено спустя 34 секунды:
Подключал) Мигает))

Re: ИК датчик

Myp » 03 фев 2009, 00:58

либо ты неправильно понял либо тот кто объяснял сам не понимает
тебе подойдёт любой ИК светодиод, плевать какой длинны волны лишь бы ИК
для тсопа твоего частота должна быть 56 кГц и не иначе

секунду делим на 56000 колебаний и получаем время 1 импульса = 0,0000178 секунды
делим ещё пополам и получаем время 0.0000089 секунды это время вкл состояния или выключенного
так как импульс состоит из времени включенного и выключенного
тоесть в твоей программе del будет равен.... примерно 0.01 а не 4


вот
хотя может я гдето с нулями напутал
спать охото

Re: ИК датчик

bersekter » 03 фев 2009, 02:09

Спасибо огромное))) А в остальном - всё верно??? Ну остальные пункты..

Добавлено спустя 35 минут 47 секунд:
Хотя всё равно не пашет(( каие ещё причины могут быть?

Добавлено спустя 16 минут 19 секунд:
И ещё вопрос - какое напряжение надо для ик - диода? а то может быть я его просто сжёг)

Re: ИК датчик

FireFly » 03 фев 2009, 02:19

светодиоду важно не напряжение а ток (и 3 и 5 вольт подходят), смотри в даташите какой именно светику ток нужен, и подключай его не на прямую к выводу конротроллера, а через резистор иначе точно запалишь нафиг.

Re: ИК датчик

bersekter » 03 фев 2009, 02:21

Мощность излучения P,мВт 30
Прямое напряжение,В 1.2
при токе Iпр.,мА 20
Длина волны,нм 940
Ширина спектра излучения,нм 50
Видимый телесный угол,град 30
Максимальное обратное напряжение,В 5
Максимальный прямой ток,мА 50
Максимальный импульсный прямой ток,мА 1200
Способ монтажа в отверстие
Рабочая температура,С -40...85


Как я понимаю это 20 милиампер. Ииии... как расчитать нужный резистор???

Re: ИК датчик

FireFly » 03 фев 2009, 02:52

bersekter писал(а):Как я понимаю это 20 милиампер. Ииии... как расчитать нужный резистор???


а закон ома как же? :wink:

Re: ИК датчик

bersekter » 03 фев 2009, 02:57

Аааа, точно)) то есть... 250 ом?!!! (если питать через 5 в???)

Тогда сразу вопрос - теперь как узнать, сжёг я его или нет)))


Rambler\'s Top100 Mail.ru counter