Focus Wheel 2.0 - Your Next-Gen Study Assistant

by Donut Studio in Circuits > Gadgets

370 Views, 8 Favorites, 0 Comments

Focus Wheel 2.0 - Your Next-Gen Study Assistant

Cover_1_Edit.png
FocusWheel_Done_1.jpg
FocusWheel_Done_2.jpg

So far, the Focus Wheel has been the project that really took off and it’s also the one I’ve used the most myself. During study sessions, having a device that tracks your time and reminds you to take breaks is incredibly useful, and the Focus Wheel quickly became a regular part of my desk setup.

I was always happy with how the Focus Wheel looked and felt, but there was one issue I didn’t see coming: the power supply. I tried to keep things simple by powering it through a USB-A port. That meant using a power bank, which worked… but wasn’t ideal. It took up extra space on my desk, felt a bit clunky, and made the whole setup less portable when studying away from home. After a while, I started asking myself: wouldn’t it be nicer if the Focus Wheel could just sit on the desk all by itself?

That thought eventually led me to rebuild the Focus Wheel, this time with my newly acquired hotplate and a fresh mindset. The goal was simple: make it battery powered. Of course, that opened up a new challenge. I wanted to be able to use the device even while the battery was charging. That requirement sent me down a bit of a research rabbit hole, but in the end I landed on a great IC from Texas Instruments: the BQ24075. It offers power-path management and a bunch of other handy features. Thanks to the hotplate, even the tiny components needed for this setup were no longer a dealbreaker.

Version 2 is definitely a big step up from the original, but it’s also more involved and a bit trickier to build. If you’re short on time or just want a fun weekend project, the first version still does a great job and is absolutely worth considering. Even with the hotplate, I still had to touch up a few solder joints and honestly, that part could get pretty frustrating at times. But in the end, the result made it all worthwhile. So with that out of the way, let me walk you through the new and improved Focus Wheel!


This project is open-source, the old and new files can be found here:

https://github.com/KonradWohlfahrt/FocusWheel

Supplies

Parts.jpg
PCBs_Stencil.jpg

First things first, let’s talk about the supplies. As you might expect, V2 requires a few more components than V1. The added complexity mainly comes from the battery management and power circuitry, so don’t be surprised if this list feels a bit longer.

Most of these parts are easy to find from common electronics retailers like AliExpress, Digi-Key, LCSC, or Mouser. Depending on where you shop, part availability and package sizes may vary slightly, but everything listed here should have plenty of compatible alternatives if needed.

Below is the complete list of components used for this build (you will also find a BOM file at the repository).


SMD COMPONENTS:

1x MLT-7525 Buzzer

1x 1N4001 SMA

16x WS2812b 5050

1x SS34 SMA

1x USB-C 16P

1x 2.2uH APH0420

1x 4.7uH ANR3015

1x FS8205A

1x IRLML6402

1x AO3400A

1x MMBT2222A

1x USBLC6-2SC6

1x BQ24075RGT

1x DW01A

1x TLV62569DBV

1x MCP1640Cx-xCHY

1x ESP32-C3-WROOM-02

1x OLED I2C 0.91

1x SN74LV1T34DBV


CAPACITORS:

22x 100nF 0603

3x 1uF 0805

5x 10uF 0805

4x 4.7uF 0805

1x 100pF 0805

1x 100uF 1206


RESISTORS (all 0805):

2x 5k1

1x 39k

1x 1k5

1x 3k9

8x 10k

4x 1k

2x 100r

1x 68k

1x 15k

1x 976k

1x 309k

2x 4k7

1x 330r

1x 33k

1x 47k


THROUGH-HOLE COMPONENTS:

2x 3mm LED (your preferred color, optional)

1x PH2.0 2P connector (LiPo battery)

1x Rotary encoder half shaft 15mm

3x TTP223 touch module


OTHER COMPONENTS:

1x Custom PCB

1x 3D printed housing

1x 303450 500mAh LiPo

6x M3 3x4.5 (height x diameter) threaded heat insert

2x M3x4mm screw

4x M3x10mm screw

Printed Circuit Board

Schematic_FocusWheel_V2_1.png
Render_FocusWheel_V2_1.png

Of course, this project wouldn’t be possible without a custom printed circuit board. For this version, though, I decided to challenge myself by designing the PCB using KiCad, a free and open-source EDA tool. Up until now, I had been using EasyEDA Standard for all my PCB designs. As the name suggests, EasyEDA is really easy to use, even beginners can create working boards in no time.

KiCad, on the other hand, is open-source, widely used in the industry, and packed with powerful tools that can make your life much easier once you get used to it. That’s exactly why I wanted to give it a try.

Overall, I found KiCad to be quite intuitive as well. It lacks the massive footprint library that EasyEDA offers, and I did experience the occasional crash — something I never really noticed with EasyEDA. On the plus side, I really liked KiCad’s built-in calculation tools and overall workflow. In the end, both programs get the job done. For me, KiCad feels more like an industry-standard application, while EasyEDA shines as a fantastic tool for hobbyists and quick prototyping.

Now, let’s take a closer look at the schematic.

Power is supplied via a USB-C port, complete with ESD protection and a handful of decoupling capacitors. The BQ24075 handles battery charging and powers the device at the same time thanks to its power-path management. The charging current is set to roughly 230 mA using resistor R5, while R4 limits the input current to 1 A. The safety charge timer is configured to 5 hours via R3. To protect the LiPo battery, I added the commonly used DW01 protection IC.

This time around, I wanted to avoid mechanical slide switches altogether. Instead, I went with TTP223 touch modules. With the right configuration, they can operate in toggle mode, which makes them perfect for controlling a MOSFET. The idea is that you can turn the device on or off simply by touching the housing, no visible switches required.

To make this work, I had to dive into the topic of high-side and low-side switching, which turned out to be quite interesting on its own. For the Focus Wheel, I chose a high-side switch configuration, where the load is permanently connected to ground and the MOSFET switches the supply voltage. A P-channel IRLML6402 MOSFET acts as the high-side switch, driven by the A3400 N-channel MOSFET. I have to say, I really like this tiny circuit, it works beautifully and feels like a neat alternative to traditional mechanical switches.

Once powered on, a buck and a boost converter regulate the supply voltages to 3.3 V and 5 V. Just like in V1, I used the ESP32-C3 microcontroller. It comes with built-in USB support and excellent documentation. This time, I actually managed to use all of its GPIOs.

A quick lesson learned here: my first attempt at reading the battery charging state didn’t go so well. I accidentally connected an ESP GPIO directly to the USB supply voltage, permanently damaging the pin. In the updated design, I added a diode to isolate the different voltage domains while still allowing the signal to be pulled low. This way, the charging LEDs and the GPIO can coexist safely!

The Focus Wheel is controlled using a rotary encoder and two touch modules. The same OLED display as before is used for visual feedback, and a passive buzzer with a flyback diode handles sound output. Unlike the first version, which could only produce an annoying beep, this one can generate different frequencies and even play simple melodies.

A voltage divider allows the MCU to monitor the supply voltage, determine whether the device is running on USB or battery, and estimate the battery’s charge level. The WS2812B LED ring has also been upgraded: instead of an external ring, the LEDs are now integrated directly onto the PCB. While it probably would have worked to drive them directly from the MCU, I added a logic-level shifter just to be safe.

With the schematic finished, it was finally time to move on to the PCB layout. Like V1, the board measures 90x90 mm, though it’s definitely much denser this time around. I routed the two-layer board and took advantage of features like differential pair routing for the USB signals. Of course, I couldn’t resist adding some line art to the back of the PCB — it just makes everything look so much nicer. After that, all that was left was rendering the board and generating the Gerber files.

Soldering With the Hotplate

Stencil_1.jpg
PCB_SMD_3.jpg
PCB_SMD_2.jpg
PCB_SMD.jpg

Important note: Soldering with a hotplate is basically mandatory for this build. The package of the battery charger IC is extremely difficult — if not impossible — to solder by hand with a regular iron.

When ordering the PCB, I also got a solder stencil to make applying solder paste much easier. One important tip here: always use a few spare PCBs to properly support and flatten the stencil. I learned this the hard way, at my first attempt the stencil wasn’t perfectly flat, which caused me to apply way too much solder paste. As a result, I had to rework the USB-C connector and the BQ24075, and let me tell you… that was a huge hassle. Thankfully, a generous amount of flux can save you in situations like this.

Once all the pads have a nice, even layer of solder paste — not too much and not too little — it’s time to populate the board with components. Use the schematic and the component table from my GitHub as a reference. The process itself is pretty straightforward, but it does take some patience. For me, placing all the parts took about 45 minutes. As always, pay close attention to the polarity of diodes, LEDs, and ICs.

After everything is in place, put the PCB onto the hotplate and set it to 170 °C, which is the maximum temperature recommended for my solder paste. After roughly six minutes, the first reflow cycle is done. Let the board cool down, then carefully inspect all solder joints. If you spot any bridges or cold joints, a bit of rework with plenty of flux usually does the trick.

Soldering the TH-Components

TouchSensors.jpg
SolderedPCB.jpg
SolderedPCB_Back.jpg

Now it’s time to switch over to the soldering iron for the through-hole parts.

First things first: start by securing the USB-C connector. Apply a good amount of solder to the connection joints to make sure it’s firmly attached and won’t move around later.

You don’t need to solder the LEDs, I actually left them out because of my design mistake earlier. Just so you know, D2 is the charge LED, and D1 indicates when a valid power source is connected via USB. Remember, the square pad on each LED is the cathode and needs to be connected accordingly.

Next, take one of the TTP223 touch modules and solder together the two small pads labeled B. This enables the toggle function, which is key for turning the device on and off with a simple touch.

Go ahead and solder headers to the touch modules and the OLED display, then attach them to the PCB. Make sure everything sits nice and flat, and trim off any excess leads to keep things tidy. The touch module with the B pads connected is labled U4!

Finally, solder the rotary encoder and the battery connector. Once everything’s soldered, do a careful once-over to check all connections. With all that done, you’re ready to plug in the battery and see your Focus Wheel come to life! Well not yet, we have to do some programming next...

3D Printed Housing

Housing_1.jpg
Housing_2.jpg
PCB_Bottom_Housing.jpg
Housing_3.jpg
Housing_4.jpg

As always, the housing was designed in Fusion 360. This time around, I reduced the overall size, which gives V2 a much cleaner and more refined look compared to V1. The touch modules really pay off here, they go a long way toward keeping the surface minimal and uncluttered.

To keep everything looking sleek, I used threaded heat inserts for mounting. This way, no screws are visible from the outside, which makes the whole enclosure feel much more polished.

Depending on whether you decided to populate the LEDs or not, make sure to choose the correct top and bottom housing parts. The knob, however, is always the same regardless of the configuration.

For my print, I used PLA Marble, which looks great and provides a bit of natural light diffusion. I think a matte black filament would also look fantastic. There’s a small gap between the knob and the housing that allows the LEDs to shine through, adding a nice subtle glow.

Putting everything together should be pretty straightforward. The pictures should give you a good idea of how everything fits and comes together.

Programming

LightUp.jpg

One of the nicest things about this build is that you don’t need an external programmer at all. Thanks to the ESP32’s built-in USB support, flashing new code is super easy and convenient than with an external programmer.

For the first upload, though, you’ll need to put the ESP into flash mode:

  1. Connect the Focus Wheel to your computer via USB
  2. Press and hold the rotary encoder down (this puts it into flash mode)
  3. While holding it down, turn the device on using the touch button

If everything is working correctly, your computer should detect a new USB device, which you’ll see show up in the device manager.

To compile and upload the code, you’ll need the following libraries:

  1. RotaryEncoder:

https://github.com/mathertel/RotaryEncoder

  1. FastLED:

https://github.com/FastLED/FastLED

  1. U8x8Lib:

https://github.com/olikraus/u8g2

  1. DonutStudioTimer:

https://github.com/KonradWohlfahrt/Arduino-Timer-Library

Before uploading anything, I recommend starting with the test sketch: FocusWheelTest.ino

In the Arduino IDE, make sure the following settings are selected:

USB CDC On Boot: "Enabled" <-- to make USB Serial work
CPU Frequency: "160MHz (WiFi)"
Core Debug Level: "None"
Erase All Flash Before Sketch Upload: "Disabled"
Flash Frequency: "80MHz"
Flash Mode: "QIO"
Flash Size: "4MB (32Mb)"
JTAG Adapter: "Disabled"
Partition Scheme: "Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS)"
Upload Speed: "921600"
Zigbee Mode: "Disabled"

Programmer: "Esptool"


Once the sketch is compiled and uploaded, you may need to restart the device. Simply turn the Focus Wheel off and back on again, this time without pressing the rotary encoder.

If everything went well, you should see the LEDs light up, information appear on the OLED display, and hear the buzzer making sounds. The test firmware lets you verify all the core functions: button presses, rotary encoder position, power source (USB or battery), charging state, battery voltage, and charge level in percent. You can view this information directly on the display or via the serial monitor.

One particularly nice feature of the system is that you can unplug the USB cable without losing power, as long as a battery is connected, of course.

Once you’re happy with the test results, it’s time to upload the actual firmware: FocusWheel.ino

In the next step, I’ll walk you through what changed in the final firmware, how to navigate the menus, and what you can expect from the finished device.

How It Works

20260125_205346_1.gif
20260125_205346_2.gif
20260125_205433_2.gif
20260125_205433_3.gif
20260125_205433_6.gif
20260125_205433_7.gif
20260125_205433_10.gif
20260125_205433_1.gif

If you’ve made it this far, it’s safe to say that your very own Focus Wheel is up and running and ready to help you manage your study sessions or any other focused work. Let me walk you through the menus and features of this new version.

Quick Overview:

  1. Four individually adjustable timers
  2. Customizable settings (LED brightness, display contrast, sound enabled on boot, melodies)
  3. Sounds and melodies (can be toggled on/off via the lower touch button)
  4. Built-in 20-20 rule during the work phase
  5. Battery status display and low-voltage shutdown
  6. Ability to pause or skip timers

Timer Select Menu:

After turning the device on, you’ll see a short boot animation before being taken to the Timer Select Menu. Here, you can choose between four different timers. Each timer can be configured individually in the settings and is stored in EEPROM, so your preferences are saved even after powering off.

  1. Rotate the knob to switch between timers
  2. Press the knob to start the selected work phase
  3. Press the upper touch button to enter the settings menu

Settings Menu:

The Settings Menu lets you customize how the Focus Wheel behaves.

  1. Rotate the knob to navigate
  2. Press the knob to select/deselect a setting and adjust its value by rotating
  3. Press the upper touch button (when nothing is selected) to exit the menu and save all changes to EEPROM

When adjusting timer values, the upper and lower touch buttons are used to select the hours/minutes/seconds. You are free to adjust the following:

  1. LED brightness
  2. Display contrast
  3. Enable or disable sound at boot
  4. Melody played when a timer finishes
  5. Four independent timers, each with:
  6. Work duration
  7. Break duration
  8. Option to enable or disable the 20-20 rule

Timers:

When you start a timer, the Focus Wheel begins with the work phase.

  1. Press the knob to pause or resume the current timer
  2. Press the upper touch button to skip the current phase entirely

After a work or break phase finishes, the device waits for you to start the next phase by pressing the knob. This gives you full control over when the next timer begins.

If the 20-20 rule is enabled, the Focus Wheel will remind you to take a short eye break after 20 minutes of work. The reminder lasts for 30 seconds (yes, I know — it’s not exactly 20 seconds, but feel free to change it in the code). Once the eye break is over, the device automatically resumes the work timer without requiring any user input.


These are the core features of the Focus Wheel, but you’re absolutely free to customize and expand on them. You can tweak melodies, timings, and behaviors, or add entirely new features if you like. The full code is available on my GitHub, and I’m excited to see what you come up with!

And Finally ...

20260125_205433_9.gif
FocusWheel_Done_4.jpg
FocusWheel_Done_3.jpg

Thanks so much for reading my blog, I really appreciate you sticking around until the end! I hope you enjoyed following this project as much as I enjoyed building it. With its new features and updated design, this version of the Focus Wheel feels like a big step forward.

I’ve already been using it quite a lot, and based on my testing, the battery performance has been solid. The switch to USB-C makes charging super convenient, you can plug it in pretty much anywhere these days. While the old USB-A connector was easier to solder, it always meant carrying around a specific cable. Definitely not ideal.

One of my favorite upgrades is the power-path sharing feature. Being able to charge the device and use it at the same time is incredibly useful, and it’s something I’ll definitely be incorporating into future projects. And then there are the touch buttons — I honestly didn’t expect them to be such a highlight. No mechanical parts, just clean capacitive touch detection, plus the subtle glow from the built-in LEDs. Totally worth it.

This project is part of the 8th Project Design Contest by PCBWay:

https://www.pcbway.com/activity/8th-project-design-contest.html

I’d love to see you build your own Focus Wheel and share it with me. As always, be creative and until next time ;)