The most interesting part, IMO, is the "SRAM with EEPROM backup" chip. It allows you to persistently save the clock hands' positions every time they're moved, without burning through the limited write endurance of a plain old EEPROM. And it costs less than $1 in single quantities. That's a useful product to know about.
So the way this works seems to be this: It's an SRAM and an EEPROM in one little package along with a controller that talks with each, with a little capacitor (this clock uses 4.7uf) placed nearby.
The SRAM part does all of the normal SRAM stuff: It doesn't wear out from reading/writing, and as long as it has power it retains the data it holds.
The EEPROM does all the normal EEPROM stuff: It stores data forever (on the timescale of an individual human, anyway), but has somewhat-limited write cycles.
The controller: When it detects a low voltage, it goes "oh shit!" and immediately dumps the contents of the SRAM into EEPROM. This saves on EEPROM write cycles: If there are no power events, the EEPROM is never written at all.
Meanwhile, the capacitor: It provides the power for the chip to perform this EEPROM write when an "oh shit!" event occurs.
When power comes back, the EEPROM's data is copied back to SRAM.
---
Downsides? This 47L04 only holds 4 kilobits. Upsides? For hobbyist projects and limited production runs, spending $1 to solve a problem is ~nothing. :)
(Hey Dang. Can we get a ban button? There's a few people here that are impossible to conduct rational discourse with. My sanity would improve if they were simply gone from my view.)
Particularly I like that I can get those large enough to stick a ring buffer from debug out on them as well and get crash logs from embedded systems despite the debug uart not being tethered to a dev machine.
The red projection is just the right brightness (at night) but it sucks that it's not wifi-enabled so you can't just get it to NTP sync (or hook up a GPS receiver). The projector part of the clock is a separate device that's attached to it via a ribbon cable. I would reverse engineer it myself but I haven't got the time.
Ideally, I'd want a matrix of LEDs projected on to the ceiling so I could get more info than just the time. Such clocks exist but they're super duper expensive! Example: https://buyfrixos.com/
As the author points out, the cheap quartz mechanism has no way of reporting the position of the hands (other than the hands themselves) and that you have to set the PULSETIME constant by the right number of milliseconds. If you're off by even a millisecond, that's going to accumulate quick enough that it would make a difference over even a single day, wouldn't it?
EDIT: as some have pointed out, the Lavet stepper theoretically accounts for this in that it steps exactly one tick after so many oscillations. That number of oscillations does not change so that's all you need to get right.
However, that basically just kicks the can down the road a bit in that if each step is not exactly 1/60th of a circle or bits wear down or get sticky or you have analog noise in there you will presumably still have a source of biased drift that you won't be able to detect. But maybe those affects are small enough that they don't matter for a wall clock.
I’m not saying these things matter much in this context.
The clock will still be far more accurate than purely mechanical version. And, re-synchronizing it is as trivial as turning the knob, just as you would for the all mechanical mechanism.
I got one for my daughter. The erratic ticking eventually became a distraction when she was studying, so we have retired it for now. But we got a lot of amusement out of it.
That's pretty genius for many ADHD-type folks. Only problem is a modern household has many clocks in view, so you'd need to commit to just not setting them.
Easy enough for wifi enabled ones: a UDP broadcast to discover other clocks on the network, then sync how you will.
For non-wifi-enabled clocks, perhaps something like a CH572 would do the trick: a $0.20 RISC-V microcontroller with BLE support that all the clocks in the same vicinity could use to talk to each other.
You could really mess with your neighbors if they had the same clocks and you were within range...
Those signals are just weird mess of coils, switches and resistors.
ESP32 clock speed may also be a contributing factor.
The receivers are inexpensive ($5-$10 for the kind of accuracy that's useful here) and it's not hard to parse the NMEA strings and PPS they output into a spooky-accurate internal clock. It only takes a few connections and an antenna to integrate GPS into an MCU like an ESP (or an SBC like a Raspberry Pi or a whatever).
Like, really: The hardware is ridiculously easy.
The only difficult part is the code. But as we can see from this posting, the clock-driving bits are already written and are available for use.
Just graft in the GPS parts instead of the NTP parts, add your DST/location rules if you really must (hint: that part is harder than it sounds), and send it.
(And if the code still seems arduous, then remember: This is the kind of work that a reasonably-focused person who is armed with a decent bot can put together over a cup of coffee or two, even if they don't speak C. It may be popular here to poo-poo the bot here, but it's completely OK to get some help. Don't let pride get in the way of having fun, learning things, and building neat stuff.
The tailor doesn't lament the invention of the cotton gin.)
[0] - https://www.nist.gov/pml/time-and-frequency-division/time-di...
Our office manager bought some US tuned radio wall clocks, and every now and then they would jump 8 hours forward. I assume it was down to solar weather making propagation changes (https://en.wikipedia.org/wiki/Sporadic_E_propagation)
https://en.wikipedia.org/wiki/Radio_clock#List_of_radio_time...
The point is to have fun and learn something, not really to solve a problem in a practical sense. The radio controlled clocks are extremely unreliable where I live.
Obviously it defeats the purpose a bit if I need to move my clock to a different wall and wait 12-24 hours for it to set itself.
Looking at the code [1], it looks like if the actual time is 1 hour ahead of the displayed time, then we get 10 pulses per second to leap forward. Otherwise, the clock stops running for an hour to fall back.
https://github.com/jim11662418/ESP8266_WiFi_Analog_Clock/blo...
I never considered making my own. Anyway, about two years ago this option popped up on Amazon. I've been happy with it:
https://www.amazon.com/OCEST-Wall-Clock-12Inch-Auto/dp/B0DJS...
I'm guessing internally it's not much different than the DIY clock in this submission.
It feels like in 2026 this should be something default and assumable, but alas, it is not.
I've made enough of these projects to know that ~75% need modifications that were not anticipated. For instance, I made a freezer temp sensor to php email for cases where the freezer stops working... but when I opened the freezer, it would send an email. I needed to sample for 30 minutes or something.
Maybe this was simple and you will be part of the 25% that work perfect and need 0 updating.
Post don't go into detail about schematic, but resistors and diodes around motor is to properly drive motor and protection from Inductive kickback (Flyback) https://www.microtype.io/blog/h-bridge-circuit-design
OK, here's how I'd do it: add small magnets at the bottom of the clock hands, and use the ESP's built-in Hall effect sensor to detect them. You can distinguish between hands using the magnetic field orientation.
As for the problem of detecting the current position of hands - Casio solved in in watches with their Tough Movement mechanism, where there is a tiny tiny hole in the dial with a sensor behind it - the watch will check if the hands are over it when expected, and if not, automatically adjust - so even if a watch suffers a major impact that might move the hands, they will re-allign themselves. Such a clever and simple solution.
Apparently the entity today known as Sharp sells “AccuSet(tm)” branded clocks that “automatically set time”… but they’re just factory pre-set with a button cell and they include a slider on the bottom to set a timezone offset (only for US timezones). If you’re lucky, the clock’s battery is still good and the clock “set itself” out of the box several minutes late.
If you’re unlucky - surprise, you get to manually set the time anyways.
https://www.amazon.com/Sharp-Digital-Alarm-AccuSet-Automatic...
I had a Casio wave ceptor (one with analog hands which it doesn't look like they sell anymore; I should have kept it). Anyway, looking at a model that's currently available (WV-200R, but there are 2 other models available), its manual says it gets signals from "Germany (Mainflingen), England (Anthorn), United States (Fort Collins), [and] Japan."
I was curious so I looked those up:
Mainflingen DCF77 77.5 kHz
Anthorn 60 kHz
Fort Collins WWVB 60 kHz
Japan looks like they have Mount Otakayoda 40 kHz, and Mount Hagane 60 kHz.
There are also some other countries that have time broadcasts (e.g. France. Anywhere else?) but not that that watch uses.
I know this because when my mother was visiting the US over a decade ago, she found a clock she felt was aesthetically perfect for her psychology practice room at her house.
Twice a year the clock changes its time to be 10 hours (or thereabouts) behind, no doubt due to daylight savings change over.
So she has to readjust the time whenever this happens which she says she doesn’t really mind.
There was a kerfuffle a few years back about the funding for the station being cut, but luckily that did not come to be.
Radio controlled ("atomic") clocks get their signal from WWVB, a long-wave station in Colorado. Its signal is just a carrier and data is encoded via pulse-width modulation and phase modulation. People have built local, low-powered WWVB transmitters to sync their watches and so forth in areas where WWVB is hard or impossible to receive. It's not a good idea to build one of these unless you REALLy know what you're doing because radio signals can travel farther than you expect, and the FCC takes a rather dim view of intentionally broadcasting your own signal (to any distance) without a license to do so.
There are weak wwvb simulators out there as phone apps and such that depend on using EMI to sync your clock. Like the old AM radio bus noise music hack. https://github.com/kangtastic/timestation?tab=readme-ov-file...