Arduino Automati c Система освещения Проблема с кодом. ПИР, ЛДР, РТ C, светодиоды - PullRequest
0 голосов
/ 10 марта 2020

Заранее спасибо за любую помощь! Я пытаюсь создать автоматическую систему освещения 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 (), но у меня была та же проблема. Я подозреваю, что есть проблема с кодом, и я прошу вашей помощи, чтобы найти, где я делаю ошибку. Большое вам спасибо за ваше время

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...