Вот что получилось после нескольких попыток с уточнениями и дополнениями:
Финальная версия:
Схема с двумя потенциометрами, LCD-дисплеем и гибкими настройками
1. Компоненты:
Arduino Uno/Nano
4 твердотельных реле (SSR) (по 2 на каждый источник)
2 источника тока (разные параметры)
2 потенциометра (10 кОм) – регулировка времени прямого/обратного тока
LCD-дисплей (I2C, 16x2) – отображение параметров
Кнопка – старт/стоп
2. Схема подключения:
text
LCD (I2C):
- SDA → A4 (Arduino Uno)
- SCL → A5 (Arduino Uno)
Потенциометры:
- Прямой ток → A0
- Обратный ток → A1
Реле:
- SSR1 (Источник 1 +) → D2
- SSR2 (Источник 1 -) → D3
- SSR3 (Источник 2 +) → D4
- SSR4 (Источник 2 -) → D5
Кнопка → D6 (с подтяжкой к +5V через 10к резистор)
3. Программа с LCD и потенциометрами:
cpp
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // Адрес 0x27, дисплей 16x2
const int potForward = A0; // Прямой ток
const int potReverse = A1; // Обратный ток
const int relay1 = 2; // SSR1 (+)
const int relay2 = 3; // SSR2 (-)
const int relay3 = 4; // SSR3 (+)
const int relay4 = 5; // SSR4 (-)
const int buttonPin = 6; // Кнопка
unsigned long forwardTime = 5000; // По умолчанию 5 сек
unsigned long reverseTime = 1000; // По умолчанию 1 сек
bool isRunning = false;
void setup() {
// Инициализация реле
pinMode(relay1, OUTPUT);
pinMode(relay2, OUTPUT);
pinMode(relay3, OUTPUT);
pinMode(relay4, OUTPUT);
// Инициализация кнопки
pinMode(buttonPin, INPUT_PULLUP);
// Инициализация LCD
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Прямой: ");
lcd.setCursor(0, 1);
lcd.print("Обратный: ");
Serial.begin(9600);
}
void loop() {
// Чтение потенциометров (100-10000 мс)
forwardTime = map(analogRead(potForward), 0, 1023, 100, 10000);
reverseTime = map(analogRead(potReverse), 0, 1023, 100, 10000);
// Управление кнопкой
if (digitalRead(buttonPin) == LOW) {
isRunning = !isRunning;
delay(300); // Антидребезг
}
// Обновление дисплея
updateDisplay();
if (isRunning) {
// Прямой ток
digitalWrite(relay1, HIGH);
digitalWrite(relay2, HIGH);
digitalWrite(relay3, LOW);
digitalWrite(relay4, LOW);
delay(forwardTime);
// Обратный ток
digitalWrite(relay1, LOW);
digitalWrite(relay2, LOW);
digitalWrite(relay3, HIGH);
digitalWrite(relay4, HIGH);
delay(reverseTime);
} else {
// Выключение всех реле
digitalWrite(relay1, LOW);
digitalWrite(relay2, LOW);
digitalWrite(relay3, LOW);
digitalWrite(relay4, LOW);
}
}
void updateDisplay() {
lcd.setCursor(8, 0);
lcd.print(" "); // Очистка предыдущего значения
lcd.setCursor(8, 0);
lcd.print(forwardTime / 1000.0, 1);
lcd.print("s");
lcd.setCursor(9, 1);
lcd.print(" "); // Очистка предыдущего значения
lcd.setCursor(9, 1);
lcd.print(reverseTime / 1000.0, 1);
lcd.print("s");
}
4. Как это работает:
Потенциометры регулируют:
Левый – время прямого тока (0.1-10 сек)
Правый – время обратного тока (0.1-10 сек)
LCD-дисплей показывает:
Верхняя строка: время прямого тока
Нижняя строка: время обратного тока
Кнопка:
Включает/выключает процесс
Реле:
SSR1/SSR2 – работают в фазе прямого тока
SSR3/SSR4 – работают в фазе обратного тока
5. Важные нюансы:
Для I2C LCD проверьте адрес (обычно 0x27 или 0x3F)
SSR должны соответствовать току ваших источников
При необходимости можно добавить:
Звуковую индикацию
Светодиодные индикаторы
Защиту от перегрева
Наверное воспользуюсь этим решением. Всем спасибо
Добавлено after 6 minutes 55 seconds:Самое простое решение переключатель полярности вручную. Делается на сдвоенном переключателе ПКН.

Хотел поставить плюс за юмор, но мне пока нельзя ))