Utilisation d'un capteur de courant pour activer un relais

il ma déclare l'erreur suivante:

sketchdettecteur:1:1 : erreur : 'emon1' ne nomme pas de type
emon1.serialprint();
^~~~~
état de sortie 1
'emon1' ne nomme pas de type

la tension que tu surveilles est de combien? continu ou alternatif ?
ou raccordes tu ton capteur, sur quelle pinoche de l'arduino? il faut que ce soit sur A0
dans ton code, à la place de : emon1.current(0, 50); // je ne sais pas d'ou sort le 50

il faut

emon1.current(14, 50);  //( 14 est la pinoche A0 sur UNO) 

est ce que ce code compile bien chez toi?

// EmonLibrary examples openenergymonitor.org, Licence GNU GPL V3

#include "EmonLib.h"             // Include Emon Library
EnergyMonitor emon1;             // Create an instance

void setup()
{  
  Serial.begin(9600);
  
  //emon1.voltage(2, 234.26, 1.7);  // Voltage: input pin, calibration, phase_shift
  emon1.current(14, 111.1);       // Current: input pin A0, calibration.
}

void loop()
{
  emon1.calcVI(20,2000);         // Calculate all. No.of half wavelengths (crossings), time-out
  emon1.serialprint();           // Print out all variables (realpower, apparent power, Vrms, Irms, power factor)
  
  float realPower       = emon1.realPower;        //extract Real Power into variable
  float apparentPower   = emon1.apparentPower;    //extract Apparent Power into variable
  float powerFActor     = emon1.powerFactor;      //extract Power Factor into Variable
  float supplyVoltage   = emon1.Vrms;             //extract Vrms into Variable
  float Irms            = emon1.Irms;             //extract Irms into Variable
}

c'est un des deux codes d'exemple de la ibrairie.
il compile bien chez moi.

ce code avec un uno
image

sans rien de raccordé ( les entrées en l'air)

je laisse pour ce soir

bonjour
Oui, il compile bien.excuse moi, c' quoi sa?.
'ai accédé au moniteur, il affiche, 11:56:05.051 ->quand la lampe est hor tention et 11:58:07.970 -> quand la lampe est sous tention

Avec quel code?

avec le même code j'ai y ajouté "emon1.serialprint();"
pour éviter toute confusion, la lampe que j'ai désigné et une lampe que j'ai braché au secteur avec une phase qui traverse le capteur .

En principe, serialprint() affiche 5 valeurs et là je n'en vois qu'une.

void EnergyMonitor::serialprint()
{
  Serial.print(realPower);
  Serial.print(' ');
  Serial.print(apparentPower);
  Serial.print(' ');
  Serial.print(Vrms);
  Serial.print(' ');
  Serial.print(Irms);
  Serial.print(' ');
  Serial.print(powerFactor);
  Serial.println(' ');
  delay(100);
}

hello
voici ton code du départ, j' ai ajouté:
_des serial.print directement dans le prg.
_emon1.serial.print();
_viré le pinMode de la fin
_modifié l'attribution du pin 1 par le pin 14 (A0) donc emon1.current(14, 50);
_le capteur est sensé etre raccordé sur A0
_'ai placé un bout de fil dans A0, histoire d'avoir quelque chose qui arrive sur A0

#include <EmonLib.h>  // Inclure la bibliothèque EmonLib
EnergyMonitor emon1;  // Créer un objet de type EnergyMonitor

int relayPin = 10;     // Pin du relais
int cutOffCount = 0;  // Compteur de coupures de courant
unsigned long lastActivationTime = 0;  // Temps depuis la dernière activation
unsigned long totalActivationTime = 0;  // Temps total d'activation

void setup() {
  pinMode(relayPin, OUTPUT);  // Configurer la broche du relais en sortie

  emon1.current(14, 50);  // Configurer le capteur de courant
  Serial.begin(115200);    // Initialiser la communication série
}

void loop() {
  double Irms = emon1.calcIrms(1480);  // Lire le courant (1480 échantillons)
  Serial.print(F("Irms =  "));Serial.println(Irms);
emon1.serialprint();
  if (Irms > 0.1) {  // Vérifier si le courant est supérieur à 0.1 A (pour éviter les fausses détections)
    if (millis() - lastActivationTime > 600000 && cutOffCount < 2) {  // Vérifier si le temps écoulé depuis la dernière activation est supérieur à 10 minutes et si le nombre de coupures de courant est inférieur à 2
      digitalWrite(relayPin, HIGH);  // Activer le relais
      lastActivationTime = millis();  // Mettre à jour le temps depuis la dernière activation
      totalActivationTime += 600000;  // Ajouter 10 minutes au temps total d'activation
    Serial.print(F("temps total d'activation "));Serial.println(totalActivationTime);
    Serial.print(F("nombre de coupures "));Serial.println(cutOffCount);
    } else if (millis() - lastActivationTime > 3600000) {  // Vérifier si le temps écoulé depuis la dernière activation est supérieur à 1 heure
      cutOffCount = 0;  // Réinitialiser le compteur de coupures de courant
    }
    if (totalActivationTime >= 86400000) {  // Vérifier si le temps total d'activation est supérieur ou égal à 24 heures
      digitalWrite(relayPin, LOW);  // Désactiver le relais
      totalActivationTime = 0;  // Réinitialiser le temps total d'activation
    }
  } else {
    cutOffCount++;  // Incrémenter le compteur de coupures de courant
  }
  delay(1000);  // Attendre 1 seconde
  emon1.serialprint();
}

voici ce que j'ai sur le moniteur
image

bien sur les chiffres ne veulent rien dire, je n'ai pas de capteur
pour toi, si ton capteur est bien renseigné, les chiffres que tu auras auront une signification.
ton système fonctionne ou ne fonctionne pas.

tu nous as dis que tu ne voulais pas de résultats des mesures, que ton relais doit coller ou pas.
tu dois bien admettre que le Serial.print te renseigne, avec les résultats, tu sais quand le relais doit coller.

Merci beaucoup, demain je ferai l'expérience et je vous tiendrai au courant du résultat.

bonjour
je croit qu'il y a un problème, dans la logique du code: le relais sera déclenché quant le programme détecte à travers capteur un courant dans le circuit d'une lampe qui est elle même mise sous tentions par ce même relais.

image

:grinning: :+1: :rofl: :innocent:

:thinking:je n'y pense que maintenant, :weary: ce ne serait pas un projet scolaire par hasard ?

:rofl::rofl::rofl::rofl:

non non ce n'est pas un projet scolaire ,c'est pour mes besoins personnelle, qui peux me donné une résolution

Et bien là, on ne peut pas grand chose pour toi.
Il faut d'abord que tu mettes ton problème au clair.

papier, crayon ==>schéma et photo nette ici

mon problème c'est de faire automatiser une pompe hydraulique.
j'ai toujour un probleme de coupure de courant .

Donc tu peux très bien alimenter la lampe en amont de la mesure de consommation de la pompe par le transformateur de courant..

j'insiste, un schéma sera utile.

ta pompe a quelle puissance, la ligne dsijoncte, le disjoncteur ne serait il pas sous dimensionné?