Medir a tensão e a corrente são processos essenciais para se extrair informações de sensores. Medir tensão pode ser trivial, mas medir a corrente e a resistência não é tão óbvio assim. Portanto, neste post, vamos aprender uma forma de ler valores de tensão, corrente e resistência utilizando o Arduino.


Voltímetro CC

Medir a tensão (corrente contínua), conforme disse no início do post, é bem tranquilo. Tanto é que já vimos em vários posts do site. Entretanto, vou dar uma rápida explicada no assunto.

Informações importantes

Referencial

Para medir a tensão em algum ponto do circuito basta ligá-lo a algum pino analógico. Mas aqui cabem algumas ressalvas: a tensão é sempre medida entre dois pontos e, quando ligamos no pino A0 por exemplo, estamos ligando apenas um ponto. Neste caso, estamos medindo a tensão em relação ao nosso terra (GND), que já está ligado dentro do microcontrolador.

Então, caso o circuito que estamos querendo medir não tenha nenhuma ligação com o Arduino, não será possível fazer a leitura da tensão. Suponha que o circuito externo seja um LED ligado a uma bateria e o Arduino esteja sendo alimentado pela USB do computador. Para medir alguma tensão deste circuito externo, o GND do Arduino, deve estar ligado ao negativo da bateria.

Conversão

Em relação à conversão analógica-digital do Arduino, é importante saber que ele mede de 0 a 5v, e que o conversor é de 10bits. Isso quer dizer que os valores medidos serão representados entre 0 e 1023 (valor máximo com 10 bits) incluindo os dois limites. Ou seja, 0 representará 0 volts e 1023 representará 5 volts.

Portanto, para encontrar o valor lido em volts, podemos aplicar uma simples regra de 3:

1023        –       5 volts

Valor lido   –  V (tensao)

Logo:

V = \frac{Vlido*5}{1023}

Usar outros valores de tensão

Abaixo de 5v (e acima de 0)

É possível ler valores fora da faixa de 0 a 5v, mas, dependendo do caso, será necessário utilizar um circuito para adequar esta tensão para o Arduino. O próprio microcontrolador do Arduino UNO, permite trocar a tensão de referência, para que seja possível alcançar uma precisão melhor, medindo, por exemplo, tensões de 0 a 3.3v.

O procedimento para medir a tensão é o mesmo, o que muda é a regra de 3 mostrada anteriormente. E o comando para alterar a tensão de referência é:

analogReference(modo)

Dentre os modos possíveis para o Arduino UNO, de acordo com o site do Arduino, estão:

  • DEFAULT: a tensão padrão de alimentação da placa (5v no caso do UNO).
  • INTERNAL: uma referência interna igual a 1.1 volts.
  • EXTERNAL: a referência se torna a tensão (0 a 5V apenas) aplicada ao pino AREF (próximo ao pino digital 13).
Acima de 5v

Para medir tensões acima de 5v, basta criar um divisor de tensão para que a tensão em cima do Arduino seja reduzida. A imagem abaixo mostra um exemplo de divisor de tensão.

divisor de tensão

O valor dos resistores do divisor de tensão vão depender do valor máximo de leitura. Por exemplo, se o valor máximo for 10 volts, então um divisor de 2/1 será adequado. Não mostrarei em detalhes esta parte, pois, com o post sobre divisor de tensão, você deverá ser capaz de entender o necessário.

Circuito de exemplo

Para mostrar a parte da programação, considere o circuito e o esquemático abaixo:

Circuito voltímetro medindo Esquemático voltímetro medindo

O circuito consiste apenas em um LED alimentado com 5v em série com um resistor de 220Ω. E entre os dois existe um fio que vai para o pino analógico A0. Nosso objetivo será medir a tensão neste ponto (entre este ponto e o GND, conforme dito no início do post). Esta tensão é justamente a tensão em cima do resistor.

Programação

A programação é bem simples, pois basta utilizar o comando de leitura analógica do Arduino, que já abordei em outro post. Leia os comentários para entender o código por completo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void setup() {
  // O comando abaixo é desnecessário caso o modo seja o DEFAULT
  analogReference(DEFAULT);

  // Cria a comunicação serial para exibir os valores no monitor serial
  Serial.begin(9600);
}

void loop() {
  // Mede o valor de 0 a 1023 e converte para tensão
  float tensao = analogRead(A0);
  tensao = tensao*5/1023;

  // Exibe o valor lido
  Serial.println(tensao);

  // Cria um pequeno atraso entre cada medição
  delay(1000);
}

Resultados

Quando rodei o programa, o valor lido ficou oscilando entre 2,58 e 2,62. Como o valor lido é a queda de tensão em cima do resistor, basta considerar que a tensão em cima do LED é 5 menos esse valor. Considerando o valor médio como 2,6:

5-2,60 = 2,4

2,4 é justamente a queda de tensão máxima do LED vermelho. Sendo assim, o resultado foi próximo da realidade.

 

Pronto, com a lógica mostrada neste tópico já podemos criar um voltímetro com algumas limitações.


Ohmímetro

Lógica de funcionamento

Medir a resistência pode ser útil em situações onde as faixas de cores de um resistor são confusas ou então quando você quer saber a resistência de um outro componente (potenciômetro por exemplo). Em outro post, já cheguei medir a resistência de um LDR com o Arduino.

Para este caso, nos também mediremos a tensão, mas em um esquema um pouco diferente. Com a ajuda de um divisor de tensão com uma das resistências conhecidas, é possível saber qual o valor da outra resistência a partir da tensão de saída. Para exemplificar como, considere um divisor de tensão típico como o da imagem abaixo:

Esquemático divisor de tensão

A tensão de saída do divisor é dada por:

Vout = \frac{R2 \ast Vin}{R1+R2}

Portanto, se sabemos quais são os valores de Vin, R2 e Vout, podemos determinar R1. Manipulando a equação, chegamos ao seguinte resultado:

R1 = \frac{R2*Vin-VoutR2}{Vout}

Agora podemos passar para um circuito de exemplo:

Circuito de exemplo

Para achar o valor da resistência desejada, vamos considerar Vin como 5v, já que iremos alimentar o circuito utilizando o Arduino. O valor de R2 pode ser qualquer um, portanto usarei um resistor de 220Ω. O circuito resultante está representado abaixo:

Circuito ohmímetro com Arduino

Dessa forma, a fórmula que terei que usar para encontrar V1 será:

R1 = \frac{220*5-Vlido*220}{Vlido}

Lembrando que Vlido é a tensão, então é necessário converter o valor lido do Arduino para tensão, conforme visto no tópico do voltímetro.

Programação

Basta ler os comentários para entender o código, pois ele é bem simples.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void setup() {
  // Cria a comunicação serial para exibir os valores no monitor serial
  Serial.begin(9600);
}

void loop() {
  // Mede o valor de 0 a 1023 e converte para tensão
  //           o (float) faz um coerção, pois o comando analogRead retorna um numero inteiro e a tensão é um float
  float tensao = (float)analogRead(A0)*5/1023;

  // Converte a tensao para resistencia
  float R1 = (220*5 - tensao*220)/tensao;

  // Exibe o valor de R1
  Serial.println(R1);

  // Cria um pequeno atraso entre cada medição
  delay(1000);
}

Resultados

Medindo R1 com um testador que tenho, o valor real do resistor é de 819,7Ω. Entretanto, ao rodar o programa, o valor indicado foi um pouco diferente deste. Obtive valores entre 846,64 e 862,02. Ou seja, dependendo da aplicação, este método não é muito adequado.

É possível melhorar um pouco a precisão dos resultados considerando o valor real de R2. Que, de acordo com meu testador, é de 214,4Ω. Fazendo esta mudança, obtive resultados em torno de 835,03Ω, que foi melhor do que antes.

 

Pronto, com a lógica mostrada neste tópico já podemos criar um ohmímetro com algumas limitações.


Amperímetro

Lógica de funcionamento

Existem alguns tipos de sensores que transformam uma grandeza física em corrente elétrica de 4 a 20mA normalmente. Portanto, pode ser bem útil medir valores de corrente (além de outros casos).

Assim como no caso do Ohmímetro, precisaremos utilizar um pequeno truque para medir a corrente de um circuito. No caso do amperímetro, a lógica será utilizar, em série com o circuito desejado, um resistor de baixíssima resistência. Dessa forma, podemos medir a queda de tensão em cima dele e descobrir a corrente aplicando a Lei de Ohm:

I = \frac{V}{R}

Como a tensão é medida em relação ao GND, esse resistor precisa ficar no fim do circuito, para que a tensão medida seja justamente a queda de tensão em cima dele.

Além disso, ele precisa ter uma baixa resistência para que ele não faça influência alguma no circuito o qual ele está sendo ligado. Pois, com um valor relativamente grande de resistência, ele pode impedir significativamente o fluxo de corrente do circuito.

Dependendo da aplicação, este pequeno valor pode atrapalhar o circuito, então pode não ser recomendável utilizar este método para medir corrente.

Usando um resistor de baixa resistência

Comercialmente é possível achar resistores com valores bem baixos (1Ω), mas, como eu não tenho um à disposição, utilizarei um método alternativo. O método alternativo consiste em utilizar um fio como resistência, pois todo elemento condutor tem uma resistência, mesmo que bem pequena.

Entretanto, esse método precisa de um ohmímetro para saber qual é a resistência do fio. O fio que decidi usar foi um jumpers que vem em kit de Arduino. Usei meu testador para encontrar o fio com menor resistência, que foi um com 0,65Ω.

Desse modo, a corrente do circuito será:

I = \frac{Vlido}{0,65}

Circuito de exemplo

Para exemplificar, vamos considerar o mesmo circuito do voltímetro, com o acréscimo do fio de 0,65Ω:

Esquemático amperímetro circuito com led

Para evitar imprecisão, usei o fio de 0,65Ω para ligar o resistor de 220Ω direto para o GND. Fiz isso para evitar usar outro fio, e assim evitar acréscimo de resistência. Então, no circuito acima, considere o fio de 0,65Ω como sendo toda a ligação da parte de baixo (R1 até GND).

Programação

Considerando um caso máximo, em que a corrente é de 1A, a tensão máxima no fio será abaixo de 1v (V=1*0,65 = 0,65v). Portanto, posso alterar a tensão de referência do conversor analógico-digital para 1.1v, utilizando o comando mostrado no tópico do voltímetro (analogReference).

Com isso, a conversão do valor lido para tensão fica:

V = \frac{Vlido*1.1}{1023}

E basta usar a tensão acima para achar o valor da corrente. A programação é bem tranquila, só com a leitura dos comentários já é possível entender como escrevi a lógica abordada acima.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void setup() {
  // Cria a comunicação serial para exibir os valores no monitor serial
  Serial.begin(9600);

  // Altera a tensão de referência para 1.1v
  analogReference(INTERNAL);
}

void loop() {
  // Mede o valor de 0 a 1023 e converte para tensão
  // o (float) faz um coerção, pois o comando analogRead retorna um numero inteiro e a tensão é um float
  float tensao = (float)analogRead(A0)*1.1/1023;

  // Encontra a corrente a partir da tensao
  float I = tensao/0.65;

  // Exibe o valor da corrente em mA, por isso multiplico por 1000
  Serial.println(I*1000);

  // Cria um pequeno atraso entre cada medição
  delay(1000);
}

Resultados

Medindo a corrente do circuito com um multímetro, o valor obtido foi de 10,7mA. E, medindo pelo programa (ao mesmo tempo que o multímetro), o resultado foi de aproximadamente 8,2mA. Ou seja, é um valor próximo, mas totalmente inadequado para medir sensores que indicam as grandezas em faixas de 4 a 20mA. Pois, nestes casos é necessário ter uma precisão maior para obter os dados dos sensores corretamente.

Medindo a corrente do circuito do ohmímetro (um resistor de 820 e outro de 220) deu um valor de 4,96mA que está com uma pequena diferença do valor calculado (4,8mA). Portanto, os resultados são até bem impressionantes.

É possível melhorar a precisão dos resultados utilizando a referência de tensão no pino AREF. Dessa forma, alimentando esse pino com uma tensão bem pequena (0.3v por exemplo) com a ajuda de um divisor de tensão. Além disso, utilizar uma resistência menor ainda no lugar do fio (0,65Ω) ajuda.

 

Pronto, com a lógica mostrada neste tópico já podemos criar um amperímetro com algumas limitações.


Com estes três instrumentos, podemos transformar o Arduino em um multímetro utilizando cada medição em uma entrada analógica do Arduino.