#1 2019-05-13 20:00:22

Alex_G
Участник
Зарегистрирован: 2019-05-13
Сообщений: 2

Датчик движения и датчик освещенности на плате Arduino UNO

Всем привет!

Нужна помощь опытных и знающих людей, в корректном написании программы для реализации рабочей схемы с Arduino.

Идея была сделать освещение в комнате, которое работает от датчика движения PIR SR501 установленном на плате Arduino UNO вместе с датчиком BH1750, который регулирует освещение в комнате.

Подсоединил по такой схеме:

Skhema-programmy.jpeg

На схеме не рисовал светодиод на цифровом 13 порту для индикации калибровки датчика движения. Но он есть в скетче.

Правильно ли подсоединено всё на схеме?

Текущий код программы с комментариями далее:

#include <Wire.h>
#include <BH1750.h>

BH1750 lightMeter;

//Тестировалось на Arduino IDE 1.0.1
//Время калибровки датчика (10-60 сек. по даташиту)
int calibrationTime = 30;       

//Время, в которое был принят сигнал отсутствия движения(LOW)
long unsigned int lowIn;        

//Пауза, после которой движение считается оконченным
long unsigned int pause = 5000; 

//Флаг. false = значит движение уже обнаружено, true - уже известно, что движения нет
boolean lockLow = true;
//Флаг. Сигнализирует о необходимости запомнить время начала отсутствия движения
boolean takeLowTime; 

int pirPin = 2;    //вывод подключения PIR датчика
int ledPin = 13;   //вывод сигнального диода
int relayPin = 3;  //реле пин

void setup()
{
  Serial.begin(9600);
  lightMeter.begin();
  Serial.println("Running...");
  pinMode(pirPin, INPUT);
  pinMode(ledPin, OUTPUT);
  pinMode(relayPin, OUTPUT);


  digitalWrite(relayPin, HIGH);
  delay(4000);
  digitalWrite(pirPin, LOW);

  //дадим датчику время на калибровку
  for(int i = 0; i < calibrationTime; i++)
  {
    //Во время калибровки будет мигать сигнальный диод
    i % 2 ? digitalWrite(ledPin, HIGH) : digitalWrite(ledPin, LOW);
    delay(1000);
  }
  //По окончанию калибровки зажжем сигнальный диод 
  digitalWrite(ledPin, HIGH);
  delay(50);
}

void loop()
{
  uint16_t lux = lightMeter.readLightLevel();
  Serial.print("Light: ");
  Serial.print(lux);
  Serial.println(" lx");
  delay(500);
  //Если обнаружено движение
  if(digitalRead(pirPin) == HIGH)
  {
    //Если до этого момента еще не включили реле
    if(lockLow)
    {
      lockLow = false;      
      //Включаем реле.
      digitalWrite(relayPin, LOW);
      delay(50);
    }        
    takeLowTime = true;
  }

  //Ели движения нет
  if(digitalRead(pirPin) == LOW)
  {      
    //Если время окончания движения еще не записано
    if(takeLowTime)
    {
      lowIn = millis();          //Сохраним время окончания движения
      takeLowTime = false;       //Изменим значения флага, чтобы больше не брать время, пока не будет нового движения
    }
    //Если время без движение превышает паузу => движение окончено
    if(!lockLow && millis() - lowIn > pause)
    { 
      //Изменяем значение флага, чтобы эта часть кода исполнилась лишь раз, до нового движения
      lockLow = true;                
      digitalWrite(relayPin, HIGH);
      delay(50);
  }
}
}

Включаю схему, светодиод мигает, что сигнализирует о калибровке датчика, но по истечению 30 секунд реле то включается, то выключается, то непрерывно замкнуто (лампочка горит). Каждый раз после включения ведет себя хаотично. В общем не работает как следует.

Перепроверьте, пожалуйста, что не так со скетчем или схемой или железом?

#2 2019-05-13 21:09:50

vvr
Участник
Зарегистрирован: 2015-04-12
Сообщений: 568

Re: Датчик движения и датчик освещенности на плате Arduino UNO

во первых - запитывать реле от дуни не правильно, должно быть отдельное питание.
во вторых - вы так и не удосужились расписать какой алгоритм работы вашего устройства.

#3 2019-05-13 21:21:52

Alex_G
Участник
Зарегистрирован: 2019-05-13
Сообщений: 2

Re: Датчик движения и датчик освещенности на плате Arduino UNO

vvr пишет:

во первых - запитывать реле от дуни не правильно, должно быть отдельное питание.
во вторых - вы так и не удосужились расписать какой алгоритм работы вашего устройства.

1) Брал часть примера отсюда. А там реле запитано от Ардуино:
https://voltiq.ru/arduino-and-sensor-hc-sr501/

2) Алгоритм простой: При появлении человека на пути датчика движения - срабатывает реле, включается свет (лампочка), при появлении дополнительного источника света, датчик освещенности должен убавить яркость лампочки. Вообщем и целом так должна выглядеть задумка.

#4 2019-05-13 21:47:16

г0сть
Гость

Re: Датчик движения и датчик освещенности на плате Arduino UNO

Alex_G пишет:

реле то включается, то выключается, то непрерывно замкнуто (лампочка горит). Каждый раз после включения ведет себя хаотично. В общем не работает как следует.

Ну так возможно у вас датчик ловит движение и из-за этого идут сработки. Подключите вместо датчика обычную кнопку между 2 пином ардуино и +5V. Замыкая кнопку будете имитировать сработку датчика и посмотрите что происходит. При этом дополнительно притяните 2 пин к GND резистором на 10 кОм.

#5 2019-05-14 10:00:15

vvr
Участник
Зарегистрирован: 2015-04-12
Сообщений: 568

Re: Датчик движения и датчик освещенности на плате Arduino UNO

При появлении человека на пути датчика движения - срабатывает реле, включается свет (лампочка),  - это на схеме есть.


при появлении дополнительного источника света, датчик освещенности должен убавить яркость лампочки - этого нет

#6 2019-05-14 10:54:05

Kaka
Участник
Зарегистрирован: 2018-03-21
Сообщений: 118

Re: Датчик движения и датчик освещенности на плате Arduino UNO

Alex_G пишет:

1) Брал часть примера отсюда. А там реле запитано от Ардуино:

Вот, знаешь, совершенно наплевать, где ты это взял. Тебе грамотный человек сказал: "так делать нельзя". У тебя два варианта, или послушать и переделать, или идти туда, где ты это брал, и там просить помочь решить твои проблемы, т.к. здесь советуют неправильно.

#7 2019-05-15 13:09:40

Дмитрий C.
Гость

Re: Датчик движения и датчик освещенности на плате Arduino UNO

Приятель, ты должен по простy в Главном цикле  void loop() сперва проверить датчик освещенности, если значение ниже порога(темно) , то проверяешь датчик движения! Если ниже, то срабатывание на движение тебя не должны волновать! Можно поставить в качестве датчика освещения копеечный фоторезистор за 6 грн! Вполне себе реле ДЛЯ ардyино запитывается от 5в на ардyино! Не обращай внимания на хамов, все полyчится!

#8 2019-05-15 13:43:12

Дмитрий C.
Гость

Re: Датчик движения и датчик освещенности на плате Arduino UNO

if(digitalRead(pirPin) == HIGH && uint16_t lux<Ваше пороговое значение темноты)

#9 2019-05-15 15:50:04

Watchdog
Гость

Re: Датчик движения и датчик освещенности на плате Arduino UNO

Зачем здесь вообще Ардуино? Компьютер, что-бы реле освещения включать? Автор что-то недоговаривает.

#10 2019-05-15 16:35:03

ms
Гость

Re: Датчик движения и датчик освещенности на плате Arduino UNO

Блин народ куда вы лезете ???? По накопируют кусков и пытаетесь слепить во едино не понимая азов.

#11 2019-05-15 18:53:36

Kaka
Участник
Зарегистрирован: 2018-03-21
Сообщений: 118

Re: Датчик движения и датчик освещенности на плате Arduino UNO

ms пишет:

Блин народ куда вы лезете ???? По накопируют кусков и пытаетесь слепить во едино не понимая азов.

Так, а чо? Почитайте ардуиновские проспекты - кто целевой, так сказать, титульный потребитель этого девайса? Правильно, беременная доярка, которая ни хрена не знает и знать не желает. И ведь реклама не врёт! Она действительно с помощью ардуино может светодиодиком розовым помигать. Гламурненько так и мимимишненько!

Но, помигав, доярка обретает уверенность, что, с помощью этой волшебной штуки, по-прежнему ни хрена не зная, она может и доильный аппарат за три копейки сделать, и ракету на Луну запустить, и умный дом замастрячить. Вот и начинается ...

#12 2019-05-16 23:56:12

sadman
Гость

Re: Датчик движения и датчик освещенности на плате Arduino UNO

Кака, ну а чего Вы хотели, это же ардуино. Каждый студент бьет себя в грудь, что он крутой прогер железа.
Браво, аплодисменты! Хотя, железа даже не нюхал.

Быстрое сообщение

Введите сообщение и нажмите Отправить

Подвал раздела