Tutoriais

Ohmimetro com Arduino

Eletrogate 29 de setembro de 2021

Introdução

Se você já possui um pequeno contato com eletrônica, você já deve aprendeu a manusear diversas ferramentas. Provavelmente o primeiro instrumento de medição de um iniciante seja o multímetro.

Um multímetro é um instrumento capaz de realizar diversas medidas de interesse em um circuito elétrico e eletrônico, onde as mais comuns são: tensão alternada e tensão contínua, resistência elétrica, corrente elétrica e continuidade / polaridade de um diodo.

Blog-Eletrogate-Multimetro

Existem diversos outros multímetros mais avançados no mercado que são capazes de fazer leituras também de temperatura, capacitância, frequência da rede e outras tarefas mais, como reter o valor máximo ou segurar um valor.

O multímetro ideal dependerá do seu orçamento e utilidade, e em seu projeto você poderá utilizar mais simples como o Hikari HM-1001 ou um mais avançado como o Hikari HM-2082. Mas muitas vezes nem se faz necessário ter um multímetro para realizar algumas medições. O próprio Arduino dá conta do recado e faz de forma muito boa.

Nesse post iremos aprender a como fazer o nosso próprio ohmímetro que possui bastante precisão e será capaz de nos ajudar a fazer medições automatizadas em nosso projeto.


Divisor de Tensão

Uma das primeiras lições básicas sobre circuitos eletrônicos é o divisor de tensão. Isso porque esse é um circuito bastante simples e geralmente é passado os exercícios para que possamos entender como a tensão se divide entre dois resistores de valores diferentes e como fazemos para calcular.

Blog-Eletrogate-Divisor-de-Tensao

Essa montagem é muito útil para diversos circuitos e já foi abordado no blog como uma forma de adequar sinais de 5V em 3.3V, mas hoje iremos ver como ela pode ser usada para outra finalidade, como a de ohmímetro, que poderá ser bastante útil em seu projeto com NTC, LDR, ou diversos outros sensores baseados em resistência elétrica.

A grande sacada no circuito do divisor de tensão tradicional é que é possível saber a tensão Vout (da imagem acima) sabendo os valores das resistências e a tensão de alimentação. Modificando um pouco essa premissa, logo, sabendo a tensão Vout, a tensão de alimentação e o valor de um dos resistores, é possível saber qual o valor do resistor desconhecido.

Esse princípio será utilizado para fazermos o nosso ohmímetro que será bastante preciso.


Problemas Comuns

Um dos problemas mais comuns em projetos de ohmímetros que você irá encontrar é que as pessoas supoem uma tensão de alimentação, no código, por exemplo, 5V, e a partir dai elas desenvolvem uma equação. 

O problema dessa abordagem é que não é possível supor essa tensão de 5V, porque a placa Arduino nunca está alimentada perfeitamente em 5V, geralmente estará em um valor abaixo, onde pode acontecer de estar alimentada em até 4V, caso esteja alimentado via um HUB USB que esteja um pouco sobrecarregado. Nesse cenário o erro de suposição seria de 20%, e influenciaria muito a medição.

Logo, a melhor abordagem seja lançar mão de usar uma tensão real para calcular a resistência e partir para utilizar uma tensão fictícia, que será “1023V”. Isso porque o conversor ADC do Arduino lê a tensão de entrada da placa como 1023 (porque ele é um conversor ADC de 10 bits) e a tensão Vout, que será a tensão entre os resistores, ele lerá exatamente como se o divisor de tensão estivesse submetido a uma tensão de 1023V.

Com isso, podemos calcular a resistência sem precisar supor uma tensão de alimentação, o que aumenta bastante a precisão da medida da resistência que será medida.

Uma observação importante é que este ohmímetro que será feito não terá a mesma precisão que um ohmímetro comercial, isso porque existem não-linearidades no conversor ADC do Arduino Uno, que faz com que a implementação não fique perfeita, mas você poderá notar que o resultado se aproxima bastante do ideal.


Função a ser Implementada

A função matemática a ser desenvolvida abaixo será baseado no diagrama abaixo:

Blog-Eletrogate-Divisor1

Blog-Eletrogate-Divisor2

Onde a leitura do pino analógico A0, utilizando o divisor de tensão tradicional, é:

Blog-Eletrogate-Equacao1

Fazendo um algebrismo para isolar R2, é possível calcular R2 como:

Blog-Eletrogate-Equacao2

Onde a partir do valor A0 e do resistor R1 que possui valor conhecido, é possível saber o valor o valor de R2, que é o resistor que queremos determinar o valor.

Observação

Para que o projeto seja o mais preciso possível, idealmente é bom que o valor do resistor R1 seja medido com um multímetro. Caso não seja possível, você pode estar utilizando o valor de referência que o fabricante manda, mas esse valor possui uma incerteza no valor, onde geralmente é 10% ou 5%.


Montando o Projeto

Materiais necessários para o projeto Ohmimetro com Arduino

O projeto base terá a seguinte montagem:

Blog-Eletrogate-Diagrama2

Código

int R1 = 9845; // Valor medido no multimetro

void setup() {
  Serial.begin(9600);
  pinMode(A0, INPUT);
}

void loop() {
  double resistencia, aux;
  aux = (float)analogRead(A0)/1023;
  resistencia = aux * (float) R1 / (1 - aux);
  Serial.println("O valor da resistencia é: "+ String(resistencia) + " Ω");
  delay(2000);
}

A primeira linha é muito importante. Nela você declarará qual o valor do seu resistor R1 que você mediu. Recomendo que o resistor seja de 10K, mas caso você não tenha ai, outros valores funcionarão.

int R1 = 9845; // Valor medido no multimetro

A saída do monitor serial deverá mostrar o valor do resistor colocado:

Blog-Eletrogate-Monitor-Serial

Comparando o valor encontrado com a medição do multímetro, vemos que está bem preciso, com uma imprecisão inferior a 3% para este teste.

Blog-Eletrogate-Ohmimetro-Comparacao


Incrementando o Projeto

Para o projeto ficar mais bonito e funcional, é importante que possamos ler as medidas independente do monitor serial. Por isso, será adicionado um display OLED.

Caso você não tenha a biblioteca do display OLED, recomendo que você veja o post abaixo:

Guia Completo do Display OLED

Realize a montagem final seguindo o diagrama abaixo. 

Blog-Eletrogate-Diagrama-Final

 

Código

Carregue o código abaixo para a sua placa Arduino:

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET     4 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3C ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

int R1 = 9845;

void setup() {
  Serial.begin(9600);
  pinMode(A0, INPUT);

  if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
    Serial.println(F("SSD1306 allocation failed"));
    for(;;); // Don't proceed, loop forever
  }
  TextoInicial();
  
}

void loop() {
  double resistencia, aux;
  aux = (float)analogRead(A0)/1023;
  resistencia = aux * (float) R1 / (1 - aux);
  Serial.println("O valor da resistencia é: "+ String(resistencia) + " Ω");
  ImprimeOled(resistencia);
  delay(2000);
}

void TextoInicial(void){
  display.clearDisplay();
  display.setTextSize(2);             // Normal 1:1 pixel scale
  display.setTextColor(SSD1306_WHITE);        // Draw white text
  display.setCursor(10,20);             // Start at top-left corner
  display.println(F("Ohmimetro"));
  display.setCursor(20,40);
  display.println(F("Arduino"));
  display.display();
  delay(3000);
}

void ImprimeOled(float resistencia){
  display.clearDisplay();
  display.setTextSize(2);             // Normal 1:1 pixel scale
  display.setTextColor(SSD1306_WHITE);        // Draw white text
  display.setCursor(30,30);             // Start at top-left corner
  if (resistencia < 1000) {
  display.print(resistencia);
  }
  else if(resistencia < 1000000){
    display.print((resistencia/1000));
    display.print("K");
  }
  else if(resistencia < 1000000000){
    display.print((resistencia/1000000));
    display.print("M");
  }
  else
    display.println(resistencia);
  display.display();
}

 

O resultado deverá ser como no video abaixo:

Sugestão de melhoria

Você deve notou que as medidas possuem umas oscilações. É fácil de corrigir isso implementando um filtro digital, neste post que preparamos para você. Recomendo fazer um filtro de média móvel, e troque a função delay por uma implementação com millis().


Conclusão

Neste post pudemos ver como é simples e interessante fazer um ohmimetro utilizando o Arduino. Com isso você poderá, além de medir valores de resistores, poderá mensurar sinais de transdutores e sensores baseados em resistência ohmica em tempo real.

Caso você tenha gostado deste post e foi útil de alguma forma para você, não se esqueça de dizer para nós nos comentários. Considere nos seguir no Instagram: @eletrogate

Até o próximo post!

Conheça a Metodologia Eletrogate e ofereça aulas de robótica em sua escola!


Sobre o Autor


Gustavo Nery

Cursando Engenharia de Controle e Automação pela UFMG. Apaixonado por eletrônica, computação e tecnologias na área de sistemas embarcados. Nos tempos livres me divido entre desenvolver pesquisa na universidade, adquirir novos conhecimentos e estar com a família.


Eletrogate

29 de setembro de 2021

A Eletrogate é uma loja virtual de componentes eletrônicos do Brasil e possui diversos produtos relacionados à Arduino, Automação, Robótica e Eletrônica em geral.

Conheça a Metodologia Eletrogate e Lecione um Curso de Robótica nas Escolas da sua Região!

Eletrogate Robô

Assine nossa newsletter e
receba  10% OFF  na sua
primeira compra!