#1 2023-01-28 13:04:49

leharlb
Учасник
Зареєстрований: 2023-01-28
Повідомлень: 1

Під час спрацюванні реле, годинник обнуляєця

Доброго дня. Зібрав скетч з просторів інтернету.
Така проблема :
Годинник 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);

  
  
}
}

Неактивний

#2 2023-01-28 13:19:12

Roman1984
Учасник
Зареєстрований: 2017-02-17
Повідомлень: 97

Re: Під час спрацюванні реле, годинник обнуляєця

У меня такое было, только с LCD-дисплеем. При срабатывании реле на дисплее вылезали "левые" символы.  Тут может быть два варианта:
1. Провал питания при подаче напряжения на обмотку реле.
2. Помехи при искрообразовании на подгоревших контактах.
В целом можно попробовать поставить в цепь питания контроллера и часов конденсаторы (электролит до 100 мкФ и неполярный на 100 нФ). Это даст защиту от низкочастотных и высокочастотных помех. Ну и само расположение сигнальных проводов CLK, DAT и RST лучше организовать подальше от реле.

Остання редакція Roman1984 (2023-01-28 13:20:02)

Неактивний

#3 2023-01-28 16:53:47

г0cть
Гість

Re: Під час спрацюванні реле, годинник обнуляєця

Проверь батарейку на часах

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму