OhmMeter usando Arduino – com recurso de alcance automático

Tempo de leitura: 5 minutes

Ohmímetro de variação automática usando arduino.

Este artigo é sobre um ohmímetro de variação automática simples usando o arduino. A resistência medida é exibida em um display LCD de 16 × 2. O circuito é suficientemente preciso e usa o mínimo de componentes externos possíveis. Antes de entrar nos detalhes deste projeto, vamos dar uma olhada no método básico de medição de resistência.

Medição de resistência.

A figura acima mostra o diagrama do circuito de um esquema simples de medição de resistência. Rx é a resistência a ser medida. R1 é a resistência de entrada. i é a corrente que passa pelo loop e 5 V é a tensão de alimentação. Para encontrar a resistência desconhecida Rx, a tensão em Rx é medida primeiro. deixe a tensão em R1 ser VR1. Então VR1 = 5-Vx. O atual i = VR1/R1 = (5-Vx) / R1. Visto que R1 e Rx estão conectados em série, a corrente através deles será igual. Portanto, a resistência desconhecida Rx = Vx/i. A tensão na resistência desconhecida é medida usando o ADC do arduino. Para ser mais preciso, canal analógico A5.

De qualquer forma, esse método tem uma desvantagem. Se houver grande diferença entre a resistência de entrada e o Rx, o resultado será extremamente impreciso. Isso ocorre porque quase toda a tensão de entrada cairá através da resistência maior e isso fornece muito menos informações.

  • Suponha que R1 = 10K e Rx = 100 ohm. Então, a tensão em R1 será de 4,95 V e a tensão em Rx será de 50 mV e isso fornece menos informações. A sensibilidade do arduino é de 4.889mV. Então, quando lemos 50mV usando o arduino ADC, o resultado será 10. Quando convertido em tensão, o resultado será 10 x 4,889mV = 48,89mV. Então Rx = 0,0488/((5V-48,89mV)/10000) = 98,7 ohm.
  • Suponha que R1 = 10 e Rx = 220 ohm. Então, a tensão em R1 será de 4,89 V e a tensão em Rx será de 107 mV. A leitura digital correspondente será 21. Quando a convertermos em tensão, o resultado será 21 x 4.889mV = 102mv. Seguindo os cálculos usados no caso anterior, Rx = 208 ohm.

Nos dois casos acima, você pode ver problemas de precisão. O resultado mais preciso ocorre quando Rx e R1 estão o mais próximos possível.

 

Variação automática.

Um esquema para estimar o valor de Rx aproximadamente e, em seguida, colocar um resistor correspondente no lugar de R1 é o que precisamos aqui e este método é chamado de intervalo automático. O circuito fornecido a seguir demonstra o intervalo automático.

As resistências R1 a R7 são os resistores de entrada. Neste esquema, a extremidade livre de um resistor é mantida alta e as extremidades livres de outros resistores são mantidas baixas. A tensão através da resistência desconhecida Rx é medida. Os diodos D1 a D7 são usados para evitar o refluxo da corrente em direção às extremidades baixas. Suponha que a extremidade livre de R1 seja mantida baixa. Se R1 e Rx forem iguais, a queda de tensão em Rx será (5-0,7) / 2 = 2,15, onde 0,7 é a queda do diodo. Se a tensão em Rx for menor ou igual a 2,15, podemos assumir que Rx é menor ou igual a 220 ohms. O valor mais próximo possível para a resistência de entrada é 220 ohms e, portanto, este loop é considerado para o cálculo. Se a condição acima não for satisfeita, as etapas acima são repetidas com os resistores de entrada seguintes até obtermos uma solução.

Diagrama de circuito.

O diagrama de circuito completo do ohmímetro de variação automática usando arduino é mostrado na figura acima. Os pinos digitais 1, 6, 7, 8, 9, 10, 13 do arduino são usados para alternar os resistores de entrada R1, R2, R3, R4, R5, R6, R7 respectivamente. Os resistores D1 a D7 são usados para evitar o refluxo da corrente pelo caminho correspondente. D8 é o LED indicador de energia LIGADA. POT R10 é usado para ajuste de contraste do LCD. O resistor R9 limita a corrente do LED de luz de fundo.

Programa.

// Incluir a biblioteca: 
#include <LiquidCrystal.h>
// Cria o objeto lcd da classe LiquidCrystal: 
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

int vin=A5;

int t=1;
int u=6;
int v=7;
int w=8;
int x=9;
int y=10;
int z=13;

int at;
int au;
int av;
int aw;
int ax;
int ay;
int az;
int a;
double vx;
float rx;
double i;

void setup()
{
   pinMode(vin,INPUT);
   lcd.begin(16,2);

   pinMode(t,OUTPUT);
   pinMode(u,OUTPUT);
   pinMode(v,OUTPUT);
   pinMode(w,OUTPUT);
   pinMode(x,OUTPUT);
   pinMode(y,OUTPUT);
   pinMode(z,OUTPUT);

   digitalWrite(t,LOW);
   digitalWrite(u,LOW);
   digitalWrite(v,LOW);
   digitalWrite(w,LOW);
   digitalWrite(x,LOW);
   digitalWrite(y,LOW);
   digitalWrite(z,LOW);
}

void loop()
{

  digitalWrite(t,HIGH);
  digitalWrite(u,LOW);  
  digitalWrite(v,LOW);
  digitalWrite(w,LOW);
  digitalWrite(x,LOW);
  digitalWrite(y,LOW);
  digitalWrite(z,LOW);
  delay(100);  
  at=analogRead(vin);

  digitalWrite(t,LOW);
  digitalWrite(u,HIGH);
  digitalWrite(v,LOW);
  digitalWrite(w,LOW);
  digitalWrite(x,LOW);
  digitalWrite(y,LOW);
  digitalWrite(z,LOW);
  delay(100);
  au=analogRead(vin);

  digitalWrite(t,LOW);
  digitalWrite(u,LOW);
  digitalWrite(v,HIGH);
  digitalWrite(w,LOW);
  digitalWrite(x,LOW);
  digitalWrite(y,LOW);
  digitalWrite(z,LOW);
  delay(100);
  av=analogRead(vin);

  digitalWrite(t,LOW);
  digitalWrite(u,LOW);
  digitalWrite(v,LOW);
  digitalWrite(w,HIGH);  
  digitalWrite(x,LOW);
  digitalWrite(y,LOW);
  digitalWrite(z,LOW);
  delay(100);
  aw=analogRead(vin);

  digitalWrite(t,LOW);
  digitalWrite(u,LOW);
  digitalWrite(v,LOW);
  digitalWrite(w,LOW);
  digitalWrite(x,HIGH);
  digitalWrite(y,LOW);
  digitalWrite(z,LOW);
  delay(100);
  ax=analogRead(vin);

  digitalWrite(t,LOW);
  digitalWrite(u,LOW);
  digitalWrite(v,LOW);
  digitalWrite(w,LOW);
  digitalWrite(x,LOW);
  digitalWrite(y,HIGH);
  digitalWrite(z,LOW);
  delay(100);
  ay=analogRead(vin);

  digitalWrite(t,LOW);
  digitalWrite(u,LOW);
  digitalWrite(v,LOW);
  digitalWrite(w,LOW);
  digitalWrite(x,LOW);
  digitalWrite(y,LOW);
  digitalWrite(z,HIGH);
  delay(100);
  az=analogRead(vin);

  if(az>=450)
  {
    vx=az*0.00489;
    i=(5-vx-0.55)/22000;  
    rx=(vx/i);  
  }
  if(ay>=450 && az<450)
  {
    vx=ay*0.00489;
    i=(5-vx-0.55)/10000;
    rx=(vx/i);
  } 
  if(ax>=448 && ay<448 && az<448)
  {
    vx=ax*0.00489;
    i=(5-vx-0.55)/4700;
    rx=(vx/i);
  }
  if(aw>=439 && ax<439 && ay<439 && az<439)
  {
    vx=aw*0.00489;
    i=(5-vx-0.55)/2200;
    rx=(vx/i);
  }
  if(av>=439 && aw<439 && ax<439 && ay<439 && az<439)
  {
    vx=av*0.00489;
    i=(4.8-vx-0.55)/1000;
    rx=(vx/i); 
  }
  if(au>=430 && av<430 && aw<430 && ax<430 && ay<430 && az<430)
  {
    vx=au*0.00489;
    i=(4.5-vx-0.55)/560;
    rx=(vx/i);
  }
  if(at>=430 && au<430 && av<430 && aw<430 && ax<430 && ay<430 && az<430 ) 
  {
    vx=at*0.00489;
    i=(4.5-vx-0.55)/220;
    rx=(vx/i); 
  }
  if(at<430 && au<430 && av<430 && aw<430 && ax<430 && ay<430 && az<430 )
  {
    vx=at*0.00489;
    i=(4.5-vx-0.55)/220;
    rx=(vx/i);
  }
  lc.setCursor(0,0);

  if(vx>4.8)
  {
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("----INFINIDADE----");
  } else {
    if(rx<1000)
    {
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print(rx);
      lcd.setCursor(7,0);
      lcd.print((char)244);
    } else {
      lcd.clear();
      rx=rx/1000;
      lcd.setCursor(0,0);
      lcd.print(rx);
      lcd.setCursor(6,0);
      lcd.print("k");  
      lcd.print((char)244);
    }
  }
  lcd.setCursor(0,1);
  lcd.print("Arduino Ohmmeter");
}

 

 

Conclusão

Neste artigo, mostrei como usar um LCD I2C para demonstrar o Valor da Resistência, usando o Arduino Uno, nesta nova versão do Ohmímetro. Espero que você tenha achado útil e informativo. Se sim, compartilhe com um amigo que também gosta de eletrônica e de fazer coisas!

Eu adoraria saber quais projetos você planeja construir (ou já construiu) com esse projeto. Se você tiver alguma dúvida, sugestão ou se achar que falta algo neste tutorial, por favor, deixe um comentário abaixo.