Доброго времени суток! Только начинаю осваивать просторы Ардуино. Решил собрать блок управления силовой нагрузкой через контактор: Спойлер: Фото Контактором управляет реле, подключенное к ардуино. Время беру с 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, а не на прямую с блока питания? Буду очень благодарен за советы!
Вот эти два пункта - главное проблема. Начинать надо с простого. В коде у вас на пять секунд подается на реле высокий уровень. Часы получаются в 12часовом формате, а сравниваются с 16 часами. По фото ничего не понятно. Где документация на реле?
Перед установкой режима OUTPUT установите значение пина LOW или HIGH. Скорее всего нужно HIGH. У модулей реле обычно логика инвертированная. LOW включает реле, HIGH отключает. Силовую нагрузку не следует подключать к пинам Arduino. И что-то я сомневаюсь, что вы скетч загрузили на Arduino.
Обычное реле для ардуино стоит: Оно замыкает цепь управления контактором. А контактор уже замыкает силовую цепь.
Сделал отключение реле при запуске по вашему совету - проблема исчезла) Код (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 работает точно. Я видимо не так сменил часовой формат?