2024 | Scripting and Parametric Solar Optimization | Carnegie Mellon University, MSSD
Challenge: Accurately automating solar panel placement while handling complex solar exposure and shading within a parametric workflow.
Solution: A hybrid Rhino - Grasshopper system using Rhino scripting for precise calculations and Grasshopper with Conduit for real-time user control.
This project aims to develop a simple yet effective system for optimizing solar panel placements on rooftops in the Rhino interface. The system uses basic geometric principles to arrange the panels in a grid pattern while avoiding overlaps and shaded regions of the rooftop.
The Solar exposure is calculated for each panel, considering the shading factors to ensure panels are not placed in obstructed areas. In addition, the system recommends optimal tilt angles and spacing to further improve energy capture.
We have tried to come up with a practical, low-complexity approach to solar energy optimization for homeowners who seek to install solar panels on rooftops without complex radiation models. The end goal is to promote renewable energy adoption by simplifying the panel placement process while ensuring performance.
The Process:
The script automates rooftop solar panel placement by generating a grid based on available roof area, panel size, tilt, and azimuth. Solar exposure is calculated using beam, diffuse, and reflected radiation derived from the Ladybug sun path component. A ray-tracing method detects shading from context objects, removing obstructed panels to retain only the most efficient layout.
Users can dynamically adjust panel size, tilt, and spacing to test performance variations. Panel placement is achieved by rotating base planes at grid points according to tilt, with all solar calculations performed in radians for accuracy. A user-friendly interface built with the Conduit Plugin transfers Grasshopper sliders and toggles into an interactive UI, enabling real-time control and visualization in Rhino.
A key challenge was translating Rhino geometry into usable Grasshopper inputs, as context objects were read as single BREPs, limiting shading resolution. While solar radiation data was successfully retrieved from Ladybug, integrating it directly into Python for computation proved complex.