Пожалуйста, 2 дальнометра + датчик света

OdinTakoi
Offline
Зарегистрирован: 04.05.2017

Уважаемые товарищи, прошу Вас, пожалуйста помочь мне. Бьюсь пол года, но бесполезно.
Проблема номер 1.
Есть 2 дальнометра.
1й в начале прямого пути, 2й в конце.
Нужно сделать чтоб свет в квартире зажигался когда проходишь через датчик 1, и гас когда проходишь через датичик 2 ( лампочки 2 шт на отрезка соотвественно 1 и 2)нужно чтоб они зажигались так же сначала 1 потом 2ая.
И обратно чтоб так же было тока наоборот соотвественно.
Помогите умоляю Вас.
2. Проблема 2, датчик света.
Нужно чтоб он включался и включался от времени суток, он это делает, но долго моргает когда начинает темнеть, как убрать это ? Чтоб прям четко переключался.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015
bwn
Offline
Зарегистрирован: 25.08.2014

Это, стесняюсь спросить, а результаты этой столетней войны лицезреть возможно?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

OdinTakoi пишет:
Нужно сделать чтоб свет в квартире зажигался когда проходишь через датчик 1, и гас когда проходишь через датичик 2 ( лампочки 2 шт на отрезка соотвественно 1 и 2)нужно чтоб они зажигались так же сначала 1 потом 2ая. И обратно чтоб так же было тока наоборот соотвественно.

А датчики умеют различать, когда проходишь "туда", а когда "обратно"?

Цитата:

датчик света. Нужно чтоб он включался и включался от времени суток, он это делает, но долго моргает когда начинает темнеть, как убрать это ? Чтоб прям четко переключался.

Не верю.

Если датчик включается от времени суток, то, во-первых, его обычно не называют датчиком света, а во-второых, это надо специально постараться, чтобы он моргал.

Если же все-таки безотносительно времени суток, а только по свету, то нужно вводить гистерезис. Плюс, желательно, задержку. Ну и подумать о том, чтобы все-таки включать его по времени. Либо с учетом как времени, так и освещенности.

evgta
Offline
Зарегистрирован: 02.09.2016

Там помимо гистерезиса еще скорее всего идет засветка от включающегося света, потому и на начинает моргать пока совсем темно не станет что засветка влиять перестает.

OdinTakoi
Offline
Зарегистрирован: 04.05.2017

Парни, со светом я допер, нужно пустой интервал оставить и все будет четко, например:

Не верно
if (Svet >= 300)
{PD = 2;}
if (Svet < 300)
{PD = 4;}
Верно
if (Svet >= 300)
{PD = 2;}
if (Svet <= 250)
{PD = 4;}
Тогда все четко будет без моргалок

 

OdinTakoi
Offline
Зарегистрирован: 04.05.2017

А датчики умеют различать, когда проходишь "туда", а когда "обратно"?

ммм.... нет, а как научить ?

если сделать по времени просто тупо что;

проход через датчик 1 вкл лампа 1, 10 сек ждем, вкл лампа 2, 5 сек, выкл лапа 1, 5 сек, выкл лама 2. то все конечно четко....

но хотелось бы чтоб было так.... проход через датчик 1 вкл лампа 1, 10 сек ждем, вкл лампа 2, проход через датчик 2, выкл лапа 1, 5 сек, выкл лама 2. и наоборот чтоб все было четко, но так ну ваще не хочет работать (((((((((((((

vosara
vosara аватар
Offline
Зарегистрирован: 08.02.2014

OdinTakoi пишет:

проход через датчик 1 вкл лампа 1, 10 сек ждем, вкл лампа 2, 5 сек, выкл лапа 1, 5 сек, выкл лама 2. то все конечно четко....

 

Покажите Ваш код, где єто "все четко" - дальше поможем. А так Вы просите написатькод с 0 и не понятно сами то разберетесь с тем что Вам дадут или нет.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

OdinTakoi пишет:

А датчики умеют различать, когда проходишь "туда", а когда "обратно"?

ммм.... нет, а как научить ?

Ну, если Вы располагаете датчиками, поддающимися обучению, думаю, Вам виднее.

Цитата:

если сделать по времени просто тупо что;

проход через датчик 1 вкл лампа 1, 10 сек ждем, вкл лампа 2, 5 сек, выкл лапа 1, 5 сек, выкл лама 2. то все конечно четко....

Если датчик единственный, то - да.

Правда, нужно предусмотреть дополнительно еще 3 варианта реакции на повторное срабатывание датчика в интервалах 0-10с, 10-15с и 15-20с.

Цитата:

но хотелось бы чтоб было так.... проход через датчик 1 вкл лампа 1, 10 сек ждем, вкл лампа 2, проход через датчик 2, выкл лапа 1, 5 сек, выкл лама 2. и наоборот чтоб все было четко, но так ну ваще не хочет работать (((((((((((((

С двумя датчиками не то, чтобы слишком заумно, но для начала потребуется довольно объемная таблица реакции на все возможные интервалы между срабатыванием датчиков, включая повторные.

 

OdinTakoi
Offline
Зарегистрирован: 04.05.2017

Парни спасибо большое, вечером. Выложу наработку того что есть, я понял смысл, вы во всем правы, тока я не могу написать так чтоб прям работало четко, очень надеюсь поможете, вечером все скину , а то ща с мобилы сижу.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

OdinTakoi пишет:
Уважаемые товарищи, прошу Вас, пожалуйста помочь мне. Бьюсь пол года, но бесполезно. Проблема номер 1. Есть 2 дальнометра. 1й в начале прямого пути, 2й в конце. Нужно сделать чтоб свет в квартире зажигался когда проходишь через датчик 1, и гас когда проходишь через датичик 2 ( лампочки 2 шт на отрезка соотвественно 1 и 2)нужно чтоб они зажигались так же сначала 1 потом 2ая. И обратно чтоб так же было тока наоборот соотвественно. Помогите умоляю Вас. 2. Проблема 2, датчик света. Нужно чтоб он включался и включался от времени суток, он это делает, но долго моргает когда начинает темнеть, как убрать это ? Чтоб прям четко переключался.

Поставить по два датчика, это даст возможность определять направление прохода

чтобы не моргал, вводить гистерезис на включение-отключение

OdinTakoi
Offline
Зарегистрирован: 04.05.2017

парни датчика 2 код программы вот.

#include <Ultrasonic.h>
Ultrasonic ultrasonic1(11, 10);
Ultrasonic ultrasonic2(12, 9);
int ledPin = 13;
int ledPin2 = 8;
byte  PL = 2;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(ledPin2, OUTPUT);
Serial.begin(115200);}
void loop() {
float dist_cm1 = ultrasonic1.Ranging(CM); //первая точка
float dist_cm2 = ultrasonic2.Ranging(CM); //вторая точка
if (PL == 1)
{digitalWrite(ledPin, HIGH); вкл2 лампы
digitalWrite(ledPin2, HIGH);
delay (50);}
if (PL == 2)
{digitalWrite(ledPin, LOW); выкл2 лампы
digitalWrite(ledPin2, LOW);
delay (50);}
if (PL == 3)
{digitalWrite(ledPin, HIGH); 1ая вкл 2яа выкл
digitalWrite(ledPin2, LOW);
delay (350);
PL = 4;}
if (PL == 4)
{digitalWrite(ledPin, HIGH); все вкл точка 1
digitalWrite(ledPin2, HIGH);
delay (50);}
if (PL == 5)
{digitalWrite(ledPin, LOW); 1ая выкл 2яа вкл
digitalWrite(ledPin2, HIGH);
delay (350);
PL = 6;}
if (PL == 6)
{digitalWrite(ledPin, HIGH);все вкл точка 2
digitalWrite(ledPin2, HIGH);
delay (50);}
if (PL == 7)
digitalWrite(ledPin, LOW); 1ая выкл 2яа вкл
digitalWrite(ledPin2, HIGH);
delay (350);
PL = 2;}
if (PL == 8)
{digitalWrite(ledPin, HIGH); 1ая вкл 2яа выкл
digitalWrite(ledPin2, LOW);
delay (350);
PL = 2;}
if (dist_cm1 <= 30 && PL == 2)
{PL = 3;}
if (dist_cm2 <= 30 && PL == 4)
{PL = 7;}
if (dist_cm2 <= 30 && PL == 2)
{PL = 5;}
if (dist_cm1 <= 30 && PL == 6)
{PL = 8;}}

 

Shneider
Offline
Зарегистрирован: 07.05.2017

Навскидку не вижу нигде чтобы PL = 1 так что (этот) кусок кода точно не сработает:

if (PL == 1)

...

С уважением, Владимир.

OdinTakoi
Offline
Зарегистрирован: 04.05.2017

Спасибо большое, я все понял про 1, это я по привычке написал....а есть еще идеи мужики ?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

OdinTakoi пишет:
а есть еще идеи мужики ?
А какие нужны идеи, если у Вас всё работает?

OdinTakoi
Offline
Зарегистрирован: 04.05.2017

Датчики не работают так*((((( почему не знаю, первый дачик отрабатывает супер если до него 2 раза не докоснуться подряд второй вообще непонятно что делает и почему ((((((