Learning Examples | Foundations | Hacking | Links

En una Constante de tiempo se carga al 63.2% del voltaje.
Ejemplo; 1 Megaohmio * 1 microfaradio = 1 segundo
Ejemplo; 10k ohmios * 100 microfaradios = 1 segundo

Este sketch muestra porque los pines del Arduino pueden trabajar en dos estados, los cuales son eléctricamente muy diferentes.
Además los pines pueden estar a nivel ALTO (+5 volts), para cargar condensadores; o a nivel BAJO (tierra) para descargar condensadores.

/* RCTiming_capacitance_meter
* Paul Badger 2008
* Demostración del uso de Constantes de tiempo RC para la medida de valores de capacidades
*
* Teoría Un condensador se cargará, a través de un resistor, en una constante de tiempo, definida como T
* en segundos donde
* TC = R * C
*
* TC = Periodo de la constante de tiempo en segundos
* R = resistencia en ohmios
* C = capacidad en faradios (1 microfariadio [ufd] = .0000001 faradios = 10^-6 faradios)
*
* En una Constante de tiempo se carga al 63.2% del voltaje.
*
* Configuración Hardware:
* El condensador a medir entre el punto común y tierra (La parte positiva del condensador electrólítico al
* común)
* Resistencia a medir entre el pin de carga y el punto común.
* 220 ohms de resistencia entre el pin de descarga y el punto común
* Cable entre punto común y el pin analógico (A/D input)
*/
#define analogPin 0 // pin analogico para realizar la medida del voltaje en la capacidad
#define chargePin 13 // pin de carga del condensador - conectado al final de la resistencia cargada
#define dischargePin 11 // pin para descargar el condensador
#define resistorValue 10000.0F // modifica este valor al valor de resistencia que estés utilizando
// F Formatea para comunicar al compilador el valor de una coma flotante
unsigned long startTime;
unsigned long elapsedTime;
float microFarads; // Variable de coma flotante para asegurar la precisión, realiza cálculos
float nanoFarads;
void setup(){
pinMode(chargePin, OUTPUT); // configura chargePin a salida
digitalWrite(chargePin, LOW);
Serial.begin(9600); // inicializa la transmisión serie para debugging
}
void loop(){
digitalWrite(chargePin, HIGH); // configura chargePin a ALTO y carga el condensador
startTime = millis();
while(analogRead(analogPin) < 648){ // 647 es el 63.2% de 1023, el cual se corresponde con el voltaje
// de fondo de escala
}
elapsedTime= millis() - startTime;
// convierte milisegundos a segundos ( 10^-3 ) y Faradios a microFaradios ( 10^6 ), net 10^3 (1000)
microFarads = ((float)elapsedTime / resistorValue) * 1000;
Serial.print(elapsedTime); // imprime el valor por el puerto serie
Serial.print(" mS "); // imprime las unidades y añade enter
if (microFarads > 1){
Serial.print((long)microFarads); // imprime el valor por el puerto serie
Serial.println(" microFarads"); // imprime las unidades y añade enter
}
else
{
// si el valor es más pequeño que un microfaradio, convertimos a nanoFaradios (10^-9 Faradios).
// Esto es un parche porque because Serial.print no imprime floats
nanoFarads = microFarads * 1000.0; // multiplica por 1000 para convertir a nanoFaradios (10^-9 Farads)
Serial.print((long)nanoFarads); // imprime el valor por el puerto serie
Serial.println(" nanoFarads"); // imprime las unidades y añade enter
}
/* Descarga del condensador */
digitalWrite(chargePin, LOW); // configura el pin de carga a BAJO
pinMode(dischargePin, OUTPUT); // configura el pin de descarga como SALIDA
digitalWrite(dischargePin, LOW); // configura el pin de descarga como BAJO
while(analogRead(analogPin) > 0){ // espera hasta que esté totalmente descargado
}
pinMode(dischargePin, INPUT); // configura el pin de descarga de nuevo como ENTRADA
}