Hmm...I think I'm asking this sensor too much to report irradiance down to 0.01 mW/cm^2. The UV sensor outputs a voltage from 1.0 - 2.8v, based on the UV irradiance, and maps that to values between 0.0 - 15.0 mW/cm^2, so a tiny deviation in the voltage yields over a 10-fold difference in reported mW/cm^2.
For example: if I see even a 1% voltage swing, it maps out to +/- ~0.2-3 mW/cm^2 swing in UV readings as the norm. I've placed a LOT of smoothing on the data to keep a steady reading to 0.1 mW/cm^2 resolution, but even then it's fluctuating slowly by +/- 0.1 mW/cm^2. The smoothing also slows down the sensor reading...
Worst case, I'll have to drop my precision from reporting to the nearest 0.1 mW/cm^2 to the nearest whole number... Even then the irradiance value is still of interest when dialing in a resin for a given projector.
You may need a higher resolution ADC (Analog to Digital Converter). The Arduino defaults to 10 bit ADC. For something that sensitive you may want to use a 12 bit or higher.
It looks like that GaussianAverage library just might do the trick. At low intensities, I am able to maintain +/- 0.05 MW/cm^2. I'm going to fire up the projector later and see how it does at higher intensities.
I significantly refactored my code with the GaussianAverage library, and through successive iterations and testing on the DLP, I finally have the code stable to the point where I can hold +/- 0.1 mW/cm^2 tolerance.
Here's the spreadsheet showing the data (click the 'uv_radiometer_5' tab)
What was interesting is the readings from the UV sensor are very stable under normal lighting conditions. However, placing it in front of the DLP showed massive fluctuations. I think what I was seeing was the spinning color wheel causing the problem.
I'm still going to look at the 12-bit ADC, but I'm very happy with the results so far.
EDIT #1: Oh and I did find some areas where I should have used 'byte' and other areas where I used 'int' and should have used 'float'. I bet that didn't help things! D'OH
EDIT #2: I just did the math and I'm surprised I can even hold +/- 0.1 mW/cm^2 with the 10-bit ADC on the Uno. The 12-bit would certainly guarantee me more resolution....
Last Edit: Aug 29, 2014 11:45:19 GMT -5 by sgraber
This weekend I got my HC-06 bluetooth card from China ($5) and after a bit of fanegaling with the wiring and the sketch, I had the Arduino connecting and transmitting data with my Samsung Galaxy S4 smartphone using a bare-bones bluetooth terminal program from Google Play. Yay! Stupid me didn't realize that you connect TX -> RX and RX -> TX on the HC-06 -> Arduino wiring scheme (d'oh!)...
In the process, I also learned how to use MIT's App Inventor 2 (appinventor.mit.edu/explore/) for creating Android apps. Think of it as Scratch programming (scratch.mit.edu/) for Android.
I needed a basic app that would:
1) Connect/disconnect with a bluetooth device;
2) send/receive data from Arduino so I could read data from the UV sensor;
3) display UV data in mW/cm^2 on the smartphone screen;
4) allow the user to input their Public Key, Private Key, and Field Name from a data.sparkfun.com/ Stream that they've setup for recording data online;