Introduction: DIY Pocket Watch
In this busy world keeping a track of time is must for better performance and being a hobbyist why not make a device to keep a track of time. Thanks to technology there exist devices called 'watch' but! when you make things by yourself the pleasure is different, so in this Instructable I am going to show you how I made this little tiny watch.
Step 1: The Idea
The idea is to keep it as simple as possible and to use minimal components.
- A display to show time.
- A component to keep track of time.
- Another component to take time and send it to display.
- And a power source.
// Flow chart of idea
Step 2: The Brain
The Brain should definitely be a microcontroller as it has advantages of easy programming and smaller size. At first I thought attiny85 would fit perfect but then it's limited GPIO pins made it difficult to procced with. then i decided to go with Atmega328p available in tqfp package but having negligible experience in soldering such small package I decided to go with arduino pro mini. Though this board is official retired but being open source they are still available.
Step 3: Display
A 0.91 inch OLED display module would be nice choice for display, making it look more modern but then the problem is it's power consumption, on an average it consumes 20mA which would be hefty for battery. While wondering what to use as a display I found this DVD display laying around. This display has four digits of seven segment display with some complementary leds. All leds are configured in as common cathode so to drive them we need to use method called mutliplexing which is nothing but driving each digit one by one so fast that it looks all are lit up at same time. Also Atmega328 can sink upto 20mA so the need of transistors is diminished. Each led works pretty fine with 100 ohm at 3.3v.
Step 4: RTC
Arduino pro mini can keep track but problem with it is it's power consumption. At 3.3v it draws about 3mA at 8MHz and plus we also have display which will also consume some of juice. I choose to go with DS3231 RTC chip as it is easy to use thanks to it's I2C interface. Also it keeps track of time more accurately than atmega328 and even consumes less power.
Step 5: Interface With User
Interface is simple - user wants time, device gives it for this we could have used complex stuff like hand gesture or as simple as a push button. So whenever user wants to know the time, push the button and time is been displayed on the display. The plan for the code was to detect if button is pressed, when pressed request current time from RTC and show it through display but then I realised that arduino pro mini has a push button to reset itself then why not use it so instead of checking up for button just take current time and display once and wait till next reset.
Step 6: The Twist
So now we have our components set arduino pro min, DVD display, DS3231 RTC chip and CR2032 button cell as power house with not so much thinking over the choice of battery. So with circuit in my mind I designed the PCB layout. And just before I could order PCB one thing stroke my mind ... if I consider RTC chip and button cell holder then they are already soldered in DS3231 RTC module then why waste resources in getting a custom PCB in fact in this case we just have solder power, I2C lines and the DVD display to pro mini. In case you want to take a look at PCB layout it is attached below.
Step 7: Problem With Button Cell
The mistake I made by not giving time to choose battery type paid it's price. When the device was powered through arduino uno as I used it to program arduino pro mini it worked fine but when it was being powered by button cell it behaved weirdly. After spending much time in finding out what the problem was - it was actually that CR2032 can provide current upto 2mA and the requirement of device was much than that so eventually I ended up using a lipo battery instead.
Step 8: The Code
The code may look long and repetitive but is actually simple to understand. Everything is put into setup section as we do things only once and wait until next reset command.
Flow of code is initialize everything -> take current time from RTC -> manipulate the data so that that it can used to multiplex the display digits -> and then display the data (time) for 2 seconds by multiplexing each digit one by one.
Step 9: Done !
I would have 3D printed a case for it but without a case it looks great as all components are exposed.