UV-Sensor UVM30A: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
 
(46 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
[[Kategorie:Arduino]]
[[Kategorie:Arduino]]
[[Datei:UV-Sensor-UVM-30A 600x600.png|thumb|rigth|350px|Abb. 1: UV-Sensor UVM30A]]
[[Datei:UV-Sensor-UVM-30A 600x600.png|thumb|rigth|300px|Abb. 1: UV-Sensor UVM30A]]
{|class="wikitable"
{|class="wikitable"
|-
|-
Zeile 137: Zeile 137:
|+ style = "text-align: left"|  
|+ style = "text-align: left"|  
|-
|-
|[[Datei:Schaltplan vom UVM30A.png|thumb|rigth|450px|Abb. 2: Schaltplan]]
|[[Datei:Schaltplan vom UVM30A.png|thumb|rigth|450px|Abb. 3: Schaltplan]]
|[[Datei:Schaltplan von UVM30A .png|thumb|rigth|510px|Abb. 3: Anschlussplan]]
|[[Datei:Schaltplan von UVM30A .png|thumb|rigth|510px|Abb. 4: Anschlussplan]]
|}<br>
|}<br>
Der Versuchsaufbau zeigt ein Arduino Uno, ein LCD-Display, einen UV-Sensor (UVM30A) und einen Buzzer, die miteinander verbunden sind.  
Der Versuchsaufbau zeigt ein Arduino Uno, ein LCD-Display, einen UV-Sensor (UVM30A) und einen Buzzer, die miteinander verbunden sind.  
Zeile 172: Zeile 172:


=== Implementierung in Simulink ===
=== Implementierung in Simulink ===
 
In Abbildung 5 ist das Simulink-Modell dargestellt. Der Prozess beginnt mit dem Einlesen des analogen Eingangs A0. Das empfangene Digitalwort wird daraufhin umgewandelt und gefiltert. Das gefilterte Signal wird anschließend in einem Diagramm in einen UV-Index umgewandelt. Diese beiden Werte werden zur weiteren Verarbeitung an den Workspace übermittelt. Danach erfolgt die Ausgabe des UV-Index, und der Mittelwert des UV-Index wird über fünf Messwerte hinweg mit dem UV-Index verglichen, um zu prüfen, ob ein stabiles Signal vorliegt. Ist dies der Fall, wird ein akustisches Signal erzeugt. Weitere und detaillierte Informationen zum Modell sind hier zu finden:
[[Datei:Sensorverarbeitung UVM30A.png|thumb|rigth|800px|Abb. 5: Simulink-Modell der Sensorverarbeitung]]
==== Umwandlung des Digitalwortes in mV  ====
==== Umwandlung des Digitalwortes in mV  ====
Im Simulink-Modell wird das vom UV-Sensor gelesene Digitalwort in Millivolt (mV) umgewandelt. Der Sensorwert (ein 10-Bit-Digitalwert von 0 bis 1023 mit einer Referenzspannung von 5V) wird durch den Analog-Digital-Wandler (ADC) des Arduino erfasst. Um diesen Wert in mV umzurechnen, wird der folgende Schritt mit einem Gain durchgeführt:
Im Simulink-Modell wird das vom UV-Sensor gelesene Digitalwort in Millivolt (mV) umgewandelt. Der Sensorwert (ein 10-Bit-Digitalwert von 0 bis 1023 mit einer Referenzspannung von 5V) wird durch den Analog-Digital-Wandler (ADC) des Arduino erfasst. Um diesen Wert in mV umzurechnen, wird der folgende Schritt mit einem Gain durchgeführt:
Zeile 184: Zeile 185:


==== Kalibrierung der Spannungswerte in einen UV-Index ====
==== Kalibrierung der Spannungswerte in einen UV-Index ====
[[Datei:Korrelation zwischen UV-Index und Ausgangsspannung des Sensors.jpg|thumb|rigth|450px|Abb. 2: Korrelation zwischen UV-Index und Ausgangsspannung des Sensors [1]]]
[[Datei:Korrelation zwischen UV-Index und Ausgangsspannung des Sensors.jpg|thumb|rigth|450px|Abb. 6: Korrelation zwischen UV-Index und Ausgangsspannung des Sensors [1]]]
Für die Umwandlung wird eine Kennlinie benötigt, um die Beziehung zwischen der analogen Ausgangsspannung und der UV-Intensität zu beschreiben. Diese Kennlinie wird mithilfe der vom Hersteller gegebenen Daten erstellt und ist notwendig, um die Messwerte korrekt zu interpretieren. Für die Interpretation wird Simulink eine 1D-Lookuptabel verwendet, welche die unten genannten Werte enthält:
Für die Umwandlung wird eine Kennlinie benötigt, um die Beziehung zwischen der analogen Ausgangsspannung und der UV-Intensität zu beschreiben. Diese Kennlinie wird mithilfe der vom Hersteller gegebenen Daten erstellt und ist notwendig, um die Messwerte korrekt zu interpretieren. Für die Interpretation wird Simulink eine 1D-Lookuptabel verwendet, welche die unten genannten Werte enthält:
<div style="width:500px; height:170px; overflow:scroll; border: hidden">
% Werte für den 1-D Lookup-Table zur Umwandlung der Spannungswerte in den UV-Index
<syntaxhighlight lang="cpp" style="border: none; background-color: #EFF1C1; font-size:larger">
Output_Voltage = [0 225 320 405 500 605 700 790 875 975 1075 1160]; % Wert aus AD-Wandler [mV]
% Werte für den 1-D Lookup-Table zur Umwandlung der Spannungswerte in den UV-Index
UV_Index = [0 1 2 3 4 5 6 7 8 9 10 11]; % UV-Wert [1]
Output_Voltage = [0 225 320 405 500 605 700 790 875 975 1075 1160]; % Wert aus AD-Wandler [mV]
UV_Index = [0 1 2 3 4 5 6 7 8 9 10 11]; % UV-Wert [1]


</syntaxhighlight>
</div>
Der Versuchsaufbau wird durch einen Schaltplan (Abb. 2), Anschlussplan (Abb. 3) und Foto des Aufbaus (Abb. 4) dokumentiert.<br clear=all>
'''Verwendete Toolbox:''' DSP System Toolbox, Simulink Support Package für Arduino Hardware
'''Verwendete Toolbox:''' DSP System Toolbox, Simulink Support Package für Arduino Hardware


==== Summeransteuerung bei stabilen Signal ansteuern (Diff < 0.01) ====
==== Summeransteuerung bei stabilen Signal ansteuern (Diff < 0.01) ====


Im Simulink-Modell wird der UV-Sensorwert vom analogen Pin A0 gelesen und der vorherige Wert mit einem Memory Block gespeichert. Ein MATLAB Function Block berechnet die Differenz zwischen dem aktuellen und dem vorherigen Wert. Wenn die Differenz kleiner als 0.01 ist, wird der Ausgang auf 0.02 gesetzt, andernfalls auf 0. Dieser Ausgang steuert den Buzzer am digitalen Pin D13.
Bei einem stabilen Signal (geringe Schwankungen des UV-Index) wird zusätzlich ein Buzzer aktiviert. Das Modell ermöglicht somit eine Überwachung und eine akustische Benachrichtigung basierend auf den gemessenen UV-Index-Werten. Diesbezüglich wird der Mittelwert über fünf Messwerte gebildet, dazu werden mehrere Memory Blöcke verknüpft, die Ergebnisse summiert und durch die Anzahl der Messwerte dividiert. Anschließend wird die Differenz vom UV-Index und dem Mittelwert berechnet. Ist die Abweichung des UV-Index kleiner als 0,2 wird das Signal als stabil betrachtet und der Ausgang wird auf HIGH gesetzt. Dadurch wird die digitale Pin D13 auf 1 bzw. High gesetzt, was dazu führt das ein akustisches Signal vom Buzzer erzeugt wird.


=== Versuchsdurchführung ===
=== Versuchsdurchführung ===
[[Datei:Versuchsaufbau UVM30A.png|thumb|right|450px|Abb. 4: Foto des Versuchsaufbaus]]
[[Datei:Versuchsaufbau UVM30A.png|thumb|right|450px|Abb. 7: Foto des Versuchsaufbaus]]
Der Versuchsaufbau wird durch einen Schaltplan (Abb. 3), Anschlussplan (Abb. 4( und Foto des Aufbaus (Abb. 7) dokumentiert.
 
Die Durchführung des Experiments beginnt mit dem Flashen des Arduino Uno R3. Nachdem alle relevanten Daten eingestellt wurden, wird die Messung gestartet. Dazu wird der Versuchsaufbau in die Sonne platziert und für mehrere Sekunden nicht bewegt, um statische Parameter zu gewährleisten. Anschließend wird eine weitere Messung durchgeführt, bei der die Dynamik untersucht wird. Hierzu wird ein Blatt Papier verwendet, um den Sensor abwechselnd zu bedecken und freizulegen. Das Ziel dieser zweiten Messung ist die Analyse der Einstellung des Medianfilters, insbesondere ob das Fenster groß genug gewählt wurde oder ob Anpassungen erforderlich sind, um ein verwertbares Signal zu erhalten.
Die Durchführung des Experiments beginnt mit dem Flashen des Arduino Uno R3. Nachdem alle relevanten Daten eingestellt wurden, wird die Messung gestartet. Dazu wird der Versuchsaufbau in die Sonne platziert und für mehrere Sekunden nicht bewegt, um statische Parameter zu gewährleisten. Anschließend wird eine weitere Messung durchgeführt, bei der die Dynamik untersucht wird. Hierzu wird ein Blatt Papier verwendet, um den Sensor abwechselnd zu bedecken und freizulegen. Das Ziel dieser zweiten Messung ist die Analyse der Einstellung des Medianfilters, insbesondere ob das Fenster groß genug gewählt wurde oder ob Anpassungen erforderlich sind, um ein verwertbares Signal zu erhalten.


Zeile 209: Zeile 206:
Als Referenz werden Wetterdaten verwendet aus der die UV-Intensität hervorgeht, um die Kalibrierung des UVM30A durchzuführen. Diese Daten sind präzise und werden regelmäßig gewartet und überprüft, um die Genauigkeit zu gewährleisten.
Als Referenz werden Wetterdaten verwendet aus der die UV-Intensität hervorgeht, um die Kalibrierung des UVM30A durchzuführen. Diese Daten sind präzise und werden regelmäßig gewartet und überprüft, um die Genauigkeit zu gewährleisten.


Die Messung erfolgte am 18.07.2024 in Stirpe mit der Postleitzahl 59597. Laut dem Wetterdienst sollte der UV-Index zwischen 12:00 Uhr und 14:00 Uhr von 4 auf 3 fallen. Da die Messung um 12:40 Uhr stattfand, wurde der '''Referenzwert auf einen UV-Index von 3,2 festgelegt''' [4].




[[Datei:Simulink Sharp.png|thumb|rigth|450px|Abb. 5: Simulink-Modell]]
Das Modell zur Datenverarbeitung wurde gemäß Abb. 5 in Simulink aufgebaut. Die Messdaten wurden aufgezeichnet. Ein Video der Versuchsdurchführung findet sich hier.
Das Modell zur Datenverarbeitung wurde gemäß Abb. 5 in Simulink aufgebaut. Die Messdaten wurden aufgezeichnet. Ein Video der Versuchsdurchführung findet sich hier.


'''Modelleinstellungen:''' Arduino Uno, Solver: Fixed-step, discrete, Abtastrate: 0,001 s
'''Modelleinstellungen:''' Arduino Uno, Solver: Fixed-step, discrete, Abtastrate: 0,01 s


=== Messprozess und Messunsicherheit===
=== Messunsicherheit===
In diesem Abschnitt wird die Messunsicherheit und die Standardunsicherheiten bestimmt, um die Genauigkeit und Vertrauenswürdigkeit der Messungen zu bewerten.
In diesem Abschnitt wird die Messunsicherheit und die Standardunsicherheiten bestimmt, um die Genauigkeit und Vertrauenswürdigkeit der Messungen zu bewerten.
==== Standardunsicherheit Typ B ====
==== Standardunsicherheit Typ B ====
Zeile 233: Zeile 229:
Hier ist der MATLAB-Code für die Berechnung des Mittelwerts:<br>
Hier ist der MATLAB-Code für die Berechnung des Mittelwerts:<br>


<div style="width:700px; height:170px; overflow:scroll; border: hidden">
% Gegebene Spannungswerte in mV für die jeden UV-Index von 0 bis 11 von dem Sensor UVM30A
<syntaxhighlight lang="cpp" style="border: none; background-color: #EFF1C1; font-size:larger">
output_voltage = [0, 225, 320, 405, 500, 605, 700, 790, 875, 975, 1075, 1160]; % Wert aus AD-Wandler [mV]
% Gegebene Spannungswerte in mV für die jeden UV-Index von 0 bis 11 von dem Sensor UVM30A
% Differenzen berechnen
output_voltage = [0, 225, 320, 405, 500, 605, 700, 790, 875, 975, 1075, 1160]; % Wert aus AD-Wandler [mV]
differences = diff(output_voltage);
 
% Mittelwert der Differenzen berechnen
% Differenzen berechnen
mean_difference = mean(differences);
differences = diff(output_voltage);
% Mittelwert ausgeben
disp('Der Mittelwert der Differenzen ist:');
disp(mean_difference);


% Mittelwert der Differenzen berechnen
mean_difference = mean(differences);


% Mittelwert ausgeben
disp('Der Mittelwert der Differenzen ist:');
disp(mean_difference);
</syntaxhighlight>
</div>
<br clear=all>


Dadurch ergibt sich eine kombinierte Standardunsicherheit von:  
Dadurch ergibt sich eine kombinierte Standardunsicherheit von:  
Zeile 259: Zeile 248:


====Standardunsicherheit TYP A und C====
====Standardunsicherheit TYP A und C====
Zuletzt erfolgt die Berechnung der kombinierten Standardunsicherheit Typ C die anhand einer Messung erfolgt und hier erläutert wird:
Die Berechnung der kombinierten Standardunsicherheit Typ C erfolgt abschließend unter Berücksichtigung eines Konfidenzniveaus von 68,3%, was einer Standardabweichung (1𝜎) entspricht. Diese Berechnung basiert auf den vorliegenden Messdaten, die im Folgenden detailliert erläutert werden.
<div class="mw-collapsible mw-collapsed">
<div class="mw-collapsible mw-collapsed">
Hier ist der Matlab-Code:
Hier ist der Matlab-Code:
<div style="width:700px; height:700px; overflow:scroll; border: hidden">
<div style="width:1200px; height:700px; overflow:scroll; border: hidden">
<syntaxhighlight lang="cpp" style="border: none; background-color: #EFF1C1; font-size:larger">
<syntaxhighlight lang="cpp" style="border: none; background-color: #EFF1C1; font-size:larger">
%****************************************************************
%****************************************************************
Zeile 282: Zeile 271:
% Bemerkung      :  -                                        *
% Bemerkung      :  -                                        *
%                                                              *
%                                                              *
% Letzte Änderung : 15.07.2024                                  *
% Letzte Änderung : 18.07.2024                                  *
%                                                               *
%****************************************************************
clc; clear all, close all;
 
%% Messdaten laden  
%% Messdaten laden  
load('Vertrauensbereich.mat');
load('Data_statisch.mat');
data = gefiltertes_Signal.data; % Annahme: gefiltertes_Signal.data ist die 3D-Matrix mit den Messwerten
 
% Anzahl der Messwerte bestimmen
n = numel(gefiltertes_Signal.data(1,1,:)); % Anzahl der Messungen


% Messwerte in mV (falls nötig, hier anpassen)
% Messwerte in mV (falls nötig, hier anpassen)
Rm = gefiltertes_Signal.data(1,1,:);  
for i= 1:n
    Rm(i) = gefiltertes_Signal.data(1,1,i);  
end


% Anzahl der Messwerte bestimmen
n = numel(Rm);  % Anzahl der Messungen


%% Bester Schätzwert des Widerstandes berechnen
%% Bester Schätzwert des Widerstandes berechnen
Zeile 311: Zeile 304:
uA = s * t / sqrt(n);
uA = s * t / sqrt(n);


%% Standardunsicherheit Typ B bestimmen (siehe Oben)
%% Standardunsicherheit Typ B bestimmen (angenommen)
uB = 105.56;  % Wert für Unsicherheit Typ B
uB = 105.459;  % Angenommener Wert für Unsicherheit Typ B


%% Kombinierte Standardunsicherheit Typ C bestimmen
%% Kombinierte Standardunsicherheit Typ C bestimmen
Zeile 326: Zeile 319:
uRel = (uAbs / R) * 100;
uRel = (uAbs / R) * 100;


%% Ergebnisdarstellung
%% Ergebnisdarstellung TYP C
figure;
figure;
yline(R, 'Color', 'k');
yline(R, 'Color', 'k');
xlim([0 3200])
xlim([0 3200])
grid on
hold on;
hold on;
plot([0 n], [R+uC R+uC], '--b', [0 n], [R-uC R-uC], '--b');
plot([0 n], [R+uC R+uC], '--b', [0 n], [R-uC R-uC], '--b');
Zeile 337: Zeile 331:
xlabel('Anzahl der Messwerte');
xlabel('Anzahl der Messwerte');
ylabel('Ausgangsspannung in mV');
ylabel('Ausgangsspannung in mV');
title(['Messergebnis (Mittelwert = ', num2str(R), ', Unsicherheit = \pm', num2str(uC), ' mV)']);
title(['Messergebnis (Mittelwert = ', num2str(R), ', Unsicherheit = \pm', num2str(uC), ' mV, ', num2str(uRel), '%)']);


% Legende erstellen
% Legende erstellen
legend({'Mittelwert', 'Unsicherheit Typ C'}, 'Location', 'northwest');
legend({'Mittelwert', 'Unsicherheit Typ C'}, 'Location', 'northwest');
%% Ergebnisdarstellung
figure;
hold on;
yline (3.2)
xlim([0 3200])
grid on
plot(1:n, reshape(UV_Index.data(1,1,:), 1, []));  % Um die Daten zu plotten, in einen Vektor umformen
% Beschriftungen hinzufügen
xlabel('Anzahl der Messwerte');
ylabel('Ausgangsspannung in mV');
title(['Messwerte in Vergleich zum Referenzwert']);
% Legende erstellen
legend({'UV-Index','Referenzwert'}, 'Location', 'northwest');
</syntaxhighlight>
</syntaxhighlight>
</div>
</div>
<br clear=all>
<br clear=all>
</div>
</div>
Das Ergebnis lautet: ....
Die Auswertung zeigt dieses Diagramm:
[[Datei:Unsicherheit.jpg|thumb|left|700px|Abb. 8: Kombinierte Standardunsicherheit Typ C]]
<br clear=all>


=== Versuchsbeobachtung ===
=== Versuchsbeobachtung ===
{| class="mw-datatable"
[[Datei:Statische Messwerte.png|thumb|rigth|450px|Abb. 9: Darstellung von statischen Messwerten des UVM30A-Sensors]]
! style="font-weight: bold;" |
[[Datei:Dynamische Messdaten.png|thumb|rigth|450px|Abb. 10: Darstellung von dynamischen Messwerten des UVM30A-Sensors]]
! style="font-weight: bold;" |
 
|+ style = "text-align: left"|
 
|-
Zunächst wurde eine statische Messung (siehe Abbildung 9) draußen unter konstanten Bedingungen durchgeführt. Hierbei wurde das Sensorsignal kontinuierlich erfasst und ausgewertet. Anschließend wurde eine dynamische Messung (siehe Abbildung 10) durchgeführt, bei der der Sensor zeitweise abgedeckt wurde, um die Auswirkungen auf das Sensorsignal zu beobachten.
|[[Datei:Sharp Ergebnis 1.png|thumb|rigth|450px|Abb. 6: Darstellung des Rohsignals des IR-Entfernungssensors (rote Kurve)]]
 
|[[Datei:Sharp Ergebnis 2.png |thumb|rigth|450px|Abb. 7: Darstellung von dynamischen Messwerten des IR-Entfernungssensors]]
Während der '''statischen Messung''' zeigte das gefilterte Signal (blau) eine relativ konstante Spannung, was auf stabile Umweltbedingungen hinweist. Im ungefilterten Signal (orange) waren gelegentlich Ausreißer zu erkennen, die durch den Medianfilter jedoch erfolgreich unterdrückt wurden. Dies zeigt, dass der Medianfilter effektiv in der Lage ist, Störungen und kurzzeitige Änderungen in der Messumgebung zu glätten und somit ein stabiles Ausgangssignal zu liefern.
|}<br>
 
Die '''dynamische Messung''' offenbarte deutliche Schwankungen im gefilterten Signal, die direkt mit dem Abdecken und Freilegen des Sensors korrelierten. Beim Abdecken des Sensors sank die Spannung deutlich, was zu einer Reduktion des UV-Index führte. Nach Entfernen der Abdeckung stieg die Spannung wieder an und stabilisierte sich auf dem vorherigen Niveau. Dies zeigt, dass das System schnell auf Änderungen der UV-Exposition reagiert und die Übergänge im gefilterten Signal relativ abrupt und präzise den tatsächlichen Abdeckungszustand des Sensors widerspiegeln.


Das Signal des Sensors weist alle 40&thinsp;ms systematische Ausreisser auf (vgl. Abb. 6, rote Kurve).
Bei '''beiden Messungen''' wurden im ungefilterten Signal gelegentliche Spitzen und Schwankungen beobachtet, die vermutlich auf Störungen oder kurzzeitige Änderungen in der Messumgebung zurückzuführen sind. Diese Ausreißer wurden durch den Medianfilter jedoch effektiv geglättet, was die Zuverlässigkeit des gefilterten Signals erhöhte. Es sind keine offensichtlichen systematischen Messabweichungen erkennbar, was darauf hinweist, dass das gefilterte Signal im Allgemeinen den erwarteten Mustern basierend auf den Umgebungsbedingungen folgt. Zudem wurde festgestellt, dass der Messwert stark von der Positionierung zur Energiequelle (Sonne) abhängig ist. Da weder im Datenblatt noch in anderen Quellen genaue Angaben zur Positionierung vorhanden sind, wurde der Sensor wie im Ergebnisvideo gezeigt positioniert.


== Auswertung==
== Auswertung==
Die Messhypothese wurde verworfen. Der Sensor weist systematische Messwertausreisser auf.
[[Datei:Referenzwert.jpg|thumb|rigth|450px|Abb. 11: Gemessener UV-Index in Zusammenhang mit dem Referenzwert von 3.2]]
Die Messhypothese wurde abgelehnt, da der Sensor sowohl Ausreißer in den Messwerten als auch eine hohe relative Messunsicherheit aufweist. Die relative Messunsicherheit von 51,09% deutet darauf hin, dass die Unsicherheit im Verhältnis zum gemessenen Wert erheblich ist. Für präzise und zuverlässige Messergebnisse strebt man in der Praxis eine geringere relative Messunsicherheit an. Der Unsicherheitsbereich erstreckt sich daher von etwa 307,3435 mV bis 518,2621 mV (Mittelwert ± Unsicherheit), wie in Abbildung 8 bei einem Konfidenzniveau von 68% dargestellt.
 
Die Messausreißer, wie in Abbildung 9 zu sehen ist, können durch die Anwendung eines Signalfilters eliminiert werden. Hierzu wird ein Medianfilter mit einer Fenstergröße von 20 Werten verwendet, um eine Verzögerung von weniger als 0,2 Sekunden zu gewährleisten. Dies stellt ein sehr gutes dynamisches Verhalten des Sensors sicher und liefert ein klares Signal. Eine Reduzierung der Fenstergröße auf 10 würde zwar die Dynamik erhöhen, jedoch mehr Messausreißer einschließen. Daher wird der Medianfilter auf eine Fenstergröße von 20 festgelegt.
 
In Abbildung 11 ist der umgewandelte Spannungswert in einen UV-Index abgebildet, zusätzlich zum Referenzwert für den Vergleich. Aus der Messung geht hervor, dass der Referenzwert nahe an dem gemessenen und umgewandelten Wert liegt. Dies zeigt, dass der Sensor für die meisten Anwendungen ausreichend genau ist. Für Anwendungen, die jedoch präzise Werte erfordern, wird ein anderer Sensor empfohlen, da die Messunsicherheit des aktuellen Sensors zu hoch ist.
{| 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 || Die Intensität des ultravioletten Lichts muss mittels UV-Sensor UVM30A, 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 die Intensität des ultravioletten Lichts 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. || <span style="color:green">☑</span>
|-
| 8 || Das Sensorsystem muss die Intensität und den dazugehörigen [https://www.dwd.de/DE/leistungen/gefahrenindizesuvi/gefahrenindexuvi.html UV Index] auf dem [[LCD_Modul_16x02_I2C|LCD-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 der Kapitel
Im Rahmen dieses Projekts wurde der UV-Sensor UVM30A verwendet, um die Intensität ultravioletten Lichts zu messen und den entsprechenden UV-Index zu bestimmen. Der Sensor nutzt den photoelektrischen Effekt, um UV-Licht in eine analoge Spannung umzuwandeln, die dann mittels eines Arduino Uno und MATLAB/Simulink verarbeitet wird. Die gemessenen Werte werden auf einem LCD-Display angezeigt, und bei stabilen UV-Index-Werten wird ein akustisches Signal durch einen Buzzer aktiviert.
 
Der Aufbau umfasst die Verkabelung des UV-Sensors und des Buzzers mit dem Arduino Uno. Die Verarbeitung der Sensorwerte erfolgt in Simulink, wo die gemessenen Spannungswerte in den UV-Index umgerechnet werden. Die Filterung der Signale mittels eines Medianfilters trägt dazu bei, Ausreißer zu minimieren und ein stabiles Messsignal zu gewährleisten.
 
* Diskussion der Ergebnisse
* Diskussion der Ergebnisse
Die Messergebnisse zeigen, dass der UVM30A-Sensor für viele Anwendungen ausreichend genau ist, aber eine hohe relative Messunsicherheit aufweist. Diese Unsicherheit ist größtenteils auf die Genauigkeit der Spannungsmessung und die Empfindlichkeit des Sensors gegenüber Umgebungsbedingungen, insbesondere der Positionierung zur Sonne, zurückzuführen.
Durch die Anwendung eines Medianfilters mit einer Fenstergröße von 20 wurde die Dynamik des Sensors optimiert und eine Verzögerung von weniger als 0,2 Sekunden erreicht. Eine Reduzierung der Fenstergröße auf 10 würde zwar die Reaktionszeit verbessern, aber mehr Messausreißer einschließen, was die Genauigkeit der Messungen beeinträchtigen könnte.
Die Berechnung der Standardunsicherheit ergab einen Wert von etwa 105.459 mV, was die Gesamtgenauigkeit der Messungen berücksichtigt. Für zukünftige Anwendungen oder genauere Messungen wird empfohlen, einen Sensor mit einer niedrigeren Messunsicherheit zu verwenden.
* Ausblick
* Ausblick
Für zukünftige Projekte könnten Verbesserungen in der Positionierung des Sensors sowie in der Signalverarbeitung implementiert werden, um die Messgenauigkeit weiter zu erhöhen.
Darüber hinaus könnte die Entwicklung einer Kalibrierungsmethode dazu beitragen, die Messergebnisse des UVM30A-Sensors präziser mit Referenzwerten zu vergleichen und mögliche Abweichungen zu minimieren. Hierbei könnte die Verwendung eines präziseren Sensors oder einer Lichtquelle, bei der der UV-Index eingestellt werden kann, helfen, die Messergebnisse des Sensors zu verifizieren und gegebenenfalls zu kalibrieren.
* Selbstreflexion/Lessons learned
* Selbstreflexion/Lessons learned
Während des Projekts wurden wesentliche Erkenntnisse in den Bereichen Signalverarbeitung und Bewertung der Messgenauigkeit gewonnen. Die Auswahl und Kalibrierung der Sensoren erwiesen sich als besonders relevant und sollten sorgfältig vor ihrer Verwendung evaluiert werden.


== Ergebnisvideo ==
== Ergebnisvideo ==
Binden Sie hier Ihr Ergebnisvideo ein.
Im Ergebnisvideo wird das Simulink-Modell, das auf einem Arduino implementiert ist, demonstriert. Die Kennlinie zeigt deutlich, dass ein stabiler UV-Index bzw. Messwert vorliegt, was zusätzlich durch das akustische Signal bestätigt wird. Dieses Signal dient als Indikator für die Stabilität des gemessenen Wertes. Der Messaufbau entspricht den angegebenen Spezifikationen und ist so eingerichtet, dass der Sensor direkt zur Sonne ausgerichtet ist, um präzise Messungen des UV-Index zu gewährleisten.
 
[[Datei:Versuchsdurchführung.mp4|thumb|rigth|450px|Darstellung der Versuchsdurchführung]]
Anleitung: [[Videos_einbinden|Videos im Wiki einbinden]]


== Lernzielkrontrolle ==
== Lernzielkrontrolle ==
Zeile 395: Zeile 450:
# Welche Fehlereinflüsse hat die Messung? Muss z.&#8239;B. die Temperatur der Messung berücksichtigt werden?
# Welche Fehlereinflüsse hat die Messung? Muss z.&#8239;B. die Temperatur der Messung berücksichtigt werden?
|}
|}
'''Hinweis:''' Sämtliche Lernzielkontrollfragen werden in dem Wiki-Artikel und nicht direkt hier beantwortet.


== Literatur ==
== Literatur ==
Zeile 400: Zeile 456:
* [1] W<span style="font-variant:small-caps">iltronics</span>:  UVM30A. URL: https://www.wiltronics.com.au/wp-content/uploads/datasheets/ARD2-2062.pdf, 10. Juli 2024
* [1] W<span style="font-variant:small-caps">iltronics</span>:  UVM30A. URL: https://www.wiltronics.com.au/wp-content/uploads/datasheets/ARD2-2062.pdf, 10. Juli 2024
* [2] W<span style="font-variant:small-caps">ikipedia</span>:  Photoelektrischer Effekt. URL: https://de.wikipedia.org/wiki/Photoelektrischer_Effekt, 10. Juli 2024
* [2] W<span style="font-variant:small-caps">ikipedia</span>:  Photoelektrischer Effekt. URL: https://de.wikipedia.org/wiki/Photoelektrischer_Effekt, 10. Juli 2024
* [3] E<span style="font-variant:small-caps">dmund</span>, S.: ''Industriesensorik: Automation, Messtechnik, Mechatronik''. Würzburg: Springer-Verlag, 2. Auflage 2016, Seite 321&#322;ff. ISBN: 978-3-8343-6211-7<br>
* [3] E<span style="font-variant:small-caps">dmund</span>, S.: ''Industriesensorik: Automation, Messtechnik, Mechatronik''. Würzburg: Springer-Verlag, 2. Auflage 2016, Seite 321ff. ISBN: 978-3-8343-6211-7<br>
* [4] W<span style="font-variant:small-caps">etter.com</span>: UV-Index heute in Stirpe. URL: https://www.wetter.com/uv-index/deutschland/bohmte/stirpe/DE0001299023/, 18. Juli 2024
 


== Anhang ==
* Datenblätter
* 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, 10:17 Uhr

Abb. 1: UV-Sensor UVM30A
Autor: Oliver Scholze
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

Der Sensor im UVM30A ist ein photodetektiver Sensor, der UV-Licht im Bereich von 200 nm bis 370 nm erfasst. Dieser photodetektiver Sensor besteht aus einem Halbleitermaterial, das bei Bestrahlung mit UV-Licht Elektronen freisetzt [1]. Diese freigesetzten Elektronen erzeugen einen elektrischen Strom, der proportional zur Intensität des einfallenden UV-Lichts ist, diese wird auch als photoelektrischer Effekt bezeichnet. Dieser Strom wird dann in eine analoge Spannung umgewandelt, die vom Sensor ausgegeben wird [2]. Die analoge Ausgangsspannung wird mithilfe des Diagramms, aus dem Datenblatt, in einen UV-Index umgewandelt [1].

Aufgabenstellung

Messen Sie Intensität eines gegebenen ultravioletten Lichts. Zeigen Sie auf dem Display an, welchem UV Index die Intensität entspricht.

  • Thema/Fragestellung: Messung der UV-Intensität erfolgt mit dem Sensor UVM30A.
  • Hypothese: Die Wellenlängen lassen sich im Bereich von 200 nm-370 nm fehlerfrei messen.
  • Einordnung in den Lehrplan Für die Aufgabe werden Inhalte aus der Vorlesung Angewandte Informatik und Signalverarbeitende Systeme benötigt, da somit die Implementierung/ Durchführung und die Bewertung des Ergebnisses erfolgen kann.

Projektbeschreibung

In diesem Projekt wird eine Schaltung mit dem UV-Sensor UVM30A und einem Arduino aufgebaut. Die UV-Intensität wird gemessen, die Daten werden verarbeitet und die Ergebnisse auf einem LCD-Display angezeigt. Dabei wird der UV-Index ermittelt und ausgegeben. Dazu werden folgende Bauteile benötigt:

Tabelle 2: Materialliste
# Anzahl Material
1 1 PC mit MATLAB/Simulink R2023b
2 1 UV-Sensor - UVM30A
3 1 Arduino Uno R3
4 1 Streckbrett
5 5 Jumper Kabel, männlich/männlich, 20 cm
6 1 LCD-Display mit I2C
7 1 Buzzer

Beschreibung Funktionsweise der verwendeten Hard- und Software

  • Arduino Uno R3: Der Arduino Uno R3 ist das Herzstück des Systems und dient als Mikrocontroller.
  • UVM30A: Der Sensor erzeugt ein elektrisches Signal, dessen Spannung von der Intensität der UV-Strahlung abhängt, die auf den Sensor trifft.
  • Simulink R2023b: Erstellung des Programms zur Ansteuerung und Auswertung der angeschlossenen Hardware (UVM30A und LCD Display).
  • LCD-Display mit I2C: Das LCD-Display wird verwendet, um die gemessenen UV-Intensitätswerte anzuzeigen.
  • Steckbrett: Ein Steckbrett dient zum schnellen und flexiblen Aufbau und Testen von elektronischen Schaltungen ohne Löten.
  • Jumperkabel: Jumperkabel werden verwendet, um Verbindungen zwischen verschiedenen Komponenten auf einem Steckbrett oder zwischen einem Steckbrett und einem Arduino herzustellen.
  • Buzzer: Der Buzzer erzeugt akustische Signale durch schnelle Vibrationen oder Schwingungen eines Membransystems, die als Töne wahrgenommen werden können.

Technische Daten

Die technischen Daten des Sensors geben Aufschluss über den Einsatzbereich und die Anforderungen, die erfüllt werden müssen, um ihn in die Messumgebung zu integrieren.

Messbereich 200-370 nm
Versorgungsspannung 3 V .. 5 V
Versorgungsstrom 0.06 mA, maximal 0.1 mA
Genauigkeit +-1 UV Index
Gewicht 13 g
Getriebe Kunststtoff
Arbeitstemperatur -20 °C .. +85 °C
Abmessungen 34 mm x 13 mm x 7 mm

[1]

Pinbelegung

In diesem Abschnitt wird die Pinbelegung des UVM30A Sensors beschrieben.

Pin Belegung Signal
1 Versorgungsspannung VCC 5 V
2 Analoger Ausgang 0 V .. 1.16 V
3 Masse (GND) 0 V

[1]

Funktionsweise Primärsensor

In diesem Kapitel werden die Grundlagen und die Funktionsweise des Primärsensors beschrieben.

Abb. 2: Messschaltung des UVM30A

Grundlagen (photoelektrische Effekt)

Der photoelektrische Effekt lässt sich in verschiedene Funktionsweisen unterteilen. In diesem Fall ist der Sperrschichtphotoeffekt am relevantesten. Hierbei wird ein pn-Halbleiter und die daraus resultierende Sperrschicht verwendet. Wenn externe Energie auf den pn-Halbleiter einwirkt, werden Ladungsträgerpaare in der Sperrschicht freigesetzt. In der dort herrschenden Raumladungszone werden die Ladungsträger durch das bestehende elektrische Feld beschleunigt und getrennt. Dadurch wird die Rekombination verhindert und die Photoempfindlichkeit erhöht. Dies führt zur Entstehung einer elektrischen Spannung, die entnommen werden kann (photovoltaischer Effekt) [3].

Primärsensor UVM30A

Photoelemente arbeiten nach dem Sperrschichtphotoeffekt. Im Normalbetrieb, siehe Abbildung 2, wird das Photoelement mit einem ausgewählten Widerstand parallel geschaltet. Der erzeugte Photonenstrom (I_FE) kann durch den Widerstand (R_L) in eine Spannung umgewandelt werden:

Der geringe Strom, der von der Photodiode erzeugt wird, wird durch einen Vorverstärker verstärkt. Dieser Vorverstärker ist ein Operationsverstärker, der das schwache Signal auf ein nutzbares Niveau bringt. Die erzeugte Spannung kann beispielsweise von einem Mikrocontroller verarbeitet werden, wodurch die Schaltung als optischer Empfänger, Luxmeter oder Leuchtdichtemesser verwendet werden kann [3].

Versuchsaufbau und Durchführung

In diesem Kapitel wird der Versuchsaufbau , die Implementierung in Simulink und die Versuchsbeobachtung beschrieben. Relevante Themen wie Messunsicherheit, Filterung und Referenzenwerte werden ebenfalls behandelt.

Versuchsaufbau

Abb. 3: Schaltplan
Abb. 4: Anschlussplan


Der Versuchsaufbau zeigt ein Arduino Uno, ein LCD-Display, einen UV-Sensor (UVM30A) und einen Buzzer, die miteinander verbunden sind.

Verkabelung

1.LCD-Display:

  • VCC und GND des Displays sind mit 5V und GND des Arduino verbunden.
  • SDA und SCL des Displays sind mit den entsprechenden Pins am Arduino verbunden (A4 und A5 für I2C-Kommunikation).

2.UVM30A UV-Sensor:

  • VCC und GND des Sensors sind mit 5V und GND des Arduino verbunden.
  • Der Ausgangspin des Sensors ist mit einem analogen Pin des Arduino (A0) verbunden.

3.Buzzer:

  • Der positive Anschluss des Buzzers ist mit einem digitalen Pin des Arduino (D13) verbunden.
  • Der negative Anschluss des Buzzers ist mit GND verbunden.

Funktionsweise

1. UV-Sensor Messung: Der UVM30A UV-Sensor misst die UV-Strahlung und gibt eine entsprechende Spannung aus, die am analogen Pin des Arduino eingelesen wird.

2. Datenverarbeitung mit Simulink: Die eingelesenen Spannungswerte werden an Simulink übergeben, wo sie in den UV-Index umgewandelt werden.

3. Anzeige auf dem LCD: Der berechnete UV-Index wird über den Arduino an das LCD-Display gesendet und angezeigt.

4. Buzzer: Wenn die UV-Sensorwerte über einen bestimmten Zeitraum stabil bleiben, wird der Buzzer aktiviert, um einen Ton zu erzeugen.

Implementierung in Simulink

In Abbildung 5 ist das Simulink-Modell dargestellt. Der Prozess beginnt mit dem Einlesen des analogen Eingangs A0. Das empfangene Digitalwort wird daraufhin umgewandelt und gefiltert. Das gefilterte Signal wird anschließend in einem Diagramm in einen UV-Index umgewandelt. Diese beiden Werte werden zur weiteren Verarbeitung an den Workspace übermittelt. Danach erfolgt die Ausgabe des UV-Index, und der Mittelwert des UV-Index wird über fünf Messwerte hinweg mit dem UV-Index verglichen, um zu prüfen, ob ein stabiles Signal vorliegt. Ist dies der Fall, wird ein akustisches Signal erzeugt. Weitere und detaillierte Informationen zum Modell sind hier zu finden:

Abb. 5: Simulink-Modell der Sensorverarbeitung

Umwandlung des Digitalwortes in mV

Im Simulink-Modell wird das vom UV-Sensor gelesene Digitalwort in Millivolt (mV) umgewandelt. Der Sensorwert (ein 10-Bit-Digitalwert von 0 bis 1023 mit einer Referenzspannung von 5V) wird durch den Analog-Digital-Wandler (ADC) des Arduino erfasst. Um diesen Wert in mV umzurechnen, wird der folgende Schritt mit einem Gain durchgeführt:


Dieser umgerechnete mV-Wert wird dann gefiltert und zur weiteren Verarbeitung im Modell verwendet.

Filterung des Signals

Im Simulink-Modell wird ein Medianfilter verwendet, um die mV-Signale des UV-Sensors zu glätten. Der Filter hat eine Größe von 20 Werten. Dies bedeutet, dass der Median der letzten 20 gemessenen Werte berechnet wird, um Ausreißer zu minimieren und ein stabileres Signal zu erzeugen. Dieses gefilterte Signal wird dann für die weitere Verarbeitung und zur Steuerung des Buzzers verwendet.

Kalibrierung der Spannungswerte in einen UV-Index

Abb. 6: Korrelation zwischen UV-Index und Ausgangsspannung des Sensors [1]

Für die Umwandlung wird eine Kennlinie benötigt, um die Beziehung zwischen der analogen Ausgangsspannung und der UV-Intensität zu beschreiben. Diese Kennlinie wird mithilfe der vom Hersteller gegebenen Daten erstellt und ist notwendig, um die Messwerte korrekt zu interpretieren. Für die Interpretation wird Simulink eine 1D-Lookuptabel verwendet, welche die unten genannten Werte enthält:

% Werte für den 1-D Lookup-Table zur Umwandlung der Spannungswerte in den UV-Index
Output_Voltage = [0 225 320 405 500 605 700 790 875 975 1075 1160]; % Wert aus AD-Wandler [mV]
UV_Index = [0 1 2 3 4 5 6 7 8 9 10 11]; % UV-Wert [1]

Verwendete Toolbox: DSP System Toolbox, Simulink Support Package für Arduino Hardware

Summeransteuerung bei stabilen Signal ansteuern (Diff < 0.01)

Bei einem stabilen Signal (geringe Schwankungen des UV-Index) wird zusätzlich ein Buzzer aktiviert. Das Modell ermöglicht somit eine Überwachung und eine akustische Benachrichtigung basierend auf den gemessenen UV-Index-Werten. Diesbezüglich wird der Mittelwert über fünf Messwerte gebildet, dazu werden mehrere Memory Blöcke verknüpft, die Ergebnisse summiert und durch die Anzahl der Messwerte dividiert. Anschließend wird die Differenz vom UV-Index und dem Mittelwert berechnet. Ist die Abweichung des UV-Index kleiner als 0,2 wird das Signal als stabil betrachtet und der Ausgang wird auf HIGH gesetzt. Dadurch wird die digitale Pin D13 auf 1 bzw. High gesetzt, was dazu führt das ein akustisches Signal vom Buzzer erzeugt wird.

Versuchsdurchführung

Abb. 7: Foto des Versuchsaufbaus

Der Versuchsaufbau wird durch einen Schaltplan (Abb. 3), Anschlussplan (Abb. 4( und Foto des Aufbaus (Abb. 7) dokumentiert.

Die Durchführung des Experiments beginnt mit dem Flashen des Arduino Uno R3. Nachdem alle relevanten Daten eingestellt wurden, wird die Messung gestartet. Dazu wird der Versuchsaufbau in die Sonne platziert und für mehrere Sekunden nicht bewegt, um statische Parameter zu gewährleisten. Anschließend wird eine weitere Messung durchgeführt, bei der die Dynamik untersucht wird. Hierzu wird ein Blatt Papier verwendet, um den Sensor abwechselnd zu bedecken und freizulegen. Das Ziel dieser zweiten Messung ist die Analyse der Einstellung des Medianfilters, insbesondere ob das Fenster groß genug gewählt wurde oder ob Anpassungen erforderlich sind, um ein verwertbares Signal zu erhalten.

Referenzwert

Als Referenz werden Wetterdaten verwendet aus der die UV-Intensität hervorgeht, um die Kalibrierung des UVM30A durchzuführen. Diese Daten sind präzise und werden regelmäßig gewartet und überprüft, um die Genauigkeit zu gewährleisten.

Die Messung erfolgte am 18.07.2024 in Stirpe mit der Postleitzahl 59597. Laut dem Wetterdienst sollte der UV-Index zwischen 12:00 Uhr und 14:00 Uhr von 4 auf 3 fallen. Da die Messung um 12:40 Uhr stattfand, wurde der Referenzwert auf einen UV-Index von 3,2 festgelegt [4].


Das Modell zur Datenverarbeitung wurde gemäß Abb. 5 in Simulink aufgebaut. Die Messdaten wurden aufgezeichnet. Ein Video der Versuchsdurchführung findet sich hier.

Modelleinstellungen: Arduino Uno, Solver: Fixed-step, discrete, Abtastrate: 0,01 s

Messunsicherheit

In diesem Abschnitt wird die Messunsicherheit und die Standardunsicherheiten bestimmt, um die Genauigkeit und Vertrauenswürdigkeit der Messungen zu bewerten.

Standardunsicherheit Typ B

Der verwendete Arduino UNO R3 hat einen 10-Bit ADU und eine Referenzspannung von 5V. Daraus ergibt sich eine Quantisierungsstufe von:


Der maximale Quantisierungsfehler beträgt somit:



Um den tatsächlichen Fehler berechnen zu können, muss die Standardunsicherheit Typ B des Sensors mithilfe von MATLAB ermittelt werden. Dabei wird geprüft, wie viel Spannung der Messunsicherheit eines UV-Index entspricht. Aus der Kennlinie geht hervor, dass die Umwandlung nahezu linear ist, jedoch nicht vollständig den Anforderungen entspricht. Daher wird zunächst die Differenz zwischen den Spannungswerten berechnet und der Mittelwert dieser Differenzen als Grundlage für die Messunsicherheit verwendet [1].

Hier ist der MATLAB-Code für die Berechnung des Mittelwerts:

% Gegebene Spannungswerte in mV für die jeden UV-Index von 0 bis 11 von dem Sensor UVM30A
output_voltage = [0, 225, 320, 405, 500, 605, 700, 790, 875, 975, 1075, 1160]; % Wert aus AD-Wandler [mV]
% Differenzen berechnen
differences = diff(output_voltage);
% Mittelwert der Differenzen berechnen
mean_difference = mean(differences);
% Mittelwert ausgeben
disp('Der Mittelwert der Differenzen ist:');
disp(mean_difference);


Dadurch ergibt sich eine kombinierte Standardunsicherheit von:


Der tatsächliche Fehler dieser Messung unter Berücksichtigung der Messunsicherheit des UV-Sensors und des Quantisierungsfehlers des 10-Bit AD-Wandlers beträgt etwa 105.56 mV.

Standardunsicherheit TYP A und C

Die Berechnung der kombinierten Standardunsicherheit Typ C erfolgt abschließend unter Berücksichtigung eines Konfidenzniveaus von 68,3%, was einer Standardabweichung (1𝜎) entspricht. Diese Berechnung basiert auf den vorliegenden Messdaten, die im Folgenden detailliert erläutert werden.

Hier ist der Matlab-Code:

%****************************************************************
%                   Hochschule Hamm-Lippstadt                   *
%****************************************************************
% Modul	          : BerechnungderStandardunsicherheit.m         *
%                                                               *
% Datum           : 15.07.2024                                  *
%                                                               *
% Funktion        : Berechnung der Standarunsicherheiten und    *
%                   der Abweichungen vom Messergebnis           *
%                                                               *
% Implementation  : MATLAB 2023b                                *
%                                                               *
% Req. Toolbox    : Statistics and Machine Learning Toolbox     *
%                                                               *
% Author          : Oliver Scholze                              *
%                                                               *
% Bemerkung       :   -                                         *
%                                                               *
% Letzte Änderung : 18.07.2024                                  *
%****************************************************************
clc; clear all, close all;

%% Messdaten laden 
load('Data_statisch.mat');

% Anzahl der Messwerte bestimmen
n = numel(gefiltertes_Signal.data(1,1,:));  % Anzahl der Messungen

% Messwerte in mV (falls nötig, hier anpassen)
for i= 1:n
    Rm(i) = gefiltertes_Signal.data(1,1,i); 
end


%% Bester Schätzwert des Widerstandes berechnen
R = mean(Rm(:));  % Mittelwert der Messwerte

%% Empirische Standardabweichung bestimmen
s = std(Rm(:));

%% Standardunsicherheit Typ A bestimmen
p = normcdf(R+s, R, s) - normcdf(R-s, R, s); % Vertrauensniveau
nu = n - 1; % Freiheitsgrade

%% t-Quantil berechnen
t = tinv((1+p)/2, nu);
disp(['t-Faktor: t = ', num2str(t)]);

%% Unsicherheit Typ A
uA = s * t / sqrt(n);

%% Standardunsicherheit Typ B bestimmen (angenommen)
uB = 105.459;  % Angenommener Wert für Unsicherheit Typ B

%% Kombinierte Standardunsicherheit Typ C bestimmen
uC = sqrt(uA^2 + uB^2); % Unsicherheit Typ C

%% Grad des Vertrauens bestimmen
k = 2;  % Vertrauensfaktor

%% Absolute Messunsicherheit bestimmen
uAbs = k * uC; % Absolute Messunsicherheit

%% Relative Messunsicherheit berechnen (%)
uRel = (uAbs / R) * 100;

%% Ergebnisdarstellung TYP C
figure;
yline(R, 'Color', 'k');
xlim([0 3200])
grid on
hold on;
plot([0 n], [R+uC R+uC], '--b', [0 n], [R-uC R-uC], '--b');
plot(1:n, reshape(Rm, 1, []));  % Um die Daten zu plotten, in einen Vektor umformen

% Beschriftungen hinzufügen
xlabel('Anzahl der Messwerte');
ylabel('Ausgangsspannung in mV');
title(['Messergebnis (Mittelwert = ', num2str(R), ', Unsicherheit = \pm', num2str(uC), ' mV, ', num2str(uRel), '%)']);

% Legende erstellen
legend({'Mittelwert', 'Unsicherheit Typ C'}, 'Location', 'northwest');

%% Ergebnisdarstellung 
figure;
hold on;
yline (3.2)
xlim([0 3200])
grid on
plot(1:n, reshape(UV_Index.data(1,1,:), 1, []));  % Um die Daten zu plotten, in einen Vektor umformen

% Beschriftungen hinzufügen
xlabel('Anzahl der Messwerte');
ylabel('Ausgangsspannung in mV');
title(['Messwerte in Vergleich zum Referenzwert']);

% Legende erstellen
legend({'UV-Index','Referenzwert'}, 'Location', 'northwest');


Die Auswertung zeigt dieses Diagramm:

Abb. 8: Kombinierte Standardunsicherheit Typ C


Versuchsbeobachtung

Abb. 9: Darstellung von statischen Messwerten des UVM30A-Sensors
Abb. 10: Darstellung von dynamischen Messwerten des UVM30A-Sensors


Zunächst wurde eine statische Messung (siehe Abbildung 9) draußen unter konstanten Bedingungen durchgeführt. Hierbei wurde das Sensorsignal kontinuierlich erfasst und ausgewertet. Anschließend wurde eine dynamische Messung (siehe Abbildung 10) durchgeführt, bei der der Sensor zeitweise abgedeckt wurde, um die Auswirkungen auf das Sensorsignal zu beobachten.

Während der statischen Messung zeigte das gefilterte Signal (blau) eine relativ konstante Spannung, was auf stabile Umweltbedingungen hinweist. Im ungefilterten Signal (orange) waren gelegentlich Ausreißer zu erkennen, die durch den Medianfilter jedoch erfolgreich unterdrückt wurden. Dies zeigt, dass der Medianfilter effektiv in der Lage ist, Störungen und kurzzeitige Änderungen in der Messumgebung zu glätten und somit ein stabiles Ausgangssignal zu liefern.

Die dynamische Messung offenbarte deutliche Schwankungen im gefilterten Signal, die direkt mit dem Abdecken und Freilegen des Sensors korrelierten. Beim Abdecken des Sensors sank die Spannung deutlich, was zu einer Reduktion des UV-Index führte. Nach Entfernen der Abdeckung stieg die Spannung wieder an und stabilisierte sich auf dem vorherigen Niveau. Dies zeigt, dass das System schnell auf Änderungen der UV-Exposition reagiert und die Übergänge im gefilterten Signal relativ abrupt und präzise den tatsächlichen Abdeckungszustand des Sensors widerspiegeln.

Bei beiden Messungen wurden im ungefilterten Signal gelegentliche Spitzen und Schwankungen beobachtet, die vermutlich auf Störungen oder kurzzeitige Änderungen in der Messumgebung zurückzuführen sind. Diese Ausreißer wurden durch den Medianfilter jedoch effektiv geglättet, was die Zuverlässigkeit des gefilterten Signals erhöhte. Es sind keine offensichtlichen systematischen Messabweichungen erkennbar, was darauf hinweist, dass das gefilterte Signal im Allgemeinen den erwarteten Mustern basierend auf den Umgebungsbedingungen folgt. Zudem wurde festgestellt, dass der Messwert stark von der Positionierung zur Energiequelle (Sonne) abhängig ist. Da weder im Datenblatt noch in anderen Quellen genaue Angaben zur Positionierung vorhanden sind, wurde der Sensor wie im Ergebnisvideo gezeigt positioniert.

Auswertung

Abb. 11: Gemessener UV-Index in Zusammenhang mit dem Referenzwert von 3.2

Die Messhypothese wurde abgelehnt, da der Sensor sowohl Ausreißer in den Messwerten als auch eine hohe relative Messunsicherheit aufweist. Die relative Messunsicherheit von 51,09% deutet darauf hin, dass die Unsicherheit im Verhältnis zum gemessenen Wert erheblich ist. Für präzise und zuverlässige Messergebnisse strebt man in der Praxis eine geringere relative Messunsicherheit an. Der Unsicherheitsbereich erstreckt sich daher von etwa 307,3435 mV bis 518,2621 mV (Mittelwert ± Unsicherheit), wie in Abbildung 8 bei einem Konfidenzniveau von 68% dargestellt.

Die Messausreißer, wie in Abbildung 9 zu sehen ist, können durch die Anwendung eines Signalfilters eliminiert werden. Hierzu wird ein Medianfilter mit einer Fenstergröße von 20 Werten verwendet, um eine Verzögerung von weniger als 0,2 Sekunden zu gewährleisten. Dies stellt ein sehr gutes dynamisches Verhalten des Sensors sicher und liefert ein klares Signal. Eine Reduzierung der Fenstergröße auf 10 würde zwar die Dynamik erhöhen, jedoch mehr Messausreißer einschließen. Daher wird der Medianfilter auf eine Fenstergröße von 20 festgelegt.

In Abbildung 11 ist der umgewandelte Spannungswert in einen UV-Index abgebildet, zusätzlich zum Referenzwert für den Vergleich. Aus der Messung geht hervor, dass der Referenzwert nahe an dem gemessenen und umgewandelten Wert liegt. Dies zeigt, dass der Sensor für die meisten Anwendungen ausreichend genau ist. Für Anwendungen, die jedoch präzise Werte erfordern, wird ein anderer Sensor empfohlen, da die Messunsicherheit des aktuellen Sensors zu hoch ist.

Zusammenfassung und Ausblick

  • Zusammenfassung der Kapitel

Im Rahmen dieses Projekts wurde der UV-Sensor UVM30A verwendet, um die Intensität ultravioletten Lichts zu messen und den entsprechenden UV-Index zu bestimmen. Der Sensor nutzt den photoelektrischen Effekt, um UV-Licht in eine analoge Spannung umzuwandeln, die dann mittels eines Arduino Uno und MATLAB/Simulink verarbeitet wird. Die gemessenen Werte werden auf einem LCD-Display angezeigt, und bei stabilen UV-Index-Werten wird ein akustisches Signal durch einen Buzzer aktiviert.

Der Aufbau umfasst die Verkabelung des UV-Sensors und des Buzzers mit dem Arduino Uno. Die Verarbeitung der Sensorwerte erfolgt in Simulink, wo die gemessenen Spannungswerte in den UV-Index umgerechnet werden. Die Filterung der Signale mittels eines Medianfilters trägt dazu bei, Ausreißer zu minimieren und ein stabiles Messsignal zu gewährleisten.

  • Diskussion der Ergebnisse

Die Messergebnisse zeigen, dass der UVM30A-Sensor für viele Anwendungen ausreichend genau ist, aber eine hohe relative Messunsicherheit aufweist. Diese Unsicherheit ist größtenteils auf die Genauigkeit der Spannungsmessung und die Empfindlichkeit des Sensors gegenüber Umgebungsbedingungen, insbesondere der Positionierung zur Sonne, zurückzuführen.

Durch die Anwendung eines Medianfilters mit einer Fenstergröße von 20 wurde die Dynamik des Sensors optimiert und eine Verzögerung von weniger als 0,2 Sekunden erreicht. Eine Reduzierung der Fenstergröße auf 10 würde zwar die Reaktionszeit verbessern, aber mehr Messausreißer einschließen, was die Genauigkeit der Messungen beeinträchtigen könnte.

Die Berechnung der Standardunsicherheit ergab einen Wert von etwa 105.459 mV, was die Gesamtgenauigkeit der Messungen berücksichtigt. Für zukünftige Anwendungen oder genauere Messungen wird empfohlen, einen Sensor mit einer niedrigeren Messunsicherheit zu verwenden.

  • Ausblick

Für zukünftige Projekte könnten Verbesserungen in der Positionierung des Sensors sowie in der Signalverarbeitung implementiert werden, um die Messgenauigkeit weiter zu erhöhen.

Darüber hinaus könnte die Entwicklung einer Kalibrierungsmethode dazu beitragen, die Messergebnisse des UVM30A-Sensors präziser mit Referenzwerten zu vergleichen und mögliche Abweichungen zu minimieren. Hierbei könnte die Verwendung eines präziseren Sensors oder einer Lichtquelle, bei der der UV-Index eingestellt werden kann, helfen, die Messergebnisse des Sensors zu verifizieren und gegebenenfalls zu kalibrieren.

  • Selbstreflexion/Lessons learned

Während des Projekts wurden wesentliche Erkenntnisse in den Bereichen Signalverarbeitung und Bewertung der Messgenauigkeit gewonnen. Die Auswahl und Kalibrierung der Sensoren erwiesen sich als besonders relevant und sollten sorgfältig vor ihrer Verwendung evaluiert werden.

Ergebnisvideo

Im Ergebnisvideo wird das Simulink-Modell, das auf einem Arduino implementiert ist, demonstriert. Die Kennlinie zeigt deutlich, dass ein stabiler UV-Index bzw. Messwert vorliegt, was zusätzlich durch das akustische Signal bestätigt wird. Dieses Signal dient als Indikator für die Stabilität des gemessenen Wertes. Der Messaufbau entspricht den angegebenen Spezifikationen und ist so eingerichtet, dass der Sensor direkt zur Sonne ausgerichtet ist, um präzise Messungen des UV-Index zu gewährleisten.

Darstellung der Versuchsdurchführung

Lernzielkrontrolle

Beantworten Sie in Ihrem Artikel die Lernzielkontrollfragen.

Hinweis: Sämtliche Lernzielkontrollfragen werden in dem Wiki-Artikel und nicht direkt hier beantwortet.

Literatur

Zitieren Sie nach DIN ISO 690:2013-10.



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