Midiendo resistencia con Arduino

Hoy en día los aficionados a Arduino no van demasiado profundo ni en programación ni en electrónica. Resulta que entre las innumerables librerías y ejemplos de código, y los módulos disponibles en el mercado, pareciera que no hace falta. Sin embargo, para los que les llegó ese momento en donde el conocimiento es necesario, queremos explicar como medimos resistencia.

Pero… ¿Para qué?

Bueno, resulta que la mayoría de los sensores del mercado entregan sus mediciones en una de tres formas. Capacitancia, algunos sensores varían su capacitancia en función de los valores a entregar. Tensión, otros sensores entregan una tensión (voltaje) variable dependiendo de las lecturas a transmitir. Por último, hay sensores que entregan sus mediciones mediante una variación en la resistencia.

El segundo caso es simple de integrar, siempre y cuando el voltaje se encuentre entre 0v y 5v podemos leer los valores mediante cualquiera de las entradas analógicas. El tercer caso es el que nos interesa hoy, y veremos lo simple que es medir resistencia usando un poco de matemática básica (algo de física) y nuestras entradas analógicas con un código simple de comprender.

Un poco de teoría

Antes de ir a la práctica (que es lo interesante), es necesario aprender algo de teoría para que podamos adaptar lo aprendido a nuestras necesidades, ya que no podemos cubrir todas las aplicaciones que pudieran plantearse.

En electrónica básica existe el concepto de como hacer un divisor de tensión con 2 resistencias. El esquema básico de un divisor de tensión es el siguiente:

Divisor de tensión

Y funciona mediante la siguiente fórmula: Vs = Vr * R2 / (R1 + R2). Si quisiéramos dividir la tensión de referencia (Vr) a la mitad, todo lo que tendríamos que hacer es usar 2 resistencias iguales. Por ejemplo, si R1 y R2 son ambas digamos de 500Ω (ohms), entonces Vs = Vr * 500 / (500 + 500) = Vr * 0,5 , o lo que es lo mismo, la mitad de Vr.

Midiendo resistencia

Con lo antes expuesto, resulta sencillo adaptarlo para medir resistencia con Arduino. El dibujo esquemático sería el siguiente:

Midiendo resistencia con Arduino UNO

Simplificando, conecte una resistencia de referencia (R2) (digamos 10KΩ) desde el pin A0 a GND, y luego conecte la resistencia a medir  (Rv) con un extremo a 5V y el otro a A0. Al valor medido analógicamente en A0 deberá aplicarle la siguiente fórmula (derivada de la fórmula aprendida antes y considerando R2 = 10KΩ):

Rv = (Va * 10000 / 5) – 10000 (donde Va es el valor leído de A0)

Convirtiendo la teoría en práctica

Veamos lo anterior con un pequeño proyecto y un Sketch simple. Para ello necesitaremos una resistencia de 10KΩ y un Arduino UNO con su respectivo cable USB (puede usar un Arduino Mega 2560 tambien o cualquier otro Arduino con características similares y que trabaje a 5V).

Arme en un pequeño breadboard (o protoboard o sino en el aire debería funcionar también) el siguiente esquema:

Midiendo resistencia con Arduino

Y luego cargue el siguiente Sketch que hará lecturas por el Monitor Serial:

/*
 * ArduinoHobby.com
 * Midiendo resistencia con Arduino
 * 
 * Para medir una resistencia, conectela entre los 5V de su Arduino y A0
 */
 
#define PIN_RESISTENCIA A0

// R2 = 1K (para el ejemplo, puede adaptarse)
#define RESISTENCIA_BASE 1000

void setup() {
  Serial.begin(9600);
  Serial.println("Medidor de restistencia");
  Serial.println("Por favor conecte la resistencia a medir entre 5V y A0");
}

// Guardamos la ultima lectura para estabilizar las mismas
unsigned int ultimaLectura = 0;

void loop() {
  unsigned int resistencia, lectura = analogRead(PIN_RESISTENCIA);

  // Solo accionamos si tenemos una lectura y la misma difiere en 1% de la anterior
  if (lectura && abs(ultimaLectura-lectura) > 10) {
    // Calculamos la resistencia basados en la formula de division de tension
    resistencia = ((float)1023 * RESISTENCIA_BASE / lectura) - RESISTENCIA_BASE;
    
    Serial.println(String("Nueva resistencia leída: ") + resistencia + " ohms");
    ultimaLectura = lectura;
  }
}

Luego de subir el Sketch abra el Monitor Serial a 9600bps y conecte una resistencia a medir entre los cables azules del esquema compartido (entre 5V de su Arduino y A0). Compare la lectura de su Arduino con un multímetro. Debería lograr una lectura que no difiera en más de un 1% de la de su multímetro.

Comentarios finales

Para mayor presición habría que cambiar el método de estabilización en el Sketch pero eso se los dejo a ustedes.

Finalmente, verá que cuando se acerca a los extremos del espectro, es decir, a 1Ω o a 1MΩ los resultados no son tan precisos o simplemente ya no son útiles. Esto es debido a que la resistencia creció o decreció demasiado para que los cálculos y la precisión de nuestra entrada analógica alcancen.

Por ello, la mejor manera de calibrar nuestro medidor de resistencias es elegir para R1 (la resistencia de referencia en nuestro breadboard) un valor intermedio entre el máximo y el mínimo valor de resistencia que deberemos medir.

Por ejemplo, si debemos medir resistencias entre 1K y 10K, usen de referencia una resistencia de 5,6K.

Deja un comentario