zurück

Kapazitätsmessung mit dem Arduino

09.06.2018

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.

Funktionsweise

Bei dieser Schaltung wird das Timing des Ladens bzw. Entladens eines Kondensators mit einem vorgeschalteten Widerstands 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

Ladekurve des Kondensators im Gleichstromkreis
Abb.: Ladekurve des Kondensators im Gleichstromkreis
Entladekurve des Kondensators im Gleichstromkreis
Abb.: Entladekurve des Kondensators im Gleichstromkreis

Weitere Details hierzu beim Projekt LED-Blitzer

Verwendete Bauteile

Aufbau

Aufbau der Schaltung
Abb.: Aufbau der Schaltung

Code

#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
}
Ausgabe in der seriellen Konsole
Abb.: Ausgabe in der seriellen Konsole (es wurde ein 150µF Elko verwendet)