Semana passada recebi o sensor de corrente ACS712 de 30A que pedi via Ebay. Foram aproximadamente 30 dias para estrega.
Não havia testado ainda o sensor, pois estava envolvido em outro projeto. Ontem resolvi testa-lo, só para saber como funciona. O sensor é muito fácil de usar, são três pinos somente: VCC , GND e OUT (sinal). O VCC é alimentado com 5V que pode vir direto da placa do Arduino, assim como o GND. O OUT é uma saída analógica e é por essa saída que receberemos as leituras de corrente.
Em vários sensores existe a necessidade de usar bibliotecas próprias (pode ser programado no braço também, mas eu prefiro usar as bibliotecas) para leitura de dados, como o DHT22 que faz leituras de temperatura e humidade, mas isso foi foi necessário para o sensor de corrente. Na verdade até mesmo o exemplo básico AnalogReadSerial que ja vem na IDE do Arduino pode ser usado para leitura.
Descrição conforme o vendedor:
Description
1, current sensor chip: ACS712ELC-30A;2, pin 5V power supply, on-board power indicator;
3, the module can be measured plus or minus 30 amps, corresponding to the analog output 66mV / A;
4, there is no the detection current through, the output voltage is VCC / 2;
5, PCB board size: 31 (mm) x13 (mm);
Note: ACS712 Hall detection principle, when you use to avoid magnetic field impact this!
Com as informações da descrição ja da pra fazer algumas alterações para que as leituras sejam mostradas em Amperes.
1. Esse sensor é bidirecional, as leituras vão de -30A a +30A com equivalente a 66mV/A;
2. Sabendo que as leituras são de +/-30 o valor mostrados é de VCC/2.
3. Testei apenas em corrente continua com 12v, mas ja vi em outros site que pode ser usado em corrente alternada até 220V. A leitura é feita por efeito Hall, então não tem ligação física entre os bornes de leitura do sensor e a saída analógica.
O ZERO será a leitura quando nenhuma corrente estiver passando pelo sensor, mas não será zero nas leituras. Complicado?!?! Vou explicar, as portas analógicas do Arduino usam uma lógica que vai de 0 a 1023, sendo o = 0V e 1023 = 5V, como o sensor é bidirecional, quando o sensor não estiver detectando corrente a tensão será de 2,5V (VCC/2) e a leitura do arduino será algo próximo de 512. Assim, se a corrente for positiva a leitura ira aumentar e se for negativa a leitura irá diminuir.
Nesse ponto, percebi que o meu sensor não serve para projetos com correntes baixas, pois a escala de leitura é muito grande (0 a 30A). Para corrente menores seria melhor utilizar um de 5A por exemplo.
Vamos ao código:
void setup() { // inicializa a comunicação seral a 9600 bits por segundo: Serial.begin(9600); } void loop() { // leitura input no analog pin 0: //aqui a leitura é mostrada entre 0 e 1023 int sensorValue = analogRead(A0); //podemos fazer transformações para mostrar em Amperes //O código a seguir diz para o Arduino que o valor lido pelo sensor deve ser transformado de 0 a 1023 para -30 a +30. int outputValue = map(sensorValue, 0, 1023, -30, 30); // mostrar valor lido pelo sensor: Serial.print("Sensor: "); Serial.print(sensorValue); //mostrar valor transformado em amperes: Serial.print("Valor em Amperes: "); Serial.println(outputValue); delay(100); // Tempo entre leituras }
(Verificado no IDE 1.0.1)
O Código pode ser adaptado para outros projetos sem muito trabalho.
Esquema de ligação do ACS712:
O Fritzing não tem o ACS712 igual ao da foto, mas tem um parecido da Sparkfun.