← ChangeLog | Содержание | Далее: Руководство по железу →
1. Обзор приложения
1.1 Назначение
ACRouter — открытый контроллер для автоматического перенаправления избытка солнечной энергии на резистивные нагрузки (например, водонагреватели) вместо подачи в сеть. Также оптимизирует потребление энергии в пиковые и непиковые тарифные периоды с учётом лимитов потребления.
Главная цель: минимизировать экспорт энергии в сеть за счёт динамического управления мощностью нагрузки на основе текущего баланса производства и потребления. Снизить затраты на покупку электроэнергии из сети.
Ключевые преимущества:
- ✅ Автоматическое управление избытком солнечной энергии
- ✅ Оптимизация непиковых тарифов и лимитов потребления
- ✅ Снижение затрат на электроэнергию (самопотребление)
- ✅ Снижение стоимости оборудования. Аккумуляторы для хранения не нужны
- ✅ Защита от экспорта (режим ECO)
- ✅ Гибкая настройка через веб-интерфейс
- ✅ Поддержка нескольких режимов работы
- ✅ Управление несколькими потребляющими устройствами. Диммеры и реле
- ✅ Открытый исходный код
1.2 Возможности
Измерение и мониторинг
- Измерение напряжения сети (датчик напряжения AC ZMPT107)
- Измерение тока в 3 точках (датчики тока SCT-013/ACS-712):
- Ток нагрузки (Load)
- Ток сети (Grid) — определение импорта/экспорта
- Ток солнечной генерации (Solar)
- Расчёт активной мощности в реальном времени
- Частота обновления: 200 мс (5 раз в секунду)
- Точность измерений: 12-битный ADC с DMA (до 80 кГц на 8 каналах)
Управление нагрузкой
- Управление AC-диммером с фазовым управлением (TRIAC-диммер)
- Плавная регулировка мощности 0–100%
- Синхронизация с детектором перехода через ноль
- Поддержка до 2 каналов диммера, расширяемых до доступных GPIO
- Выходы реле (ROADMAP: разработка Фаза 2)
- 2 независимых реле, расширяемых до доступных GPIO
- Программируемая полярность (Active HIGH/LOW)
Алгоритмы управления
- Пропорциональный регулятор (P-регулятор)
- Балансировка P_grid → 0
- Настраиваемый коэффициент усиления (Kp)
- Режимы работы: OFF, AUTO, ECO, OFFGRID, MANUAL, BOOST
- Защита от мерцания — сглаживание изменений диммера
Связь
- WiFi: режим AP (192.168.4.1) + режим STA (подключение к роутеру)
- WebServer: REST API + интерфейс Material UI
- Последовательная консоль: командная строка для настройки (115200 бод)
- OTA-обновления: обновление прошивки по воздуху (Фаза 2)
Конфигурация и хранение
- NVS (Non-Volatile Storage):
- Настройки ACRouter (режим, Kp, уставка)
- Конфигурация WiFi (SSID, пароль)
- Конфигурация железа (GPIO-пины, типы датчиков)
- Веб-интерфейс:
- Панель управления с показателями в реальном времени
- Страница настроек WiFi
- Страница конфигурации железа
- Выбор режима работы
- Последовательный терминал (консоль):
- Отображение показателей в реальном времени
- Командная строка для настройки железа и параметров устройства
- Выбор режима работы
1.3 Функциональность
Автоматическое управление
- Измерение мощности:
- Напряжение и токи измеряются каждые 200 мс
- Расчёт RMS-значений (среднеквадратичных)
-
Расчёт активной мощности (P = U × I × cos φ)
-
Определение баланса:
- P_solar = мощность солнечных панелей
- P_load = текущее потребление дома
- P_grid = импорт/экспорт в сеть
-
P_dimmer = мощность управляемой нагрузки
-
Алгоритм управления:
- Цель: P_grid → 0 (нулевой экспорт/импорт)
- Пропорциональный регулятор: ΔDimmer = Kp × P_grid
- Применяется к диммеру с ограничением 0–100%
Мониторинг через веб-интерфейс
- Показатели в реальном времени:
- Напряжение сети (В)
- Токи: Grid, Solar, Load (А)
- Мощность: Grid, Solar, Load, Dimmer (Вт)
- Уровень диммера (%)
-
Текущий режим работы
-
Системная информация:
- Версия прошивки
- Время работы
- Память кучи (свободная RAM)
- WiFi RSSI (уровень сигнала)
Настройка через веб-интерфейс
- Выбор режима работы (6 кнопок)
- Ручное управление диммером (слайдер 0–100%)
- Настройка WiFi (сканирование сетей, подключение)
- Конфигурация GPIO-пинов и типов датчиков
- Калибровка датчиков (коэффициент, смещение)
- Перезагрузка устройства
1.4 Режимы работы
OFF (0) — Отключён
Описание: Диммер полностью отключён (0%), система неактивна.
Usage:
- Maintenance
- Load disconnection
- Sensor testing without control
Behavior:
- Dimmer level = 0%
- Measurements continue (200 ms)
- Web interface is available
- Serial commands work
AUTO (1) — Автоматический (солнечный роутер)
Описание: Основной режим солнечного роутера. Автоматическая балансировка P_grid → 0.
Алгоритм:
// Every 200 ms
P_error = P_grid; // Positive = import, negative = export
delta = Kp * P_error; // Proportional controller
dimmer_level += delta;
dimmer_level = constrain(dimmer_level, 0, 100);
Behavior:
- P_grid > 0 (import from grid) → Increase dimmer (more load)
- P_grid < 0 (export to grid) → Decrease dimmer (less load)
- P_grid ≈ 0 → Dimmer stabilized
Settings:
- Kp (gain) - gain coefficient (default: 0.05)
- Higher Kp = faster response, but possible oscillations
- Lower Kp = smoother, but slower
- setpoint - target P_grid value (usually 0 W)
Пример:
Initial state:
P_solar = 2000 W
P_load = 500 W
P_grid = -1500 W (export!)
Dimmer = 0%
After 5 seconds (AUTO mode, Kp=0.05):
P_solar = 2000 W
P_load = 500 W
Dimmer = 75% (~1500 W to water heater)
P_grid = 0 W ✅ (balance achieved)
ECO (2) — Экономный (защита от экспорта)
Описание: Предотвращает экспорт в сеть. Импорт разрешён, экспорт — запрещён.
Алгоритм:
if (P_grid < 0) { // Export to grid
// Decrease dimmer (reduce load)
delta = Kp * P_grid; // Negative delta
dimmer_level += delta;
} else {
// Import is allowed, do not increase dimmer
// Keep current level
}
dimmer_level = constrain(dimmer_level, 0, 100);
Behavior:
- P_grid < 0 (export) → Decrease dimmer (avoid export)
- P_grid > 0 (import) → Do not change dimmer (import is allowed)
- P_grid = 0 → Dimmer is stable
Applications:
- Export tariff is unfavorable or absent
- Need to use only excess energy
- Export protection when there is no grid export contract
Пример:
Situation 1: Solar excess
P_solar = 3000 W
P_load = 1000 W
P_grid = -500 W (export)
→ ECO mode will increase dimmer by ~500 W → P_grid = 0
Situation 2: Solar shortage
P_solar = 500 W
P_load = 1000 W
P_grid = +500 W (import)
→ ECO mode will NOT change dimmer (import is allowed)
OFFGRID (3) — Автономный режим
Описание: Режим для автономных систем с аккумуляторами. Использует избыток солнечной энергии для нагрузки.
Алгоритм:
// Balance by solar panel current
P_available = P_solar - P_load; // Available power
if (P_available > 0) {
// There is solar excess → increase dimmer
dimmer_level = map(P_available, 0, P_dimmer_max, 0, 100);
} else {
// No excess → turn off dimmer (save battery)
dimmer_level = 0;
}
Behavior:
- Uses only solar energy
- Does not consider P_grid (no grid)
- Priority: main load → batteries → dimmer
- Dimmer works only when there is solar excess
Applications:
- Systems without grid connection
- Solar panels + batteries
- Maximize solar energy usage
Пример:
Daytime (sunny):
P_solar = 1500 W
P_load = 800 W
P_available = 700 W
→ Dimmer = 50% (~700 W to water heater)
→ Battery is not discharging
Evening (no sun):
P_solar = 0 W
P_load = 800 W (from battery)
→ Dimmer = 0% (battery saving)
MANUAL (4) — Ручной режим
Описание: Диммер установлен на фиксированный уровень (без автоматики).
Behavior:
- Dimmer level is set by user (0-100%)
- No automatic regulation
- Level is maintained until manually changed
Applications:
- Load testing
- Night tariff (set to 100%)
- Temperature control (set to 50%)
- System debugging
Settings:
- manual_level - dimmer level (0-100%)
Пример:
# Via Serial commands
set-manual 75 # Set dimmer to 75%
set-mode 4 # Switch to MANUAL mode
# Via web interface
1. Select MANUAL mode
2. Move slider to 75%
3. Click "Apply"
BOOST (5) — Максимальная мощность
Описание: Диммер на 100% (принудительный нагрев).
Behavior:
- Dimmer level = 100% (constant)
- Ignores all sensors
- Maximum power to load
Applications:
- Fast water heater heating
- Using cheap tariff
- Emergency mode
Warnings:
- ⚠️ High grid consumption
- ⚠️ Possible load overheating
- ⚠️ Monitor temperature manually
Пример:
Night tariff (23:00-07:00):
1. Switch to BOOST mode
2. Water heater heats at maximum
3. In the morning switch back to AUTO
Result:
Heating from cheap tariff
Daytime operation in AUTO mode (solar)
1.5 Сравнительная таблица режимов
| Режим | Управление диммером | Баланс P_grid | Импорт разрешён | Экспорт разрешён | Применение |
|---|---|---|---|---|---|
| OFF | 0% (фикс.) | ❌ Нет | N/A | N/A | Обслуживание |
| AUTO | Автоматический | ✅ Да (→ 0) | ✅ Да | ✅ Да | Стандартный солнечный роутер |
| ECO | Авто (защита от экспорта) | ⚠️ Частично | ✅ Да | ❌ Нет | Нет договора на экспорт |
| OFFGRID | Авто (только солнце) | ❌ Нет | N/A | N/A | Автономные системы |
| MANUAL | Фикс. (пользователь) | ❌ Нет | ✅ Да | ✅ Да | Тестирование / ночной тариф |
| BOOST | 100% (фикс.) | ❌ Нет | ✅ Да | ❌ Нет | Быстрый нагрев |
1.6 Сценарии использования
Сценарий 1: Стандартный солнечный роутер
Equipment:
- 3 kW solar panels
- Sensors: Solar, Grid, Load, Voltage
- Load: 2 kW water heater
Режим: AUTO
Operation:
1. During the day there is excess solar energy
2. P_grid is negative (export to grid)
3. Controller increases dimmer → water heater heating
4. P_grid balances → 0 (zero export/import)
5. All solar energy is used locally
Сценарий 2: Защита от экспорта (ECO)
Equipment:
- 5 kW solar panels
- No grid export contract
- Sensors: Solar, Grid, Voltage
- Load: Water heater element
Режим: ECO
Operation:
1. During the day solar excess → export to grid begins
2. ECO mode detects P_grid < 0
3. Dimmer increases → water heating
4. Export prevented (P_grid ≥ 0)
5. Evening sun sets → dimmer decreases
6. Import allowed (grid purchase when needed)
Сценарий 3: Автономная система (OFFGRID)
Equipment:
- 2 kW solar panels
- 10 kWh batteries
- No grid connection
- Sensors: Solar, Load, Voltage
- Load: Tank heating element
Режим: OFFGRID
Operation:
1. System is autonomous (no grid)
2. During the day solar excess → water heating
3. At night heating element is off (no sun)
4. Batteries are used for main load
5. Maximize solar energy usage
Сценарий 4: Ночной тариф + водонагреватель
Equipment:
- Two-tariff meter (day/night)
- Sensors: Grid, Voltage
- Load: Water heater
Режим: MANUAL (ночью) / OFF (днём)
Operation:
1. Night (23:00-07:00): MANUAL 100% (cheap tariff)
2. Day (07:00-23:00): OFF (expensive tariff)
3. Programmable via schedule (Phase 2: SCHEDULE mode)
1.7 Архитектура системы
┌─────────────────────────────────────────────────────────────┐
│ ESP32 Controller │
│ │
│ ┌─────────────┐ ┌──────────────┐ ┌────────────────────┐ │
│ │ PowerMeter │ │ Router │ │ DimmerHAL │ │
│ │ ADC │→ │ Controller │→ │ (Zero-cross) │ │
│ └─────────────┘ └──────────────┘ └────────────────────┘ │
│ ↓ ↓ │
│ Measurements TRIAC Control │
│ (200ms cycle) (50Hz sync) │
│ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ WiFi Manager │ │
│ │ ┌──────────────┐ ┌────────────────────────────┐ │ │
│ │ │ AP Mode │ │ WebServer (Material UI) │ │ │
│ │ │ 192.168.4.1 │ │ + REST API │ │ │
│ │ └──────────────┘ └────────────────────────────┘ │ │
│ └──────────────────────────────────────────────────────┘ │
│ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ ConfigManager + HardwareConfigManager │ │
│ │ (NVS Storage) │ │
│ └──────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
↑ ↓
┌────────────┐ ┌──────────────────┐
│ Sensors │ │ Dimmer Output │
├────────────┤ ├──────────────────┤
│ ZMPT107 │ │ TRIAC │
│ (Voltage) │ │ (0-100%) │
│ SCT-013 │ │ │
│ ACS-712 │ │ Load: │
│ (Current) │ │ Heater/Boiler │
│ x3 sensors │ │ (up to 2kW) │
└────────────┘ └──────────────────┘
1.8 Целевая аудитория
ACRouter предназначен для:
- DIY-энтузиастов — самостоятельно собрать солнечный роутер
- Домовладельцев с солнечными панелями — оптимизировать самопотребление
- Разработчиков — основа для кастомных проектов (открытый исходный код)
- Образовательных проектов — изучение IoT, управления энергией, ESP32
- Малого бизнеса — снижение затрат на электроэнергию
1.9 Ограничения и предупреждения
⚠️ ВАЖНО:
- Электробезопасность
- Работа с сетевым напряжением 230 В опасна
- Требуется квалификация электрика
- Обязательна гальваническая развязка датчиков
-
Обязательно УЗО (устройство защитного отключения)
-
Совместимость нагрузок для диммеров
- Подходит только для резистивных нагрузок (нагревательные элементы, обогреватели)
- НЕ подходит для индуктивных нагрузок (двигатели, трансформаторы)
-
НЕ подходит для электроники (LED-драйверы, блоки питания)
-
Мощность
- Максимум ограничен TRIAC-модулем (обычно 2 кВт)
- При высоких нагрузках необходимо охлаждение
-
Рекомендуется защита от перегрева
-
Точность измерений
- Для точности необходима калибровка
- Погрешность ±5–10% при базовых настройках
-
Температура влияет на датчики
-
Требования к сети
- Стабильная частота сети (50/60 Гц)
- Качественное напряжение без сильных перепадов
- Детектор перехода через ноль критически важен для TRIAC