Der Arduino misst die Kapazität eines Kondensators.
Die Theorie, der Schaltungsaufbau und das Arduino Programm.
Die Schaltung:

Der Arduino Aufbau:

Das Programm:
// Arduino Kapazität Messgerät 10nF bis 2000uF
//
// Matthias Busse 12.12.2020 Version 1.2
#define ladePin A4 // Kondensator lade Pin über einen 10kOhm Widerstand
#define entladePin A5 // Kondensator entlade Pin über einen 220 Ohm Widerstand
#define messPin A6 // Analog Messeingang
#define widerstand 9996.0F // 10 kOhm > gemessen 9,996 kOhm
long startZeit, vergangeneZeit;
float microFarad, nanoFarad;
void setup() {
pinMode(ladePin, OUTPUT); // ladePin als Ausgang
digitalWrite(ladePin, LOW);
Serial.begin(38400); // Serielle Ausgabe
Serial.println("Kapazitaet messen Version 1.2");
}
void loop() {
// 1. Kondensator laden und Zeit messen
digitalWrite(ladePin, HIGH); // ladePin auf 5V, das Laden beginnt
startZeit = micros(); // Startzeit merken
while(analogRead(messPin) < 648){} // bis 647 gemessen wird, das ist 63.2% von 1023
vergangeneZeit= micros() - startZeit - 114; // 0-Messung abziehen (112-116 us)
if(vergangeneZeit > 2147483647) vergangeneZeit = 0; // Minuswerte auf 0 setzen (ist long deshalb der hohe Wert)
// Umrechnung: us zu Sekunden ( 10^-6 ) und Farad zu mikroFarad ( 10^6 ), netto 1
microFarad = ((float)vergangeneZeit / widerstand);
// 2. Werte ausgeben
Serial.print(vergangeneZeit); // Zeit ausgeben
Serial.print(" nS ");
if (microFarad > 1){
if(microFarad < 100) {
Serial.print(microFarad,2); // uF.xx ausgeben
Serial.println(" uF");
}
else {
Serial.print((long)microFarad); // uF ausgeben
Serial.println(" uF");
}
}
else {
nanoFarad = microFarad * 1000.0; // in nF umrechnen
if(nanoFarad > 10) {
Serial.print((long)nanoFarad); // nF ausgeben
Serial.println(" nF");
}
else
Serial.println("kleiner 10 nF - keine Messung");
}
// 3. Kondensator entladen
digitalWrite(ladePin, LOW); // ladePin auf 0V
pinMode(entladePin, OUTPUT); // entladePin wird Ausgang
digitalWrite(entladePin, LOW); // entladePin auf 0V
while(analogRead(messPin) > 0){} // bis der Kondensator entladen ist (0V)
pinMode(entladePin, INPUT); // entladePin wird Eingang
// 4. warten
while((micros() - startZeit) < 500000){} // bis 500ms warten, d.h. max 2 Ausgaben pro Sekunde
}
von Matthias Busse @Youtube

Pingback: Arduino Kondensator Messgerät mit LCD – Teil 2 | Shelvin – Elektronik ausprobiert und erläutert