Доброго времени суток. Собрал проект на базе Arduino Nano для умного освещения и включения/выключения вентилятора в ванной. Все подключил. Система работает отлично, но..Спустя несколько часов (Рандомно вообще, может и 2 часа а может и 15-17) вся система начинает зависать и уже то ли датчики не реагируют, то ли сама плата уходит или в режим ожидания или что вообще(Я в этой области абсолютно новичек). После перезагрузки ардуины все снова работает отлажено. Система состоит из: Arduino Nano V3.0 AVR ATmega328P ИК датчик движения HC-SR501 Датчик освещения Датчик влажности DHT11 Двухканальное реле 5В 10А Питание ардуины происходит от сети 220В через адаптер (1А, 5В, по типу телефонной зарядки, брал на сайте интернет магазина Ардуино). Далее через реле происходит управление подсветкой(220В) и вентилятором(220В). Код (C++): #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); }
Вот, например, про watchdog https://geektimes.ru/post/255800/ У меня в одном проекте "коктейль "Жадность", там много плат I2C со своими подтягивающими резисторами, а выпаивать пока лень. Тоже виснет раз в день, но watchdog спасает.