Перепробовал несколько вариантов датчика из интернет, все работают не правильно, чувствительность низкая срабатывают на разные помехи, например на пульты ДУ или энергосберегающие лампы.
Решил написать свой код, теперь у меня можно настроить чувствительность датчика от 1 см до нескольких метров и при этом не стабатывает на помехи.
Чувствительность регулируется резитором в цепи ИК диода, у меня примерно 1к и слабый ИК светодиод от старой мышки , срабатывают на расстоянии 30см от препятствия . Пробовал на оконном стекле (брызгал водой ) срабатывает стабильно. На автомобильном стекле еще не проверял. Carduino с нижеприведеным кодом работать самостоятельно без ПК. Индикатор (L) начинает светиться при срабатывании. Датчик ИК и ИК светодиод должны быть полностью изолированы друг от друга светонепроницаемым материалом.
ИК приемник использовал из
https://duino.ru, работающий в диапазоне 38кГц
Скетч для Carduino / Arduino
PHP код:
byte tsop = 11; //tsop
byte irLed = 10; //ик-светодиод
byte Led = 13; //осветодиод(L) на плате
byte i; // счётчик
byte num=20; //число периодов несущей 38кГц в посылаемом пакете
byte impulse=10; // длительность полупериода
byte val, old_val; //переменная для хранения сигнала с ИК приемника
void setup()
{
pinMode (irLed, OUTPUT); // разъём 10 на вывод
pinMode(Led, OUTPUT); //разъём 13 на вывод
pinMode(tsop, INPUT); // разъём 11 на ввод
Serial.begin(115200);
}
void loop()
{
for(i=0; i<num; i++) //цикл несущей
{
digitalWrite(irLed, HIGH); //зажигаем ик-диод
delayMicroseconds(impulse); //положительный полупериод
digitalWrite(irLed, LOW); //гасим ик-диод
delayMicroseconds(impulse-1); //выравниваем скважность
}
val=digitalRead(tsop);//Прочитать показания датчика
if (val==old_val) //сравнить показания с предидущей посылкой
{
digitalWrite(Led,(val==LOW) ? HIGH:LOW); //если сигнал низкий то зажигаем светодиод
if (val==LOW) delay(300); //время свечения светодиода (L) при срабатывании
}
old_val=val;
delay(30); //пауза между пакетами.
// Serial.println(val, DEC);
}