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