August 11, 2025
Description
Much effort has been put into this design so please leave a like or comment—it would mean a lot to me! And if you have any feedback, I’d love to hear it!
A Python script auto-generates the sundial hour curves based on a users input parameters, including the provision of a fully interactive output plot. Here is an example:
See attached documentation for more details on how to use the program & configure your own custom flag sundial.
Each curve on the plot represents the shadow length of a horizontal gnomon over a range of days and for a specific hour. The gnomon is perpendicular to the dial plate & slides along the date scale located at the top edge of the sundial plate. The plate is mounted vertically and is designed to rotate horizontally around a pole in order to allow a user to face the plate towards the sun. In this design, the height of the sundial plate is related to the length of the gnomon and is determined by the longest shadow that would be cast over the course of a year, which occurs during the summer solstice & when the sun's altitude is at its maximum. The height of the computed output chart "H" is, therefore, determined as follows:
H= G∙tan (90 - ø +23.44) = G∙tan (113.44 - ø)
where ø is the latitude of the location of the sundial and G is the length of the gnomon.
Knowing the dimensions of the chart, the width is divided into 12 vertical bands representing the 12 months. Additional subdivisions are added to the months to represent 5 day periods.
The sun's altitude "a" must then be determined for a given hour (True Solar Time), for a particular day. The distance "D" of the hour line from the top of the chart is determined as follows:
D= G∙tan a
Finally, the hour lines are calculated and corrected for the Equation of Time (EoT) to provide Local Mean Time (LMT), then further corrected for the user’s longitude so that Standard Local Time can be displayed directly on the sundial. In summary, the relationship for the different types of times is as follows:
True Solar Time + EoT → Local Mean Time + Longitudinal Time Correction → Standard Time
Please note that the sundial does not compensate for Daylight Savings Time & so the user needs to mentally add an hour extra to the time displayed by the sundial.
The program allows the plot to be saved as an SVG, which is then imported into an image editor like Inkscape to remove any extraneous plot elements. The final step is to convert the plot into a 3D object by assigning it height using Blender. The 3D plot is then used to create the required sundial features over a reference (blank) rectangular plate.
In this example, the sundial plate was printed in 3 different colors; i.e. main dial plate background in white, text & curves in black & flag in red & white. Additionally, the plate is double-sided meaning that there is text & graphics on both sides.
The best approach to follow for printing is to have your colors defined as separate objects which can then be implemented as multiple prints, or as a single print. In either situation, each object needs to have its own STL file & the combining of these objects is achieved thru your slicer program. It is essentially the equivalent of having multiple objects “dropped” into a main part to create a complete assembly. The results are cleaner & clearer boundaries, with smooth surfaces and no emboss or deboss features. There at two common techniques to this approach:
In this design, text & graphics where assigned to individual objects each having 0.4mm heights. Subsequently, each object was assigned to an extruder based on their color. During printing, the objects where placed over their corresponding 0.4mm deboss areas located on the main dial plate.
For optimal print quality, it is always best to have text & graphics against the print bed. In this situation, this would result in printing two separate plates of half the total thickness which get sandwiched together during assembly to create a double sided part.
Both single & dual-plate design options are provided in the file section. More details are also available in the downloadable design instructions.
Thanks again for your support!
License:
Creative Commons — Attribution — Noncommercial — Share Alike