Зависания Arduino Nano

cordis
Offline
Зарегистрирован: 16.04.2018
Доброго времени суток. Собрал проект на базе Arduino Nano для умного освещения и включения/выключения вентилятора в ванной. Все подключил. Система работает отлично, но..Спустя несколько часов (Рандомно вообще, может и 2 часа а может и 15-17) вся система начинает зависать и уже то ли датчики не реагируют, то ли сама плата уходит или в режим ожидания или что вообще(Я в этой области абсолютно новичек). После перезагрузки ардуины все снова работает отлажено. 
 
Система состоит из:
Arduino Nano V3.0 AVR ATmega328P
ИК датчик движения HC-SR501
Датчик освещения
Датчик влажности DHT11
Двухканальное реле 5В 10А
 
Питание ардуины происходит от сети 220В через адаптер (1А, 5В, по типу телефонной зарядки, брал на сайте интернет магазина Ардуино). Далее через реле происходит управление подсветкой(220В) и вентилятором(220В).
 
#include <Adafruit_Sensor.h>


#include <DHT.h>
#include <DHT_U.h>

#define RESTART_TIME 120000
#define relayout1 6
#define relayout2 7
#define ledPin 13
#define movPin 8
#define lPin 5
#define alPin A3
#define DHTPIN A2

DHT dht(DHTPIN, DHT11);

void setup() {

  
  Serial.begin(9600);  

  
  pinMode(relayout1, OUTPUT);
  pinMode(relayout2, OUTPUT);  
  pinMode(movPin, INPUT);
  pinMode(lPin, INPUT);
  pinMode(alPin, INPUT);
  pinMode(DHTPIN, INPUT);
  
  dht.begin();
  
  digitalWrite(relayout1, HIGH);
  digitalWrite(relayout2, HIGH);
}


void loop() {

  float h = dht.readHumidity();
  
  // Считываем температуру
  
  float t = dht.readTemperature();
  
  // Проверка удачно прошло ли считывание.
  
  if (isnan(h) || isnan(t)) {
    digitalWrite(ledPin, HIGH);
    delay(500);
    digitalWrite(ledPin, LOW);
    delay(500);
    digitalWrite(ledPin, HIGH);
    delay(500);
    digitalWrite(ledPin, LOW); 
    delay(500);
    digitalWrite(ledPin, HIGH);
    delay(500);
    digitalWrite(ledPin, LOW);
    delay(2000);
  
 // Serial.println("Не удается считать показания\n");
  
  return;
  
  }
  
  /*Serial.print(h);
  Serial.print("   \n");
  Serial.print(t);
  Serial.print("   \n");
  Serial.print(analogRead(alPin));
  Serial.print("   \n");
  Serial.print(digitalRead(movPin));
  Serial.print("   \n");*/
  

  while(h > 60.0){
    digitalWrite(relayout1, LOW);
    delay(60000);
    break;
  }
 
  while(digitalRead(movPin) == 1)
  {
    digitalWrite(relayout1, LOW);

    if(analogRead(alPin) > 700)
    {
      digitalWrite(relayout2, LOW);
      delay(60000);
    }
    else
    {
      digitalWrite(relayout2, HIGH);
      delay(60000);
    }
  }
  digitalWrite(relayout2, HIGH);
  digitalWrite(relayout1, HIGH);
}


 

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Схема?

И заодно, комментарии в тексте.