Internet de les coses amb ESP32 i ESP8266

Exemples Referència Plaques   Recursos CITCEA
Projectes Programació Perifèrics   Inici

Sensor de corrent elèctric

El sensor SCT-013-30 és un element que converteix un corrent altern en una tensió alterna que podem mesurar.

Sensor de corrent elèctric  [Sensorae.com]

Aquest dispositiu consta d'un transformador de corrent (relació 1800:1) amb una resistència de càrrega de 62 Ω entre els borns de sortida, de manera que dona una sortida d'1 V quan el corrent d'entrada és de 30 A (valor nominal del dispositiu). Per al valor nominal (30 A) el corrent de secundari serà:

equació

I la tensió de sortida serà:

equació

Hem de tenir en compte que, en tractar-se d'un transformador de corrent, només serveix per a mesurar corrent altern i ens donarà un senyal en el secundari (de tensió, ja que té la resistència) proporcional a la del primari. Per tant, si el corrent del primari és altern sinusoidal, la tensió de secundari serà alterna sinusoidal.

Un senyal de tensió altern té valors tant positius com negatius. Atès que no podem connectar tensions negatives al microcontrolador, haurem de fer alguna cosa per aconseguir que els valors de tensió llegíts pel microcontrolador siguin sempre positius.

En el nostre cas tenim el sensor connectat com es mostra a la figura. Fixem-nos que un dels dos borns de sortida del sensor (S1) està connectat en el centre d'un divisor de tensió format per dues resistències iguals. Això significa que, en principi, el born S1 estarà a una tensió constant d'1,65 V (la meitat de 3,3 V) respecte a terra (GND).

esquema

L'altre born de sortida del sensor (S2) està connectat a l'entrada analògica A5 del microcontrolador. Entre els dos borns de sortida del sensor tindrem, com hem comentat, un máxim d'1 V (valor nominal del sensor). Així, doncs, entre l'entrada A5 i terra tindrem una tensió que, com a máxim, oscil·larà entre 0,65 y 2,65 V; valors perfectament compatibles amb les entrades analògiques del microcontrolador. Per a un determinat valor llegit per l'entrada analògica A5, podem trobar el corrent real mitjançant l'expressió:

equació

Observem que prenem la lectura de l'entrada A5, la dividim per 1023 (valor de lectura corresponent a 3,3 V) i la multipliquem per 3,3 per obtenir la tensió corresponent a aquesta entrada. Al resultat li restem 1,65 per tenir el valor real de la tensió de sortida del sensor. Aquesta tensió la multipliquem per 30 per tenir el corrent, en ampers, que circula pel primari.

En cas que la tensió d'alimentació del microcontrolador variés lleugerament o si les dues resistències no fossin exactament iguals, ens trobaríem amb un cert error. Podem intentar reduir aquest error llegint la tensió del punt de referència (centre del divisor de tensió) i restant-la de la lectura de l'entrada A5. Per aquest motiu, hem connectat el punt de referència a l'entrada A6. Així, una forma més realista de llegir el sensor seria amb l'expressió:

equació

Els valors llegits pel sensor corresponen a un senyal altern que fluctua, en principi en forma sinusoidal, amb un període de 20 ms (corresponent a la freqüència de 50 Hz, normalitzada per a Europa). Aquests valors, agafats individualment, no ens permeten deduir el valor del corrent mesurat. Per poder tenir uns valors més útils, podríem provar de trobar la mitjana dels valors instantanis de corrent; pero la mitjana d'una funció sinusoidal és sempre nul·la i, per tant, no ens aportaria cap informació.

El que ens interessa és trobar el valor eficaç del corrent. Podem definir el valor eficaç d'un corrent altern concret com aquell valor de corrent continu que, en un període, dissipa sobre una resistència la mateixa energia que el corrent altern. En el cas d'un corrent sinusoidal, podem calcular el valor eficaç (en anglès, root mean square, RMS) de manera senzilla. Primerament cal calcular de la mitjana del valor absolut del corrent i multiplicar el resultat pel factor de forma.

equació

Cal tenir en compte que aquest valor només és vàlid si l'ona és sinusoidal. El càlcul del valor eficaç també es pot fer directament a partir de les mesures; així sempre serà vàlid, encara que la forma d'ona no sigui sinusoidal. L'equació corresponent és:

equació

El que significa anar sumant els quadrats de n valors del corrent al llarg d'un període; a l'acabar, dividir pel nombre de valors i treure l'arrel quadrada del resultat.

Suposant que la tensió és 230 V (no disposem de cap manera de mesurar-la), podem calcular la potència aparent multiplicar la tensió i el valor eficaç del corrent.

equació

En el programa que posem d'exemple calcularem els valors màxim i mínim i el valor eficaç. Aquest el determinarem de dues maneres, tant amb el càlcul exacte com a partir de la mitjana i el factor de forma. En un cicle de 20 ms, el nostre microcontrolador només pot fer unes deu mesures, que considerem massa pocs punts per a un resultat fiable; per això llegim el corrent durant un centenar de cicles (valor de numCicles). Cada cop que superem el temps de mesura, mostrarem els valors i començarem el següent grup de mesures.

Atès, que un endoll monofàsic sol estar limitat a 16 A, podem fer passar el cable dos cops per dins de la pinça (que correspon a tenir dues espires en el primari) per així tenir el doble de resolució. En el programa dividirem pel nombre d'espires (numEsp) per corregir el valor. Hem de tenir en compte, però, que el consum dels aparells que connectem no pot superar els 15 A, perquè el corrent que veu el sensor no superi el seu màxim de 30 A.

#define SensLec A5  // Pota de lectura del sensor
#define SensRef A6  // Pota de referència del sensor
#define numEsp 2  // Nombre d'espires en el primari
#define numCicles 100 // Nombre de cicles que es mesuraran
unsigned long tempsAnt;
float maxI = 0;  // Valor màxim calculat
float minI = 0;  // Valor mínim calculat
float sumaquad = 0;  // Suma per al càlcul del valor eficaç
float suma = 0;  // Suma per al càlcul de la mitjana
int n = 0;  // Nombre de valors llegits, per fer la mitjana
void setup() {
  Serial.begin(9600);  // Comunicació sèrie
}
void loop(){
  int lec_sensor = analogRead(SensLec);
  int ref_sensor = analogRead(SensRef);
  // Calculem el valor instantani del corrent
  float Iinst = 30 * 3.3 * (lec_sensor - ref_sensor) / 1023 / numEsp;
  sumaquad = sumaquad + (Iinst * Iinst);  // Suma de quadrats
  suma = suma + abs(Iinst);  // Suma de valors absoluts
  n++;
  if(Iinst > maxI){
    maxI = Iinst;
  }
  if(Iinst < minI){
    minI = Iinst;
  }
  if((millis() - tempsAnt) > (20 * numCicles)){
    tempsAnt = millis();
    float medI = 1.1107 * suma / n;  // Valor eficaç 
                                     // calculat a partir de la mitjana
                                     // pi/2/sqrt(2) = 1.1107
    float Irms = sqrt(sumaquad / n);
    Serial.print("n = ");
    Serial.print(n);
    Serial.print("   Max = ");
    Serial.print(maxI);
    Serial.print("   Min = ");
    Serial.print(minI);
    Serial.print("   RMSap = ");
    Serial.print(medI);
    Serial.print(" A");
    Serial.print("   RMS = ");
    Serial.print(Irms);
    Serial.println(" A");
    maxI = 0;
    minI = 0;
    sumaquad = 0;
    suma = 0;
    n = 0;
  }
}

 

 

 

 

 

 

 

 

 

 

Llicència de Creative Commons
Aquesta obra d'Oriol Boix està llicenciada sota una llicència no importada Reconeixement-NoComercial-SenseObraDerivada 3.0.