El profesor Juan Manuel Mercadín comparte este proyecto que permite construir un capacimetro utilizando solamente una placa Arduino Uno. En el siguiente vídeo nos explica como funciona y nos brinda detalles del desarrollo y su implementación.
Medición de la resistencia de pull-up interna
Para poder conocer al valor de la resistencia interna de pull-up del pin 13 del Arduino es necesario utilizar una resistencia de valor conocido. Además hay que cargar el siguiente programa en la placa:
// Definiciones
#define Lectura A0 // Pin de lectura de tensión del divisor
#define R_ext 9.89 // Valor de la resistencia externa expresada en kilo ohms
#define Pin_R_pull_up 13 // Pin de la resistencia de pull up interna
// Variables
float R_pu = 0.0; // Variable para guardar el valor de la resistencia de pull up interna
void setup() {
Serial.begin(9600); // Inicializo el monitor serial
pinMode(Pin_R_pull_up,INPUT_PULLUP);// Pongo el pin 13 como entrada con resistencia de pull up
}
void loop() {
R_pu = (float)((1023*R_ext)/analogRead(Lectura) - R_ext); // Calculo el valor de la resistencia interna de pull up
Serial.print("La resistencia de pull-up interna vale: "); // Imprimo texto
Serial.print(R_pu); // Imprimo el valor de la resistencia de pull up
Serial.println("k"); // Imprimo texto
delay(1000); // Espero 1 segundo
}
Esquema para medir la resistencia pull-up interna:
Montaje del proyecto
El circuito propuesto es muy simple ya que no requiere de componentes externos. Se puede colocar algún zócalo o pinzas tipo cocodrilo para agilizar el conexionado del capacitor. Recuerden que es necesario que el capacitor a medir esté descargado antes de conectarlo.
El código fuente completo del capacimetro es el siguiente:
// Definiciones de pines
#define carga 13 //Pin 13 para cargar el capacitor
#define descarga 12 //Pin 12 para descargar el capacitor
#define tension A0 //Pin A0 para realizar las mediciones de carga
// Definiciones de constantes
#define resistencia 37.61 // Resistencia del pull-up interno expresada en kilo ohms del arduino, pata 13
#define capacitor_parasito 3.15 // Capacitor parasito
// Variables
long tiempo = 0; //Guarda el tiempo de carga
float capacitor = 0.0; //Guarda el valor de capacidad
float capacitor_micro = 0.0; //Guarda el valor de un capacitor en micros
float capacitor_mili = 0.0; //Guarda el valor de un capacitor en milis
void setup() {
Serial.begin(9600); //Inicializo el monitor serial
pinMode(descarga,INPUT); //Pin de descarga como entrada de alta impedancia
}
void loop() {
pinMode(carga,INPUT_PULLUP); //Pin de carga como entrada con pull-up
tiempo = micros(); //Guardo el instante de tiempo
while (analogRead(tension)<648); //Mido hasta llegar al 63% de tensión, o sea 1 TAU
tiempo = micros() - tiempo; //Obtengo el tiempo transcurrido
pinMode(carga,INPUT); //Pin de carga como entrada con pull-up
pinMode(descarga,OUTPUT); //Pin de descarga como salida
digitalWrite(descarga,LOW); //Activo la descarga
capacitor = tiempo/resistencia; //Calculo el valor de capacidad
if (capacitor >= capacitor_parasito) // Ingreso si el valor de capacidad es mayor al de la capacidad parasita
{
if (capacitor < 1000) //Pregunto si es menor que 1 micro
{
Serial.print("El valor del capacitor es: "); //Imprimo texto
Serial.print(capacitor); //Imprimo el valor de capacidad en nF
Serial.println("nF"); //Imprimo texto
}
else
{
if (capacitor < 1000000) // Pregunto si es menor que 1 mili
{
capacitor_micro = (float) capacitor/1000; //Paso a la unidad de uF
Serial.print("El valor del capacitor es: ");//Imprimo texto
Serial.print(capacitor_micro); //Imprimo el valor de capacidad en uF
Serial.println("uF"); //Imprimo texto
}
else
{
if (capacitor <= 4700000) // Limito las lecturas a 4,7 mF
{
capacitor_mili = (float) capacitor/1000000; //Paso a la unidad de mF
Serial.print("El valor del capacitor es: ");//Imprimo texto
Serial.print(capacitor_mili); //Imprimo el valor de capacidad en mF
Serial.println("mF"); //Imprimo texto
}
else
{
Serial.print("El valor del capacitor es muy grande");//Imprimo texto
}
}
}
}
else
{
Serial.println("El valor del capacitor es: 0nF"); //Imprimo texto
}
while(analogRead(tension) != 0); //Espero hasta que se descargue por completo el capacitor
pinMode(descarga,INPUT); //Pongo el pin de descarga en alta impedancia
delay(1000); //Espero 1 segundo
}
Agradezco a Juan por permitir la publicación de su proyecto completo para que puedan construirlo y experimentar.
Juan Manuel Mercadín es ingeniero y técnico electrónico. Actualmente se desempeña como docente en la ciudad de Mar del Plata y desarrolla dispositivos electrónicos.