Using small solar panel to measure irradiance

Hello forum,

I'm thinking of making a cheap solar irradiance sensor using a small solar panel. The panel has a voltage of around 16V in full sunlight.

Would it be feasible to make a voltage divider with two resistors and just measure the open circuit voltage as a measure of irradiance? Would this be accurate?

I could measure the voltage for a whole day and compare the chart with a professional weather station irradiation sensor located nearby to calibrate my readings, to convert the voltage to proper W/sq.m.

Thanks,
Hein

The open circuit voltage is not a measure of irradiance, which you should be able to verify quite easily.

The short circuit current is a measure of irradiance. An approximation for the irradiance can be obtained by measuring the voltage across a small resistor.

To arrive at a reasonable value for that resistor, we need to know what the short circuit current is for the panel.

Ah, ok. The panel I'm planning to use is 10W, voltage at Pmax = 17.8V and the short circuit current is 0.61A

Do I use ohm's law to get the resistor size to give me a range of 0 - 5v?

the short circuit current is 0.61A

If this is in full sun at noon, then I would use a load resistor of around 1.5 Ohms, 1 Watt or higher rating.

This will give you close to 1V in full sun (assuming that is the maximum irradiance of interest). In turn you can measure that voltage accurately using the internal 1.1V reference of a standard Arduino.

Eventually you can calibrate the readings against a professional instrument.

Gotcha, thank you very much.

How exactly would I connect the resistor?

The resistor goes across the output terminals of the panel. The negative panel lead should be connected to Arduino GND.

Connect that 1.5ohm resistor across the panel, and connect panel negative to Arduino ground.
Don't connect panel positive directly to the analogue pin, but via a 10k resistor.
That will protect the pin from frying in case the 1.5ohm resistor or connection to it fails.

Maybe you should use a ~6volt panel with much lower current capability.
Leo..

Like this:
solar.png

solar.png

Thank you sir - I'll post all my results here.

Don't forget to add this line to setup().

analogReference(INTERNAL); // use the internal ~1.1volt Aref

Leo..

First hickup - don't see to have any 1.5ohm resistors, the smallest I have in my stock is 10ohm. I found a smaller panel which will fit the project better, only has about 5 x 5" actual solar panel, with open circuit voltage of 7.5V. Doesn't have any label with specs, I have to guess its about 2.5 - 3W, which would be around 0.3A.

So I tried the 10ohm resistor, not having anything else, and it heat up to well over 100 deg (drop of spit on my finger sizzles away immediately and the paint melts off.) Gives a voltage of about 2.6 when the panel is in full sunlight. Can I use this resistor with all that heat it generates? I live in the middle of literally nowhere and getting the right size resistors would take two weeks.

Ok, added two more 10 ohm resistors in parallel and between the three of them I get 0.9V in full sun. Is this a valid way to get around it?

Other problem is that I use three other analog pins to read 5V signal coming from two temp probes and an anemometer. If I change the analog ref. to 1.1V I'd have to mess with those three too.

So should I leave the one resistor cooking away and read the 2.7V against 5V reference? Two resistors with 1.8V against 5V reference? Or is there a better way, until I get my 1.5ohm resisters?

Three 10ohm resistors in parallel is good.
You can try to switch between analogReference(DEFAULT); and analogReference(INTERNAL); in loop().
Take two readings and use the second one, because the A/D needs some settling time after being changed.
Leo..

Great tip, thanks. Sorted. Will let you know what happens.

Update on my irradiance sensor:

I switch between analogReference(DEFAULT) for my 5V sensors to analogReference(INTERNAL1V1)

void getIrradiance()
{
  analogReference(INTERNAL1V1);
  delay(100);
  Serial.println(analogRead(8));
  Serial.println(analogRead(8));
  Serial.println(analogRead(8));
        
  Serial.print(F("IRRADIANCE PIN VALUE: "));
  Serial.println(analogRead(8));
  Irradiance = analogRead(8) * 5.45;
  Serial.print(F("IRRADIANCE: "));
  Serial.println(Irradiance);
  showIrradiance();

  analogReference(DEFAULT);
  delay(100);
}

(I also do a few reads on analogReference(DEFAULT) before saving the reading as per your advice.)

The constant 5.45 is the value I came up with to get my irradiation value to match that of a proper nearby weatherstation's value at 12 noon.

It reads the irradiation well enough but the value jumps too much in my opinion - when reading every second the value may be in a range of 150 up or down, max irradiation here is around 1050W/sq.m so a variation that big at such a short interval is not accurate enough.

Any idea what may cause this? I tried reading the values at analogReference(DEFAULT) too, with same result.

You are on the right track, using 3 x 10 Ohms and the internal reference.

Average 10 or 100 readings to reduce the noise.

Did you first try the panel on it's own.
Without any other code. And with 1.1volt Aref in setup.

Where do you live (latitude), and how/what are you measuring.
Panel tilted towards the sun, or panel horizontally.

I just tried a 6volt/1watt panel with a DMM set to current (shorting the panel), and got a 1:8 current ratio within the hour (full sun to rain).
Leo..

Ok - she's purring like a kitten. Taking 100 samples and using the avg. did the trick. Thanks for all the tips.

Hein

Screen Shot 2018-10-14 at 10.09.22 vm..png

Wawa:
Did you first try the panel on it's own.
Without any other code. And with 1.1volt Aref in setup.

Where do you live (latitude), and how/what are you measuring.
Panel tilted towards the sun, or panel horizontally.

I just tried a 6volt/1watt panel with a DMM set to current (shorting the panel), and got a 1:8 current ratio within the hour (full sun to rain).
Leo..

Latitude = 16 South. I'm keeping the panel as flat as possible, measuring irradiance as one of the variables in a formula to calculate evapotranspiration in order to compensate irrigation rates on crops.

Thanks all.