← ChangeLog | Indice | Avanti: Guida hardware →
1. Panoramica dell'applicazione
1.1 Scopo
ACRouter è un controller open source per il reindirizzamento automatico dell'energia solare in eccesso verso carichi resistivi (come scaldacqua) invece di esportarla nella rete. Ottimizza inoltre il consumo energetico durante i periodi tariffari di punta e fuori punta con limiti di consumo.
Obiettivo principale: Minimizzare l'esportazione di energia verso la rete controllando dinamicamente la potenza del carico in base al bilancio attuale tra produzione e consumo. Ridurre i costi del consumo di elettricità dalla rete.
Vantaggi principali:
- ✅ Gestione automatica dell'eccesso di energia solare
- ✅ Ottimizzazione delle tariffe fuori punta e dei limiti di consumo
- ✅ Riduzione dei costi dell'elettricità (autoconsumo)
- ✅ Costi delle apparecchiature più bassi. Non sono necessarie batterie per l'accumulo di energia
- ✅ Protezione dall'esportazione (modalità ECO)
- ✅ Configurazione flessibile tramite interfaccia web
- ✅ Supporto di più modalità operative
- ✅ Controllo di più dispositivi di consumo. Dimmer e relè.
- ✅ Codice sorgente aperto
1.2 Funzionalità
Misurazione e monitoraggio
- Misurazione della tensione di rete (sensore di tensione AC ZMPT107)
- Misurazione della corrente in 3 punti (sensori di corrente SCT-013/ACS-712):
- Corrente di carico (Carico)
- Corrente di rete (Rete) - rilevamento importazione/esportazione
- Corrente di generazione solare (Solare)
- Calcolo della potenza attiva in tempo reale
- Frequenza di aggiornamento: 200 ms (5 volte al secondo)
- Precisione di misurazione: ADC a 12 bit con DMA (fino a 80 kHz su 8 canali)
Controllo del carico
- Controllo dimmer ad angolo di fase (dimmer TRIAC)
- Regolazione graduale della potenza 0–100 %
- Sincronizzazione con il rilevatore di passaggio per lo zero
- Supporto per un massimo di 2 canali dimmer, espandibile ai GPIO disponibili
- Uscite relè (ROADMAP: Sviluppo Fase 2)
- 2 relè indipendenti, espandibile ai GPIO disponibili
- Polarità programmabile (Active HIGH/LOW)
Algoritmi di controllo
- Controller proporzionale (controller P)
- Bilanciamento P_grid → 0
- Coefficiente di guadagno regolabile (Kp)
- Modalità operative: OFF, AUTO, ECO, OFFGRID, MANUAL, BOOST
- Anti-sfarfallio - attenuazione delle variazioni del dimmer
Comunicazione
- WiFi: Modalità AP (192.168.4.1) + modalità STA (connessione al router)
- WebServer: REST API + interfaccia Material UI
- Console seriale: Riga di comando per la configurazione (115200 baud)
- Aggiornamenti OTA: Aggiornamenti firmware over-the-air (Fase 2)
Configurazione e archiviazione
- NVS (Non-Volatile Storage):
- Impostazioni ACRouter (modalità, Kp, setpoint)
- Configurazione WiFi (SSID, password)
- Configurazione hardware (pin GPIO, tipi di sensore)
- Interfaccia web:
- Dashboard con metriche in tempo reale
- Pagina impostazioni WiFi
- Pagina configurazione hardware
- Selezione della modalità operativa
- Terminale seriale (console):
- Visualizzazione metriche in tempo reale
- Riga di comando per la configurazione dell'hardware e dei parametri del dispositivo
- Selezione della modalità operativa
1.3 Funzionamento
Controllo automatico
- Misurazione della potenza:
- Tensione e correnti vengono misurate ogni 200 ms
- Calcolo del valore efficace (RMS - Root Mean Square)
-
Calcolo della potenza attiva (P = U × I × cos φ)
-
Determinazione del bilancio:
- P_solar = potenza dei pannelli solari
- P_load = consumo attuale della casa
- P_grid = importazione/esportazione verso la rete
-
P_dimmer = potenza del carico controllato
-
Algoritmo di controllo:
- Obiettivo: P_grid → 0 (zero esportazione/importazione)
- Controller proporzionale: ΔDimmer = Kp × P_grid
- Applicato al dimmer con limiti 0–100 %
Monitoraggio tramite interfaccia web
- Metriche in tempo reale:
- Tensione di rete (V)
- Correnti: Rete, Solare, Carico (A)
- Potenza: Rete, Solare, Carico, Dimmer (W)
- Livello dimmer (%)
-
Modalità operativa attuale
-
Informazioni di sistema:
- Versione firmware
- Tempo di attività
- Memoria heap (RAM libera)
- WiFi RSSI (livello del segnale)
Configurazione tramite interfaccia web
- Selezione della modalità operativa (6 pulsanti)
- Controllo manuale del dimmer (cursore 0–100 %)
- Configurazione WiFi (scansione reti, connessione)
- Configurazione pin GPIO e tipi di sensore
- Calibrazione dei sensori (moltiplicatore, offset)
- Riavvio del dispositivo
1.4 Modalità operative
OFF (0) - Disattivato
Descrizione: Il dimmer è completamente disattivato (0 %), il sistema è inattivo.
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) - Automatico (router solare)
Descrizione: Modalità principale del router solare. Bilanciamento automatico di P_grid → 0.
Algoritmo:
// 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)
Esempio:
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) - Economia (anti-esportazione)
Descrizione: Impedisce l'esportazione verso la rete. L'importazione è consentita, ma l'esportazione è vietata.
Algoritmo:
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
Esempio:
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) - Fuori rete
Descrizione: Modalità per sistemi autonomi con batterie. Utilizza l'eccesso di energia solare per il carico.
Algoritmo:
// 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
Esempio:
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) - Modalità manuale
Descrizione: Il dimmer è impostato su un livello fisso (nessuna automazione).
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%)
Esempio:
# 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) - Potenza massima
Descrizione: Dimmer al 100 % (riscaldamento forzato).
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
Esempio:
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 Tabella comparativa delle modalità
| Modalità | Controllo dimmer | Bilanciamento P_grid | Importazione consentita | Esportazione consentita | Caso d'uso |
|---|---|---|---|---|---|
| OFF | 0 % (fisso) | ❌ No | N/A | N/A | Manutenzione |
| AUTO | Automatico | ✅ Sì (→ 0) | ✅ Sì | ✅ Sì | Router solare standard |
| ECO | Auto (anti-esportazione) | ⚠️ Parziale | ✅ Sì | ❌ No | Nessun contratto di esportazione |
| OFFGRID | Auto (solo solare) | ❌ No | N/A | N/A | Sistemi fuori rete |
| MANUAL | Fisso (utente) | ❌ No | ✅ Sì | ✅ Sì | Test / Tariffa notturna |
| BOOST | 100 % (fisso) | ❌ No | ✅ Sì | ❌ No | Riscaldamento rapido |
1.6 Scenari d'uso
Scenario 1: Router solare standard
Equipment:
- 3 kW solar panels
- Sensors: Solar, Grid, Load, Voltage
- Load: 2 kW water heater
Modalità: 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
Scenario 2: Protezione dall'esportazione (ECO)
Equipment:
- 5 kW solar panels
- No grid export contract
- Sensors: Solar, Grid, Voltage
- Load: Water heater element
Modalità: 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)
Scenario 3: Sistema autonomo (OFFGRID)
Equipment:
- 2 kW solar panels
- 10 kWh batteries
- No grid connection
- Sensors: Solar, Load, Voltage
- Load: Tank heating element
Modalità: 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
Scenario 4: Tariffa notturna + scaldacqua
Equipment:
- Two-tariff meter (day/night)
- Sensors: Grid, Voltage
- Load: Water heater
Modalità: MANUAL (notte) / OFF (giorno)
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 Architettura del sistema
┌─────────────────────────────────────────────────────────────┐
│ 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 Pubblico di destinazione
ACRouter è progettato per:
- Appassionati di fai da te - costruire un router solare da soli
- Proprietari di casa con pannelli solari - ottimizzare l'autoconsumo
- Sviluppatori - base per progetti personalizzati (open source)
- Progetti educativi - apprendimento di IoT, gestione energetica, ESP32
- Piccole imprese - ridurre i costi dell'elettricità
1.9 Limitazioni e avvisi
⚠️ IMPORTANTE:
- Sicurezza elettrica
- Lavorare con tensione di rete a 230V è pericoloso
- È richiesta la qualifica di elettricista
- L'isolamento galvanico dei sensori è obbligatorio
-
Un dispositivo differenziale (RCD) è obbligatorio
-
Compatibilità del carico per i dimmer
- Adatto solo a carichi resistivi (elementi riscaldanti, riscaldatori)
- NON adatto a carichi induttivi (motori, trasformatori)
-
NON adatto all'elettronica (driver LED, alimentatori)
-
Potenza
- Il massimo è limitato dal modulo TRIAC (solitamente 2 kW)
- È necessario il raffreddamento per carichi elevati
-
Si raccomanda la protezione dal surriscaldamento
-
Precisione di misurazione
- È necessaria la calibrazione per la precisione
- Errore di ±5–10 % con le impostazioni di base
-
La temperatura influenza i sensori
-
Requisiti della rete
- Frequenza di rete stabile (50/60 Hz)
- Tensione di qualità senza forti fluttuazioni
- Il rilevatore di passaggio per lo zero è critico per il TRIAC