UV-Sensoren und Sensormodule

Über den Beitrag

Meine Reihe über Licht-, Gestik-, Bewegungs- und Abstandssensoren möchte mit diesem Beitrag über UV-Sensoren, also Sensoren für ultraviolettes Licht, fortsetzen. Zunächst gehe ich kurz auf die Definition von UV-Strahlung ein. Dann behandele ich die am häufigsten verwendeten UV-Sensoren bzw. die auf ihnen basierenden Module:

  • Guva-SD12SD
  • UVM-30A (nur kurz erwähnt)
  • ML8511
  • VEML6075
  • SI1145 (GY-1145)

Die drei ersten UV-Sensoren bzw. Sensormodule haben lediglich einen analogen Ausgang. Sie sind deshalb sehr simpel mit Microcontrollern anzusteuern. Die anderen beiden werden hingegen über I2C angesprochen. Sie sind deutlich komplexer, so dass es sich anbietet, fertige Bibliotheken zu verwenden. Zu ihnen gibt es auch gute Tutorials, auf die ich entsprechend verweisen werde. 

UV-Strahlung

Das ultraviolette Licht schließt sich an das Spektrum des sichtbaren Lichts im kurzwelligeren Bereich an. Die UV-Strahlung erstreckt sich gemäß der traditionellen Definition über die Wellenlängen von 100 bis 380 Nanometer. Innerhalb dieser Spanne gibt es noch Bereiche, die recht große Unterschiede hinsichtlich ihres Anteils im Sonnenlicht, der Absorption in der Atmosphäre und der physiologischen Wirkung aufweisen. Man unterscheidet deswegen UV-A, UV-B und UV-C. Für den Sonnenbrand ist hauptsächlich die UV-B Strahlung verantwortlich. Die UV-A Strahlung hingegen macht zwar weniger Sonnenbrand, wurde aber hinsichtlich ihrer schädigenden Wirkung lange unterschätzt. Natürliche UV-C Strahlung gibt es auf der Erdoberfläche kaum. 

Tabelle: UV-A, UV-B und UV-C Strahlung
UV-A, UV-B und UV-C Strahlung

Der UV-Index

Der UV-Index dürfte den meisten ein Begriff sein. Er wurde als dimensionslose Größe eingeführt um die Wirkung der UV-Strahlung der Sonne auf den Körper zu quantifizieren. Wichtig in Bezug auf die hier besprochenen Sensoren ist, dass UV-Index Berechnungen mit Hilfe der von ihnen gelieferten Messdaten immer nur Näherungswerte sein können. Da die UV Strahlung bei verschiedenen Wellenlängen eine unterschiedliche Wirkung auf den Körper hat, muss die Strahlungsintensität entsprechend pro Wellenlängenbereich gemessen und dann auch noch gewichtet werden. Das kann ein einfacher Sensor nicht leisten und so behilft man sich mit der Annahme konstanten Intensitätsverteilung. Auf Wikipedia findet ihr weitere Informationen zur UV-Strahlung und zum UV-Index

Schutzmaßnahmen bei verschiedenen UV-Indices
Schutzmaßnahmen bei verschiedenen UV-Indices

Guva-S12SD

Verschiedene Guva-S12SD basierte Module
Verschiedene Guva-S12SD basierte Module

Der Guva-S12SD Sensor selbst ist eine UV-A und UV-B sensitive Fotodiode. Ein Datenblatt ist z.B. hier oder hier erhältlich. Kurioserweise ist er in dem einen Datenblatt als UV-A, in dem anderen als UV-B Sensor ausgezeichnet. Er deckt aber eigentlich beide Bereiche ab (siehe Grafik). Der Sensor liefert als Signal einen Fotostrom im Nanoampere Bereich. Der Zusammenhang zwischen auftreffender Strahlung (Leistung) und dem Fotostrom ist linear.

Charakteristik des Guva-S12SD Sensors
Charakteristik des Guva-S12SD Sensors

Auf Modulen verbaut wird der Fotostrom in eine Signalspannung umgewandelt, verstärkt und kann dann mit einem A/D-Wandler digitalisiert werden. Im Falle von Arduino & Co. haben wir den ja schon On-Board. Eine Bedeutung erhält das Signal erst über den Sketch. Die meisten von Euch werden sich dabei wahrscheinlich für den UV-Index interessieren. 

Ich möchte hier nun meine Erfahrungen mit den oben abgebildeten Modulen teilen. Ihr bekommt alle drei Module bei Amazon oder ebay. Verglichen mit Sensoren für das sichtbare Licht sind die Guva-S12SD basierten UV-Sensoren relativ teuer. Bei deutschen / europäischen Shops ist man mit 8 bis 14 Euro und teilweise noch mehr dabei (Stand: Oktober 2019). Deutlich günstiger wird es bei chinesischen Shops, ihr müsst dann aber ein paar Wochen Lieferzeit einplanen. 

Guva-S12SD UV-Sensor Nr. 1: Adafruit

Das Modul von Adafruit ist oben links abgebildet. Hilfreich ist, dass der Hersteller die wichtigsten Angaben auf die Rückseite gedruckt hat:

  • Spannungsversorgung: 2 – 5 Volt
  • Wellenlängenbereich: 240 – 370 nm
  • UV-Index ≈ Ausgangsspannung / 0.1

Ich habe den Sensor schon mal im Sommer ausprobiert und die UV-Indices stimmten recht gut mit den vorhergesagten Werten überein. Ihr könnt ihn allerdings nicht einfach wie ein Thermometer nach draußen hängen, da die Werte ausrichtungsabhängig sind. Man muss den Sensor schon in Richtung der Sonne positionieren. 

Noch mehr Informationen zu diesem Modul gibt es bei Adafruit.

Ein Sketch dazu könnte z.B. so aussehen:

int sensorPin = 0;
float analogSignal;
float voltage;
float uvIndex;

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

void loop(){
  analogSignal = analogRead(sensorPin);
  voltage = analogSignal/1023*5;
  uvIndex = voltage / 0.1;
  Serial.print("Signal: "); Serial.println(analogSignal);
  Serial.print("Volt: "); Serial.println(voltage);
  Serial.print("UV-Index: "); Serial.println(uvIndex);
  Serial.println("------------------------------");
  
  delay(1000);
}

 

Der Vollständigkeit halber hier noch die Verdrahtung dazu, auch wenn es wirklich nicht einfacher geht.

Anschluss des Adafruit UV-Sensors an den Arduino.

Guva-S12SD UV-Sensor Nr. 2: noname (lila)

Das Sensormodul, auf das man in Online Shops am häufigsten trifft, ist das lilafarbene oben in der Mitte. Wie auch immer kann ich es absolut nicht empfehlen.

Das Modul verträgt 2.5 bis 5 Volt und hat wie das Adafruitmodul einen Output Pin. Allerdings musste ich feststellen, dass es selbst an einem bedeckten Oktobertag schon auf Vollausschlag (sprich Ausgangsspannung = Eingangsspannung) ging. An anderer Stelle habe ich gelesen, man solle das Modul nicht direkt zur Sonne ausrichten – aber wie denn dann? Oder genauer ausgedrückt: wie soll ich es denn immer auf dieselbe Art indirekt ausrichten und so reproduzierbare Werte erhalten? Um fair zu bleiben: ja, das Modul misst UV-Strahlung und zwar ziemlich empfindlich. Aber zur UV-Index Ermittlung halte ich es für ungeeignet. 

Oder tue ich dem Modul unrecht? Wenn ihr eigene Erfahrungen gemacht habt, würde ich mich über Rückmeldungen freuen.

In Zusammenhang mit diesem Modul, aber auch anderen UV-Sensoren, trifft man häufig auf die folgende Tabelle:

Tabelle für UVM-30A UV-Sensoren: Output Voltage versus UV-Index

Anscheinend wird diese Tabelle immer wieder kopiert und zum Teil unreflektiert angewendet. Nach einigem Suchen habe ich gefunden, dass sie wohl auf den UVM-30A Sensor zurückgeht, der anscheinend etwas aus der Mode gekommen ist. Ein Datenblatt eines auf ihm basierenden Moduls findet ihr hier.  Und dort findet ihr auch die Abhängigkeit von UV-Index vs. Output Voltage, die Grundlage für die Tabelle ist. Man sollte sie nicht einfach 1:1 auf andere Module übertragen. 

UV Index vs. Output Voltage für das UVM-30A Modul.
UV Index vs. Output Voltage für das UVM-30A Modul.

Guva-S12SD UV-Sensor Nr. 3: Waveshare

Nun wieder zu einem erfreulicheren Bauteil. Das Modul von Waveshare verträgt laut Hersteller 3 bis 5.5 Volt und liefert ähnliche Resultate wie das Modell von Adafruit. Erwähnenswert ist noch, dass es ein kleines Poti zur Kalibrierung besitzt. Weitere Informationen gibt es hier auf den Herstellerseiten. 

ML8511

ML8511 UV-Sensor
ML8511 UV-Sensor

Der ML8511 hat seine größte Empfindlichkeit im Bereich von 280 bis 390 nm. Er liefert ein mit der UV-Strahlungsintensität linear ansteigendes Spannungssignal: 

Vout [V] ≈ (UV-Intensität ⋅ 0,12) + 1    mit UV-Intensität in mW/cm2 bei λ = 365 nm

Signal vs UV-Strahlungsintensität für den ML8511
Signal vs UV-Strahlungsintensität für den ML8511

Der Sensor selbst sollte mit 2.7 – 3.3 Volt versorgt werden, aber viele Module, wie u. a. das oben abgebildete, vertragen auch 5 Volt. Über den 3V3 Pin können dann 3.3 Volt abgegriffen werden. Der Enable Pin (EN) ist active high, d.h. bei Anschluss an GND wird das Modul abgeschaltet. Ein Datenblatt zum Sensor gibt es z.B. hier

Schaltung und Sketch spare ich mir in diesem Fall. Das sollte jeder hinbekommen, oder? Falls nicht, hier ist ein guter Beitrag auf den Sparkfun Seiten dazu. Ist aber auch so lesenswert. 

SI1145 (GY 1145)

Eigenschaften des S1145 Sensors

Der SI1145 ist ein ganz erstaunliches Bauteil, dass eigentlich gar keinen UV-Sensor besitzt. Stattdessen hat es Sensoren für das sichtbare (ALS = ambient light) und das infrarote Licht (IR). Der UV-Index wird aus den Messwerten dieser Sensoren mit einer Reihe von Koeffizienten errechnet, was zumindest bei sonnigem Wetter erstaunlich gut funktioniert. Das Ergebnis dieser Berechnung wird als 16 Bit Wert bereitgestellt und muss dann noch einmal durch 100 geteilt werden. Der UV-Index wird also in sehr hoher Auflösung ermittelt. Das heißt aber natürlich nicht, dass der UV Index wirklich so exakt der Realität entspricht. Es ist immer noch ein Näherungswert der gerade bei wolkigem Wetter vom realen Wert abweichen kann. Dazu eine Grafik aus dem Datenblatt:

Calibrated UV Sensor Response vs. Calculated Ideal UV Index

Darüber hinaus bietet der SI1145 einen Anschluss für eine Infrarot LED, mit der er als Näherungssensor (PS = Proximity Sensor) einsetzbar ist. Laut Datenblatt sind 50 cm Reichweite möglich. Die größeren Brüder SI1146 und SI1147 haben sogar 2 bzw. 3 Anschlüsse für IR-LEDs. Ein Interruptausgang kann – wenn entsprechend konfiguriert – melden, wenn Messwerte zum Abruf bereit stehen.  

Eigenschaften der SI1145 Module

SI1145 (GY1145) UV-Sensoren
SI1145 (GY1145) UV-Sensoren

Leider habe ich keine Bibliothek gefunden, die die Möglichkeiten des SI1145 wirklich umfassend nutzt. Die ALS und die IR Funktion sind jeweils nur ansatzweise implementiert, ebenso die PS Funktionalität. Auch hinsichtlich Interrupts sieht es nicht gut aus. 

Dies ist aber ein Beitrag über UV-Sensoren. Und diese Aufgabe erfüllen die SI1145 Module in Kombination mit der gleich vorgestellten Bibliothek sehr gut.

Die Kommunikation läuft über I2C (Adresse 0x60). Die Spannungsversorgung beträgt 3 -5 V. Die Preisspanne geht von 5 Euro bis 22 Euro. Wer ein paar Wochen Lieferzeit in Kauf nehmen möchte, der nimmt die billigen Teile aus China. Man kann sich aber auch überlegen Adafruit für die gute Arbeit zu unterstützen. Da ist man ab ca. 11 Euro dabei (Stand: Okt. 2019).

Messungen mit der Adafruit SI1145 Bibliothek

Adafruit stellt seine Bibliothek Adafruit_SI1145_Library auf Github bereit. Ihr könnt sie über den Link herunterladen oder über die Arduino Bibliotheksverwaltung (Suchbegriff: SI1145) installieren. Der mitgelieferte Beispielsketch funktioniert hinsichtlich der UV-Index Messung ohne weitere Anpassungen wunderbar.

Darüber hinaus liefert der SI1145 auch ALS- (Umgebungslicht) und IR-Werte, welche aber nicht wirklich hilfreich sind. Das dürfte aber eher an der Bibliothek liegen als am Sensor. Der ALS-Wert beispielsweise reagiert selbst auf intensives Licht nur wenig. Das ist merkwürdig, da der SI1145 diese Werte für die Ermittlung des UV-Index benutzt und das geht ja ganz gut. Auch die PS Messung habe ich ausprobiert. Es funktioniert, wenn auch mit recht geringer Reichweite (< 10 cm). Da geht sicherlich auch noch was mit den richtigen Einstellungen. Vielleicht schreibe ich demnächst selbst eine Bibliothek dazu (Nachtrag: ich habe mittlerweile eine Bibliothek geschrieben, schaut hier).

Aber nochmal, das Thema ist ja hier die UV-Index Ermittlung. Und die funktioniert ziemlich gut.

Viel mehr möchte oder muss ich gar nicht dazu schreiben, denn bei Adafruit gibt es schon eine sehr gute Anleitung für das Modul und die Bibliothek. Ihr findet sie hier. Ich bin kein Freund davon Dinge zu kopieren ohne Mehrwert zu liefern.

VEML6075

Als letzten Vertreter der UV-Sensoren möchte ich den VEML6075 vorstellen. Vielleicht stoßt ihr auch einmal auf seinen kleinen Bruder, den VEML6070. Der VEML6075 ist dabei vorzuziehen, da er zwei getrennte Kanäle für UV-A und UV-B hat. Das zeichnet ihn auch gegenüber allen anderen hier vorgestellten Sensoren aus. Eine Wichtung des UV-A und UV-B Anteils macht die berechneten UV-Indices wesentlich verlässlicher. 

Aus dem Datenblatt des VEML6075: Empfindlichkeit vs Wellenlänge.
Aus dem Datenblatt des VEML6075: Empfindlichkeit vs Wellenlänge

Die verwendeten Photodioden weisen – wie andere UV-Photodioden auch – eine gewisse Querbeeinflussung durch sichtbares und infrarotes Licht auf. In den sogenannten Application Notes, die es zusätzlich zum Datenblatt gibt, ist beschrieben wie man diese Faktoren über Koeffizienten (UVcomp1 und UVcomp2) herausrechnet. Nicht wirklich jeder wird sich damit im Detail beschäftigen wollen. Aber ein Blick in die Application Notes gibt zumindest mal einen Eindruck, wie komplex die UV-Index Bestimmung tatsächlich ist. 

Da es eine sehr gute Bibliothek und Anleitung von Sparkfun gibt, müsst ihr euch durch die Originaldokumente nicht durchwühlen, sofern ihr die Standardwerte nicht anpassen wollt. Trotzdem – der VEML6075 ist recht komplex. Wenn ihr ihn benutzen wollt, dann solltet Ihr euch ein bisschen mit den Details auseinandersetzen und nicht blind den Werten aus dem erstbesten Beispielsketch Glauben schenken.  Nicht, dass ihr irgendwann sagen müsst: „Laut Messwert hätte ich eigentlich keinen Sonnenbrand bekommen können!”.

VEML6075 Module

Das von mir getestete VEML6075 Modul
Das von mir getestete VEML6075 Modul

VEML6075 Module gibt es von einer Reihe verschiedener Anbieter, u. a. von Sparkfun und Adafruit, aber auch lauter no-name Versionen, wie das oben abgebildete Modell. Die Preise variieren zwischen 4 und 15 Euro (Stand Okt. 2019). Seid vorsichtig mit der Spannungsversorgung, denn einige der Module vertragen keine 5 Volt. Das oben abgebildete sollte auch 5 Volt vertragen, erkennbar am Spannungsregler (662K) auf der Rückseite. 

Die Kommunikation erfolgt über I2C. Wenn das Modul keine 5 Volt verträgt, dann gilt das auch für die I2C Leitungen. Benutzt in diesem Fall Spannungsteiler oder Logikkonverter. Der Jumper oben rechts auf der Rückseite des Moduls ist geschlossen. Ich vermute, dass die I2C Leitungen dadurch Pull-Up Widerstände bekommen.

Die Verdrahtung mit dem Arduino oder anderen Microcontroller ist sehr einfach. Neben der Spannungsversorgung müssen lediglich SDA und SCL verbunden werden. Auf einen Schaltplan verzichte ich entsprechend. 

Verwenden der Sparkfun Bibliothek

Die Sparkfun Bibliothek könnt ihr über den oben angegebenen Link oder über die Arduino Bibliotheksverwaltung installieren. Geht dann am besten durch die Anleitung und die mitgelieferten Beispielsketche. In diesen lernt ihr, wie ihr verschiedene Einstellungen vornehmt, so z.B. die Messzeit (Integration Time) oder die Auflösung (normal dynamic vs. high dynamic). Da das alles sehr gut dokumentiert ist, lohnt es sich nicht, dass ich hier noch eine eigene Anleitung schreibe.

Wundert euch übrigens nicht, wenn ihr bei Innenmessungen teilweise negative UV-Werte oder UV-Indices erhaltet. Anscheinend sind die Korrekturfaktoren für Außenmessungen optimiert. Das heißt nicht, dass die anderen hier vorgestellten UV-Sensoren „richtiger“ messen. Es zeigt nur noch einmal, dass das ganze Thema der UV-Messung nicht ganz trivial ist und man Messwerte grundsätzlich hinterfragen sollte.  

UV-Sensoren: ein Fazit

Es gibt eine ganze Reihe unterschiedlicher UV-Sensoren bzw. Sensormodule. Allen ist letzten Endes gemein, dass sie Photodioden besitzen, die die Strahlungsintensität als einen Photostrom detektieren, der dann als Spannung ausgewertet wird. Guva-S12SD, UVM-30A und ML8511 liefern ein analoges Signal, SI1145 und VEML6075 hingegen stellen die Daten digital über I2C bereit.

Die mit den UV-Sensoren ermittelten bzw. aus den Signalen errechneten UV-Indices sind grundsätzlich Näherungswerte, da eine korrekte Ermittlung die Messung und Wichtung der Intensitäten der unterschiedlichen Wellenlängen erfordern würde. Der einzige Sensor, der in diese Richtung geht, ist der VEML6075. Zusätzlich besitzt er Korrekturfaktoren um die Quereinflüsse aus dem sichtbaren und dem infraroten Bereich herauszurechnen. Der SI1145 nimmt eine Sonderstellung ein, da er UV-Indices aus den Daten des sichtbaren und infraroten Bereichs extrapoliert. Die Daten, die die einfachen, analogen Sensoren liefern, sind auf jeden Fall kritisch zu hinterfragen. Einige Module auf Basis des Guva-S12SD sind meiner Meinung nach sogar völlig ungeeignet. 

Danksagung

Das Sonnenblumenbild habe ich Couleur auf Pixabay zu verdanken. Anders als sonst habe ich das Beitragsbild diesmal nichts weiter hineinmontiert.

Und dann noch ein Danke schön an die fleißigen Mitarbeiter von Adafruit und Sparkfun für die Veröffentlichung der Anleitungen und Bibliotheken. 

Schreibe einen Kommentar

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