Hi,
The PV will not pick up much energy indoors.
It needs to be outdoors in solar radiation, to get 4W out of it you will need a clear sky and the sun shining on it.
Tom...
Hi,
The PV will not pick up much energy indoors.
It needs to be outdoors in solar radiation, to get 4W out of it you will need a clear sky and the sun shining on it.
Tom...
Under Egypt`s sun
DMM and Arduino Measurments are very close
and , the load resistors They got too hot by the way
What about post #55 ?
Hi,
Yes that scaling would work, the 4W rating would have been calculated under laboratory conditions, so your scaling should be pretty accurate.
The resistors will get hot with 2W dissipated in then, the wattage rating is for how much power the resistor can tolerate before malfunction.
You will notice they haven't burnt out like the smaller 1/4W resistor did.
If you are going to make a board or something to mount your components on, it would be better to mount the load resistors up of the board or base by 15mm or so to allow air to flow around.
If you can get hold of a 10W 10 Ohm resistor that would be ideal, but you would still need to mount it so air could flow around it.
Looking at your results, 10 Ohm or even 8.2 Ohm might be better.
Your project looks good as a prototype. Well done.
Tom..
In fact, I would like to thank you very much for your great support, Professor Tom
I will try to modify some of the pieces and connections already to make it better
Hi , Now I have another problem ..
The whole project lies in making a mini-measuring station inside the greenhouse.. ok
Now that the solar radiation measurement code has been added, the soil temperature sensor stops working
Precisely because of the analogReference(INTERNAL);
I hope for help
This is the complete code
Small_Measureing_Station.zip (3.6 KB)
Not seen your code (zip files are dangerous), but try to
switch to analogReference(DEFAULT); before you take the soil reading.
switch to analogReference(INTERNAL); before you take the solar irradiation reading.
You might have to take two consecutive readings and experiment with some delay() in between,
because the A/D needs time to stabilize after switching.
Leo..
Hi,
When we started, I think that INTERNAL ref was chosen for stable measurements.
If you go to DEFAULT you will need to recalculate your potential divider and possible variations in radiation results.
What is your temperature sensor?
As @Wawa has aid, we need your code in tags like before.
Tom...
INTERNAL should be used for solar irradiation, because you must use the panel/cell in current mode. so as close to being 'shorted' as practical.
That (bringing panel voltage down to β€1.1volt Aref) also reduces dissipation in the burden resistor, and a fixed Aref also makes solar voltage (current to voltage) measurements stable. Default Aref (ratiomatric) would be unstable for this.
It shouldn't be too hard to switch between DEFAULT and INTERNAL.
Leo..
Hi,
I agree, I don't think the OP is looking a high sample rates.
Tom....
My temperature sensor is NTC resistor
// Using "NTC 10K Thermestor" to Detect Soil Temperature in Green House ..
void NTC_Setup(){
}
void NTC_Loop(){
Vo = analogRead(ThermistorPin);
R2 = R1 * (1023.0 / (float)Vo - 1.0);
logR2 = log(R2);
T = (1.0 / (c1 + c2*logR2 + c3*logR2*logR2*logR2));
T = T - 273.15;
//T = (T * 9.0)/ 5.0 + 32.0;
//LCD Print
lcd.setCursor (0,3);
lcd.print("Soil Temp : ");
lcd.print(T);
lcd.print(" C ");
//Serial Print
Serial.print("Soil Temperature: ");
Serial.print(T);
Serial.println(" CΩ");
}
Only this tab from the complete code has a problem with the radiation intensity reading code
Small_Measureing_Station.ino (3.6 KB)
Air_Temp_Humidity.ino (633 Bytes)
Pyranometer.ino (1.5 KB)
Soil_Humidity.ino (441 Bytes)
Soil_Temp.ino (560 Bytes)
I don't open .ino files either.
void NTC_Loop() {
Vo = analogRead(ThermistorPin);
....
Try this.
void NTC_Loop() {
analogReference(DEFAULT);
Vo = analogRead(ThermistorPin); // unused reading
delay(10);
Vo = analogRead(ThermistorPin);
....
Do the same thing before the solar reading.
Never tried it myself. Maybe someone who did can chime in.
Leo..
So far it is working very well
// Using "Small Solar Cell" to Detect Power Intensity of Sun Irradiation in Green House ..
void Pyranometer_Setup(){
}
void Pyranometer_Loop(){
Area = (PANEL_LENGTH * PANEL_WIDTH ) / 1000000.0 ; // (( PANEL_LENGTH * PANEL_WIDTH )/ 1000000 ) we are dividing by 10000000 get the area in square meters
analogReference(INTERNAL);
rawVolts = analogRead(A2); // unused reading
delay(10);
rawVolts = analogRead(A2); // read the ADC
//rawVolts = analogRead(A2); // read the ADC
voltsInput = (float)rawVolts * 1.1 / 1023.0 ; // convert the ADC to a voltage.
voltsLoad = voltsInput * 5.0;
Power = (voltsLoad * voltsLoad) / RESISTANCE ; // Calculating power P = V * V / R { maximum = (5.5)^2/14.3 = 2.11W
radiation = Power / Area;
Radiation = map ( radiation , 0 , 81 , 0 , 1000);
delay(1000);
//LCD Print
lcd.setCursor(0, 2);
lcd.print("Radiation: ");
lcd.print(Radiation);
lcd.print("W/m2");
//Serial Print
Serial.print(rawVolts);
Serial.println(" = rawVolts at A2 Pin"); //print the voltage AT the A0 pin
Serial.print(voltsInput);
Serial.println("V at A2 Pin"); //print the voltage AT the A2 pin
Serial.print(voltsLoad);
Serial.println("V across load Resistor");
Serial.print(Power);
Serial.println("Watts Power dissipated in Load Resistor");
Serial.print(Area, 3); // Prints value to 3 decimal points
Serial.println("Square Meters Panel Area");
Serial.println("======================================");
Serial.print("The Solar Radiation is %f W/M2 : ");
Serial.println(Radiation);
Serial.println("======================================");
}
// Using "NTC 10K Thermestor" to Detect Soil Temperature in Green House ..
void NTC_Setup(){
}
void NTC_Loop(){
analogReference(DEFAULT);
Vo = analogRead(ThermistorPin); // unused reading
delay(10);
Vo = analogRead(ThermistorPin);
R2 = R1 * (1023.0 / (float)Vo - 1.0);
logR2 = log(R2);
T = (1.0 / (c1 + c2*logR2 + c3*logR2*logR2*logR2));
T = T - 273.15;
//T = (T * 9.0)/ 5.0 + 32.0;
//LCD Print
lcd.setCursor (0,3);
lcd.print("Soil Temp : ");
lcd.print(T);
lcd.print(" C ");
//Serial Print
Serial.print("Soil Temperature: ");
Serial.print(T);
Serial.println(" CΩ");
}
But I will do the final experiment in the sun
The total amount of energy received at ground level from the Sun at the zenith depends on the distance to the Sun and thus on the time of year. It is about 3.3% higher than average in January and 3.3% lower in July (see below). If the extraterrestrial solar radiation is 1367 watts per square meter (the value when the EarthβSun distance is 1 astronomical unit), then the direct sunlight at Earth's surface when the Sun is at the zenith is about 1050 W/m2, but the total amount (direct and indirect from the atmosphere) hitting the ground is around 1120 W/m2.[5] In terms of energy, sunlight at Earth's surface is around 52 to 55 percent infrared (above 700 nm), 42 to 43 percent visible (400 to 700 nm), and 3 to 5 percent ultraviolet (below 400 nm).[6] At the top of the atmosphere, sunlight is about 30% more intense, having about 8% ultraviolet (UV),[7] with most of the extra UV consisting of biologically damaging short-wave ultraviolet.
Wikiwand
I did the experiment and all the sensors are working fine.
But reading the solar radiation I think it is completely insignificant!
Because according to studies, the maximum radiation that reaches the earth from the sun after subtracting the losses = 1000 watts / square meter approximately on average.
And the reading of the solar panel radiation according to the scale always gives 1000 watts / square meter in direct sunlight.
And the voltage and current will certainly be at its maximum for the plate
Is this reading correct?
That it always when going out in the sun .. the panel reaches the maximum voltage and current and gives 1000 watts / square meter?
like measurments in post #63
// Using "Small Solar Cell" to Detect Power Intensity of Sun Irradiation in Green House ..
void Pyranometer_Setup(){
}
void Pyranometer_Loop(){
Area = (PANEL_LENGTH * PANEL_WIDTH ) / 1000000.0 ; // (( PANEL_LENGTH * PANEL_WIDTH )/ 1000000 ) we are dividing by 10000000 get the area in square meters
analogReference(INTERNAL);
rawVolts = analogRead(A2); // unused reading
delay(10);
rawVolts = analogRead(A2); // read the ADC
//rawVolts = analogRead(A2); // read the ADC
voltsInput = (float)rawVolts * 1.1 / 1023.0 ; // convert the ADC to a voltage.
voltsLoad = voltsInput * 5.0;
Power = (voltsLoad * voltsLoad) / RESISTANCE ; // Calculating power P = V * V / R { maximum = (5.5)^2/14.3 = 2.11W
radiation = Power / Area;
Radiation = map ( radiation , 0.00 , 81.00 , 0.00 , 1000.00 ); //Scaling
delay(1000);
//LCD Print
lcd.setCursor(0, 2);
lcd.print("Radiation: ");
lcd.print(Radiation);
lcd.print("W/m2");
//Serial Print
Serial.print(rawVolts);
Serial.println(" = rawVolts at A2 Pin"); //print the voltage AT the A0 pin
Serial.print(voltsInput);
Serial.println("V at A2 Pin"); //print the voltage AT the A2 pin
Serial.print(voltsLoad);
Serial.println("V across load Resistor");
Serial.print(Power);
Serial.println("Watts Power dissipated in Load Resistor");
Serial.print(Area, 3); // Prints value to 3 decimal points
Serial.println("Square Meters Panel Area");
Serial.println("======================================");
Serial.print("The Solar Radiation is %f W/M2 : ");
Serial.println(Radiation);
Serial.println("======================================");
}
if i want to calculate the output Calibration / senstevity of the radiation measurment
Will it be 5 volts, which equals 1024 divided by the maximum reading (in the case of the existing load resistors = 81 watts / square meter approximately)
Which will it be: 5 / 81 = 0.0 61 volts / (watts / square meter)?
rawVolts = analogRead(A2);
Area = (PANEL_LENGTH * PANEL_WIDTH ) / 1000000.0 ;
voltsInput = (float)rawVolts * 1.1 / 1023.0 ;
Radiation = map ( radiation , 0.00 , 81.00 , 0.00 , 1000.00 );
Delete all the area, volts and map nonsense.
Make sure the panel outputs 1volt maximum in full noon sun by using the right value burden resistor. I guess about 2 ohm for a 500mA panel.
Then use this simple line.
Radiation = analogRead(A2) * 1.234; // calibrate
Leo..
thank you ..
Is this value the amount of maximum radiation?
Will the value here be in watts / square meter?
and how can i make panel (Epoxy panel with a capacity of 4 watts and a voltage of 5.5 volts and an area of 200 * 130 mm ) outputs 1volt maximum in full noon sun by using the right value load resistor ?
Isn't it supposed to output 5.5 volts and about 700 mA when exposed full noon sun !
Is this correct !
// Using "Small Solar Cell" to Detect Power Intensity of Sun Irradiation in Green House ..
void Pyranometer_Setup(){
}
void Pyranometer_Loop(){
/*
Area = (PANEL_LENGTH * PANEL_WIDTH ) / 1000000.0 ; // (( PANEL_LENGTH * PANEL_WIDTH )/ 1000000 ) we are dividing by 10000000 get the area in square meters
analogReference(INTERNAL);
rawVolts = analogRead(A2); // unused reading
delay(10);
rawVolts = analogRead(A2); // read the ADC
//rawVolts = analogRead(A2); // read the ADC
voltsInput = (float)rawVolts * 1.1 / 1023.0 ; // convert the ADC to a voltage.
voltsLoad = voltsInput * 5.0;
Power = (voltsLoad * voltsLoad) / RESISTANCE ; // Calculating power P = V * V / R { maximum = (5.5)^2/14.3 = 2.11W
radiation = Power / Area;
Radiation = map ( radiation , 0.00 , 81.00 , 0.00 , 1000.00 ); //Scaling
*/
Radiation = analogRead(A2) * 1.234; // calibrate
delay(1000);
//LCD Print
lcd.setCursor(0, 2);
lcd.print("Radiation: ");
lcd.print(Radiation);
lcd.print("W/m2");
//Serial Print
/*
Serial.print(rawVolts);
Serial.println(" = rawVolts at A2 Pin"); //print the voltage AT the A0 pin
Serial.print(voltsInput);
Serial.println("V at A2 Pin"); //print the voltage AT the A2 pin
Serial.print(voltsLoad);
Serial.println("V across load Resistor");
Serial.print(Power);
Serial.println("Watts Power dissipated in Load Resistor");
Serial.print(Area, 3); // Prints value to 3 decimal points
Serial.println("Square Meters Panel Area");
Serial.println("======================================");
*/
Serial.print("The Solar Radiation is %f W/M2 : ");
Serial.println(Radiation);
Serial.println("======================================");
}
The A/D outputs 0 to 1023, and you want to display 0 to about 1200 (Watt per square m).
The 1.234 correction factor is like map(). 1023 x 1.234 = 1262.
You need to calibrate this to what you want to display, by changing the last digit(s).
Panel area is irrelevant, because one cell produces the same current as 11 cells.
Voltage is irrelevant, because you should measure current of a shorted panel.
Only current is linear with solar irradiation, not voltage.
So put your Arduino aside, use your DMM and some low value burden resistors,
and see if you can get 1.0volt in full bright noon sun.
Leo..
Thanks ..
ok and i agree with you
I actually with this voltage divider I was able to get 1 volt out of the board
Edit :
The 1 volt was in the room lighting
The experiment was now conducted in direct sun
It gives 1.3 volts without the load resistance, and about 1.15 volts by connecting the load resistance (14.3 ohms).
But that allows voltage across the panel, which is bad for linearity.
Ideally there should be zero volt across the panel, or just enough for the Arduino.
Solar irradiation measures the power of the sun, which you can't measure in a room.
Leo..