Se rendre au contenu

← ChangeLog | Sommaire | Suivant : Guide matériel →

1. Vue d'ensemble de l'application



1.1 Objectif

ACRouter est un contrôleur open source permettant de rediriger automatiquement l'excédent d'énergie solaire vers des charges résistives (comme les chauffe-eau) au lieu de l'exporter vers le réseau. Il optimise également la consommation d'énergie pendant les périodes tarifaires heures pleines et heures creuses avec des limites de consommation.

Objectif principal : Minimiser l'export d'énergie vers le réseau en contrôlant dynamiquement la puissance de la charge en fonction du bilan courant entre production et consommation. Réduire les coûts de consommation d'électricité du réseau.


Avantages principaux :

  • ✅ Gestion automatique de l'excédent d'énergie solaire
  • ✅ Optimisation des tarifs heures creuses et des limites de consommation
  • ✅ Réduction des coûts d'électricité (autoconsommation)
  • ✅ Coûts d'équipement réduits. Pas de batteries nécessaires pour le stockage d'énergie
  • ✅ Protection contre l'export (mode ECO)
  • ✅ Configuration flexible via interface web
  • ✅ Plusieurs modes de fonctionnement supportés
  • ✅ Contrôle de plusieurs appareils de consommation. Variateurs et relais.
  • ✅ Code source ouvert



1.2 Fonctionnalités


Mesure et surveillance

  • Mesure de la tension du réseau (capteur de tension AC ZMPT107)
  • Mesure du courant en 3 points (capteurs de courant SCT-013/ACS-712) :
  • Courant de charge (Charge)
  • Courant du réseau (Réseau) - détection import/export
  • Courant de production solaire (Solaire)
  • Calcul de la puissance active en temps réel
  • Fréquence de mise à jour : 200 ms (5 fois par seconde)
  • Précision de mesure : ADC 12 bits avec DMA (jusqu'à 80 kHz sur 8 canaux)


Contrôle de charge

  • Commande de variateur à angle de phase (variateur TRIAC)
  • Réglage progressif de la puissance 0–100 %
  • Synchronisation avec le détecteur de passage par zéro
  • Support de jusqu'à 2 canaux de variateur, extensible aux GPIO disponibles
  • Sorties relais (ROADMAP : Développement Phase 2)
  • 2 relais indépendants, extensible aux GPIO disponibles
  • Polarité programmable (Active HIGH/LOW)


Algorithmes de contrôle

  • Contrôleur proportionnel (contrôleur P)
  • Équilibrage P_grid → 0
  • Coefficient de gain ajustable (Kp)
  • Modes de fonctionnement : OFF, AUTO, ECO, OFFGRID, MANUAL, BOOST
  • Anti-scintillement - lissage des changements du variateur


Communication

  • WiFi : Mode AP (192.168.4.1) + mode STA (connexion au routeur)
  • WebServer : REST API + interface Material UI
  • Console série : Ligne de commande pour la configuration (115200 baud)
  • Mises à jour OTA : Mises à jour firmware par voie hertzienne (Phase 2)


Configuration et stockage

  • NVS (Non-Volatile Storage) :
  • Paramètres ACRouter (mode, Kp, consigne)
  • Configuration WiFi (SSID, mot de passe)
  • Configuration matérielle (broches GPIO, types de capteurs)
  • Interface web :
  • Tableau de bord avec métriques en temps réel
  • Page de paramètres WiFi
  • Page de configuration matérielle
  • Sélection du mode de fonctionnement
  • Terminal série (console) :
  • Affichage des métriques en temps réel
  • Ligne de commande pour la configuration du matériel et des paramètres de l'appareil
  • Sélection du mode de fonctionnement



1.3 Fonctionnement


Contrôle automatique

  1. Mesure de puissance :
  2. La tension et les courants sont mesurés toutes les 200 ms
  3. Calcul de la valeur efficace (RMS - Root Mean Square)
  4. Calcul de la puissance active (P = U × I × cos φ)

  5. Détermination du bilan :

  6. P_solar = puissance des panneaux solaires
  7. P_load = consommation actuelle de la maison
  8. P_grid = import/export vers le réseau
  9. P_dimmer = puissance de la charge contrôlée

  10. Algorithme de contrôle :

  11. Objectif : P_grid → 0 (zéro export/import)
  12. Contrôleur proportionnel : ΔDimmer = Kp × P_grid
  13. Appliqué au variateur avec des limites de 0–100 %


Surveillance via interface web

  • Métriques en temps réel :
  • Tension du réseau (V)
  • Courants : Réseau, Solaire, Charge (A)
  • Puissance : Réseau, Solaire, Charge, Variateur (W)
  • Niveau du variateur (%)
  • Mode de fonctionnement actuel

  • Informations système :

  • Version du firmware
  • Temps de fonctionnement
  • Mémoire heap (RAM libre)
  • WiFi RSSI (niveau du signal)


Configuration via interface web

  • Sélection du mode de fonctionnement (6 boutons)
  • Contrôle manuel du variateur (curseur 0–100 %)
  • Configuration WiFi (scan des réseaux, connexion)
  • Configuration des broches GPIO et des types de capteurs
  • Calibrage des capteurs (multiplicateur, offset)
  • Redémarrage de l'appareil



1.4 Modes de fonctionnement


OFF (0) - Désactivé

Description : Le variateur est complètement désactivé (0 %), le système est inactif.

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) - Automatique (routeur solaire)

Description : Mode principal du routeur solaire. Équilibrage automatique de P_grid → 0.

Algorithme :

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)

Exemple :

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) - Économie (anti-export)

Description : Empêche l'export vers le réseau. L'import est autorisé, mais l'export est interdit.

Algorithme :

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

Exemple :

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) - Hors réseau

Description : Mode pour les systèmes autonomes avec batteries. Utilise l'excédent d'énergie solaire pour la charge.

Algorithme :

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

Exemple :

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) - Mode manuel

Description : Le variateur est réglé à un niveau fixe (pas d'automatisation).

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

Exemple :

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) - Puissance maximale

Description : Variateur à 100 % (chauffage forcé).

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

Exemple :

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 Tableau comparatif des modes

Mode Contrôle du variateur Équilibrage P_grid Import autorisé Export autorisé Cas d'utilisation
OFF 0 % (fixe) ❌ Non N/A N/A Maintenance
AUTO Automatique ✅ Oui (→ 0) ✅ Oui ✅ Oui Routeur solaire standard
ECO Auto (anti-export) ⚠️ Partiel ✅ Oui ❌ Non Pas de contrat d'export
OFFGRID Auto (solaire uniquement) ❌ Non N/A N/A Systèmes hors réseau
MANUAL Fixe (utilisateur) ❌ Non ✅ Oui ✅ Oui Test / Tarif de nuit
BOOST 100 % (fixe) ❌ Non ✅ Oui ❌ Non Chauffage rapide



1.6 Scénarios d'utilisation


Scénario 1 : Routeur solaire standard

Equipment:
- 3 kW solar panels
- Sensors: Solar, Grid, Load, Voltage
- Load: 2 kW water heater

Mode : 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



Scénario 2 : Protection contre l'export (ECO)

Equipment:
- 5 kW solar panels
- No grid export contract
- Sensors: Solar, Grid, Voltage
- Load: Water heater element

Mode : 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)



Scénario 3 : Système autonome (OFFGRID)

Equipment:
- 2 kW solar panels
- 10 kWh batteries
- No grid connection
- Sensors: Solar, Load, Voltage
- Load: Tank heating element

Mode : 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



Scénario 4 : Tarif de nuit + chauffe-eau

Equipment:
- Two-tariff meter (day/night)
- Sensors: Grid, Voltage
- Load: Water heater

Mode : MANUAL (nuit) / OFF (jour)

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 Architecture du système

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 Public cible

ACRouter est conçu pour :

  1. Les passionnés de DIY - construire un routeur solaire soi-même
  2. Les propriétaires avec panneaux solaires - optimiser l'autoconsommation
  3. Les développeurs - base pour des projets personnalisés (open source)
  4. Les projets éducatifs - apprentissage de l'IoT, de la gestion d'énergie, de l'ESP32
  5. Les petites entreprises - réduire les coûts d'électricité



1.9 Limitations et avertissements

⚠️ IMPORTANT :

  1. Sécurité électrique
  2. Travailler avec une tension secteur de 230V est dangereux
  3. Une qualification d'électricien est requise
  4. L'isolation galvanique des capteurs est obligatoire
  5. Un dispositif différentiel (RCD) est obligatoire

  6. Compatibilité de charge pour les variateurs

  7. Adapté uniquement aux charges résistives (éléments chauffants, radiateurs)
  8. NON adapté aux charges inductives (moteurs, transformateurs)
  9. NON adapté à l'électronique (drivers LED, alimentations)

  10. Puissance

  11. Le maximum est limité par le module TRIAC (habituellement 2 kW)
  12. Un refroidissement est nécessaire pour les charges élevées
  13. Une protection contre la surchauffe est recommandée

  14. Précision de mesure

  15. Un calibrage est nécessaire pour la précision
  16. Erreur de ±5–10 % avec les paramètres de base
  17. La température affecte les capteurs

  18. Exigences du réseau

  19. Fréquence réseau stable (50/60 Hz)
  20. Tension de qualité sans fortes fluctuations
  21. Le détecteur de passage par zéro est critique pour le TRIAC

← ChangeLog | Sommaire | Suivant : Guide matériel →