New Project: Internet Alarm Clock

The goal for this project is to replace my old alarm clock (pictured above) with something that shows the key information I need to know in the morning. That information is:

  • The time
  • The weather
  • When the next bus is coming

Sure, my phone can do all those things. But it takes time to touch and thumb through the various interfaces, beginning with entering a pattern to unlock the screen. And of course apps exist to put the weather and next bus on my phone’s unlock screen, but this information is still not available at a glance because it requires a button press. Having all the key information – time, weather, next bus – always visible on a dedicated display is convenient because it takes next to no effort to access the information; all I have to do is turn my head.

What I want this alarm clock to have:

  • Ability to get the time from the internet
  • A classic red seven segment clock display visible from across the room. (Red so that it doesn’t interfere with my sleep.)
  • A small transflective character LCD screen to provide additional or clarifying information
  • Alarm functionality so it can wake me up in the morning
  • Ability to function as a classic alarm clock in the absence of a wireless internet connection

Here’s what I don’t want this alarm clock to have:

  • An FM radio, internet audio streaming, or any advanced audio capability beyond having an audible alarm. I don’t use the radio functionality of my existing alarm clock anyways so I might as well reduce the complexity of the design by not including this.
  • A graphic display or touchscreen functionality. Just old fashioned tactile buttons please!
  • The classic digital alarm clock interface that required holding down a “time set” or “alarm set” button while tapping a separate minute or hour advancing button.

In addition to solving a practical need, I am using this project to gain experience in the following technical areas:

  • PCB design – for the internal electronics
  • I2C bus – for the displays and buttons
  • State machines – for writing deterministic and easy-to-modify code
  • Wi-Fi modules – for time synchronization, as well as downloading weather and bus times
  • 3D printing – for the case/enclosure
  • Design for usability – I don’t want to frustrate my future self by creating a difficult to use device

This is a project I’ve actually been working on the past few months, so the next few posts will be to catch up with what I’ve done so far.