Découvrez comment utiliser un ESP32, Micropython et des capteurs de courant non invasifs SCT-013 pour surveiller et analyser la consommation électrique de votre maison ou de vos appareils. Ce guide complet vous explique l'installation, la configuration et la programmation pour une gestion énergétique intelligente.

 

SCT-013-050

 

SCT013-100

 

Dans un monde où l'efficacité énergétique devient primordiale, surveiller sa consommation électrique n'est plus un luxe mais une nécessité. Aujourd'hui, je vous présente comment créer votre propre système de mesure de courant avec le microcontrôleur ESP32 et le capteur SCT013-50, le tout programmé en MicroPython pour une flexibilité maximale.

Le capteur SCT013 : un allié pour l'électronique DIY

Le SCT013 est un transformateur de courant non invasif qui permet de mesurer jusqu'à 50A sans avoir à couper ou modifier votre installation électrique. Il suffit de le clipser autour d'un conducteur électrique pour obtenir une mesure précise de l'intensité qui y circule. Ce type de capteur est idéal pour les projets de domotique, de surveillance énergétique ou d'automatisation industrielle.

Matériel Requis : Le Kit du Parfait Électricien DIY  

1. ESP32 (Wi-Fi/Bluetooth intégré)  
2. Capteur SCT-013-50 ou  SCT-013-100 
3. Résistance de charge  (10-60Ω selon modèle)  
4. Câbles Dupont et breadboard  
5. Alimentation 5V pour l’ESP32  

Câblage : Connecter le SCT-013-50 à l’ESP32  

![Schéma de câblage](https://via.placeholder.com/600x200?text=ESP32+%2B+SCT013-50+Câblage)  
- Sortie du SCT-013 → Broche ADC de l’ESP32 (ex: GPIO33)  
- DAC de l’ESP32 (GPIO25/26) → Offset pour calibration  

L'architecture du code MicroPython

Le code présenté est structuré autour d'une classe SCT013 qui encapsule toutes les fonctionnalités nécessaires à la mesure. Analysons ses composants clés :

Initialisation et mise en place du décalage

Micropython
 
 

       def __init__(self,p_adc,p_dac=25):
            #pin dac sur ESP32 :25 et 26
            dac = DAC(Pin(p_dac)) #26
            offset = int(1.6*255/3.3)
            dac.write(offset)

            self.adc = ADC(Pin(p_adc)) #33
            self.adc.atten(ADC.ATTN_11DB)   # Configuration pour la plage 0-3.3V
            self.adc.width(ADC.WIDTH_10BIT)

Cette méthode initialise le convertisseur analogique-numérique (ADC) et le convertisseur numérique-analogique (DAC). Le DAC est utilisé pour créer un décalage (offset) de 1,6V, nécessaire car le capteur SCT013 génère un signal alternatif qui oscille autour de zéro, alors que l'ESP32 ne peut lire que des tensions positives.

Mesure crête à crête

MicropyLthon
 
 

      #Mesure crête à crête
      def crete(self):
            nb_per = 3
            T = 20 # période du signal
            tab = []

            deadline = ticks_add(ticks_us(), T*nb_per*1000)
            while ticks_diff(deadline,ticks_us()) > 0:
                  tab.append(self.adc.read())
            
            gmax = max(tab)
            gmin = min(tab)
                        
            return gmax - gmin

La méthode crete() capture plusieurs échantillons du signal sur 3 périodes (60 ms pour un signal à 50 Hz) et calcule la différence entre les valeurs maximale et minimale, ce qui donne l'amplitude crête à crête du signal.

Conversion en ampères efficaces

MicropyLthon

      def mes_eff(self):
            pt_carac = [(0,0), (23,0.211), 
                  (333,16.346),    
                  (473,23.701), 
                  (790,39.462) ]

            nb = len(pt_carac)-2
            i = 1
            a = -1
            cc = self.crete()
                  
            while a==-1 and i                   A= pt_carac[i-1]
                  B= pt_carac[i]
                  if cc <= B[0]+4:
                        a, b = self.equa_droite(A, B)
                  i+=1

            if a == -1:
                  A= pt_carac[i-1]
                  B= pt_carac[i]
                  a, b = self.equa_droite(A, B)
            
            g_eff = a * cc + b 
            if g_eff < 0 :
                  return 0.0 
            return round(g_eff,2)

La méthode mes_eff() utilise une interpolation linéaire entre des points caractéristiques pour convertir la valeur crête à crête en ampères efficaces (RMS). Cette approche par morceaux permet d'obtenir une précision satisfaisante sur toute la plage de mesure.

Code complet pour utiliser la librairie SCT013

MicropyLthon

from machine import ADC, DAC, Pin 
from time import ticks_add,ticks_diff,ticks_us,sleep

class SCT013:
      def __init__(self,p_adc,p_dac=25):
            #pin dac sur ESP32 :25 et 26
            dac = DAC(Pin(p_dac)) #26
            offset = int(1.6*255/3.3)
            dac.write(offset)

            self.adc = ADC(Pin(p_adc)) #33
            self.adc.atten(ADC.ATTN_11DB)   # Configuration pour la plage 0-3.3V
            self.adc.width(ADC.WIDTH_10BIT)

      def equa_droite(self,pt1, pt2):
            x1, y1 = pt1
            x2, y2 = pt2

            a = (y2 - y1) / (x2 - x1)
            b = y1 - a * x1

            return a, b

      #Mesure crête à crête
      def crete(self):
            nb_per = 3
            T = 20 # période du signal
            tab = []

            deadline = ticks_add(ticks_us(), T*nb_per*1000)
            while ticks_diff(deadline,ticks_us()) > 0:
                  tab.append(self.adc.read())
            
            gmax = max(tab)
            gmin = min(tab)
                        
            return gmax - gmin

      def mes_eff(self):
            pt_carac = [(0,0), (23,0.211), 
                  (333,16.346),    
                  (473,23.701), 
                  (790,39.462) ]

            nb = len(pt_carac)-2
            i = 1
            a = -1
            cc = self.crete()
                  
            while a==-1 and i                   A= pt_carac[i-1]
                  B= pt_carac[i]
                  if cc <= B[0]+4:
                        a, b = self.equa_droite(A, B)
                  i+=1

            if a == -1:
                  A= pt_carac[i-1]
                  B= pt_carac[i]
                  a, b = self.equa_droite(A, B)
            
            g_eff = a * cc + b 
            if g_eff < 0 :
                  return 0.0 
            return round(g_eff,2)


def main():
      sct = SCT013(p_adc=33,p_dac=26)
            
      while True:
      
            ieff = sct.mes_eff()
            print(ieff,"A")

            print("-"*20)
                        
            sleep(2)

if __name__ == "__main__":
      main()

 

 

Pourquoi cette approche est efficace

  1. Non-invasive : Pas besoin de couper le circuit électrique
  2. Précision ajustable : La calibration peut être affinée en ajoutant plus de points caractéristiques
  3. Faible coût : L'ESP32 et le SCT013-50 sont des composants abordables
  4. Flexibilité : Le code MicroPython est facilement modifiable pour d'autres capteurs

Applications pratiques

  • Surveillance de la consommation électrique d'appareils spécifiques
  • Détection de surconsommation anormale
  • Automatisation basée sur la consommation énergétique
  • Intégration dans des projets de maison intelligente

Comment améliorer ce système

Pour rendre ce système encore plus utile, vous pourriez :

  1. Ajouter une connexion WiFi pour envoyer les données vers un serveur
  2. Implémenter un calcul de puissance (en multipliant par la tension)
  3. Créer une interface web pour visualiser les données
  4. Stocker les mesures sur une carte SD pour analyse ultérieure

Mise en œuvre pratique

Pour assembler ce système, vous aurez besoin de :

  • Un microcontrôleur ESP32
  • Un capteur SCT013-50
  • Une résistance de charge (environ 33 Ω)
  • Un condensateur de 10 µF
  • Quelques fils de connexion

Le capteur doit être connecté à une entrée analogique de l'ESP32 via un circuit de conditionnement approprié, comprenant la résistance de charge et le condensateur pour filtrer le signal.

FAQ : Réponses aux Questions Courantes

Q : Puis-je mesurer du DC avec ce capteur ?
R : Non, le SCT-013-50 est conçu pour l’AC uniquement.

Q : Comment améliorer la précision ?
R : Utilisez une résistance de précision et étalonnez avec un appareil de référence.

Q : Est-ce compatible avec Arduino ?
R : Oui, mais MicroPython simplifie le prototypage !

 

Conclusion

Ce projet illustre parfaitement comment des composants électroniques simples, associés à un code bien structuré, peuvent créer un outil de mesure précis et utile. La classe SCT013 encapsule toute la complexité de la mesure et offre une interface simple pour obtenir des valeurs en ampères.

Que vous soyez un maker passionné, un étudiant en électronique ou un professionnel cherchant à optimiser la consommation énergétique, ce projet vous offre une base solide pour vos expérimentations.

N'hésitez pas à adapter ce code à vos besoins spécifiques et à partager vos améliorations avec la communauté !


Avez-vous déjà utilisé des capteurs de courant dans vos projets ? Quelles applications envisagez-

En poursuivant votre navigation sur mon site, vous acceptez l’utilisation des Cookies et autres traceurs  pour réaliser des statistiques de visites et enregistrer sur votre machine vos activités pédagogiques. En savoir plus.