Das Kondensator Meßgerät bekommt ein LCD Display.
Das Programm
// Arduino Kapazität Messgerät 10nF bis 4000uF // und auf einem 2 x 16 LCD Display ausgeben // // Matthias Busse 13.12.2020 Version 1.3 /* LCD Display Anschlüsse: LCD > Arduino ------------- VSS > GND VDD > +5V V0 > 10k Poti + 1kOhm Widerstand > GND RS > Pin 12 E > Pin 11 R/W > Pin 6 D4 > Pin 7 D5 > Pin 8 D6 > Pin 9 D7 > Pin 10 */ #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 #include <LiquidCrystal.h> LiquidCrystal lcd(12, 6, 11, 7, 8, 9, 10); 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.3"); lcd.begin(16,2); lcd.clear(); lcd.setCursor(0,0); lcd.print("Kap. Meter V1.3"); } 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){ lcd.setCursor(0,1); lcd.print(" uF "); if(microFarad < 100) { Serial.print(microFarad,2); // uF.xx ausgeben Serial.println(" uF"); lcd.setCursor(2,1); lcd.print(microFarad); } else { Serial.print((long)microFarad); // uF ausgeben Serial.println(" uF"); lcd.setCursor(2,1); lcd.print((long)microFarad ); } } else { nanoFarad = microFarad * 1000.0; // in nF umrechnen if(nanoFarad > 10) { Serial.print((long)nanoFarad); // nF ausgeben Serial.println(" nF"); lcd.setCursor(0,1); lcd.print(" nF "); lcd.setCursor(2,1); lcd.print(nanoFarad); } else { Serial.println("kleiner 10 nF - keine Messung"); lcd.setCursor(0,1); // Display ausgeben lcd.print("<10nF keine Mess"); } } // 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: Kondensator messen mit dem Arduino – Theorie, Aufbau und das Programm. | Shelvin – Elektronik ausprobiert und erläutert
Hallo Matthias,
Die LCD-Erweiterung ist sehr gelungen und macht Deine Schaltung natürlich noch alltagstauglicher.
Als HF-Freunde sind wir ja speziell im Antennenbau auch an Pico Farad Werten interessiert. Gibt es einen Blocker dafür, daß man mit dem Arduino Nano nicht unter 10nF messen kann?
Handbreit / vy73 de Pit
Die Zeit zum Aufladen des Kondensators wird dann zu kurz. Deshalb der größere Ladewiderstand. Aber wie hoch Du gehen kannst, das musst Du einfach ausprobieren.
Danke für die schnelle Antwort!
Ich muss erst noch mit meinem Bread-Board aufholen und die Schaltung wie bei Dir aufbauen. Dann würde ich gerne versuchen, wie weit man runter in Richtung pF kommt.
Wie in meinem anderen Beitrag erwähnt, schaffte das einfache PIC basierte Messgerät von AADE (Leider nun ein Silent Key und bekannt wegen seines Filterberechnungsprogramms) es mit einer Kalibrierung der Messklemmen. Vielleicht wählte er auch ein ganz anderes Messprinzip. Aber das wird sich zeigen, denn am Ende des Tages kocht ja dann doch alles mit Wasser.