Велоспидометр

next-999
Offline
Зарегистрирован: 30.09.2013

SU-27-16 пишет:

датчик Холла ( ДХ ) - один вывод на GND , второй через резистор на +5 V .....
с общей точки второго вывода ДХ и резистора - на пинАрдуины ( можно применить подтяжку пина - тогда резистор не нужен )

 

как программа называется в которой виртуально можно собирать схемы на ардуино?

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

ты - про одно , Женя про другое :(

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

рисовать схему или виртуально отлаживать ?
первое - fritzing.2012.08.14 - самое простое , является "товарищем" ИДЕ Ардуино
второе - много чего есть.....

да нарисуй на листе и сфотай :) !!!!

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

как программа называется в которой виртуально можно собирать схемы на ардуино?
Протеус
виртуальная трата реального времени отладки.... ( моё мнение )

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

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

нарисуй уже схему. что за картинка? у тебя два датчика холла?

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

jeka_tm пишет:

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

нарисуй уже схему. что за картинка? у тебя два датчика холла?

нужно считать - хватит внутреннего резистора или нет.... я тоже не проверял..... должно хватить !
зачем два ДХ ? 
проще увеличить колво магнитиков на ободе колеса для точности показаний скорости.... ( и сделать балансировку колеса ) :)

next-999
Offline
Зарегистрирован: 30.09.2013

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

подключение ДХ - сотрите и забудьте !!!!!!!!!!!!!!!!!!!!

next-999
Offline
Зарегистрирован: 30.09.2013

насколько я понял моя ошибка в том что я подключил неправильно датчик хола

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

.....пока - первая !!!!
...пока
...а дальше ?

next-999
Offline
Зарегистрирован: 30.09.2013

так??

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

не знаю..... скорее - НЕТ !
тип ДХ ? описание ? фото ?

next-999
Offline
Зарегистрирован: 30.09.2013

SU-27-16 пишет:

не знаю.....
тип ДХ ? описание ? фото ?

 

он стандартного спидометра который был куплен в магазе

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

подключение - #100

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

полярность - под вашу ответственность ( не знаете - спросите ) !!!!!!!!!!!!!!!!!!!!!!!

next-999
Offline
Зарегистрирован: 30.09.2013

SU-27-16 пишет:

полярность - под вашу ответственность ( не знаете - спросите ) !!!!!!!!!!!!!!!!!!!!!!!

 

не проще сразу взять и написать? чем сидеть тут и играть в догадки, жека давно понял что я не сильно шарю и сразу пишет за ранее

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

почему два датчика? разгоовра изначально не было

резистор на +5В и выход датчика. выход датчика соответственно к 2 пину

next-999
Offline
Зарегистрирован: 30.09.2013

jeka_tm пишет:

почему два датчика? разгоовра изначально не было

резистор на +5В и выход датчика. выход датчика соответственно к 2 пину

 

Да я видимо не правильно прочитал изначально) прочитал прирывание на 2 и 3 пин, а не 2 или 3)

спасибо сегодня попробую)

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

оба. но тут используется только 2

подключать так

next-999
Offline
Зарегистрирован: 30.09.2013

jeka_tm пишет:

оба. но тут используется только 2

подключать так

 

а тут тоже к 5-ти вольтам подрубать? может там GND?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

на данной схеме gnd на втором пине датчика. но у данного датчика. так как неизвестен твой датчик, неизвестно где какие пины на твоем датчике

+5 что ты выделил все правильно

next-999
Offline
Зарегистрирован: 30.09.2013

jeka_tm пишет:

на данной схеме gnd на втором пине датчика. но у данного датчика. так как неизвестен твой датчик, неизвестно где какие пины на твоем датчике

+5 что ты выделил все правильно

 

Хорошо) сегодня попоробую)) 

next-999
Offline
Зарегистрирован: 30.09.2013

   

next-999
Offline
Зарегистрирован: 30.09.2013

http://www.youtube.com/watch?v=-64mqhUHkdA

 

в общем все равно сбрасываение идет какойто, видео начинается с момента когда колесо раскучено.

не ту такого что 18,17,16,15,14 и тд

а как то прыгает значение непонятно

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013
#define sim_A    4 
#define sim_B    5 
#define sim_C    6 
#define sim_D    7 
#define sim_E    8 
#define sim_F    9 
#define sim_G    10 
#define sim_H    11
#define dig_1    12 
#define dig_2    13

volatile unsigned long time = 0;          //Время срабатывания первого датчика
volatile unsigned long ntime = 0;         
volatile unsigned long skorost = 0;   
volatile unsigned long okruznost;
const    unsigned long max_delay=2000000; // максимальное время между срабатываниями датчков, 
                                          //после которого считаем что колесо не крутится, мкс

const int radius = 400;                   // радиус в мм
const float pi_n = 3.1415;



void Start(){
  ntime=micros()-time;
  skorost = okruznost*1000/ntime;
  time=micros();
}

  
void setup(){
  pinMode(sim_A, OUTPUT);
  pinMode(sim_B, OUTPUT);
  pinMode(sim_C, OUTPUT);
  pinMode(sim_D, OUTPUT);
  pinMode(sim_E, OUTPUT);
  pinMode(sim_F, OUTPUT);
  pinMode(sim_G, OUTPUT);
  pinMode(sim_H, OUTPUT);
  pinMode(dig_1, OUTPUT);
  pinMode(dig_2, OUTPUT);
  attachInterrupt(0, Start, RISING);     //Прерывание по нарастающему фронту на D2
  okruznost = 2*pi_n*radius;
  skorost = 0;
  time=micros();
  Serial.begin(9600);
}

void loop(){
  if((micros()-time)>max_delay){
    skorost=0;
    time=millis();
  }
  sped(skorost);
  Serial.println(ntime);
}


void sped(int skor){
  int c2=skor/10;                        // вторая цифра скорости 
  int c1=skor%10;                        // первая цифра скорости
  vivod(c2);
  digitalWrite(dig_1, 0);
  delay(5);
  digitalWrite(dig_1, 1);
  vivod(c1);
  digitalWrite(dig_2, 0);
  delay(5);
  digitalWrite(dig_2, 1);
}

void vivod(int n){
  if((n!=1)&&(n!=4))digitalWrite(sim_A,1);                     // сегмент A
  else digitalWrite(sim_A,0);
  if((n!=5)&&(n!=6))digitalWrite(sim_B,1);                     // сегмент B
  else digitalWrite(sim_B,0);
  if(n!=2)digitalWrite(sim_C,1);                               // сегмент C
  else digitalWrite(sim_C,0);
  if((n!=1)&&(n!=4)&&(n!=7))digitalWrite(sim_D,1);             // сегмент D
  else digitalWrite(sim_D,0);
  if((n==0)||(n==2)||(n==6)||(n==8))digitalWrite(sim_E,1);     // сегмент E
  else digitalWrite(sim_E,0);
  if((n!=1)&&(n!=2)&&(n!=3)&&(n!=7))digitalWrite(sim_F,1);     // сегмент F
  else digitalWrite(sim_F,0);
  if((n!=0)&&(n!=1)&&(n!=7))digitalWrite(sim_G,1);             // сегмент G
  else digitalWrite(sim_G,0);
}

разгони колесо. открой терминал и там будет очень много значений. сюда и их скопируй. только под спойлер (чтобы свернуто было)

буду искать проблему

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

jeka_tm, кстати для пи есть готовые макросы в ардуине.h  43 строчку можно так записать: okruznost = TWO_PI*radius;  Я б ещё в 27й написал  time+=ntime; микрос то наверное дОльше дёргать, чем сложить два лонга. Тем более в прерывании он не инкреминируется.

Вообще то смотрел из любопытства что ж тут может глючить, но ничего не усмотрел. Видимо что-то по аппаратной части.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

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

насчет готовые есть знал, но не знал как пишутся

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

next-999
Offline
Зарегистрирован: 30.09.2013

 

Датчик вообще перестал работать, решил его разобрать, разобрал а там такая вот шляпа( на днях куплю или вытащу откуда нибудь нормальный датчик поставлю если чето будет не так, то скину с терминала инфу((

next-999
Offline
Зарегистрирован: 30.09.2013

Жень подскажи какие детали нужны для того чтобы сделать вольтметр на ардуино, измерение будет с 36...43вольт

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

next-999 пишет:

Жень подскажи какие детали нужны для того чтобы сделать вольтметр на ардуино, измерение будет с 36...43вольт

-Ардуино

-дисплей

-два резистора для делителя напряжения например 10КОМ и 100КОМ можно будет мерять от 0 до 55Вольт

next-999
Offline
Зарегистрирован: 30.09.2013

это без дисплея надо, на таких же сигментных модулях надо

перепутал, от 46,8 до 54,6

когда заряд будет 54,6 то  на модулях 99%

когда 46,8 то 00 , но при этом когда 05 и меньше то значение должно моргать 

 

 
jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

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

геркон если что механический элемент, два контакта замыкаются если поднести магнит. но это механический, поэтому инерция, плохие контакты, и соответственно дребезг, залипание контактов

короче делай сам

 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

next-999 пишет:

SU-27-16 пишет:

полярность - под вашу ответственность ( не знаете - спросите ) !!!!!!!!!!!!!!!!!!!!!!!

 

не проще сразу взять и написать? чем сидеть тут и играть в догадки, жека давно понял что я не сильно шарю и сразу пишет за ранее

когда время есть - пишу и рисую сразу....

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

б/у кулер , корпус - залить эпоксидкой ( ДХ диаметрально от проводков )

или примените такое

http://www.chipdip.ru/product/as-m15tan-r/
 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

jeka_tm ,   прошу твоё добро на применение-изменение твоего кода ( влом всё заново прописывать ) :)

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

да пожалуйста

next-999
Offline
Зарегистрирован: 30.09.2013

jeka_tm пишет:

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

геркон если что механический элемент, два контакта замыкаются если поднести магнит. но это механический, поэтому инерция, плохие контакты, и соответственно дребезг, залипание контактов

короче делай сам

 

как же он работал тогда на штатном? я просто первый раз что либо делаю подобное поэтому не знал что эта шляпа может там стоять(

next-999
Offline
Зарегистрирован: 30.09.2013

подскажи, где тут дх ?

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

маркировок не видно.... на многоножках смотри надписи и в гугл... найдёшь....

или то что на 22:00 часаот центра , или на 19:00 , или на 02:00
запитай его , провод ДХ на пин , скетч чтения этого пина в Сериал , води магнитиком пока в Сериале не будет изменений

начало работы над скетчем ( Женя , спасибо ) , болею , будет медленно :(

// за время tStrobMeasurement считаем колво оборотов колеса
// V = ( nTurnWwheel + 0.5 ) * lengthWwheel / tStrobMeasurement , mm/mS
// + 0.5 - после n импульсов колесо может прокрутиться ещё на неучтённые 1.....99% длины окружности
// поэтому добавляем среднее - + 0.5
#define pinSegA  4 
#define pinSegB  5 
#define pinSegC  6 
#define pinSegD  7 
#define pinSegE  8 
#define pinSegF  9 
#define pinSegG  10 
#define pinSegH  11
#define pinDig1  12 
#define pinDig2  13
#define pinDH    2                   // пин датчика Холла
#define lengthWwheel  1525           // длина окружности колеса по резине , mm
                                     // измерять рулеткой под нагрузкой ( с вылысыпыдыстом в кресле )
#define tStrobMeasurement 250        // длительность строба измерения , mS - влияет на мерцание индикаторов
#define tStrobPause 50               // длительность паузы между измерениями , mS - влияет на мерцание индикаторов
volatile int nTurnWwheel = 0;        // колво оборотов колеса за время строба tStrobMeasurement , а может long ( надо прикинуть )
volatile byte nSignTurnWwheel = 0;   // флаг для разрешения подсчёта оборотов колеса nTurnWwheel , 0 - не считаем , 1 - считаем

//==================================================================
void setup()
{
  pinMode( pinSegA, OUTPUT );
  pinMode( pinSegB, OUTPUT );
  pinMode( pinSegC, OUTPUT );
  pinMode( pinSegD, OUTPUT );
  pinMode( pinSegE, OUTPUT );
  pinMode( pinSegF, OUTPUT );
  pinMode( pinSegG, OUTPUT );
  pinMode( pinSegH, OUTPUT );
  pinMode( pinDig1, OUTPUT );
  pinMode( pinDig2, OUTPUT );
  pinMode( pinDH, INPUT );
  digitalWrite( pinDH, HIGH );
  attachInterrupt( 0, StartMeasurement, FALLING );   // прерывание по спадающему фронту на pinDH
  Serial.begin( 9600 );
}
//==================================================================
//   обработчик прерывания "0"
//==================================================================
void StartMeasurement()
{
  if( ! nSignTurnWwheel )
  {
    nSignTurnWwheel = 1;
    nTurnWwheel++;
  }
}
//==================================================================
//   основная
//==================================================================
void loop()
{
  if( nSignTurnWwheel )
  {
    
  }
}
//==================================================================
//   
//==================================================================
void sped(int skor)
{
  int c2=skor/10;                        // вторая цифра скорости 
  int c1=skor%10;                        // первая цифра скорости
  vivod(c2);
  digitalWrite(dig_1, 0);
  delay(5);
  digitalWrite(dig_1, 1);
  vivod(c1);
  digitalWrite(dig_2, 0);
  delay(5);
  digitalWrite(dig_2, 1);
}
//==================================================================
//   
//==================================================================
void vivod(int n)
{
  if((n!=1)&&(n!=4))digitalWrite(sim_A,1);                     // сегмент A
  else digitalWrite(sim_A,0);
  if((n!=5)&&(n!=6))digitalWrite(sim_B,1);                     // сегмент B
  else digitalWrite(sim_B,0);
  if(n!=2)digitalWrite(sim_C,1);                               // сегмент C
  else digitalWrite(sim_C,0);
  if((n!=1)&&(n!=4)&&(n!=7))digitalWrite(sim_D,1);             // сегмент D
  else digitalWrite(sim_D,0);
  if((n==0)||(n==2)||(n==6)||(n==8))digitalWrite(sim_E,1);     // сегмент E
  else digitalWrite(sim_E,0);
  if((n!=1)&&(n!=2)&&(n!=3)&&(n!=7))digitalWrite(sim_F,1);     // сегмент F
  else digitalWrite(sim_F,0);
  if((n!=0)&&(n!=1)&&(n!=7))digitalWrite(sim_G,1);             // сегмент G
  else digitalWrite(sim_G,0);
}
//==================================================================

 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

пока так - недописано и не испытано....

// за время tStrobMeasurement считаем колво оборотов колеса
// V = ( nTurnWwheel + 0.5 ) * lengthWwheel / tStrobMeasurement , mm/mS
// + 0.5 - после n импульсов колесо может прокрутиться ещё на неучтённые 1.....99% длины окружности
// поэтому добавляем среднее - + 0.5
#define pinSegA  4 
#define pinSegB  5 
#define pinSegC  6 
#define pinSegD  7 
#define pinSegE  8 
#define pinSegF  9 
#define pinSegG  10 
#define pinSegH  11
#define pinDig1  12 
#define pinDig2  13
#define pinDH    2                   // пин датчика Холла
#define lengthWwheel  1525           // длина окружности колеса по резине , mm
                                     // измерять рулеткой под нагрузкой ( с вылысыпыдыстом в кресле )
#define tStrobMeasurement 250        // длительность строба измерения , mS - влияет на мерцание индикаторов
// #define tStrobPause 50               // длительность паузы между измерениями , mS - влияет на мерцание индикаторов
volatile int nTurnWwheel = 0;        // колво оборотов колеса за время строба tStrobMeasurement , а может long ( надо прикинуть )
volatile byte nSignTurnWwheel = 0;   // флаг для разрешения подсчёта оборотов колеса nTurnWwheel , 0 - не считаем , 1 - считаем
byte flagDispatcher = 0;             // флаг - диспетчер
unsigned long oldMillis;             // миллисометр
float speed = 0;                       // а может и long
//==================================================================
void setup()
{
  pinMode( pinSegA, OUTPUT );
  pinMode( pinSegB, OUTPUT );
  pinMode( pinSegC, OUTPUT );
  pinMode( pinSegD, OUTPUT );
  pinMode( pinSegE, OUTPUT );
  pinMode( pinSegF, OUTPUT );
  pinMode( pinSegG, OUTPUT );
  pinMode( pinSegH, OUTPUT );
  pinMode( pinDig1, OUTPUT );
  pinMode( pinDig2, OUTPUT );
  pinMode( pinDH, INPUT );
  digitalWrite( pinDH, HIGH );
  attachInterrupt( 0, StartMeasurement, FALLING );   // прерывание по спадающему фронту на pinDH
  Serial.begin( 9600 );
}
//==================================================================
//   обработчик прерывания "0"
//==================================================================
void StartMeasurement()
{
  if( ! nSignTurnWwheel )
  {
    nSignTurnWwheel = 1;
  }
  else
  {
    nTurnWwheel++;
  }
}
//==================================================================
//   основная
//==================================================================
void loop()
{
  if( nSignTurnWwheel && ! flagDispatcher )
  {
    oldMillis = millis();
    flagDispatcher = 1;
    nTurnWwheel = 0;
  }
  if( nSignTurnWwheel && flagDispatcher && ( ( millis() - oldMillis > tStrobMeasurement ) ) )
  {
    speed = ( nTurnWwheel + 0.5 ) * lengthWwheel / tStrobMeasurement; // mm/mS
// выводим скорость на индикатор
    nSignTurnWwheel = 0;
    flagDispatcher = 0;
  }
}
//==================================================================
//   
//==================================================================
void sped(int skor)
{
  int c2=skor/10;                        // вторая цифра скорости 
  int c1=skor%10;                        // первая цифра скорости
  vivod(c2);
  digitalWrite(dig_1, 0);
  delay(5);
  digitalWrite(dig_1, 1);
  vivod(c1);
  digitalWrite(dig_2, 0);
  delay(5);
  digitalWrite(dig_2, 1);
}
//==================================================================
//   
//==================================================================
void vivod(int n)
{
  if((n!=1)&&(n!=4))digitalWrite(sim_A,1);                     // сегмент A
  else digitalWrite(sim_A,0);
  if((n!=5)&&(n!=6))digitalWrite(sim_B,1);                     // сегмент B
  else digitalWrite(sim_B,0);
  if(n!=2)digitalWrite(sim_C,1);                               // сегмент C
  else digitalWrite(sim_C,0);
  if((n!=1)&&(n!=4)&&(n!=7))digitalWrite(sim_D,1);             // сегмент D
  else digitalWrite(sim_D,0);
  if((n==0)||(n==2)||(n==6)||(n==8))digitalWrite(sim_E,1);     // сегмент E
  else digitalWrite(sim_E,0);
  if((n!=1)&&(n!=2)&&(n!=3)&&(n!=7))digitalWrite(sim_F,1);     // сегмент F
  else digitalWrite(sim_F,0);
  if((n!=0)&&(n!=1)&&(n!=7))digitalWrite(sim_G,1);             // сегмент G
  else digitalWrite(sim_G,0);
}
//==================================================================

испытывать мона и без велика....
кулер ( рабочий ! ) запитать от VCC , выход ДХ кулера - на пинДХ , крыльчатку кулера подтормаживать-отпускать пальцем и смотреть на индикатор...

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

next-999 пишет:

jeka_tm пишет:

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

геркон если что механический элемент, два контакта замыкаются если поднести магнит. но это механический, поэтому инерция, плохие контакты, и соответственно дребезг, залипание контактов

короче делай сам

 

как же он работал тогда на штатном? я просто первый раз что либо делаю подобное поэтому не знал что эта шляпа может там стоять(

под геркон - другой код , менее быстродействующий

next-999
Offline
Зарегистрирован: 30.09.2013

блин чето кароче не фига не получается найти этот датчик на нем, уже все переклацал, во вторник куплю несколько штук и продолжу

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

next-999 пишет:

блин чето кароче не фига не получается найти этот датчик на нем, уже все переклацал, во вторник куплю несколько штук и продолжу

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

а зачем его ( ДХ ) искать ? поводи магнитом - он сам отклитнится на проводке ДХ :)

next-999
Offline
Зарегистрирован: 30.09.2013

SU-27-16 пишет:

next-999 пишет:

блин чето кароче не фига не получается найти этот датчик на нем, уже все переклацал, во вторник куплю несколько штук и продолжу

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

а зачем его ( ДХ ) искать ? поводи магнитом - он сам отклитнится на проводке ДХ :)

второй вскрыл) мож тут где?

next-999
Offline
Зарегистрирован: 30.09.2013

Надписи A3 51 \ FR \ 26 \ bs 11 \ FS 15

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

СМЕРШ...... СКУЛ.... - Смерть КУЛерам
там нет ДХ , два провода = питалово , кулер с ДХ - три проводка !

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

next-999 пишет:

Надписи A3 51 \ FR \ 26 \ bs 11 \ FS 15

дааааааа , по такому - не найти.....
на моей фоте кулера - ДХ вообще без маркировки :(

next-999
Offline
Зарегистрирован: 30.09.2013

[quote=SU-27-16]

СМЕРШ...... СКУЛ.... - Смерть КУЛерам
там нет ДХ , два провода = питалово , кулер с ДХ - три проводка !

щас провода понакидываю попроверяю

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

про это - не забыл-прочитал ДатаШит ? 
http://www.chipdip.ru/product/as-m15tan-r/

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

есть фотоинтеррапторы.... но для велика геморрой будет - каждый километр протирать оптику....