Solar panels are prone to dust and dirt accumulation on their surface, reducing energy output by up to 50%. Solar farms have gantry robots or sprinkler systems to clean panels on a regular schedule, but for micro installations such as those on top of street lamps, remote setups, or smaller home installations, cleaning on a regular basis is not economically feasible. Simply tracking the output of the panel is not enough. local cloud patterns and weather affect output, making it unclear whether a drop is due to weather or dust accumulation. The proposal is to design a predictive system which can detect when solar panel cleaning is required before the output drops. Solar panels industry is a place where keeping them clean at the right time will differentiate good profit and loss.

The goal is to predict when cleaning is actually needed using AI to monitor data from couple of different sensors, instead of cleaning on a fixed schedule or after the output is severely degraded. This project is close to my heart as it is part of my Masters Thesis where I developed a solar panel cleaning micro robot.
In this challenge I want to build a system where three solar panels ( 3×1W, 5.5V panels which i had previously bought from China) will have their output measured by the Arduino UNO Q alongside a suite of environmental sensors. One panel is kept mechanically clean at all times as a live reference. Whatever current it produces at any given moment is exactly what the other two panels should produce under the same sky. Any deviation is soiling is measured live, tagged automatically, no ambiguity.

The Proof of Concept
I was already in the process of making this project when this challenge was announced as it was complementing my masters thesis and this is how it looks.


The setup uses two identical solar panels side by side. One stays clean (the control), the other collects dust (the test panel). Both power the same resistor, so measuring voltage across each gives you the current through it.
The key insight: divide the test panel's current by the control panel's current. That ratio — the Performance Ratio — cancels out weather entirely, since both panels see the same sky. A clean panel gives PR ≈ 1.0. As dust builds, PR drops. That's the whole experiment.

With this rig, i had run into some reliability issues, Especially with my Odroid, But still managed to run it for 3 weeks. Ran the saved data through the Edge Impulse. I was not sure if i should do Anomaly Detection or Classifier, so I tried both.
K-means anomaly detection
Essentially, I will be feeding it good values and expect AI to find something which is not within the norms
Accuracy: 44.12% - Of actual anomaly windows, only 24.7% were correctly flagged; 75.3% were called no anomaly. The K-means clean cluster is not tight enough on the data to reliably eject soiled and alert windows as outliers. Now I am not a great AI Expert but 44 is a poor value even for a Proof of Concept.

Neural network classifier (3 classes)
The second impulse switches to a Classification learning block with 3 output classes: alert, clean, soiled. Alert is when Things have started to degrade and cleaning should be planned soon, whereas alert is when The panels output has degraded qutie significantly.

This turned out to have better results 67%. Now in the confusion matrix - There was some inconsistencies between Alert and Soiled, but given the small dataset, it is quite acceptable.
The Plan
The POC was a pain to collect the data. This setup was propped up on my Window AC. It was not fully facing the sun and there was times I initially "cheated" the data by actually blowing some sawdust as due to heavy rains, but then i had to discard the data, because I noticed that with rains, the AQI improved, Particular pollution dropped so the Solar panel and AQI sensor was giving contradictory readings, so i had to cut those data out.
Make the proper setup for Data Collection Module using
- 3 Panels stated Above
- The Omega Humidity and Temperature sensor (The temperature sensor here is way better than the one in SEN66)
- AQI using Sensirion SEN66
- UV Light
- Current Sensor - INA218B
- Custom STM32 Board which sends data over by CAN
Data Aggregation Module
- Arduino Q with MAX33041E Shield to Receive Data from data collection module
- Do local processing of the data and send it to Edge AI using data Ingestion AI
- Receive Updated model from Edge AI
- Perform check on the data received from test panel to classify data in real time
Also I initially planned to have Arduino Q as the system that collects the data and sends the data over CAN Bus but when i was researching online, i saw that Q is not really great for outdoor deployment. So I do not want to gamble with the very less time i have left. Usually My First post would have a unboxing but that i will defer to my next post.