Manual
do
Maker
.
com
Estava precisando fazer uma pequena medição de maneira simplificada, só pra tirar uma dúvida, mas com o multimetro ficava meio desajeitado, então resolvi montar esse pequeno brinquedo usando o sensor de corrente por efeito hall ACS712 com Arduino. Esse post é só um mini-tutorial pra colocar o sensor a funcionar de forma sucinta; vulgo "receita de bolo".
Confesso que não sei quanto à precisão do componente. Li no datasheet que é 66mV/A, mas não sei usar essa informação. O caso é que no Arduino UNO ou Leonardo, a resolução máxima de leitura analógica é 10 bits. O ESP8266, MSP432 e outros tem uma resolução mais alta, porém as duas citadas trabalham a 3.3V.
Olhando o datasheet, vi que a taxa de erro é de 1.5% - Um bocado alto, eu acho. Ele opera à 5V e tem 66mV/A de saída em modo de operação normal. A saída é proporcional à corrente AC ou DC. A saída é extremamente estável, a histerese é próxima a zero, é seguro e não depende de nenhum circuito de isolamento.
Ele pode ser utilizado tanto em corrente AC quanto DC. Se resolver utilizá-lo em AC, considere que será necessário fazer uma retificação do sinal, filtragem e coleta de uma pequena amostragem. Depois, somado o número de amostragens coletadas em um intervalo de tempo X, divide-se pelo número de amostras e depois aplica-se os cálculo dispostos mais adiante.
Ele opera à 5V e vou utilizar um Arduino que também opere nessa tensão para facilitar as coisas. A leitura será feita na porta analógica A0. A resolução da porta analógica é de 10 bits, portanto 1024 valores, a contar de 0.
O ACS712 lê corrente positiva e corrente negativa, de -30A à 30A. O ponto 0 é portanto o ponto médio da resolução, que é 512. A saída do ACS712 quando não tiver corrente é de VCC/2, ou seja, 2.5V.
O pino analógico do Arduino lê 5V em uma escala de 1024 valores, portanto:
0 = 2.5V = 512
E é nesses 512 que serão distribuidos os possíveis 30A de resolução do ACS712. Nesse caso:
I\_{(1A)} = \frac{512}{30} = 17.06
Sabendo agora que 1A equivale a 17.06, basta agora montar a fórmula da leitura:
Range = 0 à 1023 portanto 511 = 0
I = \frac{(analogRead(0)-511)}{17.06}
Agora já podemos partir para o wiring e posteriormente codificar essas continhas acima. Esse módulo que comprei da Sparkfun é uma verdadeira porcaria. Ele poderia já vir com os filtros, mas não. Vem apenas o CI soldado na board, o que não simplifica seu uso. Por conta disso, será necessário seguir esse esquema, indicado como "modo de operação típico" no datasheet:
Wiring:
Gostaria de exibí-lo no Fritzing, mas infelizmente o ACS712 que tem lá já tem filtro na board. Enfim, seguindo o esquema e guiando-se pela imagem, os 2 furos maiores são os furos para medir a corrente. Vamos ao ponto de atenção.
Essa situação pode ser bem pior em corrente alternada, por isso é importante que você entenda o seguinte:
O que desejo focar nessa imagem é que você deve fazer um "passthrough" de um dos fios, seja AC ou DC, mas jamais coloque GND/Neutro junto com VCC/Fase porque isso é um curto-circuito! Portanto, enfatizando: A conexão deve ser como exemplificado acima.
Estou com preguiça de codificar, então peguei um código pronto de outro post que escrevi e adicionei calc(), apaguei algumas linhas e coloquei alguns defines. Se quiser usar apenas a parte do cálculo, está fácil.
#define AMP_MAX 30.0
#define RANGE 511.0
#define SAMPLE (RANGE+1)/AMP_MAX
int secs = 0;
int minutes = 0;
int hours = 0;
int days = 0;
float currentVal = 0;
long interval = 1000; //ms
long previous = 0;
unsigned long current = millis();
void setup(){
}
void myClock(){
secs +=1;
if (secs > 59){
minutes +=1;
secs = 0;
}
if (minutes > 59){
hours += 1;
minutes = 0;
}
if (hours > 24){
days += 1;
}
}
void calc(){
currentVal = (analogRead(0)-RANGE)/SAMPLE;
Serial.println(currentVal);
}
void loop(){
if(current - previous > interval) {
previous = current;
calc();
myClock();
}
}
Pessoal, gostaria de enfatizar a importância de se inscreverem no nosso canal Manual do Maker Brasil no YouTube, porque alguns videos e reviews eu farei exclusivamente para o canal, uma vez que aqui escrevo o procedimento e lá tentarei mostrar além do funcionamento, as possibilidades.
Inscreva-se no nosso canal Manual do Maker no YouTube.
Próximo post a caminho!
Autor do blog "Do bit Ao Byte / Manual do Maker".
Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.