16. KitaPro - 18 Октября, 2011 - 19:36:47 - перейти к сообщению
А у Вас есть схема? не совсем понятно. 2 ик светодиода не описываются в void setup? они горят постоянно?
17. nestandart - 18 Октября, 2011 - 20:25:24 - перейти к сообщению
Цитата:
А у Вас есть схема?
Схему рисовать не на чем.
Цитата:
они горят постоянно?
Они грят постоянно с частотой 36КГЦ.
Цитата:
2 ик светодиода не описываются в void setup?
Ставте один светодиод , просто у меня они запаралелены.
Для понимания пока не ставьте транзистор .
Частота выдается на пин 9 , к этому пину подключаете ИК светодиод
(через резистор 100-220 ОМ).
Все , ИК светодиод у вас мерцает с частотой 36КГц.
Далее ловите это дело опросм пина к кторому подключен TSOP.
Если отраженный сигнал поступает на TSOP , то на этом пине будет лог 0 ,
если нет - лог 1.
Дальность такого датчика составит 5-10 см.
Чтобы ее увеличить уменьшите номинал резистора на светодиоде.
18. KitaPro - 18 Октября, 2011 - 20:31:44 - перейти к сообщению
Как-то очень простенько. Это хорошо для меня. А если использовать например myTsoper, так код будет такой же? только частота там не программно задается?
19. nestandart - 18 Октября, 2011 - 20:43:36 - перейти к сообщению
Цитата:
только частота там не программно задается?
Именно так , частоту там задает микросхема.
И декодирует частоту в прямой сигнал другая микросхема.
Цитата:
А если использовать например myTsoper, так код будет такой же?
Не имеет смысла городить myTsoper если вы используете МК.
А код там будет еще проще , частоту там генерировать не нужно , нужно только принять
сигнал с TSOPа.
Цитата:
Как-то очень простенько.
Это самый простой пример .
Не надейтесь что дальше будет так же просто.
Мой датчик реагирует на энергосберегающие лампы и яркое солнце.
Сейчас я работаю над модуляцией ИК частоты (наложение одной частоты на другую).
Кстати этим же датчиком можно принимать сигналы с ИК ДУ пультов , только программа там значительно сложнее.
Вот вам для ознакомления .
Управление тем же роботом с ИК ДУ пульта.
(вперед , назад , влево , вправо)
CODE:
unsigned long val=0;
unsigned long val2=0;
unsigned long val3=0;
unsigned long val4=0;
unsigned long val5=0;
unsigned long val6=0;
unsigned long val7=0;
unsigned long val8=0;
#include <Servo.h>
Servo myservo;
void setup()
{
pinMode(19,INPUT);
pinMode(1,INPUT);
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
pinMode(11,OUTPUT);
pinMode(12,OUTPUT);
pinMode(13,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
pinMode(8,OUTPUT);
myservo.attach(5);
}
void loop()
{
if(pulseIn(2,LOW)<1)
{
digitalWrite(12,LOW);
digitalWrite(11,LOW);
digitalWrite(10,LOW);
digitalWrite(13,LOW);
}
val=pulseIn(2,LOW);
val=(val/1000);
if(val==2)
{
val2=pulseIn(2,LOW);
val3=pulseIn(2,LOW);
val4=pulseIn(2,LOW);
val5=pulseIn(2,LOW);
val6=pulseIn(2,LOW);
val7=pulseIn(2,LOW);
val8=pulseIn(2,LOW);
if((val2/1000)==0&&(val3/1000)==0&&(val4/1000)==1&&(val5/1000)==0&&
(val6/1000)==1&&(val7/1000)==1&&(val8/1000)==1)
{
digitalWrite(13,HIGH);//вперд
digitalWrite(12,LOW);
digitalWrite(11,LOW);
digitalWrite(10,HIGH);
}
if((val2/1000)==0&&(val3/1000)==0&&(val4/1000)==1&&
(val5/1000)==0&&(val6/1000)==1&&(val7/1000)==1&&(val8/1000)==0)
{
digitalWrite(13,LOW);//вправо
digitalWrite(12,HIGH);
digitalWrite(11,LOW);
digitalWrite(10,HIGH);
}
if((val2/1000)==1&&(val3/1000)==1&&(val4/1000)==0&&
(val5/1000)==0&&(val6/1000)==1&&(val7/1000)==1&&(val8/1000)==0)
{
digitalWrite(13,HIGH);//лево
digitalWrite(12,LOW);
digitalWrite(11,HIGH);
digitalWrite(10,LOW);
}
if((val2/1000)==1&&(val3/1000)==0&&(val4/1000)==1&&
(val5/1000)==0&&(val6/1000)==1&&(val7/1000)==1&&(val8/1000)==1)
{
digitalWrite(13,LOW);//назад
digitalWrite(12,HIGH);
digitalWrite(11,HIGH);
digitalWrite(10,LOW);
}
}
}
unsigned long val=0;
unsigned long val2=0;
unsigned long val3=0;
unsigned long val4=0;
unsigned long val5=0;
unsigned long val6=0;
unsigned long val7=0;
unsigned long val8=0;
#include <Servo.h>
Servo myservo;
void setup()
{
pinMode(19,INPUT);
pinMode(1,INPUT);
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
pinMode(11,OUTPUT);
pinMode(12,OUTPUT);
pinMode(13,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
pinMode(8,OUTPUT);
myservo.attach(5);
}
void loop()
{
if(pulseIn(2,LOW)<1)
{
digitalWrite(12,LOW);
digitalWrite(11,LOW);
digitalWrite(10,LOW);
digitalWrite(13,LOW);
}
val=pulseIn(2,LOW);
val=(val/1000);
if(val==2)
{
val2=pulseIn(2,LOW);
val3=pulseIn(2,LOW);
val4=pulseIn(2,LOW);
val5=pulseIn(2,LOW);
val6=pulseIn(2,LOW);
val7=pulseIn(2,LOW);
val8=pulseIn(2,LOW);
if((val2/1000)==0&&(val3/1000)==0&&(val4/1000)==1&&(val5/1000)==0&&
(val6/1000)==1&&(val7/1000)==1&&(val8/1000)==1)
{
digitalWrite(13,HIGH);//вперд
digitalWrite(12,LOW);
digitalWrite(11,LOW);
digitalWrite(10,HIGH);
}
if((val2/1000)==0&&(val3/1000)==0&&(val4/1000)==1&&
(val5/1000)==0&&(val6/1000)==1&&(val7/1000)==1&&(val8/1000)==0)
{
digitalWrite(13,LOW);//вправо
digitalWrite(12,HIGH);
digitalWrite(11,LOW);
digitalWrite(10,HIGH);
}
if((val2/1000)==1&&(val3/1000)==1&&(val4/1000)==0&&
(val5/1000)==0&&(val6/1000)==1&&(val7/1000)==1&&(val8/1000)==0)
{
digitalWrite(13,HIGH);//лево
digitalWrite(12,LOW);
digitalWrite(11,HIGH);
digitalWrite(10,LOW);
}
if((val2/1000)==1&&(val3/1000)==0&&(val4/1000)==1&&
(val5/1000)==0&&(val6/1000)==1&&(val7/1000)==1&&(val8/1000)==1)
{
digitalWrite(13,LOW);//назад
digitalWrite(12,HIGH);
digitalWrite(11,HIGH);
digitalWrite(10,LOW);
}
}
}
20. KitaPro - 18 Октября, 2011 - 21:06:46 - перейти к сообщению
Так. Тогда Tsoper отпадает. А у Вас сделан бампер примерно по такой схеме?
Там еще есть модуль аппаратного генератора, стоит его городить или пока можно обойтись програмным генерированием?
что за другая микросхема?
Там еще есть модуль аппаратного генератора, стоит его городить или пока можно обойтись програмным генерированием? Цитата:
И декодирует частоту в прямой сигнал другая микросхема.
что за другая микросхема?
21. nestandart - 18 Октября, 2011 - 21:15:29 - перейти к сообщению
Цитата:
А у Вас сделан бампер примерно по такой схеме?
Нет , у меня гораздо проще.
Половина этой схемы это это защита TSOPа по питанию и сглаживание ложных сигналов.
Уменя этого нет (хотя наверно должно быть).
Вторая половина почти как у меня
(только там добавлен переменный резистор для регулировки дальности обнаружения
и кондер на питании).
Светодиоды включаются через мосфет .
Можете собрать и этот датчик , он тоже должен работать.
Цитата:
что за другая микросхема?
К155АГ3
На ней собран одновибратор (выпрямитель импульсов).
(Добавление)
Цитата:
Там еще есть модуль аппаратного генератора, стоит его городить или пока можно обойтись програмным генерированием?
Повторяю еще раз .
Если у вас есть возможность генерировать частоту програмно , то зачем делать
то же самое на отдельной микросхеме ?
22. cjA - 18 Октября, 2011 - 21:28:55 - перейти к сообщению
nestandart
затем что пока мы генерим частоту программно- мы не можем отслеживать сигнал от бампера. А если от него пришел сигнал по прерыванию- мы не можем точно знать, что это за сигнал, наш или нет, наш то програмный генератор в это время стоял? Тут нужно какую то цепь задержки от бампера придумать. Чтобы те 13 импульсов декодированные тсопом- точно были _нашими_ 13 импульсами сгенерированными МК.
В голову пока приходит обычная RC цепь задержки, может этого и достаточно?
затем что пока мы генерим частоту программно- мы не можем отслеживать сигнал от бампера. А если от него пришел сигнал по прерыванию- мы не можем точно знать, что это за сигнал, наш или нет, наш то програмный генератор в это время стоял? Тут нужно какую то цепь задержки от бампера придумать. Чтобы те 13 импульсов декодированные тсопом- точно были _нашими_ 13 импульсами сгенерированными МК.
В голову пока приходит обычная RC цепь задержки, может этого и достаточно?
23. KitaPro - 18 Октября, 2011 - 21:38:20 - перейти к сообщению
А для чего К155АГ3 в бампере. Чот я там его не вижу
24. nestandart - 18 Октября, 2011 - 21:38:33 - перейти к сообщению
Цитата:
затем что пока мы генерим частоту программно- мы не можем отслеживать сигнал от бампера.
1. Это почему ?
2. Это и не нужно . TSOP опрашивается в строго определенные моменты программы.
А прерывание там ... несколько для другой цели.
Цитата:
мы не можем точно знать, что это за сигнал, наш или нет, наш то програмный генератор в это время стоял?
Я собираюсь гнать частотные импульсы определенной длинны.
Поймали импульс - измерили длинну - если совпала с эталонной то импальс свой , если нет -чужой (врядли что то внешнее будет намерено гнать импульсы той же длинны на той же несущей частоте).
Пульт то , вроде , нормально реализован .
На незапрограмированые кнопки пульта робот не реагирует.
(Добавление)
Цитата:
А для чего К155АГ3 в бампере. Чот я там его не вижу
Вы про какой бампер сейчас говорите ?
Если myTSOPer , то она там есть.
25. cjA - 18 Октября, 2011 - 21:57:39 - перейти к сообщению
секунду- тсоп сидит на одном МК, а генератор - на другом? ну тогда и не вопрос.
26. KitaPro - 18 Октября, 2011 - 21:58:42 - перейти к сообщению
А все понял.
27. cjA - 18 Октября, 2011 - 22:00:21 - перейти к сообщению
но это не так, правильно? По сообщению от 17.10.2011 20:40
28. nestandart - 18 Октября, 2011 - 22:05:10 - перейти к сообщению
Цитата:
секунду- тсоп сидит на одном МК, а генератор - на другом? ну тогда и не вопрос
Нет .
Прием и выдачу частоты осуществляет один МК.
29. cjA - 19 Октября, 2011 - 01:18:35 - перейти к сообщению
то есть _не_одновременно_!
вот об том и речь.
Когда опрашиваем тсоп- наш генератор стоит.
Когда работает генератор- мы тсоп не опрашиваем, некогда.
вот об том и речь.
Когда опрашиваем тсоп- наш генератор стоит.
Когда работает генератор- мы тсоп не опрашиваем, некогда.
30. nestandart - 19 Октября, 2011 - 10:31:29 - перейти к сообщению
Цитата:
то есть _не_одновременно_!
Да бросте вы , там временные задержки крайне малы .