Ви не увійшли.
Доброго дня. Зібрав скетч з просторів інтернету.
Така проблема :
Годинник DS1302 скидається до заводських коли спрацьовує реле (RELAY_PIN 13
RELAY_PIN2 12)
#include <Wire.h> // Добавляем необходимые библиотеки
#include <LiquidCrystal_I2C.h>
#include "DHT.h"
#include <DS1302.h>
#define DHTPIN 2 // к какому пину будет подключен сигнальный выход датчика
#define RELAY_PIN 13
#define RELAY_PIN2 12
#define ventil 11
//выбор используемого датчика
#define DHTTYPE DHT11 // DHT 11
Time t;
int d;
int m;
int s;
DHT dht(DHTPIN, DHTTYPE);
byte degree[8] = // кодируем символ градуса
{
B00111,
B00101,
B00111,
B00000,
B00000,
B00000,
B00000,
};
LiquidCrystal_I2C lcd(0x27,16,2); // Задаем адрес и размерность дисплея
DS1302 rtc(3, 4, 5);
void setup()
{
lcd.init(); // Инициализация lcd
lcd.backlight(); // Включаем подсветку
lcd.createChar(1, degree); // Создаем символ под номером 1
Serial.begin(9600);
dht.begin();
{
pinMode(RELAY_PIN, OUTPUT); // пин реле
pinMode(RELAY_PIN2, OUTPUT); // пин реле
pinMode(ventil, OUTPUT); // пин реле
}
}
bool lampState = false;
int lastMin;
int last15Min;
int lastHour;
void loop() {
// Send Day-of-Week(Передать день недели)
//Serial.print(rtc.getDOWStr());
// Serial.print(" ");
// Передать дату
Serial.print(rtc.getDateStr());
Serial.print(" -- ");
d=t.hour,DEC;
// Передать время
Serial.println(rtc.getTimeStr());
// Добавляем паузы в несколько секунд между измерениями
delay(2000);
// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
t = rtc.getTime();
d = t.hour, DEC;
m = t.min, DEC;
s = t.sec, DEC;
float h = dht.readHumidity();
// Read temperature as Celsius
float t = dht.readTemperature();
// Read temperature as Fahrenheit
float f = dht.readTemperature(true);
// Выводим показания влажности и температуры
lcd.setCursor(0, 0); // Устанавливаем курсор в начало 1 строки
lcd.print("Hum = % "); // Выводим текст
lcd.setCursor(7, 0); // Устанавливаем курсор на 7 символ
lcd.print(h, 1); // Выводим на экран значение влажности
lcd.setCursor(0, 1); // Устанавливаем курсор в начало 2 строки
lcd.print("Temp = 1C "); // Выводим текст, 1 - значок градуса
lcd.setCursor(7, 1); // Устанавливаем курсор на 7 символ
lcd.print(t,1); // Выводим значение температуры
// здесь запускаем вытяжку каждые 15 минут{
if (m % 15 == 0 && m != last15Min) {
Serial.print(rtc.getTimeStr());
last15Min = m;
digitalWrite(ventil, HIGH); // включаем кулер
Serial.println(" - Вытяжка запущена на 20 c.");
delay(20000); // время работы вытяжки
digitalWrite(ventil, LOW); // отключаем вытяжку
Serial.println("Вытяжка остановлена");
}
{
if (dht.readHumidity() < 65)digitalWrite (RELAY_PIN, 0);
else digitalWrite (RELAY_PIN, 1);
}
{
if (dht.readTemperature() < 27)digitalWrite (RELAY_PIN2, 0);
else digitalWrite (RELAY_PIN2, 1);
}
}
Неактивний
У меня такое было, только с LCD-дисплеем. При срабатывании реле на дисплее вылезали "левые" символы. Тут может быть два варианта:
1. Провал питания при подаче напряжения на обмотку реле.
2. Помехи при искрообразовании на подгоревших контактах.
В целом можно попробовать поставить в цепь питания контроллера и часов конденсаторы (электролит до 100 мкФ и неполярный на 100 нФ). Это даст защиту от низкочастотных и высокочастотных помех. Ну и само расположение сигнальных проводов CLK, DAT и RST лучше организовать подальше от реле.
Остання редакція Roman1984 (2023-01-28 13:20:02)
Неактивний
Проверь батарейку на часах