09.02.2014, 23:50 | #11 |
Member
Регистрация: 06.01.2014
Сообщений: 42
Вес репутации: 0 |
Re: Датчик препятствий или автоматический выключатель
Пример из первого поста работает. Но настроить более, чем на 60-80 см резистором мне не удалось.
Задача перекрывать зону и включать подсветку при подходе к рабочей зоне на кухне. Примерно 2,3 метра длина зоны. Идея такова- каким либо датчиком определять присутствие человека в зоне. Вопросы к автору: 1. Можно ли переделать скетч, чтобы он работал не на отражение, а на перекрытие луча. Т.е. расположить передатчик и приемник по противоположным стенам кухни? Если "да", что поправить? Будет эффект перекрытия луча? 2. Второй вариант обдумываю на уз-датчике расстояния hc-sr04. Жду посылку от китайцев. |
10.02.2014, 01:12 | #12 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823 |
Re: Датчик препятствий или автоматический выключатель
дЛЯ УВЕЛИЧЕНИЯ РАССТОЯНИЯ, НУЖНО ДОПОЛНИТЕЛЬНО ИСПОЛЬЗОВАТЬ ТРАНЗИСТОР
1-можно 2-Ультазвук как то влияет на нервную систему человека, хотя это и не доказано |
15.02.2014, 23:52 | #13 |
Member
Регистрация: 06.01.2014
Сообщений: 42
Вес репутации: 0 |
Re: Датчик препятствий или автоматический выключатель
Решил отказаться от идеи использовать отражение и остановиться на прерывании луча.
Разнес фотоприемник и светодиод. С помощью транзистора удалось увеличить расстояние уверенного срабатывания до 120 см. Вопрос №1; Куда поставить в скетче задержку, чтобы 13 выход оставался высоким еще 5 сек. после отсутствия причины срабатывания. Код:
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==HIGH) ? HIGH:LOW); if (val==LOW) delay(300); //время свечения светодиода (L) при срабатывании } old_val=val; delay(60); //пауза между пакетами. // Serial.println(val, DEC); } Вопрос №3: Возможно, нужно переделать скетч, вследствии того, что изменился метод определения присутствия? Прошу прощения за, возможно, глупые вопросы. В программировании ноль... Последний раз редактировалось age0811; 16.02.2014 в 00:39. |
16.02.2014, 01:18 | #14 | |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823 |
Re: Датчик препятствий или автоматический выключатель
Цитата:
|
|
16.02.2014, 11:44 | #15 |
Member
Регистрация: 06.01.2014
Сообщений: 42
Вес репутации: 0 |
Re: Датчик препятствий или автоматический выключатель
Спасибо за наводку. Возможно что-то было с транзистором. Ток в цепи диода был где-то в микроамперах...
Выкинул транзистор, поставил последовательно с диодом резистор 56 ом. Ток сейчас 20 мА. Сейчас разнесенный диод и фотоприемник срабатывают на расстоянии около 4,5 метров. С запасом! Диод поставил TSAL5100 (ИК-светодиод, 5 мм, 940 нм, 130 мВт, угол 20°, Uпр.=1.35В (при 100мА), Imax(пост./имп.)=200мА/1500мА, -40..+85°С ). Большое спасибо за помошь! Был бы очень благодарен за правку скетча с точки зрения задержки выключения диода при пропадании причины срабатывания! Можно на "ты". На "CompCar" и "РССаr" с 2009 г. на "ты". |
16.02.2014, 12:16 | #16 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823 |
Re: Датчик препятствий или автоматический выключатель
Все что тебе нужно, все в этом куске кода
Код:
{ digitalWrite(Led,(val==HIGH) ? HIGH:LOW); // включаем/выключаем лампочку if (val==LOW) delay(300); //время свечения лампочки при срабатывании } |
16.02.2014, 12:20 | #17 | |
Member
Регистрация: 06.01.2014
Сообщений: 42
Вес репутации: 0 |
Re: Датчик препятствий или автоматический выключатель
Цитата:
Магнитные бури, что-ли вчера были... Похоже, скетч правленный на закачался вчера. Все!!! Вопрос закрыт! Осталось прилепить фоторезистор на измерение уровня освещенности и можно все оформлять в виде отдельного устройства на кухню. В "Атмегу-8" влезет, наверное, этот код? Последний раз редактировалось age0811; 16.02.2014 в 12:34. |
|
16.02.2014, 12:54 | #18 | |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823 |
Re: Датчик препятствий или автоматический выключатель
Цитата:
|
|
18.03.2014, 00:34 | #19 |
Member
Регистрация: 06.01.2014
Сообщений: 42
Вес репутации: 0 |
Re: Датчик препятствий или автоматический выключатель
Вопрос к автору.
Сейчас скетч у меня выглядит следующим образом Код:
byte tsop = 11; //tsop byte irLed = 10; //ик-светодиод byte Led = 13; //осветодиод(L) на плате byte i; // счётчик byte num=20; //число периодов несущей 38кГц в посылаемом пакете byte impulse=10; // длительность полупериода byte val, old_val; //переменная для хранения сигнала с ИК приемника int sensorPin = A0; // устанавливаем входную ногу для АЦП unsigned int sensorValue = 0; // цифровое значение фоторезистора void setup() { pinMode (irLed, OUTPUT); // разъём 10 на вывод pinMode(Led, OUTPUT); //разъём 13 на вывод pinMode(tsop, INPUT); // разъём 11 на ввод Serial.begin(9600); } void loop() { sensorValue = analogRead(sensorPin); // считываем значение с фоторезистора if(sensorValue<340) //Если освещенность меньше 340 то выполняем основной цикл { 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==HIGH) ? HIGH:LOW); //если сигнал низкий то зажигаем светодиод if (val==HIGH) delay(5000); //время свечения светодиода (L) при срабатывании } old_val=val; delay(30); //пауза между пакетами. // Serial.println(val, DEC); } else digitalWrite(Led, LOW); } Добавил анализ освещенности. Работает четко. Но есть один вопросик. Бывает, что не срабатывает задержка 5сек. на выключение. Т.е. выключается=(LOW) практически сразу. При этом если луч перекрыт, то все нормально=(HIGH). И если в течение 5сек. после пересечения луча несколько раз создаешь и нарушаешь условие, тоже все в норме=(HIGH)! Может быть использовать вторую ИК-пару для надежности? Если это может дать эффект большей надежности, то как поправить скетч? Спасибо! Последний раз редактировалось age0811; 18.03.2014 в 00:43. |
29.03.2014, 08:55 | #20 |
Junior Member
Регистрация: 20.12.2013
Сообщений: 27
Вес репутации: 0 |
Re: Датчик препятствий или автоматический выключатель
А подскажите для TSOP на 36кГц код такой же будет?
|
Здесь присутствуют: 2 (пользователей: 0 , гостей: 2) | |
|
|