SCT-013

Un forum dédie à vos questions concernant l'intégration à Domoticz des capteurs et gateway mysensors.org
Répondre
dd91
Messages : 100
Enregistré le : 18 nov. 2014, 13:06

SCT-013

Message par dd91 » 14 août 2019, 21:47

Salut a tous

je reviens vers vous pour avoir de l'aide

j'ai trouvé sur le forum anglais le montage suivant basé sur le SCT-013

https://forum.mysensors.org/topic/1464/ ... -sensor/31

ça m’intéresse fortement ayant déjà préparé mon tableau avec une pince sur la phase

en revanche comment cabler la pince?
resistance? condensateur?

je suis toujours en recherche pour ma cuve également, je n'arrive pas a communiquer la hauteur et la température

-viewtopic.php?f=20&t=7152

merci a vous tous

DD91

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Jeff
Messages : 711
Enregistré le : 17 nov. 2016, 20:54
Localisation : Rennes (35)

Re: SCT-013

Message par Jeff » 15 août 2019, 13:36

Salut,

Ce site m'avait aidé à l'époque quand j'avais fait la même chose que toi. Je n'ai plus le lien exact. Je n'utilise plus ce capteur depuis mon déménagement, il est dans un carton.
https://learn.openenergymonitor.org/ele ... ected=true
Version: 4.9700; RFXCOM Rfxtrx433e ext/1007 ; Zwave (Z-stick GEN5, Fibaro...), Zigbee2MQTT.

dd91
Messages : 100
Enregistré le : 18 nov. 2014, 13:06

Re: SCT-013

Message par dd91 » 24 août 2019, 17:58

salut

merci pour ta réponse il y a donc des composants à rajouter en plus de la pince, je vais en tenir compte dans mon circuit

merci encore a toi

DD91

Fredok
Messages : 85
Enregistré le : 12 août 2016, 15:04

Re: SCT-013

Message par Fredok » 25 août 2019, 11:49

Bonjour, je me rappelle de ce post car j'y ai participé.
J'ai un montage avec 2 pince ampèremétriques depuis 3 ans maintenant et cela fonction très bien.
Attention toutefois :
Une pince ne donne que le courant Imax ou Irms mais pas le dephasage courant tension, le noeud MS retourne la puissance P=Urms x Irms et non la vraie puissance P=Urms x Irms x cos(phi)

Voici le code arduino (brut) (attention, il y a en plus un détecteur de lumière et une sonde ds18b20)

Code : Tout sélectionner

#include <Arduino.h>
#define MY_DEBUG
#define MY_RADIO_NRF24
#define MY_REPEATER_FEATURE
//#define MY_PARENT_NODE_ID 3
// EmonLibrary examples openenergymonitor.org, Licence GNU GPL V3  ***/
#include <SPI.h>
#include <MySensors.h>
#include <DallasTemperature.h>
#include <OneWire.h>
#include "EmonLib.h"             // Include Emon Library
EnergyMonitor emon1,emon2;             // Create an instance


#define CHILD_ID_CLAMP1 0
#define CHILD_ID_CLAMP2 1
#define CHILD_ID_TEMP 2
#define CHILD_ID_LDR 3

#define PIN_ANALOG_I1 A2 //pince amperemetrique1
#define PIN_ANALOG_I2 A3
#define PIN_LDR A0 // LDR
#define PIN_DALLAS 3

//Definition de dallas
#define MAX_ATTACHED_DS18B20 1
#define COMPARE_TEMP 1 // Send temperature only if changed? 1 = Yes 0 = No
OneWire oneWire(PIN_DALLAS);
DallasTemperature sensors(&oneWire);
float lastTemperature[MAX_ATTACHED_DS18B20];
int numSensors = 1;
bool receivedConfig = false;
bool metric = true; //truc v2.0

//int compat = 0;
unsigned long lastSend_temp = millis();
unsigned long lastSend_power = millis();
unsigned long lastSend_c;
unsigned long SEND_FREQUENCY = 120000; // Minimum time between send (in milliseconds). We don't wnat to spam the gateway.
unsigned long SEND_FREQUENCY_TEMP = 300000; //delais d'emission entre 2 mesures de temps
unsigned long SEND_FREQUENCY_C = SEND_FREQUENCY / 30;
int index = 0;
double Irms1 = 0;
double Irms2 = 0;
boolean pcReceived1 = false;
boolean pcReceived2 = false;
boolean first_time_temp = HIGH;

float nrj1 = 0, old_nrj1;
float nrj2 = 0, old_nrj2;
int ldr = 0, old_ldr;

MyMessage IrmsMsg1(CHILD_ID_CLAMP1, V_WATT);
MyMessage kWhMsg1(CHILD_ID_CLAMP1, V_KWH);
MyMessage pcMsg1(CHILD_ID_CLAMP1, V_VAR1);
MyMessage IrmsMsg2(CHILD_ID_CLAMP2, V_WATT);
MyMessage kWhMsg2(CHILD_ID_CLAMP2, V_KWH);
MyMessage pcMsg2(CHILD_ID_CLAMP2, V_VAR2);
MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP);
MyMessage msgLight(CHILD_ID_LDR, V_LIGHT_LEVEL);

void before() {
  sensors.begin();
}


void presentation()
{

  sendSketchInfo("Multisensors_Entree", "2.0");  // Send the sketch version information to the gateway and Controller
  present(CHILD_ID_CLAMP1, S_POWER);   // Register this device as power sensor
  request(CHILD_ID_CLAMP1, V_VAR1);
  present(CHILD_ID_CLAMP2, S_POWER);   // Register this device as power sensor
  request(CHILD_ID_CLAMP2, V_VAR2);
  numSensors = sensors.getDeviceCount(); //compte le nb de ds18
  present(CHILD_ID_TEMP, S_TEMP);
  present(CHILD_ID_LDR, S_LIGHT_LEVEL);
}


void receive(const MyMessage &message)
{
  if (message.type == V_VAR1)
  {
    nrj1 = old_nrj1 = message.getFloat();
    Serial.print("Received last nrj count from gw:");
    Serial.println(nrj1);
    pcReceived1 = true;
  }

  if (message.type == V_VAR2)
  {
    nrj2 = old_nrj2 = message.getFloat();
    Serial.print("Received last nrj count from gw:");
    Serial.println(nrj2);
    pcReceived2 = true;
  }

}

void setup()
{
  sensors.setWaitForConversion(false);
  emon1.current(PIN_ANALOG_I1, 30.0);       // Current: input pin, calibration.
  emon2.current(PIN_ANALOG_I2, 30.0);
  Serial.println("SETUP completed");
}

void envoi_donnees(double intrms, int id_clamp)
{
  Serial.print("Envoi des donnees .... clamp="); Serial.println(id_clamp);
  double energie = (intrms * 232.0 * SEND_FREQUENCY / 1000) / 3.6E6;
  switch (id_clamp)
  {
    case 1:
      {
        send(IrmsMsg1.set(intrms * 232.0, 1));
        nrj1 += energie;
        send(kWhMsg1.set(nrj1, 5));
        send(pcMsg1.set(nrj1, 5));
        old_nrj1 = nrj1;
      }
      break;
    case 2:
      {
        send(IrmsMsg2.set(intrms * 232.0, 1));
        nrj2 += energie;
        send(kWhMsg2.set(nrj2, 5));
        send(pcMsg2.set(nrj2, 5));
        old_nrj2 = nrj2;
      }
      break;
  }
}

void loop() {
  unsigned long now = millis();
  bool sendTime_c = now - lastSend_c > SEND_FREQUENCY_C;
  // Calcul de Irms1 et Irms2
  Double i1,i2
  if (sendTime_c) //calcul Irms moy clamp1/clamp2
  {
    if (index == 0)
    {
      i1=emon1.calcIrms(1480);
      i1=(i1<0.2)?0:i1;
      Irms1 = i1;
      i2=emon2.calcIrms(1480);
      i2=(i2<0.2)?0:i2;
      Irms2 = i2;
    }
    else  
    {
      i1=emon1.calcIrms(1480);
      i1=(i1<0.2)?0:i1;
      i2=emon2.calcIrms(1480);
      i2=(i2<0.2)?0:i2;
      Irms1 = (index * Irms1 + i1) / (index + 1);
      Irms2 = (index * Irms2 + i2) / (index + 1);
    }
    lastSend_c = now;
    index++;
  }

  bool sendTime_temp = now - lastSend_temp > SEND_FREQUENCY_TEMP;
  if (sendTime_temp || first_time_temp)
  {
    Serial.println("........ quoiqu'il arrive, on envoi la temp+ldr");
    first_time_temp = LOW;
    //Send Temp
    // Envoi Température d'après https://github.com/mysensors/MySensorsArduinoExamples/blob/master/examples/DallasTemperatureSensor/DallasTemperatureSensor.ino
    sensors.requestTemperatures();
    sleep(750);
    for (int i = 0; i < numSensors && i < MAX_ATTACHED_DS18B20; i++)
      {
     // float temperature = static_cast<float>(static_cast<int>((getConfig().isMetric ? sensors.getTempCByIndex(i) : sensors.getTempFByIndex(i)) * 10.)) / 10.;
      float temperature = static_cast<float>(static_cast<int>((getControllerConfig().isMetric?sensors.getTempCByIndex(i):sensors.getTempFByIndex(i)) * 10.)) / 10.;
      if (lastTemperature[i] != temperature && temperature != -127.00 && temperature != 85.00)
      {

        // Send in the new temperature
        send(msgTemp.setSensor(i).set(temperature, 1));
        Serial.println(".....................Envoi Temp");
        // Save new temperatures for next compare
        lastTemperature[i] = temperature;
      }
    }
 
  //Send light LDR
  //Envoi Light LDR
  ldr = (1023 - analogRead(PIN_LDR)) / 10.23;
  if (old_ldr != ldr)
  {
    send(msgLight.set(ldr));
    old_ldr = ldr;
  }
   lastSend_temp=now;
  }



 bool sendTime_power = now - lastSend_power > SEND_FREQUENCY;

 if (sendTime_power)
{

  // Envoi ou request Puissance1
  if (pcReceived1) envoi_donnees(Irms1, 1);
  else     {
    request(CHILD_ID_CLAMP1, V_VAR1);
    Serial.println("Request VAR1");
  }


  // Envoi ou request Puissance2
  if (pcReceived2) envoi_donnees(Irms2, 2);
  else     {
    request(CHILD_ID_CLAMP2, V_VAR2);
    Serial.println("Request VAR2");
  }
  //on reinitialise les compteurs
  lastSend_power = now;
  index = 0;
  }
}





Effectivement, la pince sort une tension allant de -1 a 1V, il faut au préalable remonter cette tension
Opi
RFXCOM
RFLINK 433&315
Mysensors
Wifi & Mqtt

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Répondre