Grove - Wassersensor: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
 
(282 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 3: Zeile 3:
{|class="wikitable"
{|class="wikitable"
|-
|-
| '''Autorin:'''  || [[Benutzer: Denim Hilz| Denim Hilz]]
| '''Autor:'''  || [[Benutzer: Denim Hilz| Denim Hilz]]
|-
|-
| '''Studiengang:'''  || Business and Systems Engineering
| '''Studiengang:'''  || Business and Systems Engineering
Zeile 16: Zeile 16:
== Einführung ==
== Einführung ==
=== Aufgabenstellung ===
=== Aufgabenstellung ===
In diesem Artikel wird der Grove Water Sensor näher erläutert, die Implementierung in Matlab/Simulink aufgezeigt und die Kalibrierung und Filterung vorgestellt.
In diesem Artikel wird der '''Grove Water Sensor''' näher erläutert, die Implementierung in '''Matlab/Simulink''' aufgezeigt und die '''Kalibrierung''' und '''Filterung''' vorgestellt.
Der Grove Water Sensor dient zur Erkennung von Wasser und zur Messung des Wasserstands. Einsatzbereiche sind unter anderem das Aufspüren von Wasserlecks, die Steuerung automatischer Bewässerungssysteme, die Überwachung des Wasserstands in Behältern, die Detektion von Flüssigkeiten in Maschinen sowie die Überwachung unerwünschten Wassers in Smart Home Systemen. <ref>https://cdn-reichelt.de/documents/datenblatt/A300/101020018_01.pdf, abgerufen am 14.07.2024</ref>
Der Grove Water Sensor dient zur Erkennung von Wasser und zur Messung des Wasserstands. Einsatzbereiche sind unter anderem das Aufspüren von Wasserlecks, die Steuerung automatischer Bewässerungssysteme, die Überwachung des Wasserstands in Behältern, die Detektion von Flüssigkeiten in Maschinen sowie die Überwachung unerwünschten Wassers in Smart Home Systemen. [[#Literatur|<sup>[1]</sup>]] <br>
 


{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
Zeile 43: Zeile 42:
| 7 || Ein Piepton muss anzeigen, wenn der Messwert stabil/konstant ist und Niederschlag erkannt wurde. || 1
| 7 || Ein Piepton muss anzeigen, wenn der Messwert stabil/konstant ist und Niederschlag erkannt wurde. || 1
|-
|-
| 8 || Das Sensorsystem muss eine Regenwarnung auf dem [[LCD_Modul_16x02_I2C|LCD-Display]] anzeigen. || 2
| 8 || Das Sensorsystem muss eine Regenwarnung auf dem [[LCD_Modul_16x02_I2C|LC-Display]] anzeigen. || 2
|}
|}
|}
|}
Zeile 52: Zeile 51:
** mit der Versionskontrolle SVN nachhaltig Quelltext entsprechend der Programmierrichtlinien schreiben, sichern, kollaboriert bearbeiten und Konflikte lösen.
** 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.
** 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 angesteuert werden können. <ref>https://wiki.hshl.de/wiki/index.php/BSE_Angewandte_Informatik_-_SoSe24, abgerufen am 14.07.2024</ref>
** die Mikrocontrollerplattform Arduino modellbasiert mit Simulink programmieren, so dass Sensoren eingelesen und Aktoren angesteuert werden können. [[#Literatur|<sup>[2]</sup>]] <br>


== Projektbeschreibung ==
== Projektbeschreibung ==
In diesem Abschnitt werden die verwendeten Komponenten vorgestellt.
In diesem Abschnitt werden die verwendeten Komponenten vorgestellt.
{| class="wikitable"
{| class="wikitable"
|+ style = "text-align: left"|Tabelle 2: Materialliste
|+ style = "text-align: left"|Tabelle 2: Materialliste  
|-
|-
! #  !! Anzahl !! Material
! #  !! Anzahl !! Material
Zeile 63: Zeile 62:
| 1  || 1|| PC mit MATLAB/Simulink R2023b
| 1  || 1|| PC mit MATLAB/Simulink R2023b
|-
|-
| 2  || 1 || Grove Water Sensor
| 2  || 1 || Arduino Uno R3
|-
|-
| 3  || 1 || Arduino Uno R3
| 3  || 1 || Grove Water Sensor
|-
|-
| 4 || 1 || Streckbrett
| 4 || 1 || Streckbrett
|-
|-
| 5 || 5 || Jumper Kabel, männlich/männlich, 20 cm
| 5 || 1 || Buzzer
|-
| 6 || 5 || LCD Display
|-
| 7 || 2 || LED
|-
|-
| 6 || 6 || LCD Display
| 8 || 10 || Jumper Kabel, männlich/männlich, 20 cm
|}
|}
Beschreibung Funktionsweise der verwendeten Hard- und Software
 
=== Beschreibung der verwendeten Hard- und Software ===
 
'''Simulink R2023b'''
 
Simulink ist eine grafische Entwicklungsumgebung, die zur MATLAB-Software von MathWorks gehört. Sie dient vor allem der Modellierung, Simulation und Analyse dynamischer Systeme. In diesem Praxisbeispiel dient Simulink der Verarbeitung der Sensordaten. [[#Literatur|<sup>[3]</sup>]] <br>


'''Arduino Uno R3'''
'''Arduino Uno R3'''
Der Arduino Uno R3 ist ein beliebtes Mikrocontroller-Board für Elektronikprojekte, basierend auf dem ATmega328P mit 32 KB Flash-Speicher. Es bietet 14 digitale Ein-/Ausgänge, von denen 6 PWM-fähig sind und 6 analoge Eingänge. Der Uno wird über USB oder eine externe Quelle betrieben und lässt sich einfach über die Arduino IDE in C/C++ oder über Matlab/Simulink programmieren.[[#Literatur|<sup>[4]</sup>]] <br>


'''Grove Water Sensor'''
'''Grove Water Sensor'''
Zeile 81: Zeile 91:
Der Grove Water Sensor wird eingesetzt, um Wasserpräsenz und -stand zu erfassen. Er findet in verschiedenen Bereichen Anwendung:
Der Grove Water Sensor wird eingesetzt, um Wasserpräsenz und -stand zu erfassen. Er findet in verschiedenen Bereichen Anwendung:


Wasserleckerkennung: In Haushalten, Büros und industriellen Umgebungen hilft der Sensor, Wasserlecks aufzuspüren und dadurch Schäden durch undichte Stellen zu verhindern.
*Wasserleckerkennung: In Haushalten, Büros und industriellen Umgebungen hilft der Sensor, Wasserlecks aufzuspüren und dadurch Schäden durch undichte Stellen zu verhindern.
*Automatisierte Bewässerungssysteme: In der Landwirtschaft und Gartenpflege misst der Sensor den Bodenfeuchtigkeitsgehalt und steuert automatische Bewässerungssysteme.
*Automatisierte Bewässerungssysteme: In der Landwirtschaft und Gartenpflege misst der Sensor den Bodenfeuchtigkeitsgehalt und steuert automatische Bewässerungssysteme.
*Füllstandsmessung: Der Sensor überwacht den Wasserstand in Behältern, Tanks oder Reservoirs und verhindert Überlauf oder Trockenlauf.
*Füllstandsmessung: Der Sensor überwacht den Wasserstand in Behältern, Tanks oder Reservoirs und verhindert Überlauf oder Trockenlauf.
*Flüssigkeitserkennung in Maschinen: In industriellen Anwendungen überwacht der Sensor den Flüssigkeitsstand in Maschinen oder Systemen, um einen sicheren Betrieb zu gewährleisten.
*Flüssigkeitserkennung in Maschinen: In industriellen Anwendungen überwacht der Sensor den Flüssigkeitsstand in Maschinen oder Systemen, um einen sicheren Betrieb zu gewährleisten.
*Smart Home Anwendungen: In Smart Home Systemen sendet der Sensor Alarme oder Benachrichtigungen, wenn unerwünschtes Wasser erkannt wird, beispielsweise im Keller oder in der Küche.
*Smart Home Anwendungen: In Smart Home Systemen sendet der Sensor Alarme oder Benachrichtigungen, wenn unerwünschtes Wasser erkannt wird, beispielsweise im Keller oder in der Küche. [[#Literatur|<sup>[1]</sup>]] <br>


'''Simulink R2023b'''
'''Steckbrett'''
 
Ein Steckbrett ermöglicht die Verbindung elektrischer Bauelemente ohne Löten. Es ist in horizontale und vertikale Reihen unterteilt, in denen die Bauteile miteinander verbunden sind. Im Gegensatz zu Leiterplatten werden die Komponenten bei Steckbrett nicht gelötet, sondern in Federkontakte gesteckt. Dadurch kann die Schaltung einfach durch Umstecken angepasst werden. [[#Literatur|<sup>[5]</sup>]] <br>
 
'''LCD Display'''
 
Das I2C 1602 LCD-Modul hat ein zweizeiliges Display, das jeweils 16 Zeichen pro Zeile anzeigen kann, und ist mit einem I2C Modul HW-061 auf der Rückseite ausgestattet. Es benötigt eine Taktverbindung (SCL), eine Datenverbindung (SDA) sowie +5VDC und GND. Das Display kann über den I2C-Bus mit lediglich vier Anschlusskabeln betrieben werden. [[#Literatur|<sup>[6]</sup>]] <br>
 
'''Piezo-Lautsprecher'''
Ein Piezo-Lautsprecher ist ein elektronisches Bauteil, das Schallwellen erzeugt, indem es die piezoelektrischen Effekte nutzt. Dabei wird an ein piezoelektrisches Material, eine Spannung angelegt. Dadurch dehnt sich das Material aus und zieht sich zusammen. Diese Verformung erzeugt Schallwellen, welche als Geräusche oder Töne wahrgenommen werden.
 
=== Funktionsweise des Grove Water Sensor ===
 
[[Datei:Grove Wasser Sensor.png|thumb|rigth|900px|Abb. 2: Grove Wasser Sensor [[#Literatur|<sup>[7]</sup>]]]] <br>
Der Grove-Wassersensor gehört zu dem Grove-System und misst die Leitfähigkeit, um den Feuchtigkeitszustand des Sensors anzuzeigen, also ob der Sensor trocken, feucht oder vollständig in Wasser eingetaucht ist. Der Sensor hat mehrere parallele Leiterbahnen, die auf einem PCB (Printed Circuit Board) aufgebracht sind. Die Sensorkontakte verfügen über einen 1 MΩ Widerstand, der den Sensorwert hochhält. Fällt ein Wassertropfen auf Leiterbahnen, dann werden in dem betroffenen Bereich die Leiterbahnen durch das Wasser überbrückt und der Stromkreis zwischen dem Sensorsignal und GND geschlossen. Umso mehr Leiterbahnen vom Wasser bedeckt sind, umso mehr sinkt der Widerstand. Damit kann dann bestimmt werden ob der Sensor trocken, feucht oder vollständig in Wasser eingetaucht ist. Der Sensor kann dabei sowohl mit den digitalen I/O-Pins, wie auch den analogen Pins des Arduino genutzt werden. [[#Literatur|<sup>[8]</sup>]] <br>


=== Technische Daten ===
==== Technische Daten ====
{| class="wikitable"
{| class="wikitable"
|+ style = "text-align: left"|Tabelle 3: Sensordaten [[#Literatur|<sup>[1]</sup>]] <br>
|-  
|-  
| Messbereich || 0&thinsp;° .. 180&thinsp;°
| Messbereich || 0&thinsp;V - 5&thinsp;V
|-
| PWM-Modulation || analog
|-
| PWM-Pulszykluszeit || 20&thinsp;ms
|-  
|-  
| PWM-Pulsweite || 500-2400&thinsp;ms
| Versorgungsspannung || 5&thinsp;V
|-
| Versorgungsspannung || 4.0&thinsp;V .. 7.2&thinsp;V
|-  
|-  
| Versorgungsstrom || 20&thinsp;mA
| Versorgungsstrom || 20&thinsp;mA
|-  
|-  
| Geschwingigkeit || 0,12&thinsp;s/60&thinsp;° (@4,8&thinsp;V, lastfrei)
| Arbeitstemperatur || 10&thinsp;°C - +30&thinsp;°C
|-
| Drehmoment || 1,5&thinsp;kg/cm (@4,8&thinsp;V)
|-
| Gewicht || 9&thinsp;g
|-
| Getriebe || Kunststtoff
|-
| Arbeitstemperatur || 0&thinsp;°C .. +55&thinsp;°C
|-  
|-  
| Abmessungen|| 22,2&thinsp;mm x 11,8&thinsp;mm x 31&thinsp;mm
| Abmessungen|| 20&thinsp;mm x 20&thinsp;mm x 10&thinsp;mm
|}
|}
=== Pinbelegung ===
 
==== Pinbelegung ====
{| class="wikitable"
{| class="wikitable"
|+ style = "text-align: left"|Tabelle 4: Pinbelegung bei dem Sensor [[#Literatur|<sup>[1]</sup>]] <br>
! style="font-weight: bold;" | Pin
! style="font-weight: bold;" | Pin
! style="font-weight: bold;" | Belegung
! style="font-weight: bold;" | Belegung
! style="font-weight: bold;" | Signal
! style="font-weight: bold;" | Signal
|-
|-
| 1 || Versorgungsspannung VCC || 5&thinsp;V
| 1 || Masse (GND) || 0&thinsp;V
|-
|-
| 2 || Triggereingang || TTL-Pegel
| 2 || Versorgungsspannung VCC  || 5&thinsp;V
|-
|-
| 3 || Echo, Ausgang Messergebnis  || TTL-Pegel
| 3 || Not Connected (NC) || -
|-
|-
| 4 || Masse (GND) || 0&thinsp;V
| 4 || Analog Output (SIG) || 0&thinsp;V - 5&thinsp;V
|}
|}


== Versuchsaufbau und Durchführung ==
== Versuchsaufbau und Durchführung ==
=== Versuchsaufbau ===
=== Versuchsaufbau ===
[[Datei:Schaltplan Sharp.jpg|thumb|rigth|450px|Abb. 2: Schaltplan]]
Der Versuchsaufbau wird durch einen Anschlussplan '''(Abbildung. 3)''', einen Schaltplan '''(Abbildung 4''') und einem Foto des Aufbaus '''(Abbildung 5)''' dokumentiert. <br>
[[Datei:Anschlussplan Sharp.png|thumb|rigth|450px|Abb. 3: Anschlussplan]]
<gallery widths="500px" heights="400px" >
[[Datei:Foto Sharp.png|thumb|rigth|450px|Abb. 4: Foto des Versuchsaufbaus]]
Datei:Grove Water Sensor Anschlussplan.png|Abb. 3: Grove Water Sensor Anschlussplan
Der Versuchsaufbau wird durch einen Schaltplan (Abb. 2), Anschlussplan (Abb. 3) und Foto des Aufbaus (Abb. 4) dokumentiert.
Datei:Grove Water Sensor Schaltplan.png|Abb. 4: Grove Water Sensor Schaltplan
Datei:Grove Water Sensor Aufbau.png|Abb. 5: Grove Water Sensor Aufbau
</gallery>
 
 
'''Sensor'''<br>
Der Sensor wird mit dem Arduino über drei Kabel verbunden. Der VCC Anschluss des Sensors wird mit den 5V Versorgungsspannung des Arduinos und GND des Sensors mit GND des Arduinos verbunden. Der Kontakt SIG wird an den analogen Port (A0) angeschlossen.
<br>
'''Buzzer'''<br>
Der negative Ausgang des Buzzers wird an GND angeschlossen. Der positive Ausgang wird mit dem digitalen Pin (A8) das Arduino verbunden.
<br>
'''LED'''
Zur visuellen Anzeige ob Niederschlag gemessen wird, sind zwei LEDs angeschlossen. Die grüne LED leuchtet solange kein Niederschlag gemessen wird und ist über GND und den den digitalen Port A9 angeschlossen. Die rote LED leuchtet sobald es regnet und ist über GND und den digitalen Port A10 angeschlossen.


=== Versuchsdurchführung ===
=== Versuchsdurchführung ===
[[Datei:Simulink Sharp.png|thumb|rigth|450px|Abb. 5: Simulink-Modell]]
Der Sensor soll den Niederschlag zuverlässig messen und feststellen ob es regnet.
Das Modell zur Datenverarbeitung wurde gemäß Abb. 5 in Simulink aufgebaut. Die Messdaten wurden aufgezeichnet. Ein Video der Versuchsdurchführung findet sich hier.
Dazu wurde der Sensor in eine Halterung geschraubt, die es ermöglicht von oben Wasser darauf tropfen zu lassen. Der Zweck der Halterung ergibt sich aus der Anforderung Niederschlag zu simulieren. Die Halterung setzt sich dabei aus zwei Teilen zusammen. So kann der Sensor flach hingelegt werden, um einzelne Wassertropfen zu messen, oder in den Ständer gesteckt werden, damit das Wasser nach unten abläuft, um Niederschlag simulieren zu können. Die Halterung, zu sehen in '''Abbildung 6 und Abbildung 7''' wurde dabei in [https://www.autodesk.de/products/fusion-360/overview?term=1-YEAR&tab=subscription#top Autodesk Fusion360] selbst modellierte und mit einem [https://www.prusa3d.com/de/produkt/original-prusa-mk4-2/ 3D-Drucker] ausgedruckt. Die STL. Datei kann im [[#Anhang|Anhang]] heruntergeladen werden.
 
<gallery widths="200px" heights="200px" >
Datei:Sensor Halterung (verbunden).jpg|Abb. 6: Sensor Halterung (verbunden)
Datei:Sensor Halterung (getrennt).jpg|Abb. 7: Sensor Halterung (getrennt)
</gallery>
 
==== Simulink Modell ====
[[Datei:Simulink Modell Grove-Water-Sensor.png||thumb|right|600px|Abb. 8: Simulink Modell Grove-Water-Sensor]]
Das in Matlab/Simulink erstellte Modell zur Verarbeitung der vom Sensor gelieferten Daten ist in '''Abbildung 8''' zusehen. Die Sensorwerte werden über den analogen Eingang A0 eingelesen und von dem Digitalwert in eine Spannung umgerechnet. Der 10-Bit-Digitalwert (0 bis 1023) wird vom ADC des Arduino mit einer Referenzspannung von 5V erfasst.
 
Um den Digitalwert in Volt umzuwandeln, wird er durch 1023 geteilt und mit 5 multipliziert:<br>
<math>Signal (V) = \frac{Digitalwort \cdot 5V}{1023} </math> <br>
 
In Simulink wird dies durch einen Gain-Block erreicht, der den ADC-Wert mit <math>\frac{5V}{1023} </math>multipliziert
 
 
Die Spannung wird dann über einen rekursiven gleitenden Mittelwertfilter gefiltert. Aus dem gefilterten Signal wird der Mittelwert der letzten 10 Werte berechnet. Der Mittelwert wird dann an den digitalen Output A8 gegeben. Über den digitalen Output A9 wird eine 1 gegeben, wenn der gefilterte Wert größter gleich 1.8V liegt und eine 0 wenn der Wert kleiner als 1.8V ist. Über den digitalen Output A10 wird eine 0 gegeben wenn der gefilterte Wert größter gleich 1.8V liegt und eine 1 wenn der Wert kleiner als 1.8V ist.
 
'''Modelleinstellungen:'''
*Hardware Board: Arduino Uno
*Type: Fixed-step
*Solver: ode1 (Euler)
*Abtastrate: 0,001 s<br>
 
==== Filterung der Messdaten ====
[[Datei:Sensorkennlinie ungefiltert (Trocken).png|thumb|right|600px|Abb. 9: Sensorkennlinie ungefiltert]]
[[Datei:Sensorkennlinie gefiltert (Trocken).png|thumb|right|600px|Abb. 10: Sensorkennlinie gefiltert]]
Bevor der Messbereich festgelegt werden kann, muss geschaut werden wie die Sensorkennlinie aussieht und ob Sie ein hohes Rauschen aufweist.
'''Abbildung 9''' zeigt das ungefilterte Signal des Sensors in Gelb im trockenen Zustand für 5 Sekunden. Die Sensorkennlinie zeigt dabei deutlich Messausreißer auf, welche gefiltert werden müssen.<br>
 
Für die Filterung wurde eine rekursiver gleitender Mittelwertfilter eingesetzt. Der Filter wurde in der Lehrveranstaltung "Signalverarbeitende Systeme" behandelt.
Bei der Auslegung eines rekursiven gleitenden Mittelwertfilters muss die Fensterbreite, also die Anzahl der in die Berechnung einbezogenen Datenpunkte, festgelegt werden. Eine größere Fensterbreite verbessert die Filterung des Rauschens, was zu einer glatteren Kurve führt. Allerdings nimmt mit einer größeren Fensterbreite auch die zeitliche Verzögerung des gefilterten Signals zu, weil mehr vergangene Datenpunkte berücksichtigt werden müssen.
Es ist somit wichtig, einen Kompromiss zwischen der Qualität der Filterung und der zeitlichen Verzögerung des gefilterten Signals im Vergleich zum Originalsignal zu finden.
<br>
Die Fensterbreite für diesen Sensor wurde auf 80 festgelegt. Somit erhält man ein geglättetes Signal, mit einer geringen zeitlichen Verzögerung. Da der Sensor nicht in harten Echtzeitsystemen zum Einsatz kommt, ist eine geringe zeitliche Verzögerung hinnehmbar. Das gefilterte Signal des Sensors in Blau im trockenen Zustand für 5 Sekunden ist in '''Abbildung 10''' zu sehen.
 
Matlab Code des rekursiven gleitenden Mittelwertfilters:
 
function RGM = RekGleitenderMittelwert(x)
persistent n aSchieberegister
persistent bErsterDurchlauf
if isempty (bErsterDurchlauf)
    n = 80;
    aSchieberegister = x * ones (n,1);
    bErsterDurchlauf = 1;
end
for m=1:n-1
    aSchieberegister (m) = aSchieberegister(m+1);
end
aSchieberegister (n) = x;
RGM = x;
RGM = sum(aSchieberegister) / n;
end
<br clear = all>
 
==== Messbereich ====
Für die Bestimmung des Mess- und Vertrauensbereich, wurde geschaut welche Werte der Sensor im trocknen Zustand hat und welche Werte vorliegen sobald Wassertropfen auf den Leiterbahnen liegen. Dafür wurden drei Zustände definiert.
*1. "Zustand Trocken": Es liegt kein Wasser auf den Leiterbahnen des Sensors
*2. "Zustand Nass": Es liegt ein Wassertropfen auf den Leiterbahnen des Sensors
*3. "Zustand Niederschlag": Es tropfen kontinuierlich Wassertropfen auf den Leiterbahnen des Sensors
Für die Überprüfung der Zustände wurde das gefilterte Signal benutzt.
 
'''Zustand Trocken'''<br>
[[Datei:Spannung gefiltert (Trocken).png|thumb|right|600px|Abb.11: Spannung gefiltert (Trocken)]]
[[Datei:Spannung gefiltert (Mittelwert).png|thumb|right|600px|Abb.12: Spannung gefiltert (Mittelwert)]]
Wenn der Sensor trocken ist, also kein Wasser auf den Leiterbahnen liegt, hat der Sensor ohne Filterung ein ziemlich hohes Rauschen. Mit der Filterung über einen rekursiven gleitenden Mittelwertfilter, gibt der Sensor ziemlich konstant fast 5V aus. Es finden keine großen Messausreißer statt, so dass zuverlässig bestimmt werden kann, wenn kein Niederschlag stattfindet. '''Abbildung 11''' zeigt das gefilterte Signal über 60 Sekunden. Über eine Matlab Funktion wurde daraus der Mittelwert und der Abweichung vom Mittelwert berechnet ('''Abbildung 12'''). Es zeigt sich, dass das gefilterte Signal sehr konstant ist und eine Abweichung von gerade einmal <math>\pm 0.00070649V</math> hat.
 
Matlab Funktion zur Berechnung des Mittelwertes:
%% Mittelwert berechnen
%% Daten aus Simulink extrahieren
Spannung = Spannung_gefiltert;
Messwerte = length(Spannung)
%% Mittelwert der Spannung
MSpannung = mean(Spannung)  % Mittelwert
sE = std(Spannung);        %Standardabweichung
%% Ergebnisplot
h = figure;
set(h, 'Name', 'Ergebnisdarstellung', 'NumberTitle', 'off');
xlabel('Anzahl der Messwerte')
ylabel('Spannung in V')
hold on
p1 = plot(Spannung,'r.-');
p2 = yline(MSpannung, 'LineWidth', 2);
title(['Messergebnis: Mittelwert = ', num2str(MSpannung), ' \pm ', num2str(sE)])
% Legende einfügen
h = legend([p1, p2], "Messwerte", "Mittelwert", 'Location', 'northeast');
hold off
<br clear = all>
 
'''Zustand Nass'''<br>
[[Datei:Sensor mit einem Wassertropfen.jpg|thumb|right|200px|Abb.13: Sensor mit einem Wassertropfen]]
Um zu schauen ab wann der Sensor Niederschlag erkennt, wurde ein Wassertropfen auf die Leiterbahnen getropft und die Messdaten für 5 Sekunden aufgezeichnet. Über oben aufgeführte Matlab Funktion, wurde dann aus den aufgezeichneten Messwerten wieder der Mittelwert berechnet. Der ganz Vorgang wurde 10-mal wiederholt, wobei der Wassertropfen jedes Mal auf eine anderen Stelle auf der Leiterbahn getropft wurde. So soll ein möglichst realitätsnahes Ergebnis erzielt werden, da Regentropfen nicht immer an der gleichen Stelle aufschlagen.
 
Folgende Werte wurden dabei aufgezeichnet:
*01. Durchlauf: 0.85378
*02. Durchlauf: 0.90942
*03. Durchlauf: 0.81612
*04. Durchlauf: 1.03845
*05. Durchlauf: 1.45663
*06. Durchlauf: 0.74349
*07. Durchlauf: 0.95096
*08. Durchlauf: 1.01804
*09. Durchlauf: 1.79295
*10. Durchlauf: 1.01497
 
Der Mittelwert aus den 10 Durchläufen beträgt somit <math>x = \frac{0.85378+0.90942+0.81612+1.03845+1.45663+0.74349+0.95096+1.01804+1.79295+1.01497}{10}= 1.05948</math>
 
Wichtig zu erwähnen ist, dass die Wassertropfen nicht alle gleichgroß sind. Während bei größeren Tropfen Werte von 0.7V - 0.8V aufgezeichnet werden konnten, erzielten kleine Wassertropfen Werte zwischen 1.4V und 1.8V. Der Messbereich von Niederschlag liegt somit bei unterhalb 1.8V.
 
'''Zustand Niederschlag'''<br>
[[Datei:Sensor mit simulierten Niederschlag.jpg|thumb|right|200px|Abb. 14: Sensor mit simuliertem Niederschlag]]
Nachdem der Bereich bestimmt wurde in dem der Sensor Niederschlag misst, wurde eine Niederschlagssimulation über 5 Sekunden durchgeführt. Dabei wurde von Beginn der Simulation bis zum Ende Wassertropfen auf die Leiterbahnen gegeben. '''Abbildung 15''' zeigt die aufgezeichnet Sensorkennlinie.
 
Anhand der Sensorkennlinie sieht man, dass der Wert unterhalb den 1.8V liegt, die zuvor als Grenzwert für Niederschlag festgelegt wurden. Die einzelnen Peaks treten auf, wenn ein weitere Wassertropfen dazu kommt (Negative Steigung), ein Wassertropfen die Leiterbahnen entlang fließt (Abwechselnd leicht negative und positive Steigung) oder wenn ein Wassertropfen von Sensor fließt und der Kontakt zwischen den Leiterbahnen unterbrochen wird (Positive Steigung).
<br>
[[Datei:Sensorkennlinie gefiltert (Niederschlag).png|thumb|left|800px|Abb. 15: Sensorkennlinie gefiltert (Niederschlag)]]
<br clear = all>
 
====Messunsicherheit====
Im Folgenden die das Vorgehen zur Bestimmung der Messunsicherheit erläutert. Nachdem der Messbereich ermittelt wurde, muss noch die Messunsicherheit des Sensors bestimmt werden. Hierfür wurde das GUM-Verfahren (Guide to the Expression of Uncertainty in Measurement) angewendet. GUM wurde in der Lehrveranstaltung "Signalverarbeitende Systeme" behandelt wurde. Die Matlab Funktionen zur Berechnung der Messunsicherheiten, wurden aus den Matlab Grader Aufgaben entnommen und auf die Ausarbeitung angepasst.
Der Sensor fällt in die Kategorie "Vermessungstechnik". Nach GUM ergibt sich daraus ein Vertrauensniveau von 68,27%, was einer Standardabweichung von 1σ entspricht. Der Vertrauensfaktor wurde mit <math>k = 2</math> festgelegt.
Zum Anzeigen den Vollständigen Matlab Codes muss der Bereich aufgeklappt werden.
<div class="mw-collapsible mw-collapsed">
<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           : Grove_Water_Sensor_MATLAB                            *
%                                                                        *
% Datum          : 25. Juli 2024                                        *
%                                                                        *
% Funktion        : Berechnung des Mess und Vertrauensbereich            *
%                  des Grove-Water-Sensor                                *
%                                                                        *
% Implementation  : MATLAB 2023b                                          *
%                                                                        *
% Req. Toolbox    :                                                      *
%                                                                        *
% Author          : Denim Hilz                                            *
%                                                                        *
% Bemerkung      :                                                      *
%                                                                        *
% Letzte Änderung : 25-07-2024                                            *
%                                                                        *
%**************************************************************************
%% open('Grove_Water_Sensor')
 
%% Script überarbeiten
 
%% Daten aus Simulink extrahieren
Spannung = Spannung_gefiltert;
Messwerte = length(Spannung)
 
%% Berechnung der Standardunsicherheit
 
% Mittelwert und Standardabweichung
mS = mean(Spannung);        % Mittelwert
sE = std(Spannung);        %Standardabweichung
 
% Berechnen der Standardunsicherheit Typ A
alpha = 1 - 0.6827;        % Messunsicherheit mit 68,27% Prozent Aussagesicherheit, da Messtechnnik
p = 1 - (alpha / 2);
t = tinv(p, Messwerte - 1);
uA = sE * t / sqrt(Messwerte);
 
% Werte des Microprozessors Atmega328p
Uref = 5;                      % Referenzspannung
Aufloesung = 10;                % Auflösung des Atmega328p
Ulsb = Uref / (2^Aufloesung-1)
 
% Standardunsicherheit Typ B
uB = Ulsb / sqrt(3)
 
% Berechnen der Standardunsicherheit Typ C
uC = sqrt(uA^2 + uB^2) 
 
% Vertrauenfaktor
k = 2;              % Vertrauensniveau 0.9545
 
% Berechnen der Messunsicherheit
uAbs = k * uC      % absolute Messunsicherheit
uRel = 100*(uAbs/mS)  % relative Messunsicherheit
 
% Vollständiges Messergebnis ausgeben
disp(['Vollständige Messergebnis: U = ', num2str(mS), ' ± ', num2str(uAbs), ' V ']);
 
h = figure;
set(h, 'Name', 'Ergebnisdarstellung', 'NumberTitle', 'off');
xlabel('Anzahl der Messwerte')
ylabel('Spannung in V')
hold on
 
p1 = plot(Spannung,'r.-');
p2 = yline(mS, 'LineWidth', 2);
p3 = yline(mS + uC, 'Color', 'blue');
p4 = yline(mS - uC, 'Color', 'blue');
title(['Messergebnis: Mittelwert = ', num2str(mS), ' \pm ', num2str(sE), ' V, Spannung = ', num2str(mean(Spannung)), ' \pm ', num2str(uRel), '%'])
 
% Legende einfügen
h = legend([p1, p2, p3], "Messwerte", "Mittelwert", "Unsicherheit Typ C", 'Location', 'northeast');
hold off
</syntaxhighlight>
</div>
<br clear=all>
</div>
 
'''Abbildung 16''' zeigt das Ergebnis der Berechnung.
[[Datei:Mess- und Vertrauensbereich (Trocken).png|left|thumb|900px|Abb. 16: Mess- und Vertrauensbereich]]
<br clear=all>
 
==== Kalibrierung des Sensors ====
Der Sensor arbeitet bereits ohne umfangreiche Kalibrierung sehr zuverlässig. Anhand der in '''Zustand Nass''' gesammelten Daten wurde gezeigt, dass bei Werten unterhalb 1.8V Niederschlag vorliegt. Somit lässt sich ein Bereich von 5V bis 1.8V festgelegt, in dem kein Niederschlag detektiert wird. Werte unterhalb von 1.8V zeigen das Vorhandensein von Niederschlag an. Mit dieser kleinen Kalibrierung können bereits zuverlässige Ergebnisse hinsichtlich der Niederschlag Erkennung erzielt werden.
 
====Versuchsdurchführung mit einer dynamischen Regen-Simulation====
Nachdem der Mess- und Vertrauensbereich bestimmt war, konnte ein umfassender Versuch durchgeführt werden. Der Versuch erstreckte sich über 20 Sekunden. Zu Beginn wurde kein Niederschlag simuliert. Ab der 5. Sekunde wurde Regen simuliert, und ab der 15. Sekunde wurde erneut kein Niederschlag mehr simuliert. Das Ergebnis ist in der folgenden Abbildung zusehen:
 
[[Datei:Sensorkennlinie gefiltert (Regen Simulation).png||thumb|left|800px|Abb. 17: Sensorkennlinie gefiltert (Regen Simulation)]]<br clear = all>


'''Modelleinstellungen:''' Arduino Uno, Solver: Fixed-step, discrete, Abtastrate: 0,001 s
Für das [[#Ergebnisvideo|Ergebnisvideo]] wurde nochmal ein ausführlicherer Versuch aufgezeichnet, bei dem der Sensor bei einer unbeständigen Niederschlagsmenge zwischen durch wenn die Kontaktflächen frei von Wassertropfen waren kein Niederschlag gemessen. Die Thematik ist in dem Video zu sehen und in der Versuchsbeobachtung und Auswertung der Versuche noch einmal näher beschrieben.
<br>


=== Versuchsbeobachtung ===
=== Versuchsbeobachtung ===
[[Datei:Sharp Ergebnis 1.png|thumb|rigth|450px|Abb. 6: Darstellung des Rohsignals des IR-Entfernungssensors (rote Kurve)]]
Der Versuch zu der dynamischen Regen-Simulation zeigt, dass der Sensor den Niederschlag zuverlässig misst. Dabei fällt auf, dass die auch ohne Filterung des Signals möglich ist. Der Filter hilft dabei Peaks in den Messwerten abzufangen und zu glätten. Die Messwerte ohne Niederschlag befinden sich sehr nahe an 5V und die Messwerte bei Niederschlag liegen im Mittel bei etwas mehr 1V, was zuvor im '''Zustand Nass''' ermittelt wurde.
[[Datei:Sharp Ergebnis 2.png |thumb|rigth|450px|Abb. 7: Darstellung von dynamischen Messwerten des IR-Entfernungssensors]]
Da sich der Messwert mit jedem neuen Tropfen oder jedem Tropfen der von Sensor fließt teilweise stark verändert, geht der Buzzer immer wieder an und aus. Die lässt sich nicht vermeiden, aufgrund der Unbeständigkeit der Wassertropfen. Die angeschlossenen LEDs hingegen, zeigen zuverlässig an wenn keine Niederschlag (Grüne LED leuchtet) und wenn Niederschlag (Rote LED leuchtet) vorliegt. Kritisch zu bemerken ist, dass es schwer abzuschätzen ist wie sich der Sensor außerhalb der Simulation verhält. In dem [[#Ergebnisvideo|Ergebnisvideo]] wird dies noch deutlicher. Bleibt ein Wassertropfen auf dem Sensor liegen, dann erkennt dieser weiterhin Niederschlag auch wenn keiner mehr da ist. Läuft ein Wassertropfen zu schnell runter, bevor in der Simulation ein weiterer Tropfen auf die Leiterbahn kommt, dann wird angezeigt, dass kein Niederschlag vorliegt obwohl Niederschlag stattfindet. Da sich Regen nur schwer simulieren lässt aufgrund der Unbeständigkeit, der Unterschiede in Tropfengröße und Regenmenge, sowie der Tatsache, dass der Sensor im oberen Anschlussbereich nicht nass werden sollte, sind die Gewinnung stichhaltiger Ergebnisse aus einer Niederschlagssimulation nur schwer erzielbar.
Das Signal des Sensors weist alle 40&thinsp;ms systematische Ausreisser auf (vgl. Abb. 6, rote Kurve).


== Auswertung==
== Auswertung==
Die Messhypothese wurde verworfen. Der Sensor weist systematische Messwertausreisser auf.
Die Messhypothese '''"Niederschlag lässt sich über den Grove Water Sensor feststellen"''' konnte bestätigt werden. Der Sensor liefert bereits ohne Filterung sehr zuverlässige Ergebnisse, wenn man den Messbereich und die Kalibrierung festlegt. Durch die Filterung des analogen Eingangssignals konnte die Abweichung vom Mittelwert auf <math>\pm 0.00070649V</math>. Die Messunsicherheit beträgt <math>\pm 0.11296\%</math>.
Der Niederschlag konnte zuverlässig detektiert und visuell über die beiden LEDs ausgegeben werden. Da der Sensor keine harten Echtzeitanforderungen erfüllen muss ist eine leichte zeitliche Verzögerung aufgrund des Filters hinnehmbar. Gleichzeitig arbeitet der Sensor auch ohne großartige Filterung sehr zuverlässig, weshalb die Messwerte keine hohe Filterung benötigen. Mit einer Fensterbreite von 80, konnte somit ein guter Kompromiss gefunden werden, zwischen einer brauchbaren Filterung der Messwerte und einer kleinen zeitlichen Verzögerung. Dennoch müssen zwei Faktoren berücksichtigt werden, welche Auswirkung auf die Niederschlagserkennung haben in Form von Regen. 1. Bleibt Wasser auf dem Sensor liegen, dann wird permanent Niederschlag gemessen. 2. Ist der Niederschlag zu gering, dann springt Messwert des Sensors zwischen Niederschlag und kein Niederschlag hin und her.
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
| <strong>Testbericht gegen die Anforderungen&thinsp;</strong>
|-
| Der Test der Anforderungen wurden nicht explizit und nachvollziehbar dokumentiert. Anhand des Wiki-Artikels konnte nachfolgender Erfüllungsgrad abgelesen werden.
{| class="wikitable"
|-
! Req. !! Beschreibung !! Testergebnis
|-
| 1 || Der Niederschlag muss mittels Wassersensor, Arduino und Simulink gemessen werden.|| <span style="color:green">☑</span>
|-
| 2 || Der Messbereich muss bestimmt werden. ||<span style="color:red">☒</span>
|-
| 3 || Die Messunsicherheit (1σ) muss für den Messbereich ermittelt und als Vertrauensbereich angezeigt werden. || <span style="color:red">☒</span>
|-
| 4 || Der Sensor muss kalibriert werden. || <span style="color:green">☑</span>
|-
| 5 || Für den Messbereich muss der Niederschlag referenziert werden. || <span style="color:green">☑</span>
|-
| 6 || Die Messwerte müssen über der Zeit gefiltert werden.  || <span style="color:green">☑</span>
|-
| 7 || Ein Piepton muss anzeigen, wenn der Messwert stabil/konstant ist und Niederschlag erkannt wurde. || <span style="color:green">☑</span>
|-
| 8 || Das Sensorsystem muss eine Regenwarnung auf dem [[LCD_Modul_16x02_I2C|LC-Display]] anzeigen. || <span style="color:red">☒</span>
|}
|}


Die Ausreisser lassen sich mit einem Signalfilter eliminieren. Hierzu eignet sich ein Rangordnungsfilter (z.&thinsp;B. Median-Filter). Das Filter wird hierzu auf eine Fensterbreite von 30 Werten
eingestellt. Das zufriedenstellende Filterergebnis für statische Werte zeigt Abb. 6 als blaue Kurve. Es konnte mit dynamische Werten verifiziert werden (vgl. Abb. 7). Das Datenblatt ([2, S. 6]) belegt die Messungen und bezeichnet die Messausreisser als "instabile Ausgabe" für maximal 5&thinsp;ms alle 40&thinsp;ms. Mit 50 Werten erhöht sich die Filterwirkung, es entsteht jedoch ein Delay von 10&thinsp;ms. Mit 10 Werten ist die Filterwirkung zu gering.
== Zusammenfassung und Ausblick ==
== Zusammenfassung und Ausblick ==
* Zusammenfassung der Kapitel 1-4
=== Zusammenfassung ===
* Diskussion der Ergebnisse
Die Sensordaten zeigen, dass der '''Grove Water Sensor''' zuverlässig zwischen trockenem Zustand und dem Zustand Nass unterscheiden kann. Werte unterhalb von 1.8V bedeuten es liegt einen Niederschlag vor, während Werte zwischen 1.8V und 5V Aussagen, dass kein Niederschlag stattfindet. Diese Schwellenwerte wurden auf Basis der gemessenen Daten und der Kalibrierung des Sensors festgelegt.
* Ausblick
 
* Selbstreflexion/Lessons learned
Aus den Werten des '''Trocken Zustands''' und den Werten des '''Nassen Zustands''' lässt sich somit festhalten, dass gemessene Werte unter halb 1.8V darauf schließen lassen, dass es Niederschlag gibt. Im Bereich von 1.8V bis 5V liegt kein Niederschlag vor.
 
=== Diskussion der Ergebnisse ===
Die Sensordaten bestätigen, dass der Grove Water Sensor '''effektiv zwischen trockenem Zustand und Niederschlag unterscheidet'''. Die Filterung der Messdaten hat die Genauigkeit verbessert, indem sie Rauschen und Peaks minimiert hat. Es wurde festgestellt, dass kleine Wassertropfen höhere Werte liefern als größere Tropfen, was bei der Kalibrierung berücksichtigt werden muss. Die LEDs haben zuverlässig auf den Niederschlag reagiert. '''Der Niederschlag konnte somit erfolgreich detektiert werden'''.
 
=== Ausblick ===
Für zukünftige Arbeiten könnten weitere Verbesserungen der Sensorgenauigkeit erzielt werden, etwa durch eine genauere Kalibrierung oder den Einsatz zusätzlicher Sensorkomponenten.
Damit könnten die zwei angesprochenen Faktoren berücksichtigt werden, in dem zum Beispiel überlegt wird mit welchen Methoden und Mitteln verhindert werden kann, dass die Wassertropfen anteilig auf dem Sensor liegen bleiben und so das Ergebnis verfälschen. Auch könnte überlegt werden, wie man bei verschiedenen Regenintensitäten den Sensor kalibrieren kann, um beispielsweise auch bei nur geringfügigem Niederschlag ein brauchbares Ergebnis erzielen zu können.
Ebenso wäre es möglich die Niederschlagsmenge zu messen, um gewisse Grenzwerte festlegen zu können wie viel Prozent Niederschlag noch in Ordnung sind und ab wie viel Prozent reagiert werden muss.
Zusätzlich könnte die Anwendung des Sensors auf verschiedene Flüssigkeiten ausgeweitet werden, um dessen Vielseitigkeit zu erhöhen. Der Grove Water Sensor ist für die Erkennung von Wasser optimiert. Im Rahmen dieser Ausarbeitung wurde nur mit Wasser gemessen. Interessant wäre es zu sehen wie der Sensor auf andere Flüssigkeiten wie Öl oder Chemikalien reagiert.
 
=== Selbstreflexion/Lessons learned ===
Während der Durchführung dieser Ausarbeitung gab es viele Erkenntnisse und Herausforderungen. Eine der wichtigsten Aufgaben war die Festlegung des Mess- und Vertrauensbereich und die Kalibrierung des Sensors. Somit konnten viele gewonnen Erkenntnisse aus dem Sommersemester 2024 noch einmal praktisch umgesetzt werden.
Viele Themen die im Modul Signalverarbeitende Systeme gelehrt wurden, konnten praktisch angewendet und vertieft werden.
Zudem konnte tiefergehend in die Messtechnik und in die Thematik Microcontroller und Arduino eingestiegen werden.
Zusammenfassend bildet die Hausarbeit eine gelungene Zusammenführung von den gelehrten theoretischen und praktischen Inhalten und der Umsetzung in Eigenarbeit.


== Ergebnisvideo ==
== Ergebnisvideo ==
Binden Sie hier Ihr Ergebnisvideo ein.
Das Ergebnisvideo wurde aufgenommen nachdem die drei Zustände '''Trocken''', '''Nass''' und '''Niederschlag''' getestet wurden und der Messbereich anhand der gesammelten Daten festgelegt werden konnte. Die Simulation im Video wurde über einen Zeitraum von 60 Sekunden durchgeführt.
 
[[Datei:Ergebnisvideo Grove Water Sensor.mp4|thumb|center|800px|Ergebnisvideo Grove Water Sensor]]
Anleitung: [[Videos_einbinden|Videos im Wiki einbinden]]


== Lernzielkrontrolle ==
== Lernzielkrontrolle ==
Zeile 187: Zeile 468:


== Literatur ==
== Literatur ==
Zitieren Sie nach [[Zitieren_nach_DIN1505|DIN ISO 690:2013-10]].
[1] R<span style="font-variant:small-caps">eichelt</span>: Grove Water Sensor Datenblatt. URL: https://cdn-reichelt.de/documents/datenblatt/A300/101020018_01.pdf, 14. Juli 2024 <br>
[2] HSHL W<span style="font-variant:small-caps">iki</span>: BSE Angewandte Informatik - SoSe24. URL: https://wiki.hshl.de/wiki/index.php/BSE_Angewandte_Informatik_-_SoSe24, 14. Juli 2024 <br>
[3] M<span style="font-variant:small-caps">athworks</span>: Beschreibung Simulink. URL: https://de.mathworks.com/products/simulink.html, 14. Juli 2024 <br>
[4] D<span style="font-variant:small-caps">ocs.arduino</span>: Beschreibung Arduino. URL: https://docs.arduino.cc/hardware/uno-rev3/, 14. Juli 2024 <br>
[5] HSHL W<span style="font-variant:small-caps">iki</span>: Steckbrett. URL: https://wiki.hshl.de/wiki/index.php/Steckbrett, 14. Juli 2024 <br>
[6] HSHL W<span style="font-variant:small-caps">iki</span>: LCD Modul. URL: https://wiki.hshl.de/wiki/index.php/LCD_Modul_16x02_I2C, 14. Juli 2024 <br>
[7] S<span style="font-variant:small-caps">eeedstudio</span>: Bild Grove Water Sensor. URL: https://wiki.seeedstudio.com/Grove-Water_Sensor/, 21. Juli 2024 <br>
[8] S<span style="font-variant:small-caps">eeedstudio</span>: Daten Grove Water Sensor. URL: https://www.mouser.com/datasheet/2/744/Seeed_101020018-1217524.pdf, 21. Juli 2024 <br>


== Anhang ==
== Anhang ==
* Datenblätter
*[[:Datei:Grove Water Sensor Halterung.stl|STL-Datei Sensorhalterung]]
* Simulink-Modell
*[[:Datei:Grove Water Sensor.zip|Matlab Code & Simulink-Modell]]
* Originaldateien (PAP, Schaltplan,... )
 
----
----
→ zurück zum Hauptartikel: [[BSE_Angewandte_Informatik_-_SoSe24|BSE Angewandte Informatik SoSe24]] | [[BSE_Angewandte_Informatik_-_SoSe24_-_Hausarbeit|Hausarbeit SoSe24]]
→ zurück zum Hauptartikel: [[BSE_Angewandte_Informatik_-_SoSe24|BSE Angewandte Informatik SoSe24]] | [[BSE_Angewandte_Informatik_-_SoSe24_-_Hausarbeit|Hausarbeit SoSe24]]

Aktuelle Version vom 10. August 2024, 09:32 Uhr

Abb. 1: Wassersensor
Autor: Denim 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

Aufgabenstellung

In diesem Artikel wird der Grove Water Sensor näher erläutert, die Implementierung in Matlab/Simulink aufgezeigt und die Kalibrierung und Filterung vorgestellt. Der Grove Water Sensor dient zur Erkennung von Wasser und zur Messung des Wasserstands. Einsatzbereiche sind unter anderem das Aufspüren von Wasserlecks, die Steuerung automatischer Bewässerungssysteme, die Überwachung des Wasserstands in Behältern, die Detektion von Flüssigkeiten in Maschinen sowie die Überwachung unerwünschten Wassers in Smart Home Systemen. [1]

  • Thema/Fragestellung: Feststellen ob es zum gegenwärtigen Zeitpunkt Niederschlag gibt mittels des Grove Water Sensor.
  • Hypothese: Niederschlag lässt sich über den Grove Water Sensor feststellen.
  • Einordnung in den Lehrplan: Die im Modul Angewandte Informatik vermittelten Lernziele, werden im Rahmen dieses Praxisbeispiels angewendet. Folgende Lernziele gilt es dabei zu überprüfen.
    • 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 angesteuert werden können. [2]

Projektbeschreibung

In diesem Abschnitt werden die verwendeten Komponenten vorgestellt.

Tabelle 2: Materialliste
# Anzahl Material
1 1 PC mit MATLAB/Simulink R2023b
2 1 Arduino Uno R3
3 1 Grove Water Sensor
4 1 Streckbrett
5 1 Buzzer
6 5 LCD Display
7 2 LED
8 10 Jumper Kabel, männlich/männlich, 20 cm

Beschreibung der verwendeten Hard- und Software

Simulink R2023b

Simulink ist eine grafische Entwicklungsumgebung, die zur MATLAB-Software von MathWorks gehört. Sie dient vor allem der Modellierung, Simulation und Analyse dynamischer Systeme. In diesem Praxisbeispiel dient Simulink der Verarbeitung der Sensordaten. [3]

Arduino Uno R3

Der Arduino Uno R3 ist ein beliebtes Mikrocontroller-Board für Elektronikprojekte, basierend auf dem ATmega328P mit 32 KB Flash-Speicher. Es bietet 14 digitale Ein-/Ausgänge, von denen 6 PWM-fähig sind und 6 analoge Eingänge. Der Uno wird über USB oder eine externe Quelle betrieben und lässt sich einfach über die Arduino IDE in C/C++ oder über Matlab/Simulink programmieren.[4]

Grove Water Sensor

Der Grove Water Sensor wird eingesetzt, um Wasserpräsenz und -stand zu erfassen. Er findet in verschiedenen Bereichen Anwendung:

  • Wasserleckerkennung: In Haushalten, Büros und industriellen Umgebungen hilft der Sensor, Wasserlecks aufzuspüren und dadurch Schäden durch undichte Stellen zu verhindern.
  • Automatisierte Bewässerungssysteme: In der Landwirtschaft und Gartenpflege misst der Sensor den Bodenfeuchtigkeitsgehalt und steuert automatische Bewässerungssysteme.
  • Füllstandsmessung: Der Sensor überwacht den Wasserstand in Behältern, Tanks oder Reservoirs und verhindert Überlauf oder Trockenlauf.
  • Flüssigkeitserkennung in Maschinen: In industriellen Anwendungen überwacht der Sensor den Flüssigkeitsstand in Maschinen oder Systemen, um einen sicheren Betrieb zu gewährleisten.
  • Smart Home Anwendungen: In Smart Home Systemen sendet der Sensor Alarme oder Benachrichtigungen, wenn unerwünschtes Wasser erkannt wird, beispielsweise im Keller oder in der Küche. [1]

Steckbrett

Ein Steckbrett ermöglicht die Verbindung elektrischer Bauelemente ohne Löten. Es ist in horizontale und vertikale Reihen unterteilt, in denen die Bauteile miteinander verbunden sind. Im Gegensatz zu Leiterplatten werden die Komponenten bei Steckbrett nicht gelötet, sondern in Federkontakte gesteckt. Dadurch kann die Schaltung einfach durch Umstecken angepasst werden. [5]

LCD Display

Das I2C 1602 LCD-Modul hat ein zweizeiliges Display, das jeweils 16 Zeichen pro Zeile anzeigen kann, und ist mit einem I2C Modul HW-061 auf der Rückseite ausgestattet. Es benötigt eine Taktverbindung (SCL), eine Datenverbindung (SDA) sowie +5VDC und GND. Das Display kann über den I2C-Bus mit lediglich vier Anschlusskabeln betrieben werden. [6]

Piezo-Lautsprecher Ein Piezo-Lautsprecher ist ein elektronisches Bauteil, das Schallwellen erzeugt, indem es die piezoelektrischen Effekte nutzt. Dabei wird an ein piezoelektrisches Material, eine Spannung angelegt. Dadurch dehnt sich das Material aus und zieht sich zusammen. Diese Verformung erzeugt Schallwellen, welche als Geräusche oder Töne wahrgenommen werden.

Funktionsweise des Grove Water Sensor

Abb. 2: Grove Wasser Sensor [7]


Der Grove-Wassersensor gehört zu dem Grove-System und misst die Leitfähigkeit, um den Feuchtigkeitszustand des Sensors anzuzeigen, also ob der Sensor trocken, feucht oder vollständig in Wasser eingetaucht ist. Der Sensor hat mehrere parallele Leiterbahnen, die auf einem PCB (Printed Circuit Board) aufgebracht sind. Die Sensorkontakte verfügen über einen 1 MΩ Widerstand, der den Sensorwert hochhält. Fällt ein Wassertropfen auf Leiterbahnen, dann werden in dem betroffenen Bereich die Leiterbahnen durch das Wasser überbrückt und der Stromkreis zwischen dem Sensorsignal und GND geschlossen. Umso mehr Leiterbahnen vom Wasser bedeckt sind, umso mehr sinkt der Widerstand. Damit kann dann bestimmt werden ob der Sensor trocken, feucht oder vollständig in Wasser eingetaucht ist. Der Sensor kann dabei sowohl mit den digitalen I/O-Pins, wie auch den analogen Pins des Arduino genutzt werden. [8]

Technische Daten

Tabelle 3: Sensordaten [1]
Messbereich 0 V - 5 V
Versorgungsspannung 5 V
Versorgungsstrom 20 mA
Arbeitstemperatur 10 °C - +30 °C
Abmessungen 20 mm x 20 mm x 10 mm

Pinbelegung

Tabelle 4: Pinbelegung bei dem Sensor [1]
Pin Belegung Signal
1 Masse (GND) 0 V
2 Versorgungsspannung VCC 5 V
3 Not Connected (NC) -
4 Analog Output (SIG) 0 V - 5 V

Versuchsaufbau und Durchführung

Versuchsaufbau

Der Versuchsaufbau wird durch einen Anschlussplan (Abbildung. 3), einen Schaltplan (Abbildung 4) und einem Foto des Aufbaus (Abbildung 5) dokumentiert.


Sensor
Der Sensor wird mit dem Arduino über drei Kabel verbunden. Der VCC Anschluss des Sensors wird mit den 5V Versorgungsspannung des Arduinos und GND des Sensors mit GND des Arduinos verbunden. Der Kontakt SIG wird an den analogen Port (A0) angeschlossen.
Buzzer
Der negative Ausgang des Buzzers wird an GND angeschlossen. Der positive Ausgang wird mit dem digitalen Pin (A8) das Arduino verbunden.
LED Zur visuellen Anzeige ob Niederschlag gemessen wird, sind zwei LEDs angeschlossen. Die grüne LED leuchtet solange kein Niederschlag gemessen wird und ist über GND und den den digitalen Port A9 angeschlossen. Die rote LED leuchtet sobald es regnet und ist über GND und den digitalen Port A10 angeschlossen.

Versuchsdurchführung

Der Sensor soll den Niederschlag zuverlässig messen und feststellen ob es regnet. Dazu wurde der Sensor in eine Halterung geschraubt, die es ermöglicht von oben Wasser darauf tropfen zu lassen. Der Zweck der Halterung ergibt sich aus der Anforderung Niederschlag zu simulieren. Die Halterung setzt sich dabei aus zwei Teilen zusammen. So kann der Sensor flach hingelegt werden, um einzelne Wassertropfen zu messen, oder in den Ständer gesteckt werden, damit das Wasser nach unten abläuft, um Niederschlag simulieren zu können. Die Halterung, zu sehen in Abbildung 6 und Abbildung 7 wurde dabei in Autodesk Fusion360 selbst modellierte und mit einem 3D-Drucker ausgedruckt. Die STL. Datei kann im Anhang heruntergeladen werden.

Simulink Modell

Abb. 8: Simulink Modell Grove-Water-Sensor

Das in Matlab/Simulink erstellte Modell zur Verarbeitung der vom Sensor gelieferten Daten ist in Abbildung 8 zusehen. Die Sensorwerte werden über den analogen Eingang A0 eingelesen und von dem Digitalwert in eine Spannung umgerechnet. Der 10-Bit-Digitalwert (0 bis 1023) wird vom ADC des Arduino mit einer Referenzspannung von 5V erfasst.

Um den Digitalwert in Volt umzuwandeln, wird er durch 1023 geteilt und mit 5 multipliziert:

In Simulink wird dies durch einen Gain-Block erreicht, der den ADC-Wert mit multipliziert


Die Spannung wird dann über einen rekursiven gleitenden Mittelwertfilter gefiltert. Aus dem gefilterten Signal wird der Mittelwert der letzten 10 Werte berechnet. Der Mittelwert wird dann an den digitalen Output A8 gegeben. Über den digitalen Output A9 wird eine 1 gegeben, wenn der gefilterte Wert größter gleich 1.8V liegt und eine 0 wenn der Wert kleiner als 1.8V ist. Über den digitalen Output A10 wird eine 0 gegeben wenn der gefilterte Wert größter gleich 1.8V liegt und eine 1 wenn der Wert kleiner als 1.8V ist.

Modelleinstellungen:

  • Hardware Board: Arduino Uno
  • Type: Fixed-step
  • Solver: ode1 (Euler)
  • Abtastrate: 0,001 s

Filterung der Messdaten

Abb. 9: Sensorkennlinie ungefiltert
Abb. 10: Sensorkennlinie gefiltert

Bevor der Messbereich festgelegt werden kann, muss geschaut werden wie die Sensorkennlinie aussieht und ob Sie ein hohes Rauschen aufweist. Abbildung 9 zeigt das ungefilterte Signal des Sensors in Gelb im trockenen Zustand für 5 Sekunden. Die Sensorkennlinie zeigt dabei deutlich Messausreißer auf, welche gefiltert werden müssen.

Für die Filterung wurde eine rekursiver gleitender Mittelwertfilter eingesetzt. Der Filter wurde in der Lehrveranstaltung "Signalverarbeitende Systeme" behandelt. Bei der Auslegung eines rekursiven gleitenden Mittelwertfilters muss die Fensterbreite, also die Anzahl der in die Berechnung einbezogenen Datenpunkte, festgelegt werden. Eine größere Fensterbreite verbessert die Filterung des Rauschens, was zu einer glatteren Kurve führt. Allerdings nimmt mit einer größeren Fensterbreite auch die zeitliche Verzögerung des gefilterten Signals zu, weil mehr vergangene Datenpunkte berücksichtigt werden müssen. Es ist somit wichtig, einen Kompromiss zwischen der Qualität der Filterung und der zeitlichen Verzögerung des gefilterten Signals im Vergleich zum Originalsignal zu finden.
Die Fensterbreite für diesen Sensor wurde auf 80 festgelegt. Somit erhält man ein geglättetes Signal, mit einer geringen zeitlichen Verzögerung. Da der Sensor nicht in harten Echtzeitsystemen zum Einsatz kommt, ist eine geringe zeitliche Verzögerung hinnehmbar. Das gefilterte Signal des Sensors in Blau im trockenen Zustand für 5 Sekunden ist in Abbildung 10 zu sehen.

Matlab Code des rekursiven gleitenden Mittelwertfilters:

function RGM = RekGleitenderMittelwert(x)
persistent n aSchieberegister
persistent bErsterDurchlauf
if isempty (bErsterDurchlauf)
    n = 80;
    aSchieberegister = x * ones (n,1);
    bErsterDurchlauf = 1;
end
for m=1:n-1
    aSchieberegister (m) = aSchieberegister(m+1);
end
aSchieberegister (n) = x;
RGM = x;
RGM = sum(aSchieberegister) / n;
end


Messbereich

Für die Bestimmung des Mess- und Vertrauensbereich, wurde geschaut welche Werte der Sensor im trocknen Zustand hat und welche Werte vorliegen sobald Wassertropfen auf den Leiterbahnen liegen. Dafür wurden drei Zustände definiert.

  • 1. "Zustand Trocken": Es liegt kein Wasser auf den Leiterbahnen des Sensors
  • 2. "Zustand Nass": Es liegt ein Wassertropfen auf den Leiterbahnen des Sensors
  • 3. "Zustand Niederschlag": Es tropfen kontinuierlich Wassertropfen auf den Leiterbahnen des Sensors

Für die Überprüfung der Zustände wurde das gefilterte Signal benutzt.

Zustand Trocken

Abb.11: Spannung gefiltert (Trocken)
Abb.12: Spannung gefiltert (Mittelwert)

Wenn der Sensor trocken ist, also kein Wasser auf den Leiterbahnen liegt, hat der Sensor ohne Filterung ein ziemlich hohes Rauschen. Mit der Filterung über einen rekursiven gleitenden Mittelwertfilter, gibt der Sensor ziemlich konstant fast 5V aus. Es finden keine großen Messausreißer statt, so dass zuverlässig bestimmt werden kann, wenn kein Niederschlag stattfindet. Abbildung 11 zeigt das gefilterte Signal über 60 Sekunden. Über eine Matlab Funktion wurde daraus der Mittelwert und der Abweichung vom Mittelwert berechnet (Abbildung 12). Es zeigt sich, dass das gefilterte Signal sehr konstant ist und eine Abweichung von gerade einmal hat.

Matlab Funktion zur Berechnung des Mittelwertes:

%% Mittelwert berechnen
%% Daten aus Simulink extrahieren
Spannung = Spannung_gefiltert;
Messwerte = length(Spannung)
%% Mittelwert der Spannung
MSpannung = mean(Spannung)  % Mittelwert
sE = std(Spannung);         %Standardabweichung
%% Ergebnisplot
h = figure;
set(h, 'Name', 'Ergebnisdarstellung', 'NumberTitle', 'off');
xlabel('Anzahl der Messwerte')
ylabel('Spannung in V')
hold on
p1 = plot(Spannung,'r.-');
p2 = yline(MSpannung, 'LineWidth', 2);
title(['Messergebnis: Mittelwert = ', num2str(MSpannung), ' \pm ', num2str(sE)])
% Legende einfügen
h = legend([p1, p2], "Messwerte", "Mittelwert", 'Location', 'northeast');
hold off


Zustand Nass

Abb.13: Sensor mit einem Wassertropfen

Um zu schauen ab wann der Sensor Niederschlag erkennt, wurde ein Wassertropfen auf die Leiterbahnen getropft und die Messdaten für 5 Sekunden aufgezeichnet. Über oben aufgeführte Matlab Funktion, wurde dann aus den aufgezeichneten Messwerten wieder der Mittelwert berechnet. Der ganz Vorgang wurde 10-mal wiederholt, wobei der Wassertropfen jedes Mal auf eine anderen Stelle auf der Leiterbahn getropft wurde. So soll ein möglichst realitätsnahes Ergebnis erzielt werden, da Regentropfen nicht immer an der gleichen Stelle aufschlagen.

Folgende Werte wurden dabei aufgezeichnet:

  • 01. Durchlauf: 0.85378
  • 02. Durchlauf: 0.90942
  • 03. Durchlauf: 0.81612
  • 04. Durchlauf: 1.03845
  • 05. Durchlauf: 1.45663
  • 06. Durchlauf: 0.74349
  • 07. Durchlauf: 0.95096
  • 08. Durchlauf: 1.01804
  • 09. Durchlauf: 1.79295
  • 10. Durchlauf: 1.01497

Der Mittelwert aus den 10 Durchläufen beträgt somit

Wichtig zu erwähnen ist, dass die Wassertropfen nicht alle gleichgroß sind. Während bei größeren Tropfen Werte von 0.7V - 0.8V aufgezeichnet werden konnten, erzielten kleine Wassertropfen Werte zwischen 1.4V und 1.8V. Der Messbereich von Niederschlag liegt somit bei unterhalb 1.8V.

Zustand Niederschlag

Abb. 14: Sensor mit simuliertem Niederschlag

Nachdem der Bereich bestimmt wurde in dem der Sensor Niederschlag misst, wurde eine Niederschlagssimulation über 5 Sekunden durchgeführt. Dabei wurde von Beginn der Simulation bis zum Ende Wassertropfen auf die Leiterbahnen gegeben. Abbildung 15 zeigt die aufgezeichnet Sensorkennlinie.

Anhand der Sensorkennlinie sieht man, dass der Wert unterhalb den 1.8V liegt, die zuvor als Grenzwert für Niederschlag festgelegt wurden. Die einzelnen Peaks treten auf, wenn ein weitere Wassertropfen dazu kommt (Negative Steigung), ein Wassertropfen die Leiterbahnen entlang fließt (Abwechselnd leicht negative und positive Steigung) oder wenn ein Wassertropfen von Sensor fließt und der Kontakt zwischen den Leiterbahnen unterbrochen wird (Positive Steigung).

Abb. 15: Sensorkennlinie gefiltert (Niederschlag)


Messunsicherheit

Im Folgenden die das Vorgehen zur Bestimmung der Messunsicherheit erläutert. Nachdem der Messbereich ermittelt wurde, muss noch die Messunsicherheit des Sensors bestimmt werden. Hierfür wurde das GUM-Verfahren (Guide to the Expression of Uncertainty in Measurement) angewendet. GUM wurde in der Lehrveranstaltung "Signalverarbeitende Systeme" behandelt wurde. Die Matlab Funktionen zur Berechnung der Messunsicherheiten, wurden aus den Matlab Grader Aufgaben entnommen und auf die Ausarbeitung angepasst. Der Sensor fällt in die Kategorie "Vermessungstechnik". Nach GUM ergibt sich daraus ein Vertrauensniveau von 68,27%, was einer Standardabweichung von 1σ entspricht. Der Vertrauensfaktor wurde mit festgelegt.

Zum Anzeigen den Vollständigen Matlab Codes muss der Bereich aufgeklappt werden.
%**************************************************************************
%                   Hochschule Hamm-Lippstadt                             *
%**************************************************************************
% Modul	          : Grove_Water_Sensor_MATLAB                             *
%                                                                         *
% Datum           : 25. Juli 2024                                         *
%                                                                         *
% Funktion        : Berechnung des Mess und Vertrauensbereich             *
%                   des Grove-Water-Sensor                                *
%                                                                         *
% Implementation  : MATLAB 2023b                                          *
%                                                                         *
% Req. Toolbox    :                                                       *
%                                                                         *
% Author          : Denim Hilz                                            *
%                                                                         *
% Bemerkung       :                                                       *
%                                                                         *
% Letzte Änderung : 25-07-2024                                            *
%                                                                         *
%**************************************************************************
%% open('Grove_Water_Sensor')

%% Script überarbeiten

%% Daten aus Simulink extrahieren
Spannung = Spannung_gefiltert;
Messwerte = length(Spannung)

%% Berechnung der Standardunsicherheit

% Mittelwert und Standardabweichung
mS = mean(Spannung);        % Mittelwert
sE = std(Spannung);         %Standardabweichung

% Berechnen der Standardunsicherheit Typ A
alpha = 1 - 0.6827;         % Messunsicherheit mit 68,27% Prozent Aussagesicherheit, da Messtechnnik
p = 1 - (alpha / 2);
t = tinv(p, Messwerte - 1);
uA = sE * t / sqrt(Messwerte);

% Werte des Microprozessors Atmega328p
Uref = 5;                       % Referenzspannung
Aufloesung = 10;                % Auflösung des Atmega328p
Ulsb = Uref / (2^Aufloesung-1)

% Standardunsicherheit Typ B
uB = Ulsb / sqrt(3) 

% Berechnen der Standardunsicherheit Typ C
uC = sqrt(uA^2 + uB^2)  

% Vertrauenfaktor
k = 2;              % Vertrauensniveau 0.9545

% Berechnen der Messunsicherheit 
uAbs = k * uC       % absolute Messunsicherheit 
uRel = 100*(uAbs/mS)  % relative Messunsicherheit

% Vollständiges Messergebnis ausgeben
disp(['Vollständige Messergebnis: U = ', num2str(mS), ' ± ', num2str(uAbs), ' V ']);

h = figure;
set(h, 'Name', 'Ergebnisdarstellung', 'NumberTitle', 'off');
xlabel('Anzahl der Messwerte')
ylabel('Spannung in V')
hold on

p1 = plot(Spannung,'r.-');
p2 = yline(mS, 'LineWidth', 2);
p3 = yline(mS + uC, 'Color', 'blue');
p4 = yline(mS - uC, 'Color', 'blue');
title(['Messergebnis: Mittelwert = ', num2str(mS), ' \pm ', num2str(sE), ' V, Spannung = ', num2str(mean(Spannung)), ' \pm ', num2str(uRel), '%'])

% Legende einfügen
h = legend([p1, p2, p3], "Messwerte", "Mittelwert", "Unsicherheit Typ C", 'Location', 'northeast');
hold off


Abbildung 16 zeigt das Ergebnis der Berechnung.

Abb. 16: Mess- und Vertrauensbereich


Kalibrierung des Sensors

Der Sensor arbeitet bereits ohne umfangreiche Kalibrierung sehr zuverlässig. Anhand der in Zustand Nass gesammelten Daten wurde gezeigt, dass bei Werten unterhalb 1.8V Niederschlag vorliegt. Somit lässt sich ein Bereich von 5V bis 1.8V festgelegt, in dem kein Niederschlag detektiert wird. Werte unterhalb von 1.8V zeigen das Vorhandensein von Niederschlag an. Mit dieser kleinen Kalibrierung können bereits zuverlässige Ergebnisse hinsichtlich der Niederschlag Erkennung erzielt werden.

Versuchsdurchführung mit einer dynamischen Regen-Simulation

Nachdem der Mess- und Vertrauensbereich bestimmt war, konnte ein umfassender Versuch durchgeführt werden. Der Versuch erstreckte sich über 20 Sekunden. Zu Beginn wurde kein Niederschlag simuliert. Ab der 5. Sekunde wurde Regen simuliert, und ab der 15. Sekunde wurde erneut kein Niederschlag mehr simuliert. Das Ergebnis ist in der folgenden Abbildung zusehen:

Abb. 17: Sensorkennlinie gefiltert (Regen Simulation)


Für das Ergebnisvideo wurde nochmal ein ausführlicherer Versuch aufgezeichnet, bei dem der Sensor bei einer unbeständigen Niederschlagsmenge zwischen durch wenn die Kontaktflächen frei von Wassertropfen waren kein Niederschlag gemessen. Die Thematik ist in dem Video zu sehen und in der Versuchsbeobachtung und Auswertung der Versuche noch einmal näher beschrieben.

Versuchsbeobachtung

Der Versuch zu der dynamischen Regen-Simulation zeigt, dass der Sensor den Niederschlag zuverlässig misst. Dabei fällt auf, dass die auch ohne Filterung des Signals möglich ist. Der Filter hilft dabei Peaks in den Messwerten abzufangen und zu glätten. Die Messwerte ohne Niederschlag befinden sich sehr nahe an 5V und die Messwerte bei Niederschlag liegen im Mittel bei etwas mehr 1V, was zuvor im Zustand Nass ermittelt wurde. Da sich der Messwert mit jedem neuen Tropfen oder jedem Tropfen der von Sensor fließt teilweise stark verändert, geht der Buzzer immer wieder an und aus. Die lässt sich nicht vermeiden, aufgrund der Unbeständigkeit der Wassertropfen. Die angeschlossenen LEDs hingegen, zeigen zuverlässig an wenn keine Niederschlag (Grüne LED leuchtet) und wenn Niederschlag (Rote LED leuchtet) vorliegt. Kritisch zu bemerken ist, dass es schwer abzuschätzen ist wie sich der Sensor außerhalb der Simulation verhält. In dem Ergebnisvideo wird dies noch deutlicher. Bleibt ein Wassertropfen auf dem Sensor liegen, dann erkennt dieser weiterhin Niederschlag auch wenn keiner mehr da ist. Läuft ein Wassertropfen zu schnell runter, bevor in der Simulation ein weiterer Tropfen auf die Leiterbahn kommt, dann wird angezeigt, dass kein Niederschlag vorliegt obwohl Niederschlag stattfindet. Da sich Regen nur schwer simulieren lässt aufgrund der Unbeständigkeit, der Unterschiede in Tropfengröße und Regenmenge, sowie der Tatsache, dass der Sensor im oberen Anschlussbereich nicht nass werden sollte, sind die Gewinnung stichhaltiger Ergebnisse aus einer Niederschlagssimulation nur schwer erzielbar.

Auswertung

Die Messhypothese "Niederschlag lässt sich über den Grove Water Sensor feststellen" konnte bestätigt werden. Der Sensor liefert bereits ohne Filterung sehr zuverlässige Ergebnisse, wenn man den Messbereich und die Kalibrierung festlegt. Durch die Filterung des analogen Eingangssignals konnte die Abweichung vom Mittelwert auf . Die Messunsicherheit beträgt . Der Niederschlag konnte zuverlässig detektiert und visuell über die beiden LEDs ausgegeben werden. Da der Sensor keine harten Echtzeitanforderungen erfüllen muss ist eine leichte zeitliche Verzögerung aufgrund des Filters hinnehmbar. Gleichzeitig arbeitet der Sensor auch ohne großartige Filterung sehr zuverlässig, weshalb die Messwerte keine hohe Filterung benötigen. Mit einer Fensterbreite von 80, konnte somit ein guter Kompromiss gefunden werden, zwischen einer brauchbaren Filterung der Messwerte und einer kleinen zeitlichen Verzögerung. Dennoch müssen zwei Faktoren berücksichtigt werden, welche Auswirkung auf die Niederschlagserkennung haben in Form von Regen. 1. Bleibt Wasser auf dem Sensor liegen, dann wird permanent Niederschlag gemessen. 2. Ist der Niederschlag zu gering, dann springt Messwert des Sensors zwischen Niederschlag und kein Niederschlag hin und her.

Zusammenfassung und Ausblick

Zusammenfassung

Die Sensordaten zeigen, dass der Grove Water Sensor zuverlässig zwischen trockenem Zustand und dem Zustand Nass unterscheiden kann. Werte unterhalb von 1.8V bedeuten es liegt einen Niederschlag vor, während Werte zwischen 1.8V und 5V Aussagen, dass kein Niederschlag stattfindet. Diese Schwellenwerte wurden auf Basis der gemessenen Daten und der Kalibrierung des Sensors festgelegt.

Aus den Werten des Trocken Zustands und den Werten des Nassen Zustands lässt sich somit festhalten, dass gemessene Werte unter halb 1.8V darauf schließen lassen, dass es Niederschlag gibt. Im Bereich von 1.8V bis 5V liegt kein Niederschlag vor.

Diskussion der Ergebnisse

Die Sensordaten bestätigen, dass der Grove Water Sensor effektiv zwischen trockenem Zustand und Niederschlag unterscheidet. Die Filterung der Messdaten hat die Genauigkeit verbessert, indem sie Rauschen und Peaks minimiert hat. Es wurde festgestellt, dass kleine Wassertropfen höhere Werte liefern als größere Tropfen, was bei der Kalibrierung berücksichtigt werden muss. Die LEDs haben zuverlässig auf den Niederschlag reagiert. Der Niederschlag konnte somit erfolgreich detektiert werden.

Ausblick

Für zukünftige Arbeiten könnten weitere Verbesserungen der Sensorgenauigkeit erzielt werden, etwa durch eine genauere Kalibrierung oder den Einsatz zusätzlicher Sensorkomponenten. Damit könnten die zwei angesprochenen Faktoren berücksichtigt werden, in dem zum Beispiel überlegt wird mit welchen Methoden und Mitteln verhindert werden kann, dass die Wassertropfen anteilig auf dem Sensor liegen bleiben und so das Ergebnis verfälschen. Auch könnte überlegt werden, wie man bei verschiedenen Regenintensitäten den Sensor kalibrieren kann, um beispielsweise auch bei nur geringfügigem Niederschlag ein brauchbares Ergebnis erzielen zu können. Ebenso wäre es möglich die Niederschlagsmenge zu messen, um gewisse Grenzwerte festlegen zu können wie viel Prozent Niederschlag noch in Ordnung sind und ab wie viel Prozent reagiert werden muss. Zusätzlich könnte die Anwendung des Sensors auf verschiedene Flüssigkeiten ausgeweitet werden, um dessen Vielseitigkeit zu erhöhen. Der Grove Water Sensor ist für die Erkennung von Wasser optimiert. Im Rahmen dieser Ausarbeitung wurde nur mit Wasser gemessen. Interessant wäre es zu sehen wie der Sensor auf andere Flüssigkeiten wie Öl oder Chemikalien reagiert.

Selbstreflexion/Lessons learned

Während der Durchführung dieser Ausarbeitung gab es viele Erkenntnisse und Herausforderungen. Eine der wichtigsten Aufgaben war die Festlegung des Mess- und Vertrauensbereich und die Kalibrierung des Sensors. Somit konnten viele gewonnen Erkenntnisse aus dem Sommersemester 2024 noch einmal praktisch umgesetzt werden. Viele Themen die im Modul Signalverarbeitende Systeme gelehrt wurden, konnten praktisch angewendet und vertieft werden. Zudem konnte tiefergehend in die Messtechnik und in die Thematik Microcontroller und Arduino eingestiegen werden. Zusammenfassend bildet die Hausarbeit eine gelungene Zusammenführung von den gelehrten theoretischen und praktischen Inhalten und der Umsetzung in Eigenarbeit.

Ergebnisvideo

Das Ergebnisvideo wurde aufgenommen nachdem die drei Zustände Trocken, Nass und Niederschlag getestet wurden und der Messbereich anhand der gesammelten Daten festgelegt werden konnte. Die Simulation im Video wurde über einen Zeitraum von 60 Sekunden durchgeführt.

Ergebnisvideo Grove Water Sensor

Lernzielkrontrolle

Beantworten Sie in Ihrem Artikel die Lernzielkontrollfragen.

Literatur

[1] Reichelt: Grove Water Sensor Datenblatt. URL: https://cdn-reichelt.de/documents/datenblatt/A300/101020018_01.pdf, 14. Juli 2024
[2] HSHL Wiki: BSE Angewandte Informatik - SoSe24. URL: https://wiki.hshl.de/wiki/index.php/BSE_Angewandte_Informatik_-_SoSe24, 14. Juli 2024
[3] Mathworks: Beschreibung Simulink. URL: https://de.mathworks.com/products/simulink.html, 14. Juli 2024
[4] Docs.arduino: Beschreibung Arduino. URL: https://docs.arduino.cc/hardware/uno-rev3/, 14. Juli 2024
[5] HSHL Wiki: Steckbrett. URL: https://wiki.hshl.de/wiki/index.php/Steckbrett, 14. Juli 2024
[6] HSHL Wiki: LCD Modul. URL: https://wiki.hshl.de/wiki/index.php/LCD_Modul_16x02_I2C, 14. Juli 2024
[7] Seeedstudio: Bild Grove Water Sensor. URL: https://wiki.seeedstudio.com/Grove-Water_Sensor/, 21. Juli 2024
[8] Seeedstudio: Daten Grove Water Sensor. URL: https://www.mouser.com/datasheet/2/744/Seeed_101020018-1217524.pdf, 21. Juli 2024

Anhang


→ zurück zum Hauptartikel: BSE Angewandte Informatik SoSe24 | Hausarbeit SoSe24