UV sensor UVM30A with Arduino

FunduinoLast updated on

UV-Strahlung messen und in den UV-Index einordnen

UV-Strahlung ist unsichtbar – man merkt sie erst, wenn der Sonnenbrand da ist. Der UVM30A macht sie messbar: Er erfasst die Intensität des ultravioletten Lichts und gibt sie als Spannung aus.

In dieser Anleitung liest du diese Spannung aus und ordnest sie dem international gebräuchlichen UV-Index zu. Der Serielle Monitor zeigt dann nicht nur eine Zahl, sondern auch, welcher Sonnenschutz zu dieser Stufe gehört.

Runde Platine mit dem UV-Sensor UVM30A und drei Anschlüssen
Das UV-Sensor-Modul UVM30A
Schaltplan mit Arduino und UVM30A-Modul
Aufbau: Plus an 5V, Minus an GND, OUT an A0
1 / 2

Material

Für dieses Projekt brauchst du:

  • 1× Mikrocontroller mit passendem USB-Kabel
  • 1× UV-Sensor-Modul UVM30A
  • 3× Steckkabel männlich/weiblich

Was der Sensor misst

Der UVM30A erfasst die Intensität des ultravioletten Lichts und gibt sie als Spannung aus. Je mehr UV-Strahlung auf ihn trifft, desto höher die Spannung.

Diese Spannung lässt sich in den international gebräuchlichen UV-Index umrechnen – eine Skala von 0 bis 11 und darüber, an der sich ablesen lässt, ob und welcher Sonnenschutz nötig ist. Genau das ist das Ziel dieser Anleitung.

Runde Platine mit dem UV-Sensor UVM30A und drei Anschlüssen
Das UV-Sensor-Modul UVM30A

Aufbau

Das Modul hat drei Anschlüsse:

  • + → 5V
  • − → GND
  • OUT → analoger Eingang A0
Schaltplan mit Arduino und UVM30A-Modul
Aufbau: Plus an 5V, Minus an GND, OUT an A0

Den UV-Index ausgeben

Der Sketch liest den Wert am Eingang A0 aus und ordnet ihn einer Stufe des UV-Index zu. Zu jeder Stufe gibt er im Seriellen Monitor aus, welcher Schutz empfohlen ist.

Die Schwellenwerte im Sketch stammen aus dem Datenblatt des UVM30A. Dort sind sie in Millivolt angegeben und hier bereits in die Zahlenwerte des Arduino umgerechnet – ein Schritt entspricht rund 4,9 Millivolt. Deshalb steht dort 10 statt 50 Millivolt, 46 statt 227 Millivolt und so weiter.

Halte den Sensor zum Testen ans Fenster oder nach draußen. Im Zimmerlicht bleibt der Index bei 0 – UV-Strahlung kommt durch Fensterglas kaum hindurch.

Der UVM30A ist ein Bastelmodul und nicht geeicht. Seine Werte sind gut genug, um Unterschiede sichtbar zu machen – als Grundlage für Entscheidungen zum Sonnenschutz solltest du sie nicht verwenden. Verlass dich dafür auf den offiziellen UV-Index des Wetterdienstes.

Sketch: UV-Index bestimmen und ausgeben
void setup()
{
  Serial.begin(9600);   // Baudrate des Seriellen Monitors
}

void loop()
{
  int SensorWert = analogRead(A0);  // Sensorwert am Eingang A0 auslesen
  Serial.print(SensorWert);
  Serial.print("  ");

  /*
    Die Schwellenwerte stammen aus dem Datenblatt des UVM30A.
    Dort sind sie in Millivolt angegeben und hier bereits in
    ADC-Schritte umgerechnet (ein Schritt entspricht rund 4,9 mV).
    Gearbeitet wird mit else if, damit jeder Messwert in genau
    einen Bereich faellt.
  */
  if (SensorWert <= 10)
  {
    Serial.println("Index 0 - kein Schutz erforderlich.");
  }
  else if (SensorWert <= 46)
  {
    Serial.println("Index 1 - kein Schutz erforderlich.");
  }
  else if (SensorWert <= 65)
  {
    Serial.println("Index 2 - kein Schutz erforderlich.");
  }
  else if (SensorWert <= 83)
  {
    Serial.println("Index 3 - Schutz erforderlich: z.B. Hut, Sonnencreme.");
  }
  else if (SensorWert <= 103)
  {
    Serial.println("Index 4 - Schutz erforderlich: z.B. Hut, Sonnencreme.");
  }
  else if (SensorWert <= 124)
  {
    Serial.println("Index 5 - Schutz erforderlich: z.B. Hut, Sonnencreme.");
  }
  else if (SensorWert <= 142)
  {
    Serial.println("Index 6 - Schutz erforderlich. Schatten aufsuchen.");
  }
  else if (SensorWert <= 162)
  {
    Serial.println("Index 7 - Schutz erforderlich. Schatten aufsuchen.");
  }
  else if (SensorWert <= 180)
  {
    Serial.println("Index 8 - Aufenthalt im Freien moeglichst vermeiden. Schutz erforderlich.");
  }
  else if (SensorWert <= 200)
  {
    Serial.println("Index 9 - Aufenthalt im Freien moeglichst vermeiden. Schutz erforderlich.");
  }
  else if (SensorWert <= 221)
  {
    Serial.println("Index 10 - Aufenthalt im Freien moeglichst vermeiden. Schutz erforderlich.");
  }
  else
  {
    Serial.println("Index 11 - Aufenthalt im Freien vermeiden. Schutz DRINGEND erforderlich.");
  }

  delay(1000);   // eine Sekunde Pause
}
Rate the instructions

Comments

Ask a question or share an experience

Contact us if something doesn’t work. Please include your board and the error message.

We review every comment before publication. Your email address remains with us.