Странно работает таймер Arduino Uno/DS3231/Реле

Тема в разделе "Arduino & Shields", создана пользователем Suyano, 22 фев 2017.

  1. Suyano

    Suyano Нерд

    Доброго времени суток! Только начинаю осваивать просторы Ардуино. Решил собрать блок управления силовой нагрузкой через контактор:
    [​IMG]
    Контактором управляет реле, подключенное к ардуино. Время беру с DS3231. Сам код:
    Код (C++):
    #include <DS3231.h>
    #include <Wire.h>
    #include <RTC.h>
    #include <Time.h>
    #include <TimeLib.h>
    int Relay = 7;
    DS3231 Clock;
    bool h12 = false;
    bool PM;
    void setup() {
      Serial.begin(9600);
      Wire.begin();
      pinMode(Relay, OUTPUT);
    }
    void loop() {
    int hour, minute;
    hour = Clock.getHour(h12, PM);
    minute = Clock.getMinute();
    if ( hour == 16 && minute == 40 )
      {
        digitalWrite(Relay, HIGH);
        delay(5000);
        digitalWrite(Relay, LOW);
      }
    if ( hour == 16 && minute == 51 )
      {
        digitalWrite(Relay, HIGH);
        delay(5000);
        digitalWrite(Relay, LOW);
      }
    if ( hour == 16 && minute == 57 )
      {
        digitalWrite(Relay, HIGH);
        delay(5000);
        digitalWrite(Relay, LOW);
      }
    }
    Суть проблемы: при запуске ардуины, реле замыкает цепь до момента отключения по таймеру (digitalWrite(Relay, LOW);), после, примерно через минуту он снова его включает, хотя в коде это время не указано. И так по всему заданому времени. Еще заметил, что когда реле разомкнуто, на нем периодически тускло сверкает зеленый светодиод и очень тихий щелчок (реле не замыкает цепь в эти моменты). В чем моя ошибка? И правильно делаю, что реле запитываю с ардуины 5V, а не на прямую с блока питания? Буду очень благодарен за советы!
     
  2. rkit

    rkit Гуру

    Вот эти два пункта - главное проблема. Начинать надо с простого.

    В коде у вас на пять секунд подается на реле высокий уровень.
    Часы получаются в 12часовом формате, а сравниваются с 16 часами.


    По фото ничего не понятно. Где документация на реле?
     
    Suyano нравится это.
  3. mcureenab

    mcureenab Гуру

    Перед установкой режима OUTPUT установите значение пина LOW или HIGH.
    Скорее всего нужно HIGH. У модулей реле обычно логика инвертированная. LOW включает реле, HIGH отключает.

    Силовую нагрузку не следует подключать к пинам Arduino.

    И что-то я сомневаюсь, что вы скетч загрузили на Arduino.
     
    Suyano нравится это.
  4. Suyano

    Suyano Нерд

    Обычное реле для ардуино стоит:
    [​IMG]
    Оно замыкает цепь управления контактором. А контактор уже замыкает силовую цепь.
     
  5. rkit

    rkit Гуру

    Вот обычное ардуино реле. а у вас китай какой-то неизвестный на фото.
    [​IMG]
     
    Suyano нравится это.
  6. mcureenab

    mcureenab Гуру

    Оно изображено в зеркале. Чтобы никто не догадался
     
    Suyano нравится это.
  7. Suyano

    Suyano Нерд

    Сделал отключение реле при запуске по вашему совету - проблема исчезла)
    Код (C++):
    #include <DS3231.h>
    #include <Wire.h>
    #include <RTC.h>
    #include <Time.h>
    #include <TimeLib.h>

    int Relay = 7;
    DS3231 Clock;
    bool h24 = false;
    bool PM;

    void setup() {
      Serial.begin(9600);
      Wire.begin();
      digitalWrite(Relay, HIGH);
      pinMode(Relay, OUTPUT);
    }

    void loop() {
    int hour, minute;

    hour = Clock.getHour(h24, PM);
    minute = Clock.getMinute();

    if ( hour == 17 && minute == 55 )
      {
        digitalWrite(Relay, HIGH);
        delay(5000);
        digitalWrite(Relay, LOW);
      }


    if ( hour == 17 && minute == 58 )
      {
        digitalWrite(Relay, HIGH);
        delay(5000);
        digitalWrite(Relay, LOW);
      }


    if ( hour == 18 && minute == 05 )
      {
        digitalWrite(Relay, HIGH);
        delay(5000);
        digitalWrite(Relay, LOW);
      }
    }
    В библиотеке про 12 часовой формат ничего не нашел, сменил число 12 на 24, в итоге реле сработало не в 17:55, а в 17:56 и не отключается до перезагрузки ардуино. DS3231 работает точно. Я видимо не так сменил часовой формат?
     
  8. mcureenab

    mcureenab Гуру

    Так опять же логика инвертированная. Включать нужно LOW, отключать HIGH. А у вас наоборот.
     
    Suyano нравится это.
  9. Suyano

    Suyano Нерд

    Спасибо вам большое!
     
  10. mcureenab

    mcureenab Гуру

    Лайкайте)))
     
    Suyano нравится это.