Charlotte Pendock, Emma Pellecer, Julianne Berry-Stoelze, Domi Swedek
18 October 2025
Systems Engineering & Six Sigma
Group: Trucker Gals
Introduction:
💡 Our objective was to answer Prompt #3 offered for the October 17th Six Sigma Hackathon, which was to design a quality control system to track and mitigate solar panel failure. To address this question, we defined the following parameters for what our objective with this code is to be:
Primary Audience Member: Operations & Maintenance Technician/Manager at the Solar Farm
Our R code is meant to have two functions:
Track solar panel failures by comparing measured solar flux being collected against the expected solar flux for that region using process control chart checks.
Predict solar panel failures due to the finite service lifetime of the panels using typical MTTF analysis with a Weibull lifetime distribution.
This is based off of our main fishbone analysis for what the two root causes of solar panel failures can be narrowed down to:
Calculating Ideal Solar Flux:
All analysis was done using solar irradiance equations from Energy Systems Engineering: Evaluation and Implementation, 4th Edition by Francis M. Vanek et al. The primary inputs required from the technician are the following to the main script[2]:
to be inputted into the solar flux calculation function:
Our Demonstration Solar Farm is Located in Syracuse, New York and runs year round, with a solar panel tilt angle of 30 degrees and a 0 degree azimuth.
While we are asking for a larger amount of inputs, we believe that these are relatively reasonable expectations for information that a solar farm already has, with the two data collection variables required on their end being the watts data array and information on the solar panel lifetime specifications. Any information for the other parameters (tilt of the solar panels on the farm, age of the panels, etc.) should require no additional analysis from the farm’s side as they are constant knowns based on where the solar farm is and how it is set up.
From this information and location, we made the following average solar irradiance per hour plot over the course of 12 months:
Then calculated the solar flux from the given irradiance given the equations below:
Where Where N is the day of the year starting from January 1, 𝜔 is the hour angle in degrees (+/- 15 degrees per hour from noon), L is the latitude, I is the available solar flux in that hour from Figure 4.1, 𝛽 is the tilt angle (+ south, - north), 𝛾 is the azimuth angle (0 is south, 180 is north), and In is the solar flux hitting the panel in that hour. All angles are in degrees. This ideal data can then be compared against true solar flux being measured at the farm to track any discrepancies and predict/track failures at any of the solar panel locations.
The two sample data arrays that we have representing true solar flux collected are as follows compared to the ideal Syracuse solar flux:
Process Control Charts to Quantify Standard Deviation Divergence
Tracking the performance of the solar panel farms was done by comparing the output power (in units of flux) at the farms per hour per day over the course of the year and comparing it to the calculated ideal solar flux based on the location of annual solar irradiation calculated in the graph above. A failure is defined using our process control chart criteria, which flags if a mean for the day drops below the lower control limit.
For each of the two data arrays used, the lower control limit and a weighted moving average were calculated. Only the lower control limit was used as we only care if the solar farm power production drops unexpectedly. A trailing weighted moving average was used to calculate the total statistics from the data set, as the amount of power that the solar farm can produce varies greatly throughout the year due to the seasons and weather trends. From this, the data is processed and flags the need for maintenance if the mean power of solar production for a day drops beneath the lower control limit. Data arrays and script generation for those can be found in /cloud/project/Sample Data & Generation, but are not included in the main customer script. These graphs can be found below:
The former graph is based on data set 1 and flags no maintenance necessary. The latter graph, has a drop in solar power production, and the script successfully flags maintenance necessary starting at day 250.
Now for the second aspect of our project: predicting the overall lifespan for the solar panels and providing a tool to optimize maintenance. The lifetime distribution of the solar panel is based on a Weibull lifetime distribution because it is representative of the slower decay of solar panels early in their lifetimes, and higher decay near the end of their lifetime, around 20-30 years depending on the model and environmental conditions. For the input data, a lambda of 0.04 matches this lifetime, while the Weibull scale parameter c is equal to 1/lambda. A reasonable shape factor of m = 4 was determined based on a balance of expected solar panel degradation throughout its life and expected degradation early in its lifetime [1].
The mttf function calculates the mean time to failure of an individual solar panel based on the MTTF formula for a Weibull distribution shown below. This function uses the parameter c calculated from lambda, the scale factor m, and the R function gamma.
\[ MTTF = c \, \Gamma\left(1 + \frac{1}{m}\right) \]
The fsolar function calculates the failure probability of a solar panel within the desired time period for the Weibull distribution. For data where the solar panels are not brand new, the following conditional probability formula is used to get the probability of a panel continuing to run given its current age.
\[ F(t) = 1 - e^{-\left(\frac{t}{c}\right)^m} \]
\[ P(\text{Outcome} = 1 \mid \text{Condition} = 1) = \frac{P(\text{Outcome} = 1 \,\&\, \text{Condition} = 1)}{P(\text{Condition} = 1)} \]
\[ F_{\text{cond}}(t) = \frac{F(t + \text{age}) - F(\text{age})}{1 - F(\text{age})} \]
The tsolar function outputs the time at which a given percentage of solar panels are expected to have failed on the solar farm by solving the Weibull failure function for time. For a 5% expected failure of solar panels and 1% total failure the tsolar function outputs the time it will take to reach these failure points. Similar to the fsolar function, conditional probability is used based on the age of the solar panels. These equations are shown below.
\[ F(t + a) = p \cdot (1 - F(a)) + F(a) \]
\[ t = c \cdot \left[-\log\left(1 - \left[p \cdot (1 - F(a)) + F(a)\right]\right)\right]^{1/m} - a \]
Finally, the lifetime_dist function calls both the fsolar and tsolar functions. It uses the fsolar function to graph the lifetime distribution of the solar farm by multiplying the resulting failure probabilities by the total number of solar panels on the farm. The calculated time in years from the tsolar functions are printed for the user to view, as these are convenient markers for required maintenance checks.
The output of this system are three graphs and four printed statements with the following information:
These outputs are intended to provide a holistic failure tracking and maintenance overview of the solar farm to give a maintenance company insights into the timeline of future maintenance checks and alerts to failed solar panels that should be replaced to keep the solar farm producing at its highest capacity.
Our function for running our database is main_run.R in our project database, with the following example inputs that our customer would put in to generate our analysis:
##EXAMPLE RUNS WITH VARIABLE INPUTS
results_sample1 = finalrun(0.04, 300, "syracuse_hourly.csv", 43, 30, 0,0,"Sample Data & Generation/sampledata1.csv")
results_sample2 = finalrun(0.04, 300, "syracuse_hourly.csv", 43, 30, 0,5,"Sample Data & Generation/sampledata2.csv")
[1] Tan, V., Dias, P. R., Chang, N., & Deng, R. (2022). Estimating the Lifetime of Solar Photovoltaic Modules in Australia. Sustainability, 14(9), 5336. https://doi.org/10.3390/su14095336
[2] Vanek, F. M., Albright, L. D., Angenent, L. T., Ellis, M. W., & Dillard, D. A. (2021). Energy Systems Engineering: Evaluation and implementation, Fourth edition. McGraw-Hill Education.
[3] (Image) Azimuth Angle vs. Tilt Angle on Solar Panel. GoSolarQuotes. https://gosolarquotes.com.au/azimuth-angle/
Sample Data Array Input
Variable Name | Units/Type | Example Value | Description |
---|---|---|---|
Day | days/numeric | 5 | Days throughout the year |
Hour | hours/numeric | 22 | Increasing total hours throughout the year |
Irradiance | Watts/m^2/numeric | 80.42 | Total energy that can be emitted by the sun |
Month | months/numeric | 3 | Current month in the year |
omega | angle/numeric | -180 | Hour angle in degrees |
delta | angle/numeric | -23 | Solar declination angle |
alpha_s | angle/numeric | 12 | Solar altitude angle |
gamma_s | angle/numeric | -15 | Solar azimuth angle |
theta_i | angle/numeric | 95° | Angle of incidence to the surface |
IncidentFlux | W/m^2/numeric | 273.76 | Total solar flux whole solar panel farm (sum of flux from all zones) |
ZoneFluxes_Zone1 | W/m^2/numeric | 23.18 | Total flux for for zone 1 of solar panel farm |
ZoneFluxes_Zone2 | W/m^2/numeric | 178.61 | Total flux for for zone 2 of solar panel farm |
ZoneFluxes_Zone3 | W/m^2/numeric | 12.92 | Total flux for for zone 2 of solar panel farm |
ZoneFluxes_Zone4 | W/m^2/numeric | 79.32 | Total flux for for zone 2 of solar panel farm |
ZoneFluxes_Zone5 | W/m^2/numeric | 245.12 | Total flux for for zone 2 of solar panel farm |
Solar Irradiance Input
Variable Name | Units/Type | Example Value | Description |
---|---|---|---|
Day | days/numeric | 5 | Days throughout the year |
Hour | hours/numeric | 22 | Increasing total hours throughout the year |
Irradiance | Watts/m^2/numeric | 80.42 | Total energy that can be emitted by the sun for the chosen area |