Зависания 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

Схема?

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

SegaKHV
Offline
Зарегистрирован: 13.03.2018

В примере к библиотеке DHT есть такая строчка:

  // Wait a few seconds between measurements.
  delay(2000);

Может датчику не нравится, что вы его непрерывно долбите запросами и он отваливается?

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Вангую про помехи по питанию от реле. Впрочем, без схемы существующих у ТС соединений тут гадать нечего.

kalapanga
Offline
Зарегистрирован: 23.10.2016

Удивительно, что оно хоть как-то работает, постоянно "отдыхая" в минутных delay.