Ви не увійшли.
Сторінки 1
во первых - запитывать реле от дуни не правильно, должно быть отдельное питание.
во вторых - вы так и не удосужились расписать какой алгоритм работы вашего устройства.
1) Брал часть примера отсюда. А там реле запитано от Ардуино:
https://voltiq.ru/arduino-and-sensor-hc-sr501/
2) Алгоритм простой: При появлении человека на пути датчика движения - срабатывает реле, включается свет (лампочка), при появлении дополнительного источника света, датчик освещенности должен убавить яркость лампочки. Вообщем и целом так должна выглядеть задумка.
Всем привет!
Нужна помощь опытных и знающих людей, в корректном написании программы для реализации рабочей схемы с Arduino.
Идея была сделать освещение в комнате, которое работает от датчика движения PIR SR501 установленном на плате Arduino UNO вместе с датчиком BH1750, который регулирует освещение в комнате.
Подсоединил по такой схеме:
На схеме не рисовал светодиод на цифровом 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 секунд реле то включается, то выключается, то непрерывно замкнуто (лампочка горит). Каждый раз после включения ведет себя хаотично. В общем не работает как следует.
Перепроверьте, пожалуйста, что не так со скетчем или схемой или железом?
Сторінки 1