Re: Датчик дождя или датчик препятствий.
А если собирать с приемником на другую частоту, например на 36 кГц, значения переменных num и impulse какие выставлять?
Re: Датчик дождя или датчик препятствий.
Теоретически ничего менять не нужно
Re: Датчик дождя или датчик препятствий.
На практике не работает, менял значения - итог такой же.
Re: Датчик дождя или датчик препятствий.
Работает, ищите у себя ошибку!
Re: Датчик дождя или датчик препятствий.
Цитата:
Сообщение от
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 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);
}
Вложение 6422
Кто нибудь может обьяснить для чего в начале запускается цикл for?
Re: Датчик дождя или датчик препятствий.
Так в коде же есть коментарии
Re: Датчик дождя или датчик препятствий.
Это понятно, только для чего сначала зажигать и тушить диод 19 раз, а только потом считывать показания с датчика?
Я понимаю, что это частота 38 кГЦ, но датчик, получается, снимает данные не во время работы диода а после того, как он потухнет.
Re: Датчик дождя или датчик препятствий.
ИК приемник работает не зависимо от контроллера
Re: Датчик дождя или датчик препятствий.
Как?
Сначала запускается цикл for пока num меньше 20 ( то есть 19 раз), только потом контроллер переходит к считыванию показаний датчика с 11-го пина.
П. С. Я не сомневаюсь в работоспособности проекта и только учусь програмить ардуины, просто для себя хочу понять как все работает.
Re: Датчик дождя или датчик препятствий.
в цикле идет передача сигнала, а приемник в это время не зависимо от контроллера принимает этот сигнал и выставляет на выходе логический уровень