Зависания Arduino Nano
- Войдите на сайт для отправки комментариев
Пнд, 16/04/2018 - 16:51
Доброго времени суток. Собрал проект на базе 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); }
Схема?
И заодно, комментарии в тексте.
В примере к библиотеке DHT есть такая строчка:
// Wait a few seconds between measurements.
delay(2000);
Может датчику не нравится, что вы его непрерывно долбите запросами и он отваливается?
Вангую про помехи по питанию от реле. Впрочем, без схемы существующих у ТС соединений тут гадать нечего.
Удивительно, что оно хоть как-то работает, постоянно "отдыхая" в минутных delay.