Pages: 1 [2]   Go Down
Author Topic: Capacimetro con Arduino  (Read 7048 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 35
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Un par de cosas. La ecuación para calcular la capacidad del condensador pones

(tiempofincarga/3350)-0.04

pero matemáticamente debería ser el tiempo de carga dividido por la resistencia. ¿Por qué has puesto esa otra? ¿Cómo has llegado a esa ecuación? ¿Es algo que has hecho de forma empírica?

Y una última cosa. El programa es sencillo pero a la vez lo veo muy práctico. Tanto es así que podías ampliarlo para calcular valores de condensadores más pequeños. En el programa que puedas seleccionar entre la resistencia de 3K u otra de por ejemplo 100K (no sé si la impedancia de las entradas de Arduino permitiría valores más altos para la resistencia).

3350 fue a base de probar. En realidad tendría que ser 3000, que es la resistencia de carga del condensador, pero como los resultados que me daba no coincidían por el tema de las tolerancias tan altas de los condensadores, lo ajusté hasta que cuadrasen las medidas leídas. -0.04 es una lectura que me daba el programa en vacío, es decir, sin conectar ningún condensador, así que se me ocurrió rectar ese valor de 0,04uF. No se si será que los 40 nanofaradios es por algún error en el programa, es por que las pistas de la protoboard hacen de condensador o es por algún tema interno del arduino.

Con respecto a poner resistencias mucho más altas no hay problema teóricamente, pero lo tengo que probar. El programa en principio lo hice únicamente con fines educativos.

La verdad que con el arduino se puede hacer un polímetro bastante práctico y barato. Por supuesto con limitaciones.

Ni que decir tiene que se admiten mejoras al programa que hice. Si alguien ve como mejorarlo, aumentando el rango de lecturas o implementándole otras funciones, pues por supuesto bien venido sea. Eso sí, ruego que se prueba antes de colgar el código aquí y que se comente de la forma más exhaustiva posible, el código incluido o modificado.

Logged

Málaga, Spain
Offline Offline
Edison Member
*
Karma: 41
Posts: 2182
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Es diferencia entre el valor teórico y el valor que has medido viene determinado por:
- el tiempo que tarda el  AVR en invocar a la rutina para leer el tiempo.
- el tiempo que tarda el código digitalWrite hasta que realmente se pone el pin a 1 o a 0.
- error de cuantización del contador de micros. Es decir, tu mejor resolución es 1 micro segundo.
Por otro lado, las rutinas digitalWrite y microseconds son deterministas, e.d. constantes. Por eso puedes añadir ese offset, que realmente debería ser un offset en vez de una constante por la que multiplicas.

Resumiendo:
1. cuando la constante RC sea inferior a 1us o de unos poco microsegundos, el error será mayúsculo.
2. tendrías que calibrar cuanto tiempo se tarda, desde que invocas a microseconds y se pone el pin a 1 y restar este valor al tiempo que estás midiendo a modo de offset.
Logged

   

Offline Offline
God Member
*****
Karma: 7
Posts: 635
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

@lm386, ese sistema de ajuste de valores es muy bueno para ti pero puede ser muy malo para cualquier otro que vaya a utilizar el código ya que has fijado unos ajustes para tu resistencia y tu Arduino. Lo importante es conseguir precisión independientemente del usuario y los elementos que utilice, bien porque se consigue con el código reducir los errores o bien porque se establece una subrrutina de calibración que cada usuario puede hacer. No lo he pensado mucho así que no sé si para este caso hay alguna forma.
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 35
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@lm386, ese sistema de ajuste de valores es muy bueno para ti pero puede ser muy malo para cualquier otro que vaya a utilizar el código ya que has fijado unos ajustes para tu resistencia y tu Arduino. Lo importante es conseguir precisión independientemente del usuario y los elementos que utilice, bien porque se consigue con el código reducir los errores o bien porque se establece una subrrutina de calibración que cada usuario puede hacer. No lo he pensado mucho así que no sé si para este caso hay alguna forma.

La única forma que se me ocurre, es modificar el programa para que pueda auto calibrarse usando la capacidad de un condensador conocido, pero eso supone hacer más complejo el código y más difícil de entender para el que quiera entender como funciona el programa. Aunque es una idea totalmente razonable la que propones, creo que con que cada uno modifique la cifra hasta conseguir una lectura correcta, de un condensador de capacidad conocida, es suficiente por el momento.

Este programa posiblemente lo termine ampliando y mejorando, pero como lo hago como simple hobbye, no se para cuando estará. Hice pruebas con condensadores de mucha menos capacidad y en condensadores de cientos de pico faradios las lecturas son correctas. Pero bajando de los 100 picofaradios se producen errores monumentales, posiblemente por que las entradas del arduino tengan algún tipo de condensador entre sus patillas o a nivel interno dentro del propio chip o yo que se, lo mismo las pitas también hacen de condensador.
Logged

Offline Offline
God Member
*****
Karma: 7
Posts: 635
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

De todas formas si los condensadores los fa rican con un 20% de precisión de su capacidad y teniendo en cuenta que en la gran mayoría de sus usos  no se necesitan valores más exactos creo que tu programa cumple muy bien su finalidad.
Logged


Pages: 1 [2]   Go Up
Jump to: