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.

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.
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.

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.
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.
A função matemática a ser desenvolvida abaixo será baseado no diagrama abaixo:


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

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

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.
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%.
Materiais necessários para o projeto Ohmimetro com Arduino
O projeto base terá a seguinte montagem:

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:

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.

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:
Realize a montagem final seguindo o diagrama abaixo.

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:
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().
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!
|
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!