Circuito Capacímetro digital

Sección dedicada a imágenes de circuitos, diagramas que no requieren explicación previa, Proyectos sencillos.
Area para desarrollo de proyectos, colaboración de toda la comunidad en proyectos. Solución de dudas y aportes.

No publicar manuales, no publicar temas ajenos a los proyectos. de ser necesario, hacer indicación con enlace entre etiquetas CODE
Avatar de Usuario
Enigma
Administrador del Sitio
Administrador del Sitio
Mensajes: 1268
Registrado: 20 Oct 2013, 16:26
Genero: Mujer
Profesion: Webmaster CEO SEO
Ubicacion: Matrix
Navegador: Chrome
Contactar:

Circuito Capacímetro digital

Mensaje sin leer por Enigma » 23 Feb 2018, 09:12

Circuito Capacímetro digital

Imagen

Los condensadores son componentes vitales en la electrónica, pero a veces se rompen, o el valor impreso en la tapa se ha convertido en ilegible. Porque mi multímetro no tiene una medición de capacitancia, me decidí a hacer uno!

El principio de medición de capacitancia es bastante simple. La tensión de un condensador a través de un resistor de carga aumenta con el tiempo T. El tiempo que toma para llegar a un cierto voltaje, se relaciona con los valores del resistor y condensador. En este proyecto, usaremos un circuito 555 temporizador como un multivibrador monoestable. Si eso suena como algo de magia oscura, no te preocupes, es bastante sencillo. Te remito a la la página de Wikipedia para los detalles, como nos enfocamos en las cosas realmente necesitan: el esquema y fórmula. El tiempo en que el condensador C se carga a través del resistor R está dado por: T = ln(3) x R x C = 1.1 RC. Si conocemos el valor de la resistencia y el tiempo, podemos calcular la capacitancia: C = T / 1.1R.

Imagen

Ahora necesitamos un dispositivo para medir el tiempo, y es donde entra el Arduino. El tiempo es definido por el estado de la clavija de salida del Temporizador 555 (pin 3). Será alta cuando está cargando el condensador y baja cuando no lo es. Esto significa que la salida genera un pulso de longitud T.

El Arduino va conectado al pin 3 y va ser detectar el levantamiento y el caer del borde (transición forma 5V a 0V y vice-versa). Usando la función micros(), vamos a saber cuánto es el pulso, y a calcular la resistencia.

El valor de la resistencia puede ser elegido libremente. Tomaremos 1 MOhm para medir la capacitancia baja (rango de nF) y 10kOhm para mayor capacitancia (uF rango). De lo contrario, las mediciones en el rango de uF tomaría años.

Por último, el valor del condensador debe mostrarse en una pantalla; Elegí un display de 7 segmentos de 4 dígitos. Las pantallas necesitan una gran cantidad de insumos, por lo que a multiplexar para resolver este problema. Básicamente: conduciremos lo muestra uno por uno, pero tan rápido que el ojo humano no puede notar. También vamos a usar un registro de cambio para disminuir aún más el número de pines del Arduino que necesitamos. El registro de desplazamiento se leer los datos desde Arduino 2 cables y siga la pantalla a través de 8 cables. Esto está bien explicado aquí:.

Usé un ATTINY 84 en vez de un mismo tamaño Arduino uno, para ahorrar algo de espacio.
Para una guía detallada de cómo programarlos, aqui tienes el tema.
También es posible utilizar un hueso pelado Arduino sólo usando el chip.

En última instancia, para la generación de energía, utilicé un regulador de batería y el voltaje de 9V (LM317).

Listado de materiales

Imagen

IC
• ATTiny 84 o 44 (16 pins)
• 555 viruta de temporizador
• Registro de desplazamiento (74HC595)
• Regulador de voltaje de 5V (LM7805) o LM317

Imagen

Resistencias
• 220R x9
• 470R x4
• 10k x3
• 1M
• 1k (sólo para LM317)
• 330R (sólo para LM317)

Condensadores
• 100nF x2
• 1uF (sólo para LM317, 100nF lo contrario)
• Al azar para medir

Otros
• LED rojo
• 4 dígitos 7 segmentos para la indicación (ánodo común), o unidades independientes con 1 o 2 dígitos
• NPN transistor x4
• Pulsador
• Interruptor de DPDT
• Conector de batería de 9V
• Batería de 9V

Imagen

El código es bastante fácil y suficientemente pequeña para caber en un ATTINY 44 o 84. Si desea hacer algunas modificaciones, no olvide guardar el tamaño en mente, como el ATTINY 44 sólo puede almacenar 4kB.

Diagrama completo

Imagen

El circuito hace 3 cosas:
Detecta cuando el pin de salida del Temporizador 555, se registra el valor de tiempo y resistencia
Detecta cuando el pin de salida va bajo, registra el tiempo
Si el pulso está por encima, calcula C y muestra
Para mostrar el número, primero se empalma en dígitos y entonces aparece uno por uno. Esto se logra enviando el código correcto para el registro de desplazamiento y activando el transistor correspondiente, para permitir que la corriente a drenar a través de los dígitos de pantalla deseado.

Los bytes para los números, definidos al principio del código, se pueden determinar con el dibujo de la cifra. La razón por la que optaron por este esquema de numeración, que puede parecer bastante extraño, es porque es la forma más fácil de cablear todo. Simplemente poner el registro de desplazamiento al lado de la pantalla y había conectado los cables adyacentes. Si su pantalla tiene un pinout diferente, puede ser útil para cambiar el esquema de numeración y bytes.

Para determinar el valor de la resistencia, se utiliza un interruptor de 2 polos. 1 poste cambia la resistencia de 10k a 1M, mientras que el otro polo pasa de 0V a 5V respectivamente. Este nivel de lógica se puede utilizar por el Arduino.
También a encender un LED durante la medición.

El gatillo para el temporizador 555, es generada por el pulsador. El perno se mantiene alta por un resistor de pull-up, tirado bajo presionando el botón, luego vuelve a alto. Este es el detonante para iniciar la medición con el temporizador 555.

Pruebe primero el circuito en un protoboard y asegurarlo está trabajando. Puede que necesite cambiar el reloj interno para obtener el valor correcto. Cuando lo use mal MHz, los resultados serán completamente equivocados.

Imagen

Ahora es tiempo de soldadura todo en un perfboard. Simplemente sustituya el capacitor indicado con "???" por algunos pins hembra encabezado, así que es fácil insertar los condensadores. También es perfectamente posible hacer tu propio PCB.

Imagen

Mis resultados fueron bastante precisos y funciona muy bien. Para más precisión, puede utilizar un cristal externo en lugar del reloj incorporado de ATTINY ATMEGA.

Para iniciar una medición, coloque el condensador en los pasadores de cabecera (no olvide respetar la polaridad al medir condensadores electrolíticos), establecer el rango de medición (con el interruptor de 2 polos) y presionar el pulsador.

Midiendo capacitor Ceramico

Imagen

Midiendo capacitor electrolitico

Imagen


Codigo .INO:

Código: Seleccionar todo

#define data 9
#define clock 7
#define latchPin 8
int ledPin = 10;    
int readPin = 6;
int resistorPin = 5;

byte zero  = B10101111;
byte one   = B10100000;
byte two   = B10011110;
byte three = B10111010;
byte four  = B10110001;
byte five  = B00111011;
byte six   = B00111111;
byte seven = B10100010;
byte eight = B10111111;
byte nine  = B10111011;
byte nano  = B00110100; 
byte micro = B10010101; 
byte numberList[] = {zero, one, two, three, four, five, six, seven, eight, nine};

float R = 0;                  
float C = 0;                       
long t_begin = 0;        
long t_end = 0;        
long T = 0;                      
int prevState = 0;
int multiplier = 0;
int number = 0;
int times=0;

void setup(){  
  pinMode(data, OUTPUT); 
  pinMode(clock, OUTPUT); 
  pinMode(latchPin, OUTPUT);  
  pinMode(ledPin, OUTPUT);      
  pinMode(readPin, INPUT);
  pinMode(resistorPin, INPUT);
  for (int i = 4; i >=1; i--){
    pinMode(i, OUTPUT);
  }
}
 
void loop(){
  if (digitalRead(readPin)==HIGH && prevState == 0){
    t_begin = micros();  
    t_end = 0;   
    times = 0;
    prevState=1;
    digitalWrite(ledPin, HIGH);        
    if (digitalRead(resistorPin) == HIGH){
      R=1e6; //1M Ohm
    }
    else{
      R=1e4; //10k Ohm
    }
  }  
  
  if (digitalRead(readPin)==LOW && prevState == 1){
    t_end = micros();
    prevState=0;    
    digitalWrite(ledPin, LOW);     
  }  
    
  if (t_end > 0 && times <200) //Stop the display after a few seconds with the time variable
  {
      T = t_end - t_begin;        
      C = T / (1.1 * R);   //microF 
      while (C<100){ //Remove the dot to make display algoritm easier. e.g.: 1.21 ==> 121, multiplier = 2
        C *= 10;     
        multiplier += 1;
      }
      Display(C, multiplier);   
      multiplier = 0; 
      times++;  
  }
  
}

void Display(float C, int multiplier){
  number = C; //Converts float to int
  
  //Display the number in digits
  for (int digit = 4; digit >= 1; digit --){ //Go through all 4 digits on pins 4,3,2,1
    if(C <= 1000 && digit == 4){
      if(multiplier >= 3){ //nanoFarad range
        Light(nano);
      }
      else{ //microFarad range
        Light(micro);
      }
    }
    else{
      if((digit == 3 - (multiplier %3))&& multiplier%3 !=0){ //Check if a dot needs to be displayed
        Light(number % 10, B01000000); //Gives last digit and dot
      }
      else{
        Light(number % 10, B00000000);
      }
      number /= 10; //annihilates last digit for next loop
    }
    digitalWrite(digit, HIGH); //Set the pin HIGH (enables transistor to sink current)
    delay(2);
    digitalWrite(digit, LOW); //disable the digit
  }
  
}

void Light(int digitToDisplay, byte dot){
  digitalWrite(latchPin, LOW);
  digitToDisplay = numberList[digitToDisplay] | dot; //Takes the number out of the list and adds the dot if necessary
  shiftOut(data, clock, LSBFIRST, digitToDisplay);
  digitalWrite(latchPin, HIGH);
}

void Light(byte magnitude){
  digitalWrite(latchPin, LOW);
  shiftOut(data, clock, LSBFIRST, magnitude);
  digitalWrite(latchPin, HIGH);
}




Volver a “Proyectos y Circuitos Didacticos”