Tome el modelo HSTS016L como ejemplo: es capaz de medir valores de corriente de 10 A a 200 A. Al usar un sensor de corriente de núcleo partido, podemos abrir y cerrar el CT sin modificar el sistema existente, y simplemente usar una pinza para colocar el cable de medición dentro del CT. El voltaje de salida de este sensor es de 2.5 V +/- 0.625 V, lo que ofrece una buena precisión. Aunque el rango de salida de voltaje de este sensor está entre 1.875 V y 3.125 V, también es adecuado para sensores analógicos de 3.3 V, especialmente microcontroladores Arduino Nano y NodeMCU.
El sensor tiene 4 pines de salida: RED (entrada de 5 V), BLACK (0 V Gnd), YELLOW (salida analógica) y WHITE (analógico para calibración). A veces, el voltaje de alimentación puede no ser exactamente de 5 V, por lo que necesitaremos un pin analógico adicional para medir el punto medio exacto desde el pin blanco. En Arduino UNO, hay 6 pines de entrada analógica (A0-A5), donde podemos usar uno de los pines para medir corriente CA y 1 más para fines de calibración. Los pines de entrada analógica asignarán voltajes de entrada entre 0 y 5 V a valores enteros entre 0 y 1023, con una resolución de 4.9 mV por unidad (5.00 V / 1023 unidades).
Conectamos RED a la entrada de 5 V, BLACK a tierra, YELLOW al pin analógico A1 y WHITE al pin analógico A2. Se recomienda encarecidamente usar un adaptador de corriente de 12 V para alimentar el Arduino Uno y el sensor. Usar una fuente de alimentación de 5 V por USB tendrá un valor de desplazamiento inicial; es posible que deba agregar manualmente el valor de desplazamiento al cargar el código.
// Qué pin mide el valor de corriente (A0 está reservado para la función de botón del LCD Display Shield)
int currentAnalogInputPin = A1;
// Qué pin calibra el valor medio de desplazamiento
int calibrationPin = A2;
// Introduzca el valor para desplazar manualmente el valor inicial
float manualOffset = 0.00;
// Si usa un transformador de corriente de “efecto Hall”, introduzca el valor con esta fórmula: mVperAmp = rango máximo de voltaje (en milivoltios) / corriente nominal del CT
float mVperAmpValue = 12.5;
// Voltaje máximo de alimentación del pin de entrada analógica; Arduino Uno o Mega es 5000 mV, mientras que Arduino Nano o Node MCU es 3300 mV
float supplyVoltage = 5000;
/* para leer el valor de una muestra con fines de desplazamiento más adelante */
float offsetSampleRead = 0;
/* para leer el valor de una muestra, incluido el valor currentOffset1*/
float currentSampleRead = 0;
/* para contar el tiempo de cada muestra. Técnicamente, se toma 1 muestra cada 1 milisegundo */
float currentLastSample = 0;
/* acumulación de lecturas de muestras */
float currentSampleSum = 0;
/* para contar el número de muestras. */
float currentSampleCount = 0;
/* para calcular el valor promedio de todas las muestras, en valores analógicos*/
float currentMean ;
/* raíz cuadrada de currentMean, en valores analógicos */
float RMSCurrentMean ;
/* la lectura final de corriente RMS*/
float FinalRMSCurrent ;
void setup() /*códigos que se ejecutan una vez */
{
Serial.begin(9600); /* para mostrar lecturas en el monitor serie a 9600 baudios */
}
void loop()
{
/* 1- Medición de corriente CA y CC */
if(micros() >= currentLastSample + 200) /* cada 0.2 milisegundos se toma 1 lectura */
{
/* leer el valor de la muestra, incluido el valor de desplazamiento*/
currentSampleRead = analogRead(currentAnalogInputPin)-analogRead(calibrationPin);
/* acumular los valores analógicos totales para cada lectura de muestra*/
currentSampleSum = currentSampleSum + sq(currentSampleRead) ;
/* para contar y pasar al siguiente conteo */
currentSampleCount = currentSampleCount + 1;
/* para restablecer el tiempo de nuevo y que el siguiente ciclo pueda comenzar otra vez*/
currentLastSample = micros();
}
/* después de 4000 conteos u 800 milisegundos (0.8 segundos), ejecute los siguientes códigos*/
if(currentSampleCount == 4000)
{
/* promediar los valores analógicos acumulados*/
currentMean = currentSampleSum/currentSampleCount;
/* raíz cuadrada del valor promedio*/
RMSCurrentMean = sqrt(currentMean);
/* calcular la corriente RMS final*/
FinalRMSCurrent = (((RMSCurrentMean /1023) *supplyVoltage) /mVperAmpValue)- manualOffset;
/* si la corriente detectada es menor o igual al 1%, establezca el valor de corriente en 0 A*/
if(FinalRMSCurrent <= (625/mVperAmpValue/100))
{ FinalRMSCurrent =0; }
Serial.print(” El valor RMS de corriente es: “);
Serial.print(FinalRMSCurrent,decimalPrecision);
Serial.println(” A “);
currentSampleSum =0; /* para restablecer los valores de muestra acumulados para el siguiente ciclo */
currentSampleCount=0; /* para restablecer el número de muestras para el siguiente ciclo */
}
}