8
Faire de la physique avec ARDUINO – 7 Nicolas HERVE & Gilles ESPINASSE (ENSFEA) Dans ce septième article nous allons utiliser un capteur d’intensité non invasif pour mesurer l’intensité alternative qui circule dans un fil. Cela va nous permettre de calculer la puissance d’un appareil utilisé couramment, branché sur ce fil. Nous allons ensuite voir comment afficher la valeur de la puissance mesurée sur un écran LCD 2 lignes 16 caractères communiquant en I2C qui ne nécessite que 4 fils pour son branchement (contrairement à celui vu dans l’article précèdent n°4 – Bulletin n°182). Capteur d’intensité SCT03-30 écran LCD en I2C Partie capteur d’intensité SCT03-30 : La fiche technique de ce capteur (que vous trouverez facilement sur internet) permet d’en comprendre le fonctionnement. Une bobine est reliée entre deux connexions (points L et K) de la prise jack 3,5mm (la connexion du milieu est vide). Une diode (TVS) permet de protéger le circuit. BULLETIN APEPA 83 n°186/2021

Faire de la physique avec ARDUINO – 7

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Faire de la physique avec ARDUINO – 7

Faire de la physique avec ARDUINO – 7 Nicolas HERVE & Gilles ESPINASSE (ENSFEA)

Dans ce septième article nous allons utiliser un capteur d’intensité non invasif pour mesurer l’intensité alternative qui circule dans un fil. Cela va nous permettre de calculer la puissance d’un appareil utilisé couramment, branché sur ce fil. Nous allons ensuite voir comment afficher la valeur de la puissance mesurée sur un écran LCD 2 lignes 16 caractères communiquant en I2C qui ne nécessite que 4 fils pour son branchement (contrairement à celui vu dans l’article précèdent n°4 – Bulletin n°182).

Capteur d’intensité SCT03-30 écran LCD en I2C

Partie capteur d’intensité SCT03-30 :

La fiche technique de ce capteur (que vous trouverez facilement sur internet) permet d’en comprendre le fonctionnement.

Une bobine est reliée entre deux connexions (points L et K) de la prise jack 3,5mm (la connexion du milieu est vide). Une diode (TVS) permet de protéger le circuit.

BULLETIN APEPA 83 n°186/2021

Page 2: Faire de la physique avec ARDUINO – 7

L’intensité que l’on cherche à mesurer crée une induction (théorème d’Ampère), dont la variation de flux engendre une force électromotrice (f.e.m.) variable (loi de Lenz) au niveau de la bobine. En mesurant cette f.e.m, on peut en déduire l’intensité que l’on cherche à mesurer.

Mis en présence d’une intensité variable, ce capteur va donc délivrer un courant alternatif que nous allons envoyer sur la carte Arduino.

Vous trouverez souvent sur internet le schéma ci-dessous que j’ai trouvé sur le forum Arduino (https://forum.arduino.cc/index.php?topic=574394.0):

Les résistances R1 et R2, associées à un condensateur C1 constituent un filtre permettant de diminuer le gain du circuit, afin que la tension alimentant Arduino ne soit pas trop élevée.

Les résistances R1 et R2 doivent être égale (nous avons pris 10Khoms) et le condensateur C1 doit être compris entre 10 et 100µF (47µF dans notre cas)

Il n’y a pas besoin de résistance « burden » pour les modèles « SCT013-valeur ampérage » car elle est intégrée, mais doit être mise pour les SCT013-000.

On branche le capteur sur la carte Arduino : un fil sur une entrée analogique et l’autre fil au milieu du pont diviseur comme le montre le schéma ci-dessous (plusieurs capteurs peuvent être branchés en parallèle) :

BULLETIN APEPA 84 n°186/2021

Page 3: Faire de la physique avec ARDUINO – 7

Pour le montage, on peut utiliser une prise jack femelle de 3,5mm, ou bien couper les fils et les souder sur une plaque adaptée, ou bien encore souder une petite tige métallique (patte de résistance) en guise de broche.

On peut se servir du principe de ce montage pour mesurer avec deux capteurs branchés au niveau du tableau électrique d’une maison la consommation électrique globale et la production électrique de panneaux solaires branchés sur le réseau.

Exemple de programme utilisant 2 capteurs (un sur la phase d’un tableau électrique qui alimente les appareils d’une maison, l’autre sur la phase de l’arrivée d’une production photovoltaïque branchée sur le réseau). Ce programme permet de calculer en temps réel le ratio entre puissance consommée et puissance produite.

#include <EmonLib.h> //bibliothèque des capteurs SCT013 #include <Wire.h> //bibliothèque de communication Wire EnergyMonitor emon1; // Crée le capteur d'intensité 1 dans la bibliothèque EnergyMonitor emon2; // Crée le 2ème capteur dans la bibliothèque const int capteurmaison=A0; //valeur entière de ce qu'envoie le capteur de consommation const int capteursoleil=A1; //valeur entière de ce que produisent les panneaux solaires const int tension=245;//tension du réseau EDF (à changer en fonction de la valeur de votre réseau)

BULLETIN APEPA 85 n°186/2021

Page 4: Faire de la physique avec ARDUINO – 7

void setup() Serial.begin(9600); // ouverture du port série pour communication série emon1.current(capteurmaison, 30); // Courant: pin d'entrée, calibration du capteur d'intensité (ici 30 car nous avons un SCT013-30) // (10 pour le SCT013-10, 50 pour le SCT013-50, à calculer pour un SCT013-000). emon2.current(capteursoleil, 30); // Current: pin d'entrée, calibration du capteur d'intensité. delay(1000); void loop() double Irms = emon1.calcIrms(1480); // Calcul du courant capteur 1 int Puissancemaison=(Irms)*tension; //calcul de la puissance Irms = emon2.calcIrms(1480); // Calcul du courant capteur 2 int Puissancesoleil=(Irms)*tension; //calcul de la puissance int Puissanceresultante = Puissancesoleil-Puissancemaison; //calcul de la puissance disponible (positive si les panneaux produisent plus ou négative si la maison consomme une énergie supplémentaire du fournisseur national) Serial.print(Puissancemaison); //affiche la puissance consommée par la maison sur le port série Serial.print(" "); Serial.print(Puissancesoleil); //affiche sur le port série la puissance fournie par les panneaux Serial.print(" "); // on espace avant d'écrire sur la même ligne Serial.println(Puissanceresultante); //affiche la puissance en surplus ou demandée au réseau EDF delay(2000); //attend 2 secondes avant la prochaine mesure

Partie écran LCD I2C (16 caractères 2lignes) :

Nous allons nous intéresser à afficher sur un écran LCD les valeurs de consommation et de production électrique mesurée avec le capteur SCT 03-30

Sur un écran LCD classique est ajouté un module électronique de communication I2C ci-dessous :

Le composant bleu est le potentiomètre de l’intensité du rétroéclairage.

BULLETIN APEPA 86 n°186/2021

Page 5: Faire de la physique avec ARDUINO – 7

Le branchement de celui-ci est plus simple que l’écran LCD vu dans le bulletin n°182, car seuls quatre fils sont branchés :

GND : à la masse de l’Arduino Vcc : au 5v de l’Arduino SDA : à l’entrée analogique A4 SCL : à l’entrée analogique A5

Exemple de programme pour l’écran :

#include <LiquidCrystal_I2C.h> //bibliothèque de l'écran LCD en I2C (seulement 4 fils) à installer LiquidCrystal_I2C lcd(0x3F, 16, 2); //on déclare l'adresse I2C de l'écran (voir programme i2c_scanner sur le site arduino), le nombre de caractères et de lignes du LCD void setup() lcd.init(); //initialisation de l'écran lcd lcd.backlight(); //activation du rétroéclairage du lcd lcd.setCursor(2,0); // positionne le curseur sur la première ligne 1 et troisième colonne du LCD lcd.print("Puissance"); // écrit le texte void loop() lcd.clear(); lcd.setCursor(0,0); // positionne le curseur sur la première colonne et première ligne du LCD lcd.print("Pm "); // affiche les lettres "Pm" lcd.print(Puissancemaison); // affiche la valeur de la puissance sur le LCD lcd.setCursor(9,0); // positionne le curseur sur la première colonne et première ligne du LCD lcd.print("Ps "); // affiche les lettres "Ps" lcd.print(Puissancesoleil); // affiche la valeur de la puissance sur le LCD lcd.setCursor(0,1); // positionne le curseur sur la première colonne et première ligne du LCD lcd.print("P dispo "); // affiche la chaine de caractère "P dispo" lcd.print(Puissanceresultante); // affiche la valeur de la puissance sur le LCD delay(2000); //attend 2 secondes avant la prochaine mesure Attention si vous voulez connaitre l’adresse de votre écran I2C que vous devez indiquer dans le programme chargez le programme du scanner sur le site arduino :

https://playground.arduino.cc/Main/I2cScanner/

Lorsque vous lancez celui-ci, il vous donne l’adresse I2C du composant connecté.

BULLETIN APEPA 87 n°186/2021

Page 6: Faire de la physique avec ARDUINO – 7

Affichage sur un écran de la puissance mesurée

Schéma final du circuit écran LCD + capteurs d’intensité (consommation / production électrique) :

Programme complet :

/*Programme d'affichage de puissance produite et consommée d'un système solaire d'une maison à base de capteurs d'intensité non invasifs SCT013-30. Il existe aussi les -10 (supporte 10Ampères), les -50 (supporte 50Ampères) facile à calibrer et sans ajouter de résistance "burden" comme souvent indiqué sur intenet. Seul le SCT013-000 (supporte jusqu'à 100Ampères) nécessite cette résistance "burden". Les capteurs peuvent se mettre en parallèle les uns avec les autres (seuls les deux bouts de la prise jack sont connectés à la bobine du capteur). Il suffit de faire le montage que l'on trouve facilement sur internet: un fil sur une entrée analogique de l'arduino et l'autre sur le point milieu d'un pont diviseur de tension entre 0 et 5v de l'arduino avec un condensateur en parallèle de la résistance placée entre 0 et 2,5v du pont. Les résistances doivent être égales bien sûr et avoir une valeur comprise entre 10kΩ et 470kΩ, le condensateur entre 10 et 100µF */ #include <EmonLib.h> //bibliothèque des capteurs SCT013 #include <Wire.h> //bibliothèque de communication Wire #include <LiquidCrystal_I2C.h> //bibliothèque de l'écran LCD en I2C (seulement 4 fils) à installer LiquidCrystal_I2C lcd(0x3F, 16, 2); //on déclare l'adresse I2C de l'écran (voir programme i2c_scanner sur le site arduino), le nombre de caractères et de lignes du LCD

BULLETIN APEPA 88 n°186/2021

Page 7: Faire de la physique avec ARDUINO – 7

EnergyMonitor emon1; // crée le capteur d'intensité 1 dans la bilibothèque EnergyMonitor emon2; // crée le 2 ème capteur dans la bilibothèque const int capteurmaison=A0; //valeur entière du signal du capteur de consommation const int capteursoleil=A1; //valeur entière de ce que produisent les panneaux solaires const int tension=245;//tension du réseau EDF (à changer en fonction de la valeur de votre réseau) void setup() Serial.begin(9600); //ouverture du port série pour communication série lcd.init(); //initialisation de l'écran LCD lcd.backlight(); //activation du rétroéclairage du LCD lcd.setCursor(2,0); // positionne le curseur sur la première ligne 1 et troisième colonne du LCD lcd.print("Puissance"); // écrit le texte emon1.current(capteurmaison, 30); // calibration du capteur (pin d'entrée, calibration du capteur d'intensité1), ici 30 car nous avons un SCT013-30 // (10 pour le SCT013-10, 50 pour le SCT013-50, à calculer pour un SCT013-000). emon2.current(capteursoleil, 30); // calibration (pin d'entrée, calibration du capteur d'intensité2) delay(1000); void loop() double Irms = emon1.calcIrms(1480); // calcul du courant capteur 1 int Puissancemaison=(Irms)*tension; //calcul de la puissance Irms = emon2.calcIrms(1480); // calcul du courant capteur 2 int Puissancesoleil=(Irms)*tension; //calcul de la puissance int Puissanceresultante = Puissancesoleil-Puissancemaison; //calcul de la puissance disponible (positive si les panneaux produisent plus ou négative si la maison consomme une énergie supplémentaire) Serial.print(Puissancemaison); //affiche la puissance consommée par la maison sur le port série Serial.print(" "); // on espace avant d'écrire sur la même ligne Serial.print(Puissancesoleil); //affiche sur le port série la puissance fournie par les panneaux Serial.print(" "); // on espace avant d'écrire sur la même ligne Serial.println(Puissanceresultante); //affiche la puissance en surplus ou demandée au réseau EDF lcd.clear(); lcd.setCursor(0,0); // positionne le curseur sur la première colonne et première ligne du LCD lcd.print("Pm "); // affiche "Pm" lcd.print(Puissancemaison); // affiche la valeur de la puissance sur le LCD lcd.setCursor(9,0); // positionne le curseur sur la dixième colonne et première ligne du LCD

BULLETIN APEPA 89 n°186/2021

Page 8: Faire de la physique avec ARDUINO – 7

lcd.print("Ps "); // affiche "Ps" lcd.print(Puissancesoleil); // affiche la valeur de la puissance sur le LCD lcd.setCursor(0,1); // positionne le curseur sur la première colonne et deuxième ligne du LCD lcd.print("P dispo "); // affiche "P disponible" lcd.print(Puissanceresultante); // affiche la valeur de la puissance sur le LCD delay(2000); //attend 2 secondes avant la prochaine mesure

Prix du projet Liste des composants électroniques et tarifs TTC (exemple chez Gotronic) :

Arduino Uno 3 (19,50€) ou carte compatible Gotronic (10,90€) Capteur d’intensité SCT013-30 (12,50€ x 2) 2 résistances 10KΩ (0,20€ les 10) 1 condensateur 47µF 25V (0,10€)

Total : maximum 44,80€ TTC Bibliographie https://www.jeremyrenove.com/capteur-de-courant-sct013-arduino-et-ecran-lcd-en-i2c/

BULLETIN APEPA 90 n°186/2021