Kapazitiver Bodenfeuchtesensor: Unterschied zwischen den Versionen
Zeile 217: | Zeile 217: | ||
Die Ermittlung der Unsicherheiten wurde mithilfe des untenstehenden MATLAB-Codes in Anlehnung an die, in MATLAB Grader bearbeiteten Aufgaben, auf die hier vorliegende Problemstellung angepasst. Es wird ein Vertrauensniveau von <math>68,27 \, \text{%}</math> angenommen, da der Sensor in die Kategorie „Vermessungstechnik“ fällt und diese <math>68,27 \, \text{%}</math> für eine Standardabweichung von <math>1 \, \text{σ}</math> steht. Anschließend wird der Erweiterungsfaktor <math>k = 2</math> angenommen, da es sich um industrielle Messtechnik handelt. <br> | Die Ermittlung der Unsicherheiten wurde mithilfe des untenstehenden MATLAB-Codes in Anlehnung an die, in MATLAB Grader bearbeiteten Aufgaben, auf die hier vorliegende Problemstellung angepasst. Es wird ein Vertrauensniveau von <math>68,27 \, \text{%}</math> angenommen, da der Sensor in die Kategorie „Vermessungstechnik“ fällt und diese <math>68,27 \, \text{%}</math> für eine Standardabweichung von <math>1 \, \text{σ}</math> steht. Anschließend wird der Erweiterungsfaktor <math>k = 2</math> angenommen, da es sich um industrielle Messtechnik handelt. <br> | ||
''' | <div style="width:1200px; height:700px; overflow:scroll; border: hidden"> | ||
<syntaxhighlight lang="cpp" style="border: none; background-color: #EFF1C1; font-size:larger"> | |||
%************************************************************************** | |||
% Hochschule Hamm-Lippstadt * | |||
%************************************************************************** | |||
% Modul : Berechnung.m * | |||
% * | |||
% Datum : 17.07.2024 * | |||
% * | |||
% Funktion : Auslesen Sensordaten zur Berechnung der Unsicherheiten* | |||
% * | |||
% Implementation : MATLAB 2023b * | |||
% * | |||
% Req. Toolbox : DSP System Toolbox * | |||
% * | |||
% Author : Ken Hilz * | |||
% * | |||
% Bemerkung : * | |||
% * | |||
% Letzte Änderung : 25-07-2024 * | |||
% * | |||
%************************************************************************** | |||
% Daten werden aus simout (Voltage, Digitalwert) geholt, das ein Array ist | |||
Volt = Voltage; % Hier Daten extrahieren | |||
DWert = Digitalwert; % Hier Daten extrahieren | |||
% Datenverarbeitung | |||
n = length(Volt); % Anzahl der Datenpunkte ermitteln | |||
Rm = mean(Volt); % Durchschnitt berechnen | |||
sE = std(Volt); % Standardabweichung berechnen | |||
% Parameter des Arduino Uno R3 | |||
Bit = 10; % Auflösung 10 bit | |||
Uref = 5; % Referenzspannung in V | |||
lsb = Uref / (2^Bit - 1); % Mindestauflösung, Einheit: V (Quantisierungsfehler) | |||
% Berechnen der Standardunsicherheit Typ A | |||
alpha = 1 - 0.6827; % Messunsicherheit mit 68,27% Prozent Aussagesicherheit, da Messtechnnik | |||
p = 1 - (alpha / 2); % Wahrscheinlichkeit für zweiseitiges t-Verteilungsintervall | |||
t = tinv(p, n - 1); % t-Wert für Student-t-Verteilung bei n-1 Freiheitsgraden | |||
uA = sE * t / sqrt(n); % Standardunsicherheit Typ A | |||
% Berechnen der Standardunsicherheit Typ B | |||
uB = lsb / sqrt(12); % gleichverteilte (rechteckige) Verteilung | |||
% Berechnen der Standardunsicherheit Typ C | |||
uC = sqrt(uA^2 + uB^2); % Kombination der Unsicherheiten Typ A und Typ B | |||
% Berechnen der absoluten Messunsicherheit | |||
k = 2; % Vertrauensfaktor (Vertrauensniveau 0.9545) | |||
uAbs = k * uC; % absolute Messunsicherheit | |||
uRel = 100 * uAbs / Rm; % relative Messunsicherheit in % | |||
% Vollständiges Messergebnis ausgeben | |||
disp(['Vollständige Messergebnis: U = ', num2str(Rm), ' ± ', num2str(uAbs), ' V ']); % Ergebnis mit Unsicherheit anzeigen | |||
% Maximal- und Minimalwerte sowie Bereich erstellen | |||
Max = max(Volt); % Den Maximalwert im Daten-Array finden | |||
Min = min(Volt); % Den Minimalwert im Daten-Array finden | |||
x = Min:0.0001:Max; % Einen Bereich vom Minimalwert bis zum Maximalwert erstellen | |||
% Grafik erstellen | |||
h = gcf; % Aktuelle Figur holen | |||
set(h, 'Name', 'Ergebnisdarstellung', 'NumberTitle', 'off'); % Figur benennen | |||
xlabel('Anzahl der Messwerte') % x-Achsenbeschriftung | |||
ylabel('Spannung in V') % y-Achsenbeschriftung | |||
hold on | |||
% Daten und Unsicherheiten plotten | |||
p1 = plot(Volt, 'r.-'); % Messwerte plotten | |||
p2 = yline(Rm, 'LineWidth', 2); % Mittelwert als Linie plotten | |||
p3 = yline(Rm + uC, 'Color', 'blue'); % Obere Grenze der Unsicherheit Typ C plotten | |||
yline(Rm - uC, 'Color', 'blue'); % Untere Grenze der Unsicherheit Typ C plotten | |||
% Titel und Legende | |||
title(['Messergebnis: Mittelwert = ', num2str(Rm), ' \pm ', num2str(sE), ' V, Spannung = ', num2str(mean(Volt)), ' \pm ', num2str(uRel), '%']) % Titel hinzufügen | |||
hLegend = legend([p1, p2, p3], "Messwerte", "Mittelwert", "Unsicherheit Typ C", 'Location', 'northeast'); % Legende hinzufügen | |||
hold off % Halten des Plots beenden | |||
<br> | |||
In der unteren Abbildung ist das Messergebnis, der Mittelwert und die mit dem MATLAB Code ermittelte Unsicherheit dargestellt. <br> | In der unteren Abbildung ist das Messergebnis, der Mittelwert und die mit dem MATLAB Code ermittelte Unsicherheit dargestellt. <br> |
Version vom 25. Juli 2024, 09:41 Uhr
Autor: | Ken Hilz |
Studiengang: | Business and Systems Engineering |
Modul: | BSE-M-2-1.03, Hausarbeit in Angewandte Informatik gehalten von Prof. Dr.-Ing. Schneider |
Semester: | Sommersemester 2024 |
Abgabetermin: | 28.07.2024 |
Einführung
In der Lehrveranstaltung Angewandte Informatik ist als Prüfungsleistung eine semesterbegleitende Arbeit vorgesehen. Dieses Kapitel behandelt den Einsatz des Capacitive Soil Moisture Sensor v1.2 zur Bestimmung der Bodenfeuchtigkeit. Für die Durchführung dieser Arbeit sind Kenntnisse im Bereich von Microcontrollern, Sensoren, Aktuatoren sowie im Umgang mit MATLAB®/Simulink erforderlich. Des Weiteren sind Kenntnisse im Bereich der Signalverarbeitung und Filterung notwendig, um dieses Projekt durchzuführen. Die Funktionsweise des Sensors und die Umsetzung der Fragestellung wird im Folgenden Kapitel genauer erläutert.
Aufgabenstellung
Messen Sie die Bodenfeuchte mittels Capacitive Soil Moisture Sensor v1.2.
Anforderungen | |||||||||||||||||||||||||||
|
Thema/Fragestellung:
Messung der Bodenfeuchtigkeit mit dem Sensor Capacitive Soil Moisture Sensor v1.2.
Hypothese:
Die Bodenfeuchtigkeit lässt sich mit dem Capacitive Soil Moisture Sensor v1.2 messen.
Einordnung in den Lehrplan:
Die Lehrveranstaltung Angewandte Informatik vermittelt den Studierenden mehrere praktische Methoden, welche im Folgenden aufgelistet sind:
- mit der Versionskontrolle SVN nachhaltig Quelltext entsprechend der Programmierrichtlinien schreiben, sichern, kollaboriert bearbeiten und Konflikte lösen.
- in einer mathematisch orientierten Systax (z. B. MATLAB®) mit Vektoren und Matrizen rechnen, Programmteile in Funktionen auslagern, Zweige und Scheifen programmieren, Daten importieren und visualisieren.
- die Mikrocontrollerplattform Arduino modellbasiert mit Simulink programmieren, so dass Sensoren eingelesen und Aktoren angesteurt werden können. [1]
Projektbeschreibung
In der unteren Tabelle 2 sind alle benötigten Materialien für diese Versuchsdurchführung aufgelistet.
# | Anzahl | Material |
---|---|---|
1 | 1 | PC mit MATLAB/Simulink R2023b |
2 | 1 | Kapazitiver Bodenfeuchtesensor |
3 | 1 | Arduino Uno R3 |
4 | 1 | Steckbrett |
5 | 1 | LCD Modul 16x02 I2C |
6 | 1 | Buzzer |
7 | 5 | Jumper Kabel, männlich/männlich, 20 cm |
Beschreibung Funktionsweise der verwendeten Hard- und Software
Simulink R2023b
Für die Ausführung von Simulink wird die Software MatLab benötigt. Beide Softwares sind von The MathWorks. Über Simulink lassen sich mithilfe von Blockschaltbilder technische Systeme testen, realisieren und simulieren. Simulink wird für die Simulation von technischen Regelkreisen oder aber für die Signalverarbeitung verwendet. [2]
Sensor Kapazitiver Bodenfeuchtesensor
Bei der kapazitiven Messung der Feuchtigkeit wird das Verfahren der indirekten Messung angewendet. Das gemessen Signal wird in eine elektrische Größe umgewandelt und an den das Microcontroller-Board ausgegeben.
Auf Basis des Aufbaus eines Kondensators arbeitet der kapazitive Feuchtigkeitssensor. Zwischen den Platten des Kondensators ist ein elektrisches Feld aufgebaut, welches je nach Spannung und Abstand variiert. Die Speicherung von elektrischer Energie wird beim Kondensator Kapazität genannt und in Farad angegeben. Diese Kapazität wird durch den Abstand der Platten zueinander, der Fläche dieser Platten und des Dielektrikums bestimmt. Das Dielektrikum beschreibt das Material, welches zwischen den beiden Platten ist. Die Materialien haben unterschiedliche Isolationseigenschaften, wodurch auch unterschiedliche Durchlässigkeiten des elektrischen Feldes vorhanden sind. Diese Durchlässigkeit wird als Permittivität bezeichnet.
Da bei einem kapazitiven Feuchtigkeitssensor der Abstand der beiden Kondensatorplatten unveränderbar ist, wird die Feuchtigkeit lediglich über die Änderung der Permittivität bestimmt. In Abbildung 2 ist der Sensor zu sehen. [3]
Arduino Uno R3
Das Arduino Uno ist ein Microcontroller-Board, welches aus 14 digitale I/O Pins und sechs analoge I/O Pins besteht. Von den 14 digitalen I/Os können sechs ein PWM-Signal erzeugen. Verschiedene Arten von Sensoren und Aktuatoren können mit dem Arduino Uno R3 Board verbunden, wodurch eine Vielzahl von Einsatzmöglichkeiten entstehen. In Abbildung 3 ist der Arduino Uno R3 zu sehen. [4]
Steckbrett
Ein Steckbrett eignet sich zum schnellen Aufbau einer elektrischen Schaltung. Dadurch, dass die Bauteile nur gesteckt werden, können diese einfach umgesteckt werden. Somit lässt sich der Aufbau schnell und einfach überarbeiten und verbessern. Die äußeren Reihen dienen des Anschlusses der Versorgungsspannung und der Verbindung zu Ground. In den mittleren Reihen können die Bauteile gesteckt werden. In Abbildung 4 ist ein Steckbrett zu sehen.[5]
LCD Modul 16x02 I2C
Das LCD-Modul 16x2 I2C zeigt Text in zwei Zeilen mit je 16 Zeichen an und nutzt die I2C-Schnittstelle. Dadurch sind nur zwei Datenleitungen nötig: SDA (für Daten) und SCL (für den Takt), sowie VCC (Spannungsversorgung) und GND (Masse). Der Mikrocontroller überträgt die Daten seriell an das Modul, meist mit der I2C-Adresse 0x27 oder 0x3F. Die I2C-Verbindung vereinfacht die Kommunikation und reduziert den Verkabelungsaufwand. In Abbildung 5 ist das LCD Modul 16x02 I2C zu sehen. [6]
Buzzer
Ein Piezo-Lautsprecher nutzt Piezoelektrizität zur Schallerzeugung. Piezoelektrische Materialien erzeugen bei mechanischer Verformung eine elektrische Ladung und umgekehrt. Durch Anlegen einer Spannung an ein dünnes Piezoelement dehnt es sich aus und zieht sich zusammen, wodurch Schallwellen erzeugt werden. Ein Piezo-Lautsprecher kann aus 5V Gleichspannung Wechselstrom erzeugen, der das Piezoelement periodisch verformt und so Schall erzeugt. In Abbildung 6 ist der Buzzerzu sehen.[7]
Funktionsweise Capacitive Soil Moisture Sensor v1.2
Der Schaltplan in Abbildung 7 zeigt einen kapazitiven Bodenfeuchtigkeitssensor, der mit einem TLC555-Timer-IC arbeitet. Der TLC555-Timer ist als astabiler Multivibrator konfiguriert und erzeugt ein Rechtecksignal mit einer Frequenz von etwa 1,5 MHz. Dieses Signal wird durch die Widerstände und Kondensatoren um den IC herum definiert (R2 = 1,6 kΩ, R3 = 330 Ω, C1 = 100 nF, C2 = 10 nF, C3 = 470 pF).
Das Rechtecksignal wird durch einen 10-kΩ-Widerstand (R1) und den kapazitiven Bodenfeuchtigkeitssensor (PROBE) geleitet, der im Boden platziert wird. Der Sensor verändert seine Kapazität basierend auf der Bodenfeuchtigkeit.
Nach dem Sensor folgt ein RC-Filter, der das Rechtecksignal in ein Dreiecksignal umwandelt. Ein nachgeschalteter Spitzenwertdetektor, bestehend aus einer Diode (T4), einem 1-µF-Kondensator (C4) und einem 1-MΩ-Widerstand (R4), glättet das Signal und erzeugt eine analoge Ausgangsspannung, die proportional zur Bodenfeuchtigkeit ist.
Diese analoge Spannung kann von einem Mikrocontroller ausgelesen werden, um die Bodenfeuchtigkeit zu bestimmen. Die Versorgungsspannung der Schaltung beträgt 3,3 V und es sind Entkopplungskondensatoren (C1, C2) zur Stabilisierung der Versorgungsspannung integriert.[8]
Technische Daten
In dieser Tabelle sind grundlegende technischen Daten des Sensors aufgelistet.
Messbereich | 0 V ~ 3 V |
Reaktionszeit | ca. 7000 ms |
Versorgungsspannung | 3.3 V ~ 5.5 V |
Versorgungsstrom | 5 mA |
Schnittstelle | PH2.0-3P Steckkabel |
Gewicht | 10 g |
Material | korrosionsbeständiges Material |
Abmessungen | 98 mm x 23 mm x 9 mm |
Pinbelegung
In dieser Tabelle ist die Pinbelegung des Sensors aufgelistet.
Pin | Belegung | Signal | Arduino Pin |
---|---|---|---|
1 | Versorgungsspannung (VCC) | 5 V | 5V |
2 | Analog Output (AOUT) | 0~3V | A0 |
3 | Masse (GND) | 0 V | GND |
Versuchsaufbau und Durchführung
Versuchsaufbau
Der Anschlussplan des Versuchs ist in der rechten Abbildung 8 dargestellt. Zu sehen ist ein Arduino Uno R3 Board, das mit einem kapazitiven Feuchtigkeitssensor und einem Buzzer verbunden ist. Zu beachten gilt, dass der gezeigte Feuchtigkeitssensor nicht identisch mit dem für den Versuch verwendeten Sensor ist, da in Fritzing nur ein kapazitiver Sensor mit drei Anschlüssen verfügbar ist.
Auf dem Breadboard wird die Versorgungsspannung (VCC) von über ein rotes Kabel angeschlossen, während das schwarze Kabel die Ground-Verbindung zum Arduino herstellt. Da der Sensor nur drei Anschlüsse hat, von denen zwei für die Spannungsversorgung und Ground verwendet werden, wird der letzte freie Anschluss des Sensors mit dem analogen Eingang A0 des Arduino verbunden. Einer der beiden Pins des Buzzers wird mit GND verbunden und der andere mit dem Digitalen Output 10, sodass über diesen Output der Buzzer ein Signal bekommt, sobald der Wert konstant ist.
Anschließend wird der Arduino über ein USB-A Kabel mit dem Computer verbunden, um das in Simulink erstellte Modell hochladen zu können.
Die Schaltplanübersicht und ein Foto des Aufbaus sind in den Abbildungen 9 und 10 zu finden.
Versuchsdurchführung
Simulink Modell
Die Modelleinstellungen für diese Durchführung lauten wie folgt:
● Hardware board: Arduino Uno
● Type: Fixed-step
● Solver: ode1 (Euler)
● Fixed-step Size: 0,001 s
Mess- und Vertrauensbereich
Bevor die Versuchsdurchführung starten kann, muss der Messbereich des Sensors festgelegt werden.
Die Ermittlung des Messbereichs wurde mittels zweier Tests durchgeführt. Zunächst wurde der Sensor an einen Arduino angeschlossen und die Sensordaten im trockenen Zustand ausgelesen. Anschließend wurde der Sensor vollständig in ein Glas Wasser eingetaucht, um die Messungen im nassen Zustand zu erfassen. Diese Tests ermöglichten es, die beiden Extremwerte der zumessenden Umgebung des Sensors zu ermitteln.
Der Test im trockenen Zustand repräsentiert Feuchtigkeit. Der dabei ermittelte Digitalwert 789 wurde als Referenzwert für keine Feuchtigkeit gespeichert. Der Test im Wasserglas simulierte Feuchtigkeit, sodass der entsprechende Digitalwert 388 als Referenzwert für maximale Feuchtigkeit hinterlegt werden konnte. In den beiden Abbildungen ??? und ??? sind die Ergebnisse dieser beiden Tests visuell dargestellt. Der untere MATLAB-Code dient zur Berechnung der maximalen und minimalen Digitalwerte des Sensors.
%% Berechnung des maximalen und minimalen Digitalwertes des Sensors Max = max(DWert); %% Den Maximalwert im Daten-Array finden Min = min(DWert); %% Den Minimalwert im Daten-Array finden fprintf('Max Digitalwert: %.15f\n', Max); %% Darstellung Maximalwert fprintf('Min Digitalwert: %.15f\n', Min); %% Darstellung Minimalwert
Um über diese beiden Werte nun den Messbereich des Sensors in Volt angeben zu können, wird folgende Formel benötigt:
[11]
Least Significant Bit
Referenzspannung
Quantisierungsstufen
In diesem Fall erhält man den Least Significant Bit, indem für die Referenzspannung eingesetzt werden und durch geteilt wird, wobei für eingesetzt wird, da der Arduino einen 10-Bit A/D-Wandler besitzt. Das Ergebnis kann dann anschließend mit dem maximalen und minimalen Digitalwert multipliziert werden, um so maximale und minimale Ausgangsspannung des Sensors zu erhalten. Die Formel dafür lautet:
[11]
In MATLAB wurde diese Berechnung mit folgendem Code durchgeführt.
%% Berechnung der maximalen und minimalen Spannung des Sensors Uamax = lsb * Max; % Berechnung der maximalen Spannung Uamin = lsb * Min; % Berechnung der minimalen Spannung format long % Darstellung des Ergebnisses mit Nachkommastellen fprintf('Uamax ohne Rundung: %.15f\n', Uamax); %% Darstellung Maximalwert fprintf('Uamin ohne Rundung: %.15f\n', Uamin); %% Darstellung Minimalwert
Für ergibt sich dann folgender Spannungswert in Höhe von und für ergibt sich ein minimaler Spannungswert in Höhe von .
Der Messbereich des Sensors liegt somit zwischen und , was einem Spannungsbereich von entspricht.
Diese Methode zum Bestimmen des Messbereichs wurde ausgewählt, da beide Tests ein Extremum der Messumgebung des Sensors darstellen. Aus diesem beiden Referenzwerten, kann nun die weitere Ermittlung der Unsicherheiten erfolgen.
Festlegung der Messunsicherheit
Nachdem der Messbereich ermittelt wurde, kann nun die Messunsicherheit des Sensors bestimmt werden. Dazu wurde das Verfahren nach GUM (Guide to the Expression of Uncertainty in Measurement) angewendet, welches in der Lehrveranstaltung "Signalverarbeitende Systeme" näher betrachtet wurde.
Es werden die Standardunsicherheiten der Typen A, B und C ermittelt.
Die Ermittlung der Unsicherheiten wurde mithilfe des untenstehenden MATLAB-Codes in Anlehnung an die, in MATLAB Grader bearbeiteten Aufgaben, auf die hier vorliegende Problemstellung angepasst. Es wird ein Vertrauensniveau von angenommen, da der Sensor in die Kategorie „Vermessungstechnik“ fällt und diese für eine Standardabweichung von steht. Anschließend wird der Erweiterungsfaktor angenommen, da es sich um industrielle Messtechnik handelt.