Queen’s University Rooftop Photovoltaic System Feasibility Study Report by: Samantha Creme, 6267901 Jessica Nicksy, 6206951 December 1, 2010 Situation background The feasibility of operating rooftop photovoltaic (PV) panels must be determined since Queen’s University is considering installing them. The energy output of the panels, the revenue that would be generated by the panels and the social and environmental impacts are all factors that must be included in this decision. _ Model 0 Model 1 Model 2 Known - average sun radiation: 200 W/m2 - area of available rooftop: 35000 m2 - solar panel efficiency of 10% - average radiation from sun during daylight: 1000 W/m2 - solar panel efficiency of 10% - area of available rooftop: 35000 m2 - varying radiation from sun (includes cloudy and rainy days) - solar panel efficiency of 10% - area of available Unknown Assumed -constant value of money -panels are always facing the sun - there are no cloudy or rainy days rooftop: 35000 m2 Models Model 0 computes the average revenue generated from the solar panels in one year. It is a very basic approximation and only takes into account the most important information about solar panels. Model 0 predicts that the energy generated from the solar panels would be 6,132,000 kWh and the revenue generated would be $3,305,148 in one year. Model 1 uses the ‘sun_position’ function to show how the energy generated depends on the time of day and the time of year. This model illustrates how the change in the sun position over time affects the amount of sun exposed to the solar panels. Thus the amount of energy generated is also affected. There are four different versions of model 1; dual axis, fixed zenith, fixed azimuth and fixed axes panels. The dual axis tracking panel version of model 1 shows the energy generated if the panels were to follow the movement of the sun throughout the entire day. This would therefore mean that the sun would always be directly hitting the panels. This model predicts that the energy generated from the solar panels would be 15,508,500 kWh and the revenue generated would be $8,359,081.50 in one year. This is unrealistically high because the code assumes that the radiation intensity hitting the panels once the sun is above the horizon is always 1000 W/m2, which is not accurate since the sun would not be as strong in the morning or night. The single axis tracking panel in which the zenith fixed is fixed shows the energy generated if the zenith was fixed and the azimuth followed the movement of the sun throughout the day. This would therefore mean that the sun would be hitting the panels at a different angle dependent on the time of day. This model predicts that the energy generated from the solar panels would be 14,574,000 kWh and the revenue generated would be $7,855,386 in one year. The single axis tracking panel in which the azimuth is fixed shows the energy generated if the azimuth was fixed and the zenith followed the movement of the sun throughout the day. This would therefore mean that the sun would be hitting the panels at a different angle dependent on the time of day. This model predicts that the energy generated from the solar panels would be 5,489,500 kWh and the revenue generated would be $2,958,840.50 in one year. The fixed axes tracking panel shows the energy generated if both the azimuth and the zenith were fixed. This would therefore mean that the sun would be hitting the panels at a different angle dependent on the time of day. This model predicts that the energy generated from the solar panels would be 7,317,200 kWh and the revenue generated would be $3,943,970.80 in one year. The fixed axes tracking panel is compared to the Goodwin Array for one week and for one year to determine if the model is a good estimate of the energy generated by actual solar panels. The comparison shows that the model does indeed exhibit the right pattern of energy generated, although the model over-estimates the power generated by solar panels. This illustrates that the model created is a good estimate of the power generated. From the graph, it is clear that that Goodwin array plot is slightly different from the model created. The Goodwin array is actual data and therefore illustrates energy that is generated completely randomly since factors such as the weather, maintenance and varying radiation affect the solar panels. Instead, the model shows how these factors affect the energy generated on average. As shown, the Goodwin array’s plots has random fluctuations, although the model shows an approximation of all this. Model 2 uses the ‘sun_position’ function to show how the energy generated depends on the time of day and the time of year. Model 2 includes all the calculations and estimates that model 1 does. In addition, model 2 also includes the effect of rainy or cloudy days on the total energy generated by the solar panels. As seen in the comparison of model 1 against the Goodwin array, there were some days where the model predicted the energy almost perfectly. However, other days, the energy generated by the actual solar panels was much lower than the predicted energy generated. The most probably cause of this is the effect of the weather, since on days where the sun is hardly exposed, the panels hardly generate any energy at all. In order to make a better model, it is approximated that throughout the entire year, half the days are rainy or cloudy, thus blocking the sun exposure. It is also approximated that on these days, the sun exposure decreases by half. Therefore, an overall approximation is made that a quarter of the approximated energy generated in model 1 would not be generated as a result of the weather. There are four different versions of model 2; dual axis, fixed zenith, fixed azimuth and fixed axes panels. The dual axis tracking panel version of model 2 shows the energy generated if the panels were to follow the movement of the sun throughout the entire day. This would therefore mean that the sun would always be directly hitting the panels. This model predicts that the energy generated from the solar panels would be 11,631,375 kWh and the revenue generated would be $6,269,311 in one year. The single axis tracking panel in which the zenith fixed is fixed shows the energy generated if the zenith was fixed and the azimuth followed the movement of the sun throughout the day. This would therefore mean that the sun would be hitting the panels at a different angle dependent on the time of day. This model predicts that the energy generated from the solar panels would be 10,930,000 kWh and the revenue generated would be $5,891,270 in one year. The single axis tracking panel in which the azimuth is fixed shows the energy generated if the azimuth was fixed and the zenith followed the movement of the sun throughout the day. This would therefore mean that the sun would be hitting the panels at a different angle dependent on the time of day. This model predicts that the energy generated from the solar panels would be 4,117,100 kWh and the revenue generated would be $2,219,117 in one year. The fixed axes tracking panel shows the energy generated if both the azimuth and the zenith were fixed. This would therefore mean that the sun would be hitting the panels at a different angle dependent on the time of day. This model predicts that the energy generated from the solar panels would be 5,487,900 kWh and the revenue generated would be $2,957,978 in one year. The fixed axes tracking panel is compared to the Goodwin Array for one week and for one year to determine if the model is a good estimate of the energy generated by actual solar panels. The comparison shows that the model does indeed exhibit the right pattern of energy generated, although the model over-estimates the power generated by solar panels. This comparison shows that model 2 is a more accurate estimate of the energy produced since it is a more of an average of the energy generated by the Goodwin array. Tracking system comparison Model 2, the best model, is used to compare the power generation capability and revenue possible from a rooftop PV system depending on how the panels are installed. The dual axis tracking panel predicts that the energy generated from the solar panels would be 11,631,375 kWh and the revenue generated would be $6,269,311 in one year. The fixed axes tracking panel predicts that the energy generated from the solar panels would be 5,487,900 kWh and the revenue generated would be $2,957,978 in one year. The single axis tracking panel in which the azimuth is fixed predicts that the energy generated from the solar panels would be 4,117,100 kWh and the revenue generated would be $2,219,117 in one year. The single axis tracking panel in which the zenith fixed predicts that the energy generated from the solar panels would be 10,930,000 kWh and the revenue generated would be $5,891,270 in one year. This shows that the dual axis tracking panel would generate the most energy and revenue. This makes sense since in this case; the panels would always be facing the sun and would therefore be receiving the most sunlight daily. In the other cases, where the panels are fixed somehow, the entire area of the panels is not always facing the sun and would therefore not receive as much sunlight. Revenue generation Using the dual-axis version of model 2, the annual revenue generated is approximated to be $6,269,311, assuming that each kW is sold for $0.539. If there was a change in electricity prices in Ontario between now and when the system could be operational, this could affect the revenue generated yearly. The time it would take for the system to be operational would be a maximum of 3 years. Assuming that the maximum the price of a kW would decrease by in 3 years is 50%, the revenue generated by a dual-axis version of model 2 would be $3,134,656. In order to calculate the maximum capital cost that would allow a 10-year payback period with a minimum acceptable rate of return (MARR) of 10%, the net present value of the project must be evaluated. Using the equation: N An NPV n , where NPV is the net present value, N is the number of years of the project, n 0 (1 i ) An is the next cash flow in year n and i is the effective interested rate (MARR). Using $6.2 million as an approximate of the revenue generated each year, NPV = 6.2M/(1+0.1) + 6.2M/(1+0.1)2 + 6.2M/(1+0.1)3 + 6.2M/(1+0.1)4 + 6.2M/(1+0.1)5 + 6.2M/(1+0.1)6 + 6.2M/(1+0.1)7 + 6.2M/(1+0.1)8 + 6.2M/(1+0.1)9 + 6.2M/(1+0.1)10 NPV = 34.25M , where M = million dollars The maximum capital cost would therefore be $34,250,000, which would have to include the cost of the panels and the installation costs. Ignoring the time value of money and using a MARR of 0%, the calculation to determine the NPV would be much simpler. It would be the revenue generated yearly multiplied by the payback period. This would be 6.2M x 10 years. The maximum capital cost would therefore be $62,000,000. This shows that the effect of the time value of money is of greatest importance. Ignoring the value of money would allow the maximum capital cost to almost double. The extra time needed to complete the more complex calculations that involve a minimum acceptable rate of return are clearly very important. Otherwise, the company would believe it could allot more money than possible to the installation costs and would not be repaid their investment in the desired payback period. Conclusions Installing solar PV panels can impact many different factors, including technical, social, environmental and financial. Solar PV panels provide an effective and environmentally friendly way to produce clean energy. Unlike other ways of acquiring energy, solar photovoltaic produce no atmospheric emissions and no radioactive waste. PV panels decrease the amount of coal that would have otherwise needed to be burned in order to provide energy, which in turn decreases the greenhouse gas effect. Although it does require energy to make and install the PV panels, the energy produced from the panels over their lifetime is far greater. Silicon, an abundant resource, is required in the production of the panels. Instead of using oil, gas, coal and other fossil fuels to produce energy, which are all limited resources, solar PV panels should be built. Considering the financial aspect, assuming that the price of solar panels is around $3 per watt of installed power, in order to install the solar PV panels at Queen’s it would cost approximately $20,000,000. This is less than the maximum installation cost of $34,250,000 for tracking panels. From a social aspect, the positive publicity that Queen’s University would have as a result of installing solar PV panels is another incentive to install them. Technically, the tracking panels are more complex than the fixed panels. They would be harder to produce and install. However, they do generate far more energy than fixed panels and therefore generate more revenue. Based on this analysis, it is recommended that the university should install tracking solar PV panels. However, the approximations made throughout this analysis and the uncertainties in some of the information could affect the results. As shown in the comparison with the Goodwin array, model 2 does illustrate a fairly accurate approximation of the energy generated throughout a year. The approximations made throughout the analysis could have been either underestimated or overestimated. Overall, the under-approximations and over-approximations would balance each other out. Appendix: MATLAB code Model 0 radiation.density=0.2; %kW/m^2 hrsinaday=24; %hrs/day efficiency=0.1; %10% efficiency area=35000; %m^2 days=365; %days/yr EnergyProduced=radiation.density*hrsinaday*efficiency*area*days Model 1, dual axis clear; location.longitude = -(76+30/60); % Kingston's longitude location.latitude = 44+(16/60); % Kingston's latitude location.altitude = 80; % Kingston's altitude time.year = 2010; time.month = 11; time.min = 00; time.sec = 00; time.UTC = -4; % 5 for EDT, 4 for EST radiation = 1000; efficiency = 0.10; area=35000; paybackrate = 0.713; %$/kWh index = 1; for m = 1:12; time.month = m; for z = 1:eomday(time.year,time.month); time.day = z; for i = 1:24; time.hour = i; sun = sun_position(time,location); azimuth(index) = sun.azimuth; zenith(index) = sun.zenith; panelangle=70; %from horizontal position=180; if zenith(index) < 90; power(index)=radiation*efficiency*area; if power(index)<0; power(index)=0; end else power(index)=0; end Energy(index)=1*power(index); EnergyTotal=EnergyTotal+Energy(index); kilowatthours=EnergyTotal/1000; date(index) = datenum([time.year time.month time.day time.hour time.min time.sec]); index= index + 1; end end end figure plot(date, power/1000) ylabel ('Power (kW)') xlabel ('Date') datetick('x','mm-dd','keepticks') EnergyProduced=kilowatthours Model 1, single axis tracking, zenith fixed clear; location.longitude = -(76+30/60); % Kingston's longitude location.latitude = 44+(16/60); % Kingston's latitude location.altitude = 80; % Kingston's altitude time.year = 2010; time.month = 11; time.min = 00; time.sec = 00; time.UTC = -4; % 5 for EDT, 4 for EST radiation = 1000; efficiency = 0.10; area=35000; paybackrate = 0.713 %$/kWh EnergyTotal=0; index = 1; for m = 1:12; time.month = m; for z = 1:eomday(time.year,time.month); time.day = z; for i = 1:24; time.hour = i; sun = sun_position(time,location); azimuth(index) = sun.azimuth; zenith(index) = sun.zenith; panelanglezenith=70; %from horizontal elevation(index)=90-zenith(index); if zenith(index) < 90; power(index)=radiation*efficiency*area*cosdeg(zenith(index)-panelanglezenith); if power(index)<0; power(index)=0; end else power(index)=0; end Energy(index)=1*power(index); EnergyTotal=EnergyTotal+Energy(index); kilowatthours=EnergyTotal/1000; date(index) = datenum([time.year time.month time.day time.hour time.min time.sec]); index= index + 1; end end end figure plot(date, power/1000) ylabel ('Power (kW)') xlabel ('Date') datetick('x','mm-dd','keepticks') EnergyProduced=kilowatthours Model 1, single axis tracking, azimuth fixed clear; location.longitude = -(76+30/60); % Kingston's longitude location.latitude = 44+(16/60); % Kingston's latitude location.altitude = 80; % Kingston's altitude time.year = 2010; time.month = 11; time.min = 00; time.sec = 00; time.UTC = -4; % 5 for EDT, 4 for EST radiation = 1000; efficiency = 0.10; area=35000; paybackrate = 0.713 %$/kWh EnergyTotal=0; index = 1; for m = 1:12; time.month = m; for z = 1:eomday(time.year,time.month); time.day = z; for i = 1:24; time.hour = i; sun = sun_position(time,location); azimuth(index) = sun.azimuth; zenith(index) = sun.zenith; panelangle=70; %from horizontal position=180; if zenith(index) < 90; power(index)=radiation*efficiency*area*cosdeg(90-azimuth(index)+position); if power(index)<0; power(index)=0; end else power(index)=0; end Energy(index)=1*power(index); EnergyTotal=EnergyTotal+Energy(index); kilowatthours=EnergyTotal/1000; date(index) = datenum([time.year time.month time.day time.hour time.min time.sec]); index= index + 1; end end end figure plot(date, power/1000) ylabel ('Power (kW)') xlabel ('Date') datetick('x','mm-dd','keepticks') EnergyProduced=kilowatthours Model 1, fixed axes, comparison with Goodwin panels for a week clear; location.longitude = -(76+30/60); % Kingston's longitude location.latitude = 44+(16/60); % Kingston's latitude location.altitude = 80; % Kingston's altitude time.year = 2010; time.month = 11; time.min = 00; time.sec = 00; time.UTC = -4; % 5 for EDT, 4 for EST radiation = 1000; efficiency = 0.10; area=35000; paybackrate = 0.713 %$/kWh EnergyTotal=0; index = 1; for m = 1:12; time.month = m; for z = 1:eomday(time.year,time.month); time.day = z; for i = 1:24; time.hour = i; sun = sun_position(time,location); azimuth(index) = sun.azimuth; zenith(index) = sun.zenith; panelangle=70; %from horizontal position=180; if zenith(index) < 90; power(index)=radiation*efficiency*area*cosdeg(90-azimuth(index)+position); if power(index)<0; power(index)=0; end else power(index)=0; end Energy(index)=1*power(index); EnergyTotal=EnergyTotal+Energy(index); kilowatthours=EnergyTotal/1000; date(index) = datenum([time.year time.month time.day time.hour time.min time.sec]); index= index + 1; end end end figure plot(date, power/1000) ylabel ('Power (kW)') xlabel ('Date') datetick('x','mm-dd','keepticks') EnergyProduced=kilowatthours Model 1, fixed axes, comparison with Goodwin panels for a year clear; location.longitude = -(76+30/60); % Kingston's longitude location.latitude = 44+(16/60); % Kingston's latitude location.altitude = 80; % Kingston's altitude time.year = 2010; time.month = 11; time.min = 00; time.sec = 00; time.UTC = -4; % 5 for EDT, 4 for EST radiation = 1000; efficiency = 0.10; area=35000; paybackrate = 0.713 %$/kWh EnergyTotal=0; index = 1; for m = 1:12; time.month = m; for z = 1:eomday(time.year,time.month); time.day = z; for i = 1:24; time.hour = i; sun = sun_position(time,location); azimuth(index) = sun.azimuth; zenith(index) = sun.zenith; panelangle=70; %from horizontal position=180; if zenith(index) < 90; power(index)=radiation*efficiency*area*cosdeg(90-azimuth(index)+position); if power(index)<0; power(index)=0; end else power(index)=0; end Energy(index)=1*power(index); EnergyTotal=EnergyTotal+Energy(index); kilowatthours=EnergyTotal/1000; date(index) = datenum([time.year time.month time.day time.hour time.min time.sec]); index= index + 1; end end end figure plot(date, power/1000) ylabel ('Power (kW)') xlabel ('Date') datetick('x','mm-dd','keepticks') EnergyProduced=kilowatthours Model 2, dual axis clear; location.longitude = -(76+30/60); % Kingston's longitude location.latitude = 44+(16/60); % Kingston's latitude location.altitude = 80; % Kingston's altitude time.year = 2010; time.month = 11; time.min = 00; time.sec = 00; time.UTC = -4; % 5 for EDT, 4 for EST radiation = 1000; efficiency = 0.10; area=35000; paybackrate = 0.713 %$/kWh EnergyTotal=0; index = 1; for m = 1:12; time.month = m; for z = 1:eomday(time.year,time.month); time.day = z; for i = 1:24; time.hour = i; sun = sun_position(time,location); azimuth(index) = sun.azimuth; zenith(index) = sun.zenith; panelangle=70; %from horizontal position=180; if zenith(index) < 90; power(index)=radiation*efficiency*area*cosdeg(90-azimuth(index)+position); if power(index)<0; power(index)=0; end else power(index)=0; end Energy(index)=1*power(index); EnergyTotal=EnergyTotal+Energy(index); kilowatthours=EnergyTotal/1000; date(index) = datenum([time.year time.month time.day time.hour time.min time.sec]); index= index + 1; end end end figure plot(date, power/1000) ylabel ('Power (kW)') xlabel ('Date') datetick('x','mm-dd','keepticks') EnergyProduced=kilowatthours Model 2, single axis tracking, zenith fixed clear; location.longitude = -(76+30/60); % Kingston's longitude location.latitude = 44+(16/60); % Kingston's latitude location.altitude = 80; % Kingston's altitude time.year = 2010; time.month = 11; time.min = 00; time.sec = 00; time.UTC = -4; % 5 for EDT, 4 for EST radiation = 1000; efficiency = 0.10; area=35000; paybackrate = 0.713 %$/kWh EnergyTotal=0; index = 1; for m = 1:12; time.month = m; for z = 1:eomday(time.year,time.month); time.day = z; for i = 1:24; time.hour = i; sun = sun_position(time,location); azimuth(index) = sun.azimuth; zenith(index) = sun.zenith; panelangle=70; %from horizontal position=180; if zenith(index) < 90; power(index)=radiation*efficiency*area*cosdeg(90-azimuth(index)+position); if power(index)<0; power(index)=0; end else power(index)=0; end Energy(index)=1*power(index); EnergyTotal=EnergyTotal+Energy(index); kilowatthours=EnergyTotal/1000; date(index) = datenum([time.year time.month time.day time.hour time.min time.sec]); index= index + 1; end end end figure plot(date, power/1000) ylabel ('Power (kW)') xlabel ('Date') datetick('x','mm-dd','keepticks') EnergyProduced=kilowatthours Model 2, single axis tracking, azimuth fixed clear; location.longitude = -(76+30/60); % Kingston's longitude location.latitude = 44+(16/60); % Kingston's latitude location.altitude = 80; % Kingston's altitude time.year = 2010; time.month = 11; time.min = 00; time.sec = 00; time.UTC = -4; % 5 for EDT, 4 for EST radiation = 1000; efficiency = 0.10; area=35000; paybackrate = 0.713 %$/kWh EnergyTotal=0; index = 1; for m = 1:12; time.month = m; for z = 1:eomday(time.year,time.month); time.day = z; for i = 1:24; time.hour = i; sun = sun_position(time,location); azimuth(index) = sun.azimuth; zenith(index) = sun.zenith; panelangle=70; %from horizontal position=180; if zenith(index) < 90; power(index)=radiation*efficiency*area*cosdeg(90-azimuth(index)+position); if power(index)<0; power(index)=0; end else power(index)=0; end Energy(index)=1*power(index); EnergyTotal=EnergyTotal+Energy(index); kilowatthours=EnergyTotal/1000; date(index) = datenum([time.year time.month time.day time.hour time.min time.sec]); index= index + 1; end end end figure plot(date, power/1000) ylabel ('Power (kW)') xlabel ('Date') datetick('x','mm-dd','keepticks') EnergyProduced=kilowatthours Model 2, fixed axes, comparison with Goodwin panels for a week clear; location.longitude = -(76+30/60); % Kingston's longitude location.latitude = 44+(16/60); % Kingston's latitude location.altitude = 80; % Kingston's altitude time.year = 2010; time.month = 11; time.min = 00; time.sec = 00; time.UTC = -4; % 5 for EDT, 4 for EST radiation = 1000; efficiency = 0.10; area=35000; paybackrate = 0.713 %$/kWh EnergyTotal=0; index = 1; for m = 1:12; time.month = m; for z = 1:eomday(time.year,time.month); time.day = z; for i = 1:24; time.hour = i; sun = sun_position(time,location); azimuth(index) = sun.azimuth; zenith(index) = sun.zenith; panelangle=70; %from horizontal position=180; if zenith(index) < 90; power(index)=radiation*efficiency*area*cosdeg(90-azimuth(index)+position); if power(index)<0; power(index)=0; end else power(index)=0; end Energy(index)=1*power(index); EnergyTotal=EnergyTotal+Energy(index); kilowatthours=EnergyTotal/1000; date(index) = datenum([time.year time.month time.day time.hour time.min time.sec]); index= index + 1; end end end figure plot(date, power/1000) ylabel ('Power (kW)') xlabel ('Date') datetick('x','mm-dd','keepticks') EnergyProduced=kilowatthours Model 2, fixed axes, comparison with Goodwin panels for a year clear; location.longitude = -(76+30/60); % Kingston's longitude location.latitude = 44+(16/60); % Kingston's latitude location.altitude = 80; % Kingston's altitude time.year = 2010; time.month = 11; time.min = 00; time.sec = 00; time.UTC = -4; % 5 for EDT, 4 for EST radiation = 1000; efficiency = 0.10; area=35000; paybackrate = 0.713 %$/kWh EnergyTotal=0; index = 1; for m = 1:12; time.month = m; for z = 1:eomday(time.year,time.month); time.day = z; for i = 1:24; time.hour = i; sun = sun_position(time,location); azimuth(index) = sun.azimuth; zenith(index) = sun.zenith; panelangle=70; %from horizontal position=180; if zenith(index) < 90; power(index)=radiation*efficiency*area*cosdeg(90-azimuth(index)+position); if power(index)<0; power(index)=0; end else power(index)=0; end Energy(index)=1*power(index); EnergyTotal=EnergyTotal+Energy(index); kilowatthours=EnergyTotal/1000; date(index) = datenum([time.year time.month time.day time.hour time.min time.sec]); index= index + 1; end end end figure plot(date, power/1000) ylabel ('Power (kW)') xlabel ('Date') datetick('x','mm-dd','keepticks') EnergyProduced=kilowatthours References http://www.livingin-canada.com/climate-ottawa.html http://www.tradingeconomics.com/Economics/Inflation-CPI.aspx?Symbol=CAD http://www.solarpanelinfo.com/ http://fit.powerauthority.on.ca/Page.asp?PageID=122&ContentID=10195&SiteNodeID=1098&B L_ExpandID=259 http://www.pvresources.com/en/environment.php http://www.scribd.com/doc/34182066/Environmental-and-Social-Impact-of-SolarPhotovoltaics http://www.trustyguides.com/solar-panels2.html