12

Arduino (Wemos D1 m1 v3.0) и 3 реле

Есть Wemos D1 и 3 реле. Прошу помощи в написании скетча, вот что я хочу:
Реле №1 (подключено к пину D4) включается на 15 минут, выключается на 45 минут;
Реле №2 (подключено к пину D3) включается на 2 часа, выключается на 4 часа;
Реле №3 (подключено к пину D2) включается на 8 часов, выключается на 16 часов.
Для одного реле написал скетч сам при помощи delay, а как для трёх реле реализовать?

Схема работы

Arduino/Ардуино проекты

19 постов466 подписчиков

Правила сообщества

— Не оскорблять администрацию.

— Не оскорблять других участников.

— Не затрагивать тему политики.

— Не материться!

— Не допускаются расистские высказывания, сексизм, национализм.

— Запрещена реклама сторонних проектов, товаров, сайтов, блогов, ютуб каналов.

— Нельзя публиковать картинки и комментарии явно сексуального характера.

— Нет спаму и фишингу!

2
Автор поста оценил этот комментарий
Вот что выдал ИИ
Конечно, я могу помочь в написании скетча для Ардуино. Вот примерный код, который должен выполнить требуемые действия:

```
const int relay1Pin = 4; // пин для управления реле №1
const int relay2Pin = 3; // пин для управления реле №2
const int relay3Pin = 2; // пин для управления реле №3

void setup() {
pinMode(relay1Pin, OUTPUT); // устанавливаем пины на выход
pinMode(relay2Pin, OUTPUT);
pinMode(relay3Pin, OUTPUT);
}

void loop() {
// включение/выключение реле №1
digitalWrite(relay1Pin, HIGH); // включаем реле №1
delay(15 * 60 * 1000); // ждем 15 минут
digitalWrite(relay1Pin, LOW); // выключаем реле №1
delay(45 * 60 * 1000); // ждем 45 минут

// включение/выключение реле №2
digitalWrite(relay2Pin, HIGH); // включаем реле №2
delay(2 * 60 * 60 * 1000); // ждем 2 часа
digitalWrite(relay2Pin, LOW); // выключаем реле №2
delay(4 * 60 * 60 * 1000); // ждем 4 часа

// включение/выключение реле №3
digitalWrite(relay3Pin, HIGH); // включаем реле №3
delay(8 * 60 * 60 * 1000); // ждем 8 часов
digitalWrite(relay3Pin, LOW); // выключаем реле №3
delay(16 * 60 * 60 * 1000); // ждем 16 часов
}
```

Пожалуйста, не забудьте проверить этот код перед использованием и проверить правильность подключения реле к Ардуино и внутри схемы в целом.
раскрыть ветку (1)
2
Автор поста оценил этот комментарий

Реле должны работать одновременно как на схеме

Иллюстрация к комментарию
8
Автор поста оценил этот комментарий

На каждое реле заводишь:
1. В какое время надо ему поменять состояние (next_change)
2. Текущее состояние (state)
Рассмотрим на примере первого

изначально state_1 = 0, next_change_1 = 0
Дальше в update

if (millis() > next_change_1)
{

    state_1 = 1 - state_1;
    if (state_1 == 1) next_change = millis() + 15 * 60 * 1000; // выключить через 15 минут

    else next_change = millis() + 45 * 60 * 1000; // включить через 45 минут

}

ну и в конце update в нужный пин пишешь соответствующее state
и так по всем реле

раскрыть ветку (1)
2
Автор поста оценил этот комментарий

Вот так ?


int relay1 = D4;//реле 1
int relay2 = D3;//реле 2
int relay3 = D2;//реле 3
int state_1 = 0;
int next_change_1 = 0;

int state_2 = 0;
int next_change_2 = 0;

int state_3 = 0;
int next_change_3 = 0;



void setup() {

pinMode(relay1, OUTPUT);//реле 1

pinMode(relay2, OUTPUT);//реле 2

pinMode(relay3, OUTPUT);//реле 3

}


void loop() {

if (millis() > next_change_1)

{

state_1 = 1 - state_1;

if (state_1 == 1) next_change_1 = millis() + 15 * 60 * 1000; // выключить через 15 минут

digitalWrite(relay1, HIGH);

else next_change_1 = millis() + 45 * 60 * 1000; // включить через 45 минут digitalWrite(relay1, LOW);

}

if (millis() > next_change_2)

{

state_2 = 1 - state_2;

if (state_2 == 1) next_change_2 = millis() + 15 * 60 * 1000; // выключить через 15 минут

digitalWrite(relay2, HIGH);

else next_change_2 = millis() + 45 * 60 * 1000; // включить через 45 минут digitalWrite(relay2, LOW);

}

if (millis() > next_change_3)

{

state_2 = 1 - state_3;

if (state_3 == 1) next_change_3 = millis() + 15 * 60 * 1000; // выключить через 15 минут

digitalWrite(relay3, HIGH);

else next_change_3 = millis() + 45 * 60 * 1000; // включить через 45 минут digitalWrite(relay3, LOW);

}

показать ответы
2
Автор поста оценил этот комментарий

Программа, написанная ИИ - шедевр из шедевров. :))) . Правильно рекомендовали - через millis пиши. Через delay такое писать - неправильно, ибо она будет обрабатывать все последовательно. Если совсем-совсем никак - напиши в личку, подскажу.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Не знаю как здесь в личку писать

1
Автор поста оценил этот комментарий

можно использовать прерывание таймера, если осилишь. у гайвеоа или в заметках ардуишика разжёвано хорошо.
можешь использовать готовую прошивку, например  tasmota . явный оверхед, может  занять теже полдня установка, но по итогу довольно удобно , часы по NTP, вебморда и mqtt в комплекте.
лично мне -- очень понравилось, теперь хочу такую штуку в каждую распаечную коробку.

да установку часов в самописной прошивке тоже нужно будет делать. перезагрузка в полночь тоже считается xD. по сложности оба варианта +- похожи.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

В tasmota не нашёл, где можно настроить работу реле по моему сценарию

показать ответы
2
Автор поста оценил этот комментарий

Программа, написанная ИИ - шедевр из шедевров. :))) . Правильно рекомендовали - через millis пиши. Через delay такое писать - неправильно, ибо она будет обрабатывать все последовательно. Если совсем-совсем никак - напиши в личку, подскажу.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Если есть готовое решение или не сложно написать скетч, прошу помочь. Можно сюда кинуть  8164912@gmail.com