En esta entrada vamos a emplear Arduino para medir la resistencia eléctrica de un dispositivo. ¿Por qué resulta esto interesante? ¿Por qué no usamos un polímetro y ya esta?
Bueno, el motivo por el que queremos medir resistencias es que muchos sensores proporcionan su medición mediante una variación de su resistencia. Para poder usar estos sensores (de luz, de temperatura) tenemos que poder medir su resistencia desde Arduino.
Lamentablemente en Arduino (en general, prácticamente en ningún autómata) no disponemos de una entrada donde medir directamente resistencias. Lo único que podemos medir son señales de tensión digitales o analógicas.
Pero podemos emplear estas, y un pequeño montaje que vamos a hacer, para medir fácilmente el valor de una resistencia desconocida mediante comparación con una conocida.
En esta entrada vamos a usar de forma intensiva las entradas analógicas, por lo que se da por supuesto que se está familiarizado con su uso. Si no es así es aconsejable que visites esta entrada ”Entradas analógicas en Arduino”, donde vimos como usar las entradas analógicas de Arduino..
Esquema eléctrico y montaje
Como decíamos, nuestro procesador no puede medir resistencias, ni intensidades eléctricas. Lo único que podemos medir son voltajes discretizados a través de sus entradas.
Sin embargo podemos aprovechar las entradas analógicas para medir fácilmente el valor de una resistencia desconocida, por comparación con otra. A la resistencia conocida la llamaremos de calibración
.
El montaje que necesitamos es un simple divisor de tensión entre la resistencia de valor desconocido y nuestra resistencia de calibración. El esquema eléctrico que necesitamos es el siguiente.
Mientras que el montaje en una protoboard sería el siguiente.
A veces oiréis llamar incorrectamente a esta resistencia de Pull-Down porque ocupan lugares similares en los montaje eléctrico, como vimos en la entrada Leer un pulsador con Arduino).
Sin embargo la funcionalidad de estas resistencias es distinta (así que hacerme feliz y llamarla resistencia de calibración 😙)
Ejemplo de código
El código necesario para realizar la lectura es simple. Simplemente leemos el valor del tensión mediante la entrada analógica, y empleamos las ecuaciones del divisor de tensión para obtener el valor de la resistencia medida.
const int sensorPin = A0;
const int Rc = 1500; // valor de la resistencia de calibración
int V; // almacena el valor medido
long Rsensor; // almacena la resistencia calculada
void setup() {
}
void loop() {
V = analogRead(sensorPin); //realizar la lectura
Rsensor = 1024L * Rc / V - Rc; //calcular el valor de la resistencia
//...haríamos lo que quisieramos por Rsensor
delay(1000);
}
Os fijaréis que hemos realizado todas los cálculos empleando aritmética de números enteros, evitando intencionadamente emplear variables de tipo float. El motivo es que las operaciones en coma flotante ocupan una gran cantidad de memoria y son significativamente más lentas.
Siempre que sea posible evitar emplear las operaciones en coma flotante. Hay múltiples técnicas para realizar operaciones similares con aritmética de enteros, sin perder apenas precisión.
El valor de la resistencia de calibración
Lo único que resta es que elegir es el valor de la resistencia de calibración. La respuestas no es única, y su valor dependerá totalmente del rango de resistencias que puede adoptar el sensor durante su funcionamiento.
En general el valor a elegir dependerá de:
Suficientemente grande para limitar la corriente que atraviesa el sensor cuando este adquiera su mínimo valor. (Por ejemplo, si el sensor puede llegar a registrar 0 Ohmnios, la única resistencia que limitará la corriente será la resistencia de calibración).
Suficientemente pequeña en comparación con la del sensor para limitar la pérdida de precisión de la medición. (Por ejemplo, si la resistencia del sensor adquiere el mismo valor que la de calibración, estaremos perdiendo la mitad de la precisión disponible).
Para que os sirva de orientación, valores habituales de esta resistencia suelen ser 1k a 4,7k, aunque como hemos dicho depende del rango de resistencias del sensor.
Podéis ayudaros de nuestra calculadora de divisores de tensión para determinar el valor de la resistencia de calibración, la intensidad que soportará, y la pérdida de precisión.
Descarga el código
Todo el código de esta entrada está disponible para su descarga en Github.