Mit dem Arduino lässt sich relative einfach ein Kapazitätsmesser bauen/programmieren, der unbekannte Kondensatoren von 1µF bis 3500μF halbwegs gut misst.
Bei dieser Schaltung wird das Timing des Ladens bzw. Entladens eines Kondensators mit einem vorgeschalteten
Widerstand ausgenutzt. Die Ladezeit ist nur von den Größen des Kondensators C und des Widerstandes R abhängig.
Daher wird das Produkt aus Kapazität C und Widerstand R als Zeitkonstante τ (tau) festgelegt.
τ = R × C
Weitere Details hierzu beim Projekt LED-Blitzer
#define PIN_ANALOG A0
#define PIN_CHARGE 13
#define PIN_DISCHARGE 11 // speeds up discharging process, not necessary though
const int resistorValue = 10000; // init resistor value
unsigned long startTime, elapsedTime;
float microFarads, nanoFarads;
void setup()
{
pinMode(PIN_CHARGE, OUTPUT);
digitalWrite(PIN_CHARGE, LOW);
Serial.begin(9600);
}
void loop()
{
digitalWrite(PIN_CHARGE, HIGH); // Begins charging the capacitor
startTime = millis(); // Begins the timer
while(analogRead(PIN_ANALOG) < 648) {
// Does nothing until capacitor reaches 63.2% of total voltage
}
elapsedTime = millis() - startTime; // Determines how much time it took to charge capacitor
microFarads = ((float)elapsedTime / resistorValue) * 1000;
Serial.print(elapsedTime);
Serial.print(" ms ");
if (microFarads > 1) { // Determines if units should be micro or nano and prints accordingly
Serial.print((long)microFarads);
Serial.println(" µF");
} else {
nanoFarads = microFarads * 1000.0;
Serial.print((long)nanoFarads);
Serial.println(" nF");
delay(500);
}
digitalWrite(PIN_CHARGE, LOW); // Stops charging capacitor
pinMode(PIN_DISCHARGE, OUTPUT);
digitalWrite(PIN_DISCHARGE, LOW); // Allows capacitor to discharge
while(analogRead(PIN_ANALOG) > 0) {
// Do nothing until capacitor is discharged
}
pinMode(PIN_DISCHARGE, INPUT); // Prevents capacitor from discharging
}
zurück