Заранее спасибо за любую помощь! Я пытаюсь создать автоматическую систему освещения c, которая будет светиться при движении в течение определенного периода времени c и в темноте.
Схемы для проекта (электроника работает очень хорошо
Используемые детали:
- Arduino Clone Pro Mini 5V Atmega328;
- PIR-датчик AM312;
- DS3231 RT C Плата коммутации с аккумулятором 3 В;
- 5819 LDR (Фоторезистор) с резистором 10 кОм 1/4;
- 2n2222 транзистор с резистором 10 кОм;
- 3 белых светодиода с резистором 1 Ом;
- 1 9 В;
Я проверил и откалибровал все датчики и электронику Все работает нормально, за исключением случая, когда я загружаю следующий код:
#include "RTClib.h"
RTC_DS3231 rtc;
const int ldrPin = A1; // Photoresistor Input Pin
const int pirPin = 4; // AM312 Motion Sensor Input Pin
const int ledPin = 13; // 3 white LEDs Ouput Pin
int ldrValue = 0; // Initial Value for the LDR
int pirState = LOW; // Initial State for the PIR
int pirValue = 0; // Initial Value for the PIR
void setup() {
Serial.begin(9600); // Starting Serial Monitor
// This is required by RTC DS3231 BreakOut Board
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}
pinMode(ledPin, OUTPUT); // Sends signal to Transistor to Light 3 white LEDs
pinMode(ldrPin, INPUT); // Signals to Arduino if there is any lights
pinMode(pirPin, INPUT); // SIgnals to Arduino if there is any movement
}
void loop() {
DateTime now = rtc.now(); // Starts RTC
if ((now.hour() >= 6 && now.minute() >= 00) && (now.hour() <= 19 && now.minute() <= 59)) { // IF the time NOW is between 6:00(am) and 7:59(pm) then...
digitalWrite(ledPin, LOW); // ... keep the LEDs OFF
} else {
pirValue = digitalRead(pirState); // Scan for any movement
ldrValue = analogRead(ldrPin); // Scan for any lights
if (pirValue == HIGH) { // IF there is any movement
if (ldrValue <= 400) { // IF there is NO lights
digitalWrite(ledPin, HIGH); // Turn the LEDs ON
delay(120000); // Wait 2 mins
}
}
}
}
Датчик PIR продолжает распознавать движение, даже если перед ним нет активности, и светодиоды включаются. не закрывайте через 2 минуты, как следует, потому что Arduino постоянно получает ложные данные о движении. LDR работает хорошо, как и RT C. Как я уже упоминал, я тестировал и калибровал датчики перед загрузкой окончательного кода. PIR прекрасно работает с вер y простая строка кода вроде:
if (pirState == HIGH) {
Serial.println("Motion Detected");
}
Я также пытался перейти от задержки к millis (), но у меня была та же проблема. Я подозреваю, что есть проблема с кодом, и я прошу вашей помощи, чтобы найти, где я делаю ошибку. Большое вам спасибо за ваше время