Цитата Сообщение от Chip Посмотреть сообщение
Перепробовал несколько вариантов датчика из интернет, все работают не правильно, чувствительность низкая срабатывают на разные помехи, например на пульты ДУ или энергосберегающие лампы.
Решил написать свой код, теперь у меня можно настроить чувствительность датчика от 1 см до нескольких метров и при этом не стабатывает на помехи.
Чувствительность регулируется резитором в цепи ИК диода, у меня примерно 1к и слабый ИК светодиод от старой мышки , срабатывают на расстоянии 30см от препятствия . Пробовал на оконном стекле (брызгал водой ) срабатывает стабильно. На автомобильном стекле еще не проверял. Carduino с нижеприведеным кодом работать самостоятельно без ПК. Индикатор (L) начинает светиться при срабатывании. Датчик ИК и ИК светодиод должны быть полностью изолированы друг от друга светонепроницаемым материалом.
ИК приемник использовал из Кармонитор, работающий в диапазоне 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 valold_val;   //переменная для хранения сигнала с ИК приемника

void setup() 
{
  
pinMode (irLedOUTPUT); // разъём 10 на вывод
  
pinMode(LedOUTPUT);   //разъём 13 на вывод
  
pinMode(tsopINPUT);   // разъём 11 на ввод
  
Serial.begin(115200);
}

void loop()
{
  for(
i=0i<numi++) //цикл несущей
  
{
    
digitalWrite(irLedHIGH); //зажигаем ик-диод
    
delayMicroseconds(impulse); //положительный полупериод
    
digitalWrite(irLedLOW); //гасим ик-диод
    
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);

Нажмите на изображение для увеличения. 

Название:	NANO_Rain_sens.PNG 
Просмотров:	9695 
Размер:	7.9 Кб 
ID:	6422
Кто нибудь может обьяснить для чего в начале запускается цикл for?