Moon Phase Clock (with Moon Lithopane)

Moon Phase Clock (with Moon Lithopane)

thingiverse

This is a Moon Phase Clock. Being broke 2 days before Mother's Day, I knew I needed something for the wife, but didn't have any cash. Scrolling through thingiverse, I though a maybe some glowing lithopane thing would be nice, when I stumbled upon benjaminedwardmorgan's Moon Lithopane... And it hit me. My wiccan wife often would miss the full moon - lucky for me, I am not a frog yet - and since I make all kinds of LED clocks, I decided to make for her, a Lunar Phase Clock. This is that clock. Instructions First print the Moon Lithopane, with preferably white filament, finishing off the last layer with black filament - using the filament-switch method. Then print the MoonPhaseDivider. Populate the divider with 3mm white (or any preferred color) LEDs. Each pair within each division should be wired in parallel. To power the LEDs, I used a Texas Instruments TLC5940 16 channel PWM LED Controller. To control the TLC5940 I used an Arduino Pro Mini clone. For timekeeping, a DS1307 or DS3231 is ideal - I use DS3231's... with the DS3231's killer accuracy, once set, I figure I may never need to set it again, so I didn't use any Human Interface Device. certainly, any LED control chip can be used, or Charlieplexing would work too, albeit somewhat dimly. Additionally, if you will be able to keep it PC connected, you could also forego using a Real Time Clock Module, and get time from your PC with numerous methods out there. Leaving out the Real Time Clock - related code, here is the meat of the sketch I used: void loop() { // hi speed testing routine nDay = nDay + 1; if (nDay >30) { nDay = 0; nMonth = nMonth + 1;} if (nMonth >12) { nMonth = 0; nYear = nYear +1; } // end hi speed testing delay(450); double AG, IP; long YY, MM, K1, K2, K3, JD; YY = nYear - floor((12 - nMonth) / 10); MM = nMonth + 9; if (MM >= 12) { MM = MM - 12; } K1 = floor(365.25 (YY + 4712)); K2 = floor(30.6 MM + 0.5); K3 = floor(floor((YY / 100) + 49) * 0.75) - 38; JD = K1 + K2 + nDay + 59; if (JD > 2299160) {JD = JD - K3; } IP = MyNormalize((JD - 2451550.1) / 29.530588853); AG = IP*29.53; int phase = 0; //day 0 if ((AG < 1.05466) && (phase == 0)) { Tlc.clear(); } //new; 0% illuminated //day 1 if ((AG > 1.05466) && (phase == 0)) { Tlc.set(1,bright); } //day 2 if ((AG > 2.10932) && (phase == 0)) { Tlc.set(2,bright); } //day 3 if ((AG > 3.16399) && (phase == 0)) { Tlc.set(3,bright);} //day 4 if ((AG > 4.21865) && (phase == 0)) { Tlc.set(4,bright);} //day 5 if ((AG > 5.27331) && (phase == 0)) { Tlc.set(5,bright); } //day 6 if ((AG > 6.32798) && (phase == 0)) { Tlc.set(6,bright); } //day 7 -- Half Moon if ((AG > 7.38264) && (phase == 0)) { Tlc.set(7,bright); } //day 8 if ((AG > 8.43731) && (phase == 0)) { Tlc.set(8,bright); } //day 9 if ((AG > 9.49197) && (phase == 0)) { Tlc.set(9,bright); } //day 10 if ((AG > 10.54663) && (phase == 0)) { Tlc.set(10,bright); } //day 11 if ((AG > 11.60130) && (phase == 0)) { Tlc.set(11,bright); } //day 12 if ((AG > 12.65596) && (phase == 0)) { Tlc.set(12,bright); } //day 13 if ((AG > 13.71063) && (phase == 0)) { Tlc.set(13,bright); } //day 14 if ((AG > 14.76529) && (phase == 0)) { Tlc.set(14,bright); } //day 15 if ((AG > 15.81995) && (phase == 0)) { Tlc.set(1,0); } //day 16 if ((AG > 16.87462) && (phase == 0)) { Tlc.set(2,0); } //day 17 if ((AG > 17.92928) && (phase == 0)) {Tlc.set(3,0); } //day 18 if ((AG > 18.98394) && (phase == 0)) { Tlc.set(4,0); } //day 19 if ((AG > 20.0386) && (phase == 0)) { Tlc.set(5,0); } //day 20 if ((AG > 21.09327) && (phase == 0)) { Tlc.set(6,0); } //day 21 if ((AG > 22.14794) && (phase == 0)) { Tlc.set(7,0); } //day 22 if ((AG > 23.20260) && (phase == 0)) { Tlc.set(8,0); } //day 23 if ((AG > 24.25726) && (phase == 0)) { Tlc.set(9,0); } //day 24 if ((AG > 25.31193) && (phase == 0)) { Tlc.set(10,0); } //day 25 if ((AG > 26.36659) && (phase == 0)) { Tlc.set(11,0); } //day 26 if ((AG > 27.42126) && (phase == 0)) { Tlc.set(12,0); } //day 27 if ((AG > 28.47592) && (phase == 0)) { Tlc.set(13,0); } //day 28 if ((AG > 29.53058) && (phase == 0)) { Tlc.set(14,0); } // update TLC Tlc.update(); } // end loop double MyNormalize(double v) { v = v - floor(v); if (v < 0) v = v + 1; return v; }

Download Model from thingiverse

With this file you will be able to print Moon Phase Clock (with Moon Lithopane) with your 3D printer. Click on the button and save the file on your computer to work, edit or customize your design. You can also find more 3D designs for printers on Moon Phase Clock (with Moon Lithopane).