Intro: Failure & Success Story of Arduino Watch
I decided to build an Arduino binary wrist watch. I know a wrist watch should be small in size as it is a wearable project. For that, I selected surface-mount device (SMD) like SMD LED, TQFP Atmega IC and SMD Resistor. As a controller I selected Atmega8A for it's low price. I wanted to use most popular DS1307 ic for date and time keeping. But, to keep it small the watch power source should be 3V coin cell or 3.7V li-ion battery. For normal operation DS1307 chip required 5V power source. That's why I was searching for a low voltage rtc and finally found DS3231 which is excellent one with built in oscillator and temperature sensor and perfect for operating by a 3V coin cell. After collecting DS3231, I started my work and passing three fail steps finally I have succeeded. It takes about two months for final and successful outcome.
Let's get started with fail story first because failure is the beginning of the success and we have a lots to learn from failure.
Step 1: Design of Circuit Diagram & PCB Layout
It was the first designed and lots of LED was used for the watch. At the time of PCB designing I felt it will be very hard to fixed & solder all the component in a limited space as a DIY project. So I decided to reduce the number of LEDs and I will explain it to next step.
Step 2: Second Version of Circuit and Layout
This was my second attempt to make the watch. As I faced some problems with large number of LEDs so I reduced total LEDs to eight, 7 for minutes and hours and another for identifying whether 7 LEDs indicating minutes or hours (it is not possible to display hours and minutes in same time using 7 leds). As a controller I used ATmega8A for its low cost. DS3231 was used as time keeper. If you notice the circuit diagram carefully you will see I did not use any external oscillator. I wanted to use internal 8MHz RC oscillator of ATmega8A chip. There was nothing wrong in the circuit diagram. PCB board was design considering DIY project. Traces size was 24mil and a ground polygon was used for minimum etching. I did not used solder mask because it was a home made PCB and masking materials was not available to me. A mini USB connector was attached to PCB for charging and burning purpose. The complete PCB was good enough but I faced two problems.
Problems I identified:
1. As ground polygon was added and I did not use solder masking to PCB so at the time of soldering I noticed different trace were sorted with ground by extra solder. I missed solder masking seriously.
2. After soldering ATmega8A to the board I power up the circuit by 3.7V Li-ion battery for testing. But unfortunately after 30-40 seconds I got a burning smell and found the IC is burned. I check VCC and GND by multimeter and found sorted.
Lesson I learned from the failure:
1. The trace size should not be greater than the pad size of IC for SMD component at the bottom of the IC otherwise the trace may be shorted.
2. Solder masking is really important for SMD components. If not possible any kind of polygon should not be used and there should be enough space or isolation between traces.
Step 3: Third Version of Circuit & PCB
After gathering some experience from the first and second steps I had redesigned the PCB again. That time I reduced the trace size to 16mil, removed the polygon and kept greater isolation between traces unlike previous. After making the PCB board I soldered the ATmega chip and RTC chip. Then, I tested the circuit with power and it was OK. After than, I soldered the the mini USB port and tried to burn program into the IC using arduino IDE. For burning the program,
First, I downloaded atmega8_noxtalutility for the arduino. It is a tool for Atmega8 for using the chip without any external crystal. I preferred it because I tried to make the thing simple and small in size.
Then, I burned the bootloader to the chip without facing any problem but when I tried to upload the program to the chip I got the message: signature error. Then I searched the solution in different websites and forums and followed the steps accordingly. Sometimes I modified the board file, some times use a capacitor between ground and reset pin of arduino but every times I failed. Then I tested the tools for a DIP version of the chip and I was successful. From that, I realized SMD version of ATmega8 can not program using serial communication (I may be wrong). I have to use ICSP programming technique.
Learning from the failure:
I should follow ICSP or ISP (In-system programming) programming mode for ATmega8A SMD microcontroller specially when using internal oscillator. For ISP programming using arduino you may follow this instructables. You may also follow Using an Arduino as an AVR ISP (In-System Programmer).
Step 4: Uploading Program Using Arduino ISP
I burned the bootloader for arduino serial programming but I failed to program the microcontroller. Then I determined to use arduino as ISP programmer. If you use arduino as ISP programmer to burn program into a ATmega microcontroller then burning bootloader is not necessary. You just write a program and upload it using "upload using programmer". First time I uploaded a test program successfully. But after modifying the program I tried to upload the program again and I got error message. I tried to find the problem and noticed I had select "arduino uno" board as target board. I changed the board to ATmega8-noxtal @8MHz but again got the error messagebut with different error type. That time I found wrong microcontroller selected message.
I tried different way to resolve the problem but I could not remove it. Finally I understood that I had damage the microcontroller by selecting wrong board as wrong board configure fuses of microcontroller incorrectly.
I had select the wrong board (Arduino UNO instead of ATmega8-noxtal @8MHz) and indirectly configured fuse register incorrectly that damaged the chip permanently.
Learning from the failure:
Before programming a microcontroller uasing Arduino ISP programmer you must select correct board otherwise microcontroller may be damaged by incorrect fuse configuration. (for serial programming it may not be a big problem because that time bootloader take care of fuse register)
Step 5: Re-designing the Circuit
After damaging two ATmega8A chip and failing to burn the program one thing came to my mind. Why I am not using LED dot matrix instead of some LED and it will make my watch more gorgeous. I decided to re-design the circuit using 8X8 1.2 inch dot matrix display. First I wanted to use bi-color matrix but I faced pin limitation and finally I determined to use single color display. I designed it for internal RC oscillator. But I faced some stability issues of the display and I again designed it using external crystal oscillator.
Components I used
- Arduino UNO for programming (Sparkfun)
- ATMEGA328P SMD (Digi-Key)
- DS3231 RTC (Maxim)
- 1.2 inch Dot-Matrix Display (display-leds.com)
- Crazyflie Nano Quadcopter - Spare battery (Seeed Studio)
- 100R SMD Resistor (8pcs) (R1-R8 in schematic)
- 10K SMD Resistor (3pcs) (RST, RSDA, RSCL in schematic)
- 16 MHz Crystal Tactile Button (2pcs)
- 1.5 inch X 1.3 inch PCB board
- Plastic Wrist Band
- Soldering Iron
- Soldering Paste
- Hand Drill
- Safety Glasses
Step 6: Final Circuit Diagram
Final circuit is made using LED dot matrix with two buttons to control the watch. See the circuit attached. In this stage I used ATmega238P instead of ATmega8 because the complete program size is greater then 8KB and ATmega8 is not enough for that. The circuit was designed using Eagle soft.
Step 7: Final PCB Layout & Complete PCB Board
The final PCB board is designed using Eagle software and board is made by toner transfer method. No polygon was used. Size of the board is slightly greater than the dot-matrix display.
Step 8: Soldering the Component
You should careful in SMD soldering. You may use hot air gun for soldering. I used soldering iron to solder all the component. Some image are attached. If you are new in SMD soldering you may follow this video:
Step 9: Giving Life to the Watch
Complete program was develop in Arduino environment and the program was uploaded using Arduino ISP programmer. Arduino sleep mode was used for power saving operation. Two clock modes are available, one is binary mode and another is digital mode. If you press mode change button during binary mode the digital clock will appear.
Step 10: The Final Watch
After 3 times failure finally my binary & digital watch was completed. I attached some image of complete watch. I have not explain in details here because I already explain A-Z of my final project in another instructables with details arduino code. Check it from here:
I think you would like it.
Step 11: Future Modification
“Failures are the pillars of success”. If you want to make something useful then you may face some difficulties. You may fail several times. Don't give up, believe in yourself, be brave and keep trying with confident. You must be successful. Failure is the first step to be successful in your work.
I want to update my watch in future. I will replace the dot matrix with graphics or OLED display. I also want to integrate digital compass into my watch.
“In order to succeed, your desire for success should be greater than your fear of failure.”– Bill Cosby