Capacimetro con Arduino Importante.: El protoboard debe ser alimentado con 5V máximo .De lo contrario se puede destruir el display LCD.-El Arduino tiene regulador interno ,pero no el LCD.- El presente proyecto no pretende ser la base para la construcción de un instrumento para medir capacidades ya que actualmente en el mercado se obtienen aparatos con muchas mejores características y exactitud. Asimismo las lecturas son posibles desde las decimas de nanof hasta algunos cientos de microfaradios, debido a las limitaciones del Arduino No obstante se cree , que el mismo puede servir a los efectos educativos a los estudiantes de electrónica de todos los niveles.- Seguramente este prototipo puede ser mejorado y tal vez no este exento errores.- A continuación se describirán los fundamentos y las puesta en práctica con un Arduino nano y un protoboard Se uso además un display genérico de 2 x 16 y la librería correspondiente.- El funcionamiento está basado en una red RC como se muestra en la figura siguiente: Al aplicar tensión en to comienza la carga del capacitor de acuerdo a la conocida fórmula: Vc =Vo*(1-e^(-t/RC)) Cuya gráfica es la siguiente Para t=RC se tiene que la tensión a bornes del capacitor es del 63% de la tensión de alimentación y basado en esa premisa entra en acción el Arduino.- La idea es entonces aplicar un escalón franco a la red RC en un pin de salida y simultáneamente ir midiendo en un pin de entrada la tensión a bornes de C. Cuando se llega 63% se toma el tiempo transcurrido .- Justo allí se tiene que t es “una” constante de tiempo. Entonces se cumple que: t=RC o despejando C= t/R Se conoce “t” y para R se usó un resistor de 1.4 Mohm al 1% para mejorar la exactitud.- A continuación se muestra una fotografía del prototipo.- Toda la programación se colocó en la sección setup . y al mismo tiempo también se tuvo en cuenta que a iniciar se debe descargar el capacitor mediante un resistor de 220 ohmios y un diodo al pin de descarga ; para que su carga inicial sea nula y de esta forma tomar un tiempo correcto.- Por lo tanto el procedimiento para la lectura es colocar el capacitor en el proboard y pulsar el botón de reset para efectuar la lectura que queda fija en el display ya que; “void loop()” no tiene nada para hacer.- Seguidamente se presenta el código con algunas explicaciones .- Se presentan además las lecturas en un monitor serial si el Arduino está conectado a una PC.- Código #include // importa libreria dsplay lcd LiquidCrystal lcd (12, 11, 5, 4, 3, 2); // define pines para el display int pinlectura=0; // pin analogico para realizar la medida del voltaje a bornes del capacitor bajo prueba int pinpulso=13; // pin digital para carga del condensador int pindescarga=8; // pin digital para descarga del condensador float valorR=1.4; // modificar este valor de acuerdo al valor de resistencia a usar(preferiblemente al 1 %) en Megaohms unsigned long inicio; // define variable para t sub cero unsigned long delta; // define variable para t float microf; // Variable de coma flotante para asegurar la precisión, realiza cálculos float nanof; // Variable de coma flotante para asegurar la precisión, realiza cálculos void setup(){ lcd.begin(16, 2); // inicia un display de dos filas x 16 colomnas lcd.clear(); Serial.begin(9600); // inicializa la transmisión serie para debugging pinMode(pinpulso, OUTPUT); // configura pinpulso de salida pinMode(pindescarga,OUTPUT); // configura descarga de salida digitalWrite(pindescarga, LOW); // pone a 0 pin 8 para descarga de condensador a traves del resistor 220 ohms y el diodo delay(1000); // espera 1 seg digitalWrite(pindescarga, HIGH); // pone a 1 pin 8 para carga de condensador ya que de continuar en cero no haria posible la carga de C digitalWrite(pinpulso, HIGH); // pone a 1 pin 13 para carga de condensador inicio = millis(); // hace el tiempo igual a t0 ( te sub cero) while(analogRead(pinlectura) < 647){ // 647 es el 63.2% de 1023, el cual se corresponde con el voltaje // de fondo de escala } delta= millis() - inicio; // calcula constante de tiempo en milisegundos microf = ((float)delta/valorR )/1000; // calcula capacidad en microfaradios ya que R esta en megaohms nanof = ((float)delta/valorR ); // calcula capacidad en microfaradios ya que R esta en megaohms int nano=int(nanof); // hace entera la variable nano // el siguiente if es para mostrar lecturas en micro o nano faradios if (microf<1){ lcd.setCursor(0, 0); //ubica cursor lcd.print("Con de T"; // manda texto al display. lcd.setCursor(9, 0); //ubica cursor lcd.print(delta); // imprime constante de tiempo en display lcd.setCursor(14, 0); //ubica cursor lcd.print("ms"; // manda texto al display. lcd.setCursor(0, 1); //ubica cursor lcd.print("Cap:"; // manda texto al display. lcd.setCursor(4, 1); //ubica cursor lcd.print(nano); // imprime capacidad en nanoF en display lcd.setCursor(8, 1); //ubica cursor lcd.print("nF"; // manda texto al display. Serial.print("Constante de tiempo: "; // manda texto al display. Serial.print(delta); // imprime el valor por el puerto serie Serial.println(" mS "; // imprime las unidades y añade enter Serial.print("Capacidad: "; // manda texto al display. Serial.print(nano); // imprime el valor por el puerto serie Serial.println(" nFaradios"; // imprime las unidades y añade enter } else { lcd.setCursor(0, 0); //ubica cursor lcd.print("Con de T"; // manda texto al display. lcd.setCursor(9, 0); //ubica cursor lcd.print(delta); // imprime constante de tiempo en display lcd.setCursor(14, 0); //ubica cursor lcd.print("ms"; // manda texto al display. lcd.setCursor(0, 1); //ubica cursor lcd.print("Cap:"; // manda texto al display. lcd.setCursor(4, 1); //ubica cursor lcd.print(microf); // imprime capacidad en microf en display lcd.setCursor(10, 1); //ubica cursor lcd.print("microF"; // manda texto al display. Serial.print("Constante de tiempo: "; // manda texto al display. Serial.print(delta); // imprime el valor por el puerto serie Serial.println(" mS "; // imprime las unidades y añade enter Serial.print("Capacidad: "; // manda texto al display. Serial.print(microf); // imprime el valor por el puerto serie Serial.println(" micro Faradios"; // imprime las unidades y añade enter } } void loop(){ //nada para hacer }
Datos archivados del Taringa! original
0puntos
0visitas
0comentarios
Actividad nueva en Posteamelo
0puntos
1visitas
0comentarios
Dar puntos: