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