ACS 712 em corrente alternada (CA)

Depois de algumas pessoas terem me dito que o ACS712 retorna valores negativos em Corrente Alternada (CA) resolvi dar uma pesquisada e encontrei um Sketch que pode resolver o problema.

Ainda não testei o código, mas compilou legal no IDE 1.5.2. Pelo código é para funcionar sem muita dificuldade.

Neste post também estou testando a forma correta de colocar códigos no blog. Da forma como eu vinha fazendo não dava para copiar e colar no IDE.

//retirado de <a href="http://www.seriallink.com.br/forum/viewtopic.php?f=46&t=1900">http://www.seriallink.com.br/forum/viewtopic.php?f=46&t=1900</a>
const int sensorPin = A0;
float sensorValue_aux = 0;
float sensorValue = 0;
float currentValue = 0;
float voltsporUnidade = 0.0048828125;

void setup() {

Serial.begin(9600);
}

void loop() {

 for(int i=500; i>0; i--)
 {
 sensorValue_aux = (analogRead(sensorPin) -511); // le o sensor na pino analogico A0 e ajusta o valor lido ja que a saída do sensor é vcc/2 para corrente =0
 sensorValue += pow(sensorValue_aux,2); // soam os quadardos das leituras no laco
 }

sensorValue = (sqrt(sensorValue/ 500)) * voltsporUnidade; // finaliza o calculo da méida quadratica e ajusta o valor lido para volts
 currentValue = (sensorValue/66)*1000; // calcula a corrente considerando a sensibilidade do sernsor (66 mV por amper)

 // mostra o resultado no terminal
 Serial.print("corrente = " );
 Serial.print(currentValue);
 Serial.print("\n" );
 sensorValue =0;
 delay(150);

}

Com esse código é possível medir corrente de lampadas, eletrodomésticos e outros.
O que o código faz é uma transformação quadratica para que os resultados sejam mostrados da forma correta. No caso da corrente contínua essa transformação não é necessária.