Artyom's Wristwatch From Metro

by Donut Studio in Circuits > Wearables

723 Views, 10 Favorites, 0 Comments

Artyom's Wristwatch From Metro

Cover_2.jpg
Cover_1.jpg
Done_3.jpg

There's always been something super cool about bringing fictional gadgets and tools to life. Just think about the Make It Real series from Hacksmith Industries. Holding a real-life version of something from your favorite game or movie? That’s just an awesome feeling.

Now, most of the stuff you recreate probably won’t be super useful in day-to-day life. But what if you could build something that actually is useful - and still gives you that nostalgic kick?

I’ve played all the Metro games and totally love them. One gadget really stood out to me: Artyom’s wristwatch. It works as a gas mask timer and a visibility indicator in the game. I thought, “Hey, this would make a cool first electronics project!”

Spoiler: it wasn’t.

This was actually the first electronics project I ever tried - and I failed at it. A lot. But now? Things are different. Over the years, I’ve learned how to design circuits, make PCBs, solder properly, and write code. So now it’s finally time to go back to that awesome little gadget… and build it for real.

If you want to build one too, you’ll find all the project files in the GitHub repo - just like always.

https://github.com/KonradWohlfahrt/MetroWristwatch

Keep in mind that this project is absolutely not for beginners - I struggled too, but here we are now ;)

Supplies

Supplies.jpg

Electronic components:

  1. custom pcb (gerber file)
  2. TH CR927 Battery Clip (LCSC)
  3. 2x 100nF 0805
  4. PH2.0 2 Pin Connector (optional)
  5. 4x 7 Segment Digit SMD, Yellow (Everlight ELSS406)
  6. 2x 0805 SMD LED, Yellow
  7. 5mm LED, Blue
  8. 2x MMBT2222A
  9. 7mm LDR
  10. 3x 1k 0805
  11. 2x 10k 0805
  12. 3x 220r 0805
  13. 2x Horizontal Tactile Switch 6x6x3mm
  14. SK12D07VG3
  15. TM1637
  16. DS1302
  17. 32.768 kHz Crystal (6pF!)
  18. XIAO nRF52840
  19. 100mAh LiPo Battery
  20. a few cables (small & flexible)

Other components:

  1. 40mm acrylic disc
  2. CR927 Battery
  3. Metal Mesh
  4. Glue
  5. Tape
  6. Silver spray paint
  7. 2x Threaded Heat Inserts M3 h:3mm d:4.2mm
  8. 2x M3x8mm screw
  9. Backpack strap (for bracelet)

Reference, Design Choices and Testing

Testing.jpg

The first step in tackling a fan project like this is doing some research. I started by digging around online for references. On Fandom, I found some sketches of the bracer and the watch, and on YouTube, I came across a few different builds from other creators. The design features four individual nixie tubes, a few electronic components, and a blue LED on the outside - all packed into a sleek metal case. With that general direction in mind, the goal was clear: let’s bring this watch to life!

Easier said than done, though. Recreating fictional gadgets can be tricky - they don’t always follow the rules of our physical world, and sometimes your own skills or tools limit what’s possible. So I had to make a few design choices and tweak the original look a bit.

Even though I’ve seen builds using nixie tubes, I decided to go with 7-segment displays instead. They’re much easier to control and don’t need as many components. Size was another big factor - the watch has to actually fit on a wrist and not feel like a brick. A RTC (real-time clock) IC handles timekeeping, and an LDR (light-dependent resistor) adjusts the brightness of both the LED indicator and the display automatically. Two buttons are used to control the watch.

As for the brains of the build, I went with the XIAO nRF52840 microcontroller - it’s one I already had some experience with. It’s got a bunch of perks: no need to add a separate LiPo charging circuit, it has built-in BLE (if I ever want to add wireless features later), and super low power consumption in deep sleep mode. Also, I’m not mounting the microcontroller directly on the PCB - I want to save that space for other components to keep the overall size down.

Once I had everything figured out, I placed the components on a breadboard and started testing different connections and features. And of course, things didn’t go perfectly.

I didn’t follow the proper schematic for the TM1637 display driver and had to tweak the library just to get it working (who needs pull-up resistors anyway, right?). I also had to test power consumption - because if it’s too high, there’s no point in using this thing daily. Luckily, the results were decent! In later tests, I even got up to 6 days of runtime using just over 50% of the battery. One goal checked off!

Now, onto the most frustrating part: the XIAO’s documentation. It's... rough. I couldn’t find many good guides or code examples, especially when it came to putting the microcontroller into sleep mode and waking it up with button presses. I spent hours digging, testing, and debugging - only to find out that it just takes four lines of code to make it all work:

// set wake up pins
// no pull up/down, since extern pull-up resistors are used
// wake up when pin is low
nrf_gpio_cfg_sense_input(g_ADigitalPinMap[your pin here], NRF_GPIO_PIN_NOPULL, NRF_GPIO_PIN_SENSE_LOW);
nrf_gpio_cfg_sense_input(g_ADigitalPinMap[your pin here], NRF_GPIO_PIN_NOPULL, NRF_GPIO_PIN_SENSE_LOW);

// go to deep sleep
sd_power_system_off();
NRF_POWER->SYSTEMOFF = 1;

With everything finally working, it’s time to move the prototype from the breadboard to a proper PCB! I’ll still use the breadboard setup to program the microcontroller while I wait for the PCBs to arrive.

Designing the Schematic and PCB

Schematic_MetroWristwatch.png
MetroWatchFront.png
MetroWatchBack.png
PCB_Front.jpg
PCB_Back.jpg

With the prototype already up and running, this next step was pretty straightforward. The PCB only needs to hold the watch components - except for the microcontroller, which I decided to mount directly inside the case instead of on the board. I just couldn’t find a good spot for it on the PCB. Looking back, I could have gone with even smaller SMD components to free up space… but that would’ve made soldering way more of a nightmare.

Once the schematic was done, it was time to design the PCB. I used the built-in autorouter, which honestly saved me a ton of time - and probably a few hairs too. Sure, it’s not as clean or efficient as manually routing the traces, but hey, as long as it works, right?

After exporting the Gerber files, I ordered the PCBs and waited about a week for them to arrive. They look great, and at first glance, I couldn’t spot any obvious issues. Now the real question: did the autorouter actually do a decent job…?

Designing the Case and 3D Printing

Design_MetroWristwatch_BottomView_1.gif
Design_MetroWristwatch_TopView_1.gif
Design_MetroWristwatch_BottomView_2.gif
Design_MetroWristwatch_TopView_2.gif
3D_Print.jpg
Housings_1.jpg

I usually design the PCB first and then move on to the housing in Fusion 360. But this time… I kinda forgot about the mounting. The PCB doesn’t have any screw holes, which made attaching it to the case way trickier than it should’ve been.

To work around that, I added a few little nubs to the inside walls of the housing - and surprisingly, they worked really well!

Designing a proper case is always the part I struggle with most. For me, just getting started is the biggest hurdle. But once I had a rough sketch, everything started to come together much faster. Still, it took me around 8 iterations to get the sizing, design, and tolerances dialed in. Next up was replicating a few of the signature details from Artyom’s watch - and once those were in place, I was finally ready to print the final version.

I’m still learning how to use Fusion 360 properly and trying to improve my designs bit by bit. Trust the process, and keep learning.

Preparing the Printed Housing

Painting_1.jpg
Painting_2.jpg
THI.jpg
THI_2.jpg
Glass.jpg
Glass_2.jpg

Sure, a metal housing would be so cool - but it also comes with some limitations. You’d need to get it fabricated somewhere, and that adds time, cost, and complexity. So for now, 3D printing is the way to go. That said, with a solid paint job, we can make it look more convincing!

First, remove the support structures and sand the print to smooth out any rough edges. Then it’s time to start painting. I hung the parts up on a rope outside and used a silver spray can - definitely do this in a well-ventilated area!

Once you’ve got a few decent coats on there, let the paint dry for a full day. Then, you can add the threaded heat inserts into the two holes on the top housing. Next, peel the protective film off the acrylic disc. The housing has four fake screws in each corner - add a small drop of glue to the opposite side of each one, press the disc in place, and let it set. The tolerances are just right to ditch the glue alltogether - would have been much easier ;)

Preparing the 7 Segment Display

LED_Size.jpg
LED_Paint.jpg
LED_Mesh.jpg
LED_done.jpg

I went with 7-segment displays mainly because they’re easier to control - but I still wanted them to look at least a little like those classic nixie tubes. So I followed a few simple steps to give them a bit more of that vintage feel.

First, I used a black pencil to darken the faces of the displays. Just make sure not to cover the actual LEDs - blocking them too much will reduce brightness significantly.

Next, I cut some metal mesh into little rectangular pieces and glued them on top of the displays. Once the glue set, I trimmed off the extra mesh hanging over the edges. If you want to go the extra mile, you can use epoxy glue instead - it’ll probably make them look even more convincing. Just watch out for bubbles! I haven’t tested anything to fix that yet, but I have a feeling a heat gun might help smooth things out next time.

Once everything’s in place, make sure to clean off the solder pads on the displays - and then you’re good to go solder them onto the PCB!

Soldering the PCB

PCB_Front_Labled.png
PCB_Back_Labled.png
Soldering_SMD_Front.jpg
Soldering_SMD_Back.jpg
Soldering_Front.jpg
Soldering_Back.jpg

I recommend starting with the front of the PCB and working your way to the back. Do the SMD components first, then move on to the through-hole parts. Take it step by step - it makes soldering way more manageable.

Here’s the order I followed:

SMD Front

  1. Yellow 0805 LEDs
  2. 220r ohm resistors
  3. MMBT2222A
  4. 7 segment leds
  5. 10k, 1k ohm resistors
  6. DS1302
  7. 32.768kHz Quartz (make sure it’s rated for a 6pF load - otherwise the clock might run too fast... ask me how I know)
  8. 100nF capacitor

SMD Back

  1. MMBT2222A
  2. 1k, 220 ohm resistors
  3. 100nF capacitor
  4. TM1637

Through hole Front

  1. LDR (Heads up: I placed the A0 pad a bit too close to the PH battery connector. If you’re using the connector, just solder a wire directly to the LDR pin next to the pad.)

Through hole Back

  1. CR927 coin cell holder
  2. SK12D07VG3
  3. PH2.0 battery connector (optional, solder battery directly to the pads)
  4. Tactile buttons
  5. two cables to the solder pads (for blue led)
  6. flexible cables to labled solder pads (microcontroller pins)

Programming

Programming.jpg

I had to create my own library to control the TM1637 chip. Easier said than done - but with a little help from another library and the chip’s datasheet, I got it working! Along the way, I learned how to read timing diagrams and send data to another IC, which was pretty neat. As always, I tried to make the code as flexible as possible so you can easily add new features or modes. The XIAO’s storage isn’t even close to being full yet ;)

Everything was written in the Arduino IDE with the help of the XIAO board manager. You can follow Seeed Studio’s instructions for setting up the Arduino IDE for the XIAO nRF52840 here:

https://wiki.seeedstudio.com/XIAO_BLE/#getting-started

Once the board manager is installed, you’ll need to add the DS1302 RTC library. The other required libraries are already included in the sketch, so it should compile just fine for the XIAO nRF52840. After that, upload the code—and you’re ready for the final assembly! You will have to adjust the values of the LDR to make use of the full brightness range - assemble first, test, then reupload.


Quick Code Overview

  1. preferences.h - Contains all the necessary functions and definitions. The highlight here is probably the function for playing a slick animation on the display.
  2. TM1637Driver files - Best to leave them as they are. They already offer plenty of flexibility for most use cases.
  3. xiaobattery.h - Based on a GitHub library by honvl, but tweaked to work with this watch.
  4. Wristwatch.ino - The main program file, with functions for deep sleep, mode changes, brightness control, and button input handling.
  5. Modes.h - Probably the most interesting file. It uses object-oriented programming to make creating new watch modes super easy. Currently, there are three modes:
  6. Show the time
  7. Show the date
  8. A 5-minute timer (inspired by the Metro gas mask filter timer)

If you want to create your own mode, just make a new class following the example snippet. The functions will be called when the user performs certain actions - take a look at the existing modes for guidance.

class YOURMODENAME: public WristwatchMode
{
public:
YOURMODENAME() { }

void onStart() { }
void onUpdate() { }
void onSetButton() { }
void onBothButtons() { }

private:
// varibles and functions here
};

Finally, add the newly created mode to the '_modes' array and change the length accordingly.

const int _modesCount = 4; // how many modes do you have?
WristwatchMode * _modes[] = { new TimeDisplay(), new DateDisplay(), new TimerDisplay(), new YOURMODENAME() };

Putting Everything Together

Chip.jpg
Chip_2.jpg
PCB_Housing_2.jpg
Soldering_Chip_2.jpg
LED.jpg
LED_2.jpg
Battery.jpg
Back.jpg
Wriststrap.jpg
Wriststrap_2.jpg
Done_4.jpg

There’s a cutout in the bottom lid for the microcontroller, with the USB-C port sticking out so you can easily charge it or reprogram it later. Normally, I’m not a big fan of permanently gluing components in place - it makes repairs or reusing them in other projects harder. But for this build, add a small dab of hot glue to the lid and press the microcontroller into position. I recommend programming the chip beforehand - it’ll save you some fiddling later, but should still be possible.

The PCB should slide right into the housing - there’s only one correct orientation. You might need to use a little force to get it over the nubs. Make sure you thread the LED wires through the dedicated hole, and pop the CR927 battery in first. Heads up, I had to remove my PCB from the housing once more and unfortuantely ripped of one mesh from the 7-segment display - pay attention!

Now connect the wires from the PCB to the microcontroller. The PCB pins are labeled, and you can find the XIAO pinout here (just remember it’s upside-down in this build): https://wiki.seeedstudio.com/XIAO_BLE/#hardware-overview Only one of the three pads (3V3, Bat+, GND) is connected to the side of the IC (3V3) while the rest connects to the XIAO battery interface (GND -> BAT-, Bat+ -> BAT+).

Add your rechargeable battery to the connector (or solder it directly), then close the bottom lid and secure it with the two M3 screws - easier said than done! On the opposite side of the screws, there’s another nub to lock the housing in place from both ends.

For the straps, I repurposed some old backpack straps I had lying around - bonus points for recycling! The clips give the watch a slightly unusual look, but I think they really fit the design. You’ve got two ways to attach the straps to the clips: sew a loop or glue them in place. Totally up to you.

And that’s it - you’re done! Assembly was more of a hassle than I expected. Everything is so small and you have to be really patient! I also made some mistakes along the way and learned a lot for future projects. Wristwatch projects involve a lot of skills and knowledge!

In the end, this watch looks so good, even with the few flaws. Let’s fire it up in the next step!

Watch Function Explanation

20250816_113650_4.gif
20250816_113650_3.gif
20250816_113650_2.gif
20250816_113750_1.gif
20250816_113750_2.gif
20250816_113750_3.gif
20250816_113424_1.gif
20250816_113952_1.gif
20250816_113609_1.gif

I decided to add an on/off switch to disconnect the battery - mostly to avoid fully draining it, since deep discharge can be dangerous for rechargeable cells. Flip the switch on, and the 7-segment display should light right up. Personally, I think the startup animation makes it look super convincing!

The RTC won’t be set yet, so it’ll instantly jump to 01.01.2033 - a little Easter egg reference to the start of the Metro story.

I labeled the button facing towards you as the Mode button, and the one facing away from you as the Set button. Here’s how they work:

  1. Mode button - Change modes or selected settings
  2. Set button - Interact with the watch:
  3. Switch between displayed information
  4. Start the timer
  5. Change the selected setting (hold to fast-forward)
  6. Both buttons - Press & hold Mode, then press Set to enter or exit the settings menu of the current mode

Once you’re familiar with the controls, set the current time. If the watch sits idle long enough, it’ll go into sleep mode and can be woken up by pressing a button.

If the battery is running low, the watch will display the percentage before going to sleep. When charging, it’ll show a charging animation along with the current battery percentage.

Final Words

Done_1.jpg
Done_2.jpg
Progress.jpg

And there it is - your very own Metro wristwatch! I couldn’t be happier with how it turned out. After all these years, I finally completed my very first electronics project idea - and it’s actually good enough for everyday use!

Of course, the build wasn’t without its challenges. I accidentally used an RTC crystal rated for a 12pF load. According to the DS1302 datasheet, it should only be 6pF. That little mistake caused the clock to drift by a few seconds after just a couple of days. Nothing unfixable - but definitely a lesson learned.

Like with any project, there’s always room for improvement, but at some point, you have to call it finished. I’m really curious to see how it holds up in daily use. I’m optimistic that it’ll last far longer than my early attempts. And that’s the biggest takeaway here: even if you fail at first, keep going. Keep learning. Then, when you try again, you’ll find the project is much easier with your new skills and knowledge.

I learned that the hard way - this is the fifth iteration of this watch. But hey, that’s progress!

Once again, I can’t say enough how pleased I am with the result. I hope you’re feeling inspired to build one yourself. And if you do, I’d love to see your finished version.

Alright, enough talking - it’s time to head back into the wasteland. New filter in, gas mask timer on!