Você está na página 1de 6

Como medir corrente com Arduino?

 28 de outubro de 2014
 Sensores
 33 Comentários
 5

Agora você pode medir correntes de -30A à +30A utilizando o seu Arduino ou outro
microcontrolador de sua preferência. Com o módulo Sensor de Corrente ACS714 da
Pololu você tem um dispositivo alimentado por 5v e que permite medir essa faixa de
corrente com uma margem de erro de apenas ±1,5%.
Esse sensor utiliza um CI Allegro ACS714 com sensor de efeito hall (datasheet) para
medição da corrente, o que garante um perfeito isolamento do circuito. Nesse post
vamos trabalhar com baixa tensão e corrente, mas o ACS714 suporte tensões de até 2.1
kV RMS. Confira o tutorial abaixo!

Medindo corrente e tensão


Antes de mostrarmos de mostrar como medir corrente com Arduino, vamos ver de uma
maneira resumida a diferença de procedimento entre medir tensão e medir corrente, já
que uma ligação incorreta pode danificar o circuito ou até mesmo o aparelho medidor.

Para medir tensão, veja este exemplo usando um multiteste (multímetro), um circuito
com uma lâmpada e uma bateria. Devemos colocar o multiteste na escala de tensão (V),
e medir dessa maneira, com as pontas de prova em paralelo ao circuito:

Já para a medição da corrente, que é o assunto desse post, devemos ligar um multiteste
em série com o circuito, na escala de Ampéres:
Ligação do Sensor de Corrente com Arduino
Vamos testar o sensor utilizando um motor DC de 5v, ligado em SÉRIE com o Sensor
de Corrente ACS714. O sensor irá enviar os dados ao Arduino por meio do pino
analógico A3. A alimentação do sensor é feita pelo próprio Arduino (5v), e para a
alimentação do motor utilizamos pilhas comuns. Assim, podemos mostrar o isolamento
do circuito do motor em relação ao Arduino e o restante dos componentes:

No display LCD 20×4, teremos as informações do valor “puro” lido do sensor (entre 0 e
1024) e o valor da amperagem calculada pelo programa abaixo. A cada ampere de
variação na entrada do sensor, a tensão de saída varia 66mV. A atualização é feita a
cada 1 segundo.

1 //Programa : Teste sensor ACS714 corrente com Arduino


//Alteracoes e adaptacoes : FILIPEFLOP
2
3  
//Carrega a biblioteca do LCD
4 #include <LiquidCrystal.h>
5  
6 //Inicializa o LCD
7 LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
8  
9 //Define o pino analogico usado pelo ACS714
int AnalogInputPin = 3;
10
 
11
 
12void setup()
13{ 
14  //Define o LCD com 20 colunas e 4 linhas
15  lcd.begin(20, 4);
  //Informacoes iniciais no display
16  lcd.setCursor(1,0);
17  lcd.print("--- FILIPEFLOP ---");
18  lcd.setCursor(0,1);
19  lcd.print("Sensor : ");
20  lcd.setCursor(0,2);
  lcd.print("Amp :");
21
 
22  Serial.begin(9600);
23}
24 
25void loop()
26{
27  //Chama rotina que calcula a corrente
  double Current = currentSensor(analogRead(AnalogInputPin)); 
28  //Imprime as informacoes no display e na serial
29  Serial.print(" Amp : ");
30  printDouble(Current, 2);                                    
31  Serial.print(" A");
  Serial.println("");
32  lcd.setCursor(11,2);
33  lcd.print("A");
34  delay(1000);
35}
36 
37void printDouble(double val, byte precision)
{
38  Serial.print (int(val));
39  if( precision > 0)
40  {   
41    Serial.print(".");
42    lcd.setCursor(7,2);
    lcd.print(".");
43    unsigned long frac, mult = 1;
44    byte padding = precision -1;
45    while(precision--) mult *=10;
46    if(val >= 0) frac=(val-int(val))*mult;
     else frac=(int(val)-val)*mult;
47    unsigned long frac1 = frac;
48    while(frac1 /= 10) padding--;
49    while(padding--) Serial.print("0");
50    lcd.setCursor(6,2);
51    lcd.print("0");
    Serial.print(frac,DEC) ;
52    lcd.setCursor(8,2);
53    lcd.print(frac, DEC);
54  }
55}
56 
long readInternalVcc()
57
58
59
60
61
62
63
64
{
65  long result;
66  ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
67  delay(2);                          // Wait for Vref to settle
68  ADCSRA |= _BV(ADSC);               // Convert
69  while (bit_is_set(ADCSRA,ADSC));
  result = ADCL;
70  result |= ADCH<<8;
71  result = 1126400L / result;       // Back-calculate AVcc in mV
72  return result;
73}
74 
75 
// Calculate current with Allegro ACS714
76double currentSensor(int RawADC)
77{
78  int    Sensitivity    = 66; // mV/A
79  long   InternalVcc    = readInternalVcc();
80  double ZeroCurrentVcc = InternalVcc / 2;
81  double SensedVoltage  = (RawADC * InternalVcc) / 1024;
82  double Difference     = SensedVoltage - ZeroCurrentVcc;
  double SensedCurrent  = Difference / Sensitivity;
83  Serial.print("Sen: ");
84  Serial.print(RawADC);
85  Serial.print("/1024");
86  lcd.setCursor(9,1);
87  lcd.print(RawADC);
  return SensedCurrent;           
88}
89
90
91
92
93
94
95
96

Para utilização do programa sem precisar de um LCD, os resultados são impressos


também na serial, e você pode checar os valores no serial monitor:
Gostou? Ajude-nos a melhorar o blog atribuindo uma nota a este tutorial (estrelas no
final do artigo). Já conhece a loja virtual FILIPEFLOP? Não? Então confira um pouco
sobre nossa confiável trajetória de vendas e Quem Somos.

Você também pode gostar