Sunday, January 31, 2016

The Little UV Sensor That Couldn't... Adafruit's SI1145

So, I'll be rather quick on this, since this little bit of silicon doesn't really deserve more. I am extremely disappointed in Adafruit for endorsing such a piece of crap, but I suppose I can't expect them to actually thoroughly test every bit of tech they put their name on, certainly not items which need spectral light sources to test. They're a business, not a hobbyist or enthusiast who would actually be looking to use the products. Still though, 5 minutes actually looking at the output data should have clued them in that something is off. I will be writing them about this though, even though I know that is a futile endeavor.

The SI1145 sensor is *NOT* a calibrated sensor. It has two photodiodes on chip, which are both sensitive to the same spectral range of 300-1100nm. The only difference is that the two have different response curves within that range. Neither photodiode has any passband filtration on it, so neither photodiode can tell if it is reading Visible or IR or UV light.

Furthermore, it is *NOT ACTUALLY CAPABLE OF MEASURING ULTRAVIOLET LIGHT*. If you wanted to use this sensor to actually measure relative levels of UV light you would need about $200 in UV-Pass optics and a custom enclosure to block out all stray Visible and IR light. I happen to have such a set of optics from my UV-Photography equipment and was able to fully test this sensor. You'd also then be shocked at how horribly INsensitive this sensor is to UV. The fact that it is sold as a "calibrated UV index" sensor is a joke.

In terms of raw sensitivity is also isn't very sensitive either! It does have a decent dynamic range, but the range is all on the high intensity side. It takes about 100mW/mm^2 to max out the sensor, much higher than raw sunlight. What makes it seem like it is more sensitive than it is, is that the damned thing never reports 0, even when in perfect darkness! I put the sensor inside a Lead Shielded "pig" and still got readings of ~254 on the IR and Vis channels.

Here's the response data from the datasheet:

As you can see if you wanted to use it to measure relative light levels of any specific type you would need the associated bandpass optics and a suitable stray light occlusion enclosure.

So, what does this chip actually do? It reads the Vis and IR photodiodes and reports the readings over I2C. The "UVindex" data that Adafruit's library produces is just a mathematical adjustment made to the visible light photodiode's reading. This is meant to approximate a UVindex reading that corresponds to a given visible light intensity in clear weather sunlight. It is the literal equivalent of saying "this is about as bright of light as it was outside that day when the weather channel said the UV index was X".

Without having to add on expensive bandpass optics the only use this sensor board has is to report non-qualitative, relative light intensity over I2C. It's basically a fancy CdS Photocell LDR. Use it as such, and nothing more.

I've rewritten the Arduino code for this sensor board to reflect my findings and output non-fictitious data. You may use it freely, but since it still uses Adafruit's library do give them credit if you use it.


  1. Do you know of a sensor that does a better job of sensing UV (or UV Factor)?

    Thanks - Rowan

  2. I've been playing with this sensor for a few days and have come to the same conclusion. The proximity sensing capability seems similarly useless. Back to the CdS photocell.

  3. I thought there was something wrong with me, but this thing is pretty useless.
    I wonder if it can detect if it's on fire?
    Time to find out.