Перейти к содержимому

← 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 Функциональность


Автоматическое управление

  1. Измерение мощности:
  2. Напряжение и токи измеряются каждые 200 мс
  3. Расчёт RMS-значений (среднеквадратичных)
  4. Расчёт активной мощности (P = U × I × cos φ)

  5. Определение баланса:

  6. P_solar = мощность солнечных панелей
  7. P_load = текущее потребление дома
  8. P_grid = импорт/экспорт в сеть
  9. P_dimmer = мощность управляемой нагрузки

  10. Алгоритм управления:

  11. Цель: P_grid → 0 (нулевой экспорт/импорт)
  12. Пропорциональный регулятор: ΔDimmer = Kp × P_grid
  13. Применяется к диммеру с ограничением 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.

Алгоритм:

cpp
// 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)

Пример:

python
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) — Экономный (защита от экспорта)

Описание: Предотвращает экспорт в сеть. Импорт разрешён, экспорт — запрещён.

Алгоритм:

cpp
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

Пример:

python
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) — Автономный режим

Описание: Режим для автономных систем с аккумуляторами. Использует избыток солнечной энергии для нагрузки.

Алгоритм:

cpp
// 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

Пример:

python
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%)

Пример:

bash
# 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

Пример:

python
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 Архитектура системы

python
┌─────────────────────────────────────────────────────────────┐
│                      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 предназначен для:

  1. DIY-энтузиастов — самостоятельно собрать солнечный роутер
  2. Домовладельцев с солнечными панелями — оптимизировать самопотребление
  3. Разработчиков — основа для кастомных проектов (открытый исходный код)
  4. Образовательных проектов — изучение IoT, управления энергией, ESP32
  5. Малого бизнеса — снижение затрат на электроэнергию



1.9 Ограничения и предупреждения

⚠️ ВАЖНО:

  1. Электробезопасность
  2. Работа с сетевым напряжением 230 В опасна
  3. Требуется квалификация электрика
  4. Обязательна гальваническая развязка датчиков
  5. Обязательно УЗО (устройство защитного отключения)

  6. Совместимость нагрузок для диммеров

  7. Подходит только для резистивных нагрузок (нагревательные элементы, обогреватели)
  8. НЕ подходит для индуктивных нагрузок (двигатели, трансформаторы)
  9. НЕ подходит для электроники (LED-драйверы, блоки питания)

  10. Мощность

  11. Максимум ограничен TRIAC-модулем (обычно 2 кВт)
  12. При высоких нагрузках необходимо охлаждение
  13. Рекомендуется защита от перегрева

  14. Точность измерений

  15. Для точности необходима калибровка
  16. Погрешность ±5–10% при базовых настройках
  17. Температура влияет на датчики

  18. Требования к сети

  19. Стабильная частота сети (50/60 Гц)
  20. Качественное напряжение без сильных перепадов
  21. Детектор перехода через ноль критически важен для TRIAC

← ChangeLog | Содержание | Далее: Руководство по железу →