Arduino Kondensator Messgerät mit LCD – Teil 2

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
}

> zum 1. Teil

von Matthias Busse @Youtube

6 Gedanken zu „Arduino Kondensator Messgerät mit LCD – Teil 2

  1. Pingback: Kondensator messen mit dem Arduino – Theorie, Aufbau und das Programm. | Shelvin – Elektronik ausprobiert und erläutert

  2. Pit Förster

    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

    Antworten
    1. admin Beitragsautor

      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.

      Antworten
      1. Pit

        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.

        Antworten
  3. Konrad Berkmann

    Sehr schönes Projekt und extrem praxistauglich. Den ersten Teil (Ausgabe auf Seriellen Monitor) habe ich mal nachgebaut.
    Wenn ich nicht schon ein Messgerät auch für Kapazitäten hätte, würde ich das auf Platine in einem kleinen Kästchen realisieren. Der Stromverbrauch dürfte sehr gering sein und eine Batterie müsste locker reichen. Für die LCD-Anzeigen gibt es ein kleines Zusatzmodul, damit kann man die Leitungen auf 4 reduzieren und das Poti für die Kontrasteinstellung ist auch schon drauf.

    Antworten
  4. Lutz

    Hallo Matthias,
    Der Nachbau hat mir Freude gemacht und ich konnte so einiege SMD Kondensatoren mal nachmessen, denn da steht nichts drauf.
    Ich habe die Schaltung einmal mit einem OLED 0.91″ nachgebaut, dabei ist mir etwas aufgefallen.
    Die Auflösung des micros() sind 4 µs , du ziehst auch die 114 µs Laufzeit wieder ab.
    Bei der Ausgabe der Zeit (Tau) gibst du aber ns an. Ich meine es müsten µs sein.

    Antworten

Schreibe einen Kommentar zu Lutz Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.