Kapazitive Füllstandsmessung

Hard · 1-2h · Mittlere Kosten

Ziel & Lerninhalt

In diesem Fortgeschrittenen-Projekt baust du einen berührungslosen Füllstandssensor für Flüssigkeiten. Anstatt mechanischer Schwimmer nutzen wir das Prinzip der Kapazitätsänderung. Zwei isolierte Elektroden an der Außenseite eines Behälters bilden einen Kondensator. Ändert sich der Wasserstand zwischen den Elektroden, ändert sich die Kapazität, was vom ProtoPeaks Mainboard präzise gemessen und in einen Prozentwert umgerechnet wird. Ideal für smarte Bewässerungssysteme oder Wassertanks.

  • Das physikalische Prinzip der Kapazität und Permittivität verstehen.
  • Einen kapazitiven Sensor aus Alltagsmaterialien (Alufolie) selbst herstellen.
  • Analoge Signalverarbeitung und Kalibrierung mit dem ProtoPeaks Mainboard lernen.
  • Messdaten stabilisieren (Filtering) und in praxisrelevante Werte (0-100%) umrechnen.

Erklärung & Wissen

Basic

Ein Kondensator speichert elektrische Ladung und besteht aus zwei Metallplatten mit einem Isolator (dem Dielektrikum) dazwischen. Seine Speicherfähigkeit nennen wir Kapazität. Kleben wir zwei Streifen Alufolie auf die Aussenseite einer Plastikflasche, bilden sie die Platten. Dazwischen liegt Luft. Füllen wir nun Wasser ein, steigt die Kapazität stark an, da Wasser Ladung viel besser speichert als Luft. So messen wir berührungslos den Wasserstand!

Medium

Luft hat eine relative Permittivität (Dielektrizitätszahl) von etwa 1, während Wasser einen Wert von fast 80 besitzt. Sobald das Wasser im Gefäss ansteigt, ändert sich das Dielektrikum zwischen den Platten, was zu einer proportionalen Erhöhung der Kapazität führt. Um diese Änderung (im Picofarad-Bereich) mit dem Mainboard zu messen, laden und entladen wir den Kondensator über einen hochohmigen Widerstand und messen die benötigte Zeit (RC-Zeitkonstante tau = R * C).

Expert

Der Sensor nutzt die physikalische Formel der Kapazität eines Plattenkondensators (C = epsilon_0 * epsilon_r * A / d). Da die Plattenflaeche A und der Plattenabstand d konstant bleiben, hängt die Kapazität ausschliesslich von der effektiven relativen Permittivität epsilon_r des Mediums ab. In industriellen kapazitiven Füllstandssensoren werden Phasenwinkelsensoren oder Schwingkreise (Resonanzfrequenz f = 1 / (2 * pi * sqrt(L * C))) genutzt, um extrem schnelle und störsichere Messungen durchzufuehren, die völlig immun gegen Schmutzfilme an den Gefässwänden sind.

Fun Fact

Kapazitive Sensoren stecken in jedem modernen Smartphone-Display! Unter dem Glas liegen hunderte winzige, unsichtbare Kondensatorplatten. Sobald dein Finger (der ebenfalls wie ein Dielektrikum wirkt) das Glas beruehrt, ändert sich die Kapazität an dieser Stelle, und das Handy weiss genau, wo du getippt hast.

Kondensator
Zwei leitende Flächen mit einem Isolator dazwischen – speichert elektrische Ladung. Kapazität $C = \varepsilon_0 \cdot \varepsilon_r \cdot A/d$: Größere Fläche $A$ und kleinerer Abstand $d$ erhöhen die Kapazität. Das entscheidende Stellglied hier ist $\varepsilon_r$ – die relative Permittivität des Materials zwischen den Platten. Luft: $\varepsilon_r \approx 1$, Wasser: $\varepsilon_r \approx 80$. Steigt das Wasser zwischen den Elektroden → $\varepsilon_r$ steigt → $C$ steigt.
Permittivität
Wie gut ein Material ein elektrisches Feld 'durchlässt' oder verstärkt – Wasser ist hier extrem. Luft hat $\varepsilon_r \approx 1$ (Referenz), Glas ca. 4–8, Wasser ca. 80. Das bedeutet: Wasser 'bündelt' das elektrische Feld 80-mal stärker als Luft. Deshalb funktioniert kapazitive Füllstandsmessung so gut – schon wenige Zentimeter Wasserstand erzeugen eine deutlich messbare Kapazitätsänderung.
RC-Ladezeit als Messwert
Je größer die Kapazität, desto langsamer lädt sich der Kondensator – diese Zeit ist unser Messwert. Der Mikrocontroller schaltet einen Ausgangspin auf HIGH und zählt Mikrosekunden, bis ein Eingangspin denselben Pegel erkennt. Der hochohmige Widerstand (10 MΩ) verlangsamt die Ladung auf einen messbaren Bereich: $\tau = R \cdot C$. Bei C = 50 pF und R = 10 MΩ ist $\tau = 0{,}5\,\mathrm{ms}$ – gut mit einem 16-MHz-Mikrocontroller auflösbar.
Kalibrierung
Den Rohwert des Sensors auf eine sinnvolle Einheit (hier: Prozent Füllstand) abbilden. Zwei Fixpunkte reichen für eine lineare Kalibrierung: Rohwert bei leerem Behälter ($\rightarrow$ 0%) und bei vollem Behälter ($\rightarrow$ 100%). Die Arduino-Funktion $\texttt{map()}$ übernimmt die lineare Interpolation. Wichtig: Bei jedem neun Behälter muss neu kalibriert werden, denn Wandstärke und Elektrodenabstand variieren.

Praktischer Versuch: Kapazitive Füllstandsmessung

Baue eine funktionierende Schaltung auf, um Kapazitive Füllstandsmessung hautnah zu visualisieren und zu testen.

  • ProtoPeaks Mainboard
  • Jumper Kabel Set (männlich/männlich)
  • Aluminiumfolie (für die Elektroden)
  • Breites Klebeband (zur Isolierung/Befestigung)
  • Ein transparenter Kunststoff- oder Glasbehälter (z.B. Trinkglas, Wasserflasche)
  • Wasser (als Messmedium)
  • 1x 10 Megaohm Widerstand (hochohmig für die Messstrecke)
  • Optional: Piezo-Summer für Alarmfunktion
  1. Das Messprinzip verstehen

    Zwei Metallflächen (Alufolie) an der Außenseite des Behälters wirken wie die Platten eines Kondensators. Die Luft dazwischen hat eine geringe Permittivität. Steigt das Wasser (das eine viel höhere Permittivität als Luft hat) im Behälter an, verändert sich das elektrische Feld zwischen den Platten. Diese Änderung der Kapazität ist proportional zum Füllstand.

    Check: Theorie verstanden

    Tipp: Das Wasser wirkt als Dielektrikum. Mehr Wasser = höhere Kapazität.

  2. Sensor-Elektroden herstellen und anbringen

    Schneide zwei gleich große Streifen Aluminiumfolie zu (z.B. 2cm breit, fast so hoch wie der Behälter). Klebe diese vertikal auf gegenüberliegende Seiten an die Außenseite des sauberen, trockenen Behälters. Stelle sicher, dass sie parallel sind. Decke die gesamte Folie großflächig mit Klebeband ab, um sie vor Feuchtigkeit und Berührung zu isolieren.

    Check: Elektroden isoliert angebracht

    Tipp: Die Folienstreifen dürfen sich niemals direkt berühren.

  3. Verkabelung mit dem Mainboard

    Verbinde einen Digitalpin (z.B. D4) des ProtoPeaks Mainboards als "Sende-Pin" mit einer Elektrode. Verbinde einen Analogpin (z.B. A0) als "Empfangs-Pin" mit der anderen Elektrode. Schalte den 10 Megaohm Widerstand direkt auf dem Breadboard zwischen den Sende-Pin (D4) und den Empfangs-Pin (A0). Diese hochohmige Verbindung ist essenziell für die Zeitmessung der Ladung.

    Check: Schaltung auf dem Breadboard geprüft

    Tipp: Verwende den 10MΩ Widerstand zwischen Sende- und Empfangspin.

  4. Code laden und Sensor kalibrieren

    Lade den untenstehenden Beispielcode auf dein Mainboard. Öffne den Seriellen Monitor. Lese den Rohwert ab, wenn der Behälter komplett LEER ist (z.B. 150). Fülle den Behälter bis zum Maximum und lese den Wert ab (z.B. 800). Trage diese beiden Werte im Code in die map() Funktion ein, um die Prozentanzeige zu kalibrieren.

    Check: Serieller Monitor zeigt Rohwerte

    Tipp: Nutze die DT_CapacitiveSensor Library aus dem Library Manager.

Die Schaltung nutzt das RC-Zeitkonstanten-Prinzip. Pin D4 (Send) lädt die Sensorelektrode über den 10MΩ Widerstand auf. Pin A0 (Receive) misst, wie lange es dauert, bis eine bestimmte Spannungsschwelle erreicht ist. Da Wasser die Kapazität erhöht, dauert das Aufladen länger. Die Verdrahtung ist kritisch: Sende-Pin (D4) an Elektrode 1; Empfangs-Pin (A0) an Elektrode 2. Der 10MΩ Widerstand verbindet D4 und A0. Ein Anschluss an GND ist nicht notwendig für die Sensorelektroden selbst.

// Benötigte Library: ProtoPeaks CapacitiveSensor
#include <DT_CapacitiveSensor.h>

// 10M Widerstand zwischen Pin 4 (Send) und Pin A0 (Receive)
DT_CapacitiveSensor capSensor = DT_CapacitiveSensor(4, A0);

// Kalibrierungswerte (MÜSSEN ANGEPASST WERDEN)
long leerWert = 150;  // Rohwert bei leerem Behälter
long vollWert = 800;  // Rohwert bei vollem Behälter

void setup() {
  Serial.begin(9600);
}

void loop() {
  // Lese Sensorwert (Mittelwert aus 30 Messungen)
  long sensorRoh = capSensor.capacitiveSensor(30);

  // Umrechnung in Prozent (0-100%)
  // map(Wert, vonMin, vonMax, zuMin, zuMax)
  int füllstandProzent = map(sensorRoh, leerWert, vollWert, 0, 100);

  // Begrenzung auf 0-100% (falls Werte außerhalb der Kalibrierung liegen)
  füllstandProzent = constrain(füllstandProzent, 0, 100);

  Serial.print("Rohwert: ");
  Serial.print(sensorRoh);
  Serial.print("	 Füllstand: ");
  Serial.print(füllstandProzent);
  Serial.println("%");

  delay(200); // Messintervall
}
  • Sensor liefert extrem hohe, schwankende Werte (>10000) — Prüfe, ob der 10MΩ Widerstand korrekt zwischen D4 und A0 sitzt und Kontakt hat. Prüfe auf Kurzschlüsse zwischen den Elektroden.
  • Wert ändert sich nicht beim Einfüllen von Wasser — Stelle sicher, dass die Alufolie gut isoliert ist und kein direkter Kontakt zum Wasser besteht. Das Prinzip basiert auf dem elektrischen Feld durch die Behälterwand.
  • Die Prozentanzeige ist ungenau — Führe die Kalibrierung (Schritt 4) erneut durch. Die leerWert und vollWert Variablen im Code müssen exakt deinen gemessenen Rohwerten entsprechen.
  • Die Werte reagieren sehr empfindlich auf Berührung des Behälters — Das ist normal, da deine Hand auch die Kapazität verändert. Isoliere die Elektroden nach außen hin mit dickem Klebeband oder Schaumstoff.

Kurzzusammenfassung

Die Anwesenheit von Wasser zwischen zwei isolierten Platten erhöht die elektrische Kapazität, da Wasser ein hervorragendes Dielektrikum ist. Dies ermöglicht eine berührungslose Füllstandsmessung.

Ähnliche Themen