Base on the previous Instructables - ATtiny Watch Core and more, I have made a real gadget, an ATtiny85 Ring Watch.

Step 1: Preparation


Today core subject, ATtiny85. Someone suggest me to use SOIC version to reduce the watch size and I found the coin cell mAh calculation method will count the battery voltage down to 2.0 V, so this watch require a low voltage version MCU to keep it stable. So I have ordered an ATTINY85V-10SU. (much expensive $_$)


Any ISP that can program ATtiny85, this time I am using a Digispark act as a littleWire. (http://digistump.com/board/index.php/topic,160.0.h...)


In order to meet the ring size, I choose CR1220, I expect it can last over half an year.


(Quote from previous project) Since the number of IO pins of ATtiny85 is very limited, I design display and further modules should all run in I2C. Power consumption and source availability are also important factors. I choose an OLED screen drive with SSD1306. It can find in 4 different sizes, 64x32 is the smallest one. (another sizes are 128x64, 128x32 and 64x48)

Watch Body

(Quote from previous project) It should be more stylish if make it by wood, but I am lazy one, so just print it out.

Transparent Cover

(Quote from previous project) A small piece of transparent PET plastic plate. It is transparent, provide enough support and very easy to get from many product packing.

Other Parts

  • A SOIC ISP clip for program ATTINY85V-10SU
  • 3 pieces of M2 screws
  • 3 buttons
  • 2 various resistors (more than 1k)
  • coated copper wires
  • thin mental plate for making a tailor-made battery holder
  • a SOP8 to DIP8 board
  • a little piece of multipurpose PC board for building button panel


Step 2: Setup Arduino with ATtiny85, EEPROM and TinyWireM support


Download Arduino 1.6.5 (1.6.6/7 have known compatible issue - "contains deprecated recipe.ar.pattern")


Download ArduinoTiny (if you not familiar with GitHub, simply click Download ZIP button)


Install Arduino

Run Windows installer / copy to Applications folder / simply unzip the file

Locate the Arduino path

If you install with Windows install, it should be:

C:\Program Files\Arduino

If you are using OSX, it should be:


Or any path you unzipped to.

Add ArduinoTiny Support

  1. Unzip ArduinoTiny-master.zip
  2. Copy tiny folder to the hardware folder under Arduino path

Add EEPROM support

In Arduino path, copy hardware\arduino\avr\libraries\EEPROM\EEPROM.h to hardware\tiny\avr\cores\tiny folder.

Install TinyWireM Library

  1. Run Arduino
  2. Select Sketch Menu -> Include Library sub-menu -> Manage Libraries...
  3. Search TinyWireM
  4. Select TinyWireM and click Install button
  5. Close Library Manager and close Arduino

Debug TinyWireM

TinyWireM have an know issue but not yet fixed, you can fix it easily:

  1. Locate TinyWireM library path (Windows: "My Documents\Arduino\libraries\TinyWireM"; OSX: "~/Documents/Arduino/libraries/TinyWireM")
  2. Modify "TinyWireM.cpp" line 53, save and close the file


if (USI_BufIdx >= USI_BUF_SIZE) return 0;       // dont blow out the buffer


if (USI_BufIdx >= USI_BUF_SIZE - 1) return 0;       // dont blow out the buffer

Step 3: Download Latest Source Code

Download the latest source code here:


If you are not familiar with GitHub, simply press Download ZIP button.

You may find further details in the following materials:

Step 4: Create Watch Body

Say it again, it should be more stylish if make it by wood, but I am lazy one, so just print it out.

Attached the Sketchup and STL file for reference.



Step 5: Solder MCU

This step is not essential, but it can make further solder work and reprogram easily.

Solder SMD reference:



Step 6: Create Tailor-made Button board

In previous project, I use 2 pins to handle 2 buttons input. It is too expensive for using an ATtiny85 IO pin for each input button. This time I try to use 1 IO pin to handle 3 buttons input.

Here is my setting:

set button - GND -> button -> PIN 2 (PB3, ADC3)

up button - GND -> 6.8k resistor -> button -> PIN 2

down button -> GND -> 68k resistor -> button -> PIN 2

Various resistors value should be ok, over 1k is recommended. 3 buttons have different resistor values, so it can use analogRead() function to distinguish which button pressed. I have measured some common resistor analog value for reference.

You may change the threshold value in ATtinyWatch.ino file if you use different resistor.




Step 7: Solder circult

Since the ring watch have a curved surface, it cannot solder all component on a single PC board. MCU, OLED, button panel and battery holder all connected by coated copper wire. VCC and GND coated copper wire should around 6-8 cm and require remove the coating at the middle connect point by sand paper. Other wires are a little bit shorter.

Here is the connection summary:


Pin 2: Button Panel

Pin 4: OLED GND -> Button Panel ->Battery Holder



Pin 8: OLED VCC -> Battery Holder

Step 8: Create Tailor-made Battery Holder

The ring is small and it can not fit a normal CR1220 battery holder. So we need some thin mental plate to tailor-made a smaller one. My thin mental plate is re-cycling from Dupont line header wastage, you may find other near you.

Cut a short piece of mental plate and solder to a coated copper wire.

Bent it and slot it to the ring body, do it both at positive and negative terminal.

Slot in the battery and test the connective.

Step 9: Program MCU

  1. Plug your ISP to the computer
  2. Run Arduino
  3. Open ATtinyWatch.ino from unzipped ATtinyWatch folder
  4. Select Tools menu -> Board sub-menu -> select ATtiny85
  5. Select Tools menu -> Clock sub-menu -> select 1 MHz (internal oscillator; BOD disabled)
  6. Select Tools menu -> Programmer sub-menu -> your ISP
  7. Remove CR1220
  8. Connect the SOIC ISP clip to ATtiny85 and press Upload button

ISP -> ATtiny85

MISO -> Pin 6

VCC -> Pin 8

SCK -> Pin 7

MOSI -> Pin 5

RESET -> Pin 1

GND -> Pin 4


If you have SSD1306 screen other than 64x32 resolution, you can change resolution define in ssd1306.h


// custom screen resolution by define SCREEN128X64, SCREEN128X32, SCREEN64X48 or SCREED64X32 (default)
#define SCREEN_128X64 //#define SCREEN_128X32 //#define SCREEN_64X48 // not tested //#define SCREEN_64X32

Other program ATtiny85 reference:







Step 10: Debug Screen

Press up or down button while no any date time field selected will enter Debug Screen.

The value means:

Row 1 (I): Watch Dog Timer(WDT) interrupt count, this value will be reset for each set time operation that over 1 hour interval

Row 2 (M): Auto tuned value of micro-second per WDT interrupt, this value will be updated for each set time operation that over 1 hour interval

Row 3 (V): Calibrated value of battery level in millivolt

Row 4 (T): ATtiny85 internal temperature sensor raw value, this value is accumulated last 64 sample values

Step 11: Calibrate Time

Press set button will switch selected Date and time fields, selected field will be highlighted.

Press up and down buttons to change the selected field value. Press set button while highlighting SECOND fields will finished set time operation.

For each set time operation that over 1 hour interval, the micro-second per WDT interrupt value will be auto tuned.

In my experience, holding voltage and temperature condition stable, it should not drift over 1 minute each day after auto tune :P

Step 12: Calibrate Voltage Reference

  1. Comment the #define lines of DEBUG_SCREEN_V and MULTI_METER_VOLTAGE in WDT_time.h
  2. Program the watch
  3. Record the debug screen V reading and multimeter measured voltage
  4. Uncomment and fill the DEBUG_SCREEN_V and MULTI_METER_VOLTAGE reading value
  5. Re-program the watch


#define DEBUG_SCREEN_V 4979 // put your screen reading here

#define MULTI_METER_VOLTAGE 4740 // put your multimeter reading here (in millivolt)

Step 13: Calibrate Temperature Reference

  1. Record the debug screen T reading and real temperature value 2 times in different temperature condition
  2. Uncomment and fill the DEBUG_SCREEN_T_1, TEMPERATURE_1, DEBUG_SCREEN_T_2 and TEMPERATURE_2 values
  3. Re-program the watch


#define DEBUG_SCREEN_T_1  21823L
#define TEMPERATURE_1     52000L
#define DEBUG_SCREEN_T_2  18757L
#define TEMPERATURE_2     12000L

Step 14: Assembly

Slot the OLED screen in the pit and place all the component at the right place.

Step 15: Screw Up

Assembly the ring and screw up the M2 screws to the ring body.

Step 16: Transparent Cover

  1. Cut a 16 mm width and 82 mm long PET transparent plastic plate
  2. Cut a little bit at 4 corners for easiler slot in
  3. Stick a 1.5 mm width double sided adhesive tape at 2 borders
  4. Slot in the transparent cover to the ring body at one side
  5. Stick the transparent cover to the ring body
  6. Slot in another side

Other transparent cover reference:


Step 17: Happy Time!

It's time to show what you have done to everyone!

What's next:

  • Slimmer ring body, as many one knows, SOP8 to DIP8 board is optional and the button panel can be smaller by replacing to SMD one
  • Add other I2C modules
  • Amber sensor to fine tune brighter screen under the sun
  • Research sync time method, GPS, WiFi + internet, BLE + mobile phone and more

Where did you buy the 64 X 32 OLED screen? All of the ones im finding only have the flex cable not something i can solder wires to.
something like that:<br>http://e22a.com/h.ZFXWrK?cv=AAIOmwuP&amp;sm=4f13d3
Any chance you have a link to a page in english? I cant figure out with button is the buy button.
I've got a question. I'm new in this topic and my english isn't very good: if we/you use an 128x64 oled display the ring would be bigger. So it would be possible to built in more Features and an another Attiny. Things like heartfrequenze, timer,..... if it is possible, would you help me to prepair it?
<p>Hi, this instructables just show how small a DIY Arduino watch can be. Actually, more feature isn't constrained by the screen size but the program size limit. 64x32 can show 4 rows information with 8 pixels height font, and you can also use function button to switch displaying details.</p>
<p>this is so cool</p>
<p>I've just seen this in the atmel newsletter! Congratulations! :D</p>
<p>how complex, but really impressive</p>
<p>What is that black clip called used to program the </p><p>ATtiny85? I want one.</p>
try google &quot;soic isp clip&quot;
<p>Nice job!</p>
<p>I think this could be a marketable product! Keep working on shrinking it down and perfecting it.</p>
<p>Ahah! I suppose I should have know this would have been coming soon! Now I might have to make it myself to see how much I can shrink it down... The screen and battery probably will be where most of the size is accumulated, I wonder if there's a smaller IC2 compatible OLED display. Then, a smaller/slimmer battery wouldn't be too hard to find, but you'd sacrifice battery life. What about a small solar panel to charge it? Then I suppose you could have a much smaller rechargeable battery, and since the person would be wearing it on their hand most of the time, it should get a decent amount of sunlight. And then, what about a more powerful MCU? If you managed to fit an ATMEGA chip and a accelerometer/gyro, then you'd almost have an apple watch, and you could even make a game or two using the LCD, maybe a fitness tracker, save battery by sensing when the person isn't looking at the watch, ect. Lots of possibilities! </p>
<p>Great! looking forward for your work!</p><p>I have further imagination: I can find a 18mmX38mm thin bendable OLED; some MCU that contain RTC inside; finger skin can measure more accurate heart rate than arm skin...</p>
<p>Yeah, if you could find some sort of integrated MCU with a gyro and RTC, that would be perfect. And yes, a bendable OLED would be pretty awesome. You<em> could</em> make a bendable circuit board, but it would have it's limits, seeing as the components wouldn't be able to bend, but I think it could still save some space.</p>
<p>I'm looking for a 64x32 Oled, but I can't find it. Any suggestion?</p>
<p>The one I buy is out of stock, seems remain this one.</p><p><a href="http://world.taobao.com/item/521224028928.htm?spm=a312a.7700714.0.0.nDS5MM#detail" rel="nofollow">http://world.taobao.com/item/521224028928.htm?spm=..</a></p>
<p>great nice work</p>
Unique and so sweet. A++.
<p>This is awesome. Good job.</p>
<p>can i use attiny85 20su ?? and oled128*64??? </p><p>do i need to change code?? </p><p>by the way great instructable :) looking forward to make mine :)</p>
Yes, it is compatible. You can find how to change the screen resolution at step 9.
<p>I'd like to buy one of these!</p>
<p>Great Idea.. But where to buy all the items.. I want to build it.</p>
try digikey.com / rs-components.com / taobao.com
<p>Wow, Awesome job! Very detailed. Keep up the good work!!-</p>
<p>Wow !</p><p>Nice work.Thanks for sharing.</p>
<p>Really impressive! Congratulations!</p><p>One suggestion to make things even smaller: use smaller tactile switches, such as these ones (3x6mm, half the size of the common 6x6mm you used here) </p><p>http://www.aliexpress.com/item/FREE-SHIPPING-100PCS-DIP-3X6X5MM-Tactile-Tact-Push-Button-Micro-Switch-Momentary-ROHS/1340356783.html</p>
<p>Well done getting it down to such a small form factor!</p>
<p>Its great to see some wearable computing.</p><p>This is a really nice example of the true spirit of wearable computing.</p><p>Not another closed-source piece of carceral jailware, but instead a wonderful piece of free-spirited Humanistic Intelligence!</p>
<p>Cool project and nice execution!</p><p>I've planned something similiar, a bracelet featuaring the 128x32px version of the display. I wanted to make mine rechargable, so I go the smallest lipos (301015) I could find. They're about 17x10x3mm including protection circuit and have a (claimed) capacity of 25mAh. I had to order them in a pack of 10, so I got plenty of spare parts. If you want one just drop me a PM :)</p>
<p>Looking forward to your project nqtronix :)</p>
<p>I'm afraid that it'll take a while, please be patient :)</p>
time doesn't matter, I have try near 1 year
thx, but I am afraid it is too expensive to delivery lipos to Hong Kong.
<p>Very nice project,<br>I have enjoyed your work using these small displays.<br>Keep up the good work :)</p>
<p>Hello, where did you buy your OLED display ?</p>
<p>I would add good crystal if you can spare two pins, or a real time clock chip like an MCP7940M. The AVRs internal RC oscillator is very unstable and will be off by several minutes per day with even a small temperature change. After calibration an MCP7940 can be within 3 seconds per month.</p>
<p>One way you could try to slim it is to make a flexible circuit.</p><p><a href="http://www.instructables.com/id/Flexible-Circuits/" rel="nofollow">http://www.instructables.com/id/Flexible-Circuits/</a></p><p>And you said you liked to print things:</p><p><a href="http://www.instructables.com/id/DIY-Flexible-Printed-Circuits/" rel="nofollow">http://www.instructables.com/id/DIY-Flexible-Print...</a></p><p>This could really slim down the size, and everything could be on a single circuit board rather than multiple connected. I've also seen small bluetooth receptors if you were to be able to make a version with a larger screen, maybe even a version on your wrist rather than finger, that could also show you notifications from your phone.</p><p>Overall really liked this instructable and might try it some times soon.</p>
Yes, I have read these instructables while research. But I would like to make the instructables as simple as possible. In this project, the most challenging part is building the ring body.
<p>Very nice! It's like the a Pip Boy slim. This will be one of my first projects when I get the $$$ to do Arduino programming.</p>
yes, this is an expensive hobby!
<p>Could you attach the Eagle files. I want to make a PCB to reduce the size.</p>
What eagle file? I only use multipurpose PC board in this project.
nice dude....i'll try it

About This Instructable




More by 陳亮:IoT LED Cheering Stick Arduino LTO Charger NodeMCU WebIDE 
Add instructable to: