Summers coming !
The sun is shining !
Which is great.
But as ultraviolet (UV) radiation is getting more intense, people like me get freckles, small brown islands swimming in a sea of red, sunburned, itching skin.
Being able to have real-time information available on the intensity of the UV light reaching you skin would raise awareness and reduce the risk of skin damage. So why not build a simple device for this purpose?
I decided to use the VEML6075 UV sensor that allows to measure both UV-A and UV-B, and thereby give more precise values then many other sensors available (see last step for details). And UV-B is the dangerous part.
But how to present the measured values? LED bars and OLED displays are nice, but not too practical in bright sunshine. Verbal communication is our every day way of information transfer, but so far it is hard use it in microcontroller projects. A new option is the "Little Buddy Talker" (LBT), a small breakout that contains a chip with 254 words and can 'speak' them via a headphone connector. Every word is defined by an address, basically a number, and its very easy to let the LBT speak in sentences. For more complex tasks you can use the "Word100" Arduino library to control the LBT.
The device described in the following consists of a VEML6075 sensor breakout, an Arduino and the Little Buddy Talker, is very easy to set up and can be powered by a USB power pack or batteries, depending on the microcontroller used.
If you prefer to keep the UV index information private, use headphones.
A small battery-driven speaker might be a good solution for schools, kindergardens or other public places.
I would like to mention the ongoing Kickstarter project for the Big Buddy Talker, which contains over 1000 words.
And don't forget to wear sunscreen!
Step 1: Materials Required
VEML6075 UV A&B sensor breakout - I got mine from Aliexpress for about 10 US$
5V -> 3V level shifter - required as the VEML6075 has a 3V logic. They are available for a few $/€.
Little Buddy Talker - available from www.engineeringshock.com at 25 CA$
Arduino Uno compatible microcontroller - I used a MonkMakesDuino, but any version should work
Breadboard and jumper cables
Speaker and/or head phones - depending on your application
USB power pack
A sunny day!
Step 2: Assembly and Usage
To get the device up and running is pretty straight forward:
- place your Arduino, level shifter, VEML6075 breakout and the Little Buddy Talker on your breadboard.
- Use one of the power rails on the bread board for 3V and one for 5V, connect them with the ground, 3V and 5V ports of your Arduino.
- connect the power ports of the level shifter to the appropriate power rails
- connect two data ports on the 5V side of the level shifter to SDA (A4) and SDA (A5) ports of the Arduino
- connect the corresponding data ports on the 3V side with the SCL and SDA ports of the sensor
- connect GND and VCC ports of the sensor to Ground and 3V
- connect the LBT to the Arduino and power: LBT 5V to 5V, LBT GD to ground, LBT DI to Arduino 11, LBT SC to Arduino 13, LBT CS to Arduino 10
Install the required software libraries in the IDE. The "VEML7065" library I used can be found at 14core (see next step). "Wire" is required for the I2C communication with the sensor, "SPI" for the communication with the Little Buddy Talker via SPI.
Run the provided script (see next step).
UV Raw, UV-A, UV-B and UV index values and other information are displayed on the serial monitor.
The measured the UV index is "spoken" by the LBT. The VEML6075 is calculating the UV index very precise, but as "point" is missing in the set of words of the LBT, values are given as:
"level" - value (as whole number, "zero" to "twelve") - "high"/"low" (if remainder is above or below 0.5), which should be good enough for most applications.
You may change the script to change how often measurements are taken and what is measured and send to the serial monitor. With a bit of programming you even may define threshold levels for a "warning" (LBT: 148/0x94), "alert" (LBT: 143/0x8f) or "alarm" (LBT: 142/0x8e).
To measure the maximum UV level you have to direct the sensor directly to the sun!
Step 3: The Script
To large extent, the script is a compilation of the work of others I would like to thank.
I used the VEML6075 script taken from 14core, https://www.14core.com/wiring-the-veml6075-ultraviolet-a-ultraviolet-b-light-sensor/, where you also can download the required VEML6075 library.
Another option would be the script and library by schizobovine: https://github.com/schizobovine/VEML6075
My script basically takes a measurement, does a bit of number interpretation and tells the Little buddy Talker which words to speak. As every of the 254 words on the LBT has an index number, e.g. 209 or 0xd1 for "level", you just have to send these numbers. Concerning the UV index values (0 to 12) I used the 'map' function to 'translate' the values to the words "zero" (54, 0x 36) up to "twelve" (66, 0x42).
As mentioned before, an UV index value as 4.3 is given as "four low" and 5.7 as "five high".
If you like to optimize the script, please have a look into the attached list of words contained in the LBT.
Step 4: Outlook
With a little additional effort it should be able to put all the pieces into a tiny box that would allow to measure the UV index where ever you go: while skiing, trekking, biking, having a picnic or at the beach.
An other option would be to place the sensor on a hat or cap and place the box with the electronics elsewhere.
Or to build a script that estimates the cumulative UV-dose you have received and tells you when you should leave for the shadow.
But never forget: Use sunscreen!!!
Step 5: Links and Additional Information
Below you find links to similar projects and further information on the topic:
DIY UV Meter With Arduino and a Nokia 5110 Display - https://www.instructables.com/id/DIY-UV-Meter-With... - is a very nice instructable using more everyday components and also give a lot of background information.
Summer Is Coming! Let's DIY a Carry-on UV Detector - https://www.instructables.com/id/Summer-Is-Coming-... - describes a nice mobile solution in a box with an LED bar as indicator. It is based on the Seed Grove platform using a breakout with an SI1145 light sensor. This sensor does not actually measure UV but calculates the UV index from visible and IR light intensities.
Another project using a SI1145 outbreak is found at Adafruit - https://learn.adafruit.com/adafruit-si1145-breakou... - offering the usual complete Adafruit solution. They even have a "Flora" of the sensor version you can fix on cloth.
Adafruit (and others) are also offering breakouts for the VEML6070 sensor. This sensor actually measures UV, but will give you precise measurement values, but not a easy to interpret UV index.
A lot of general information is found on the EPA Sunsafety website, e.g. at: https://www.epa.gov/sunsafety/uv-index-scale-1.
The data sheet for the VEML6075 can be found here: https://www.vishay.com/docs/84304/veml6075.pdf
And I would recommend to have a look on the following application sheet offering a lot of background information and from where I had taken the spectra images: https://www.vishay.com/docs/84339/designingveml607...