#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
Повідомлень: 874

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
Повідомлень: 874

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

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


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

Неактивний

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

Kaka
Учасник
Зареєстрований: 2018-03-21
Повідомлень: 411

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
Повідомлень: 411

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

ms пише:

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

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

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

Неактивний

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

sadman
Гість

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

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

#13 2019-07-30 14:39:01

Гвоздь программы
Гість

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

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

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму