Focus Wheel - Your Desk Study Buddy
by Donut Studio in Circuits > Gadgets
250 Views, 4 Favorites, 0 Comments
Focus Wheel - Your Desk Study Buddy



There are a lot of different methods for effective learning, but in my experience, the three biggest obstacles are staying motivated, staying focused, and taking proper breaks.
I’ve experimented with a few different approaches, and the one that’s worked best for me uses two timers: one for an hour of focused work, followed by a 15-minute break. It not only helps me study the material more effectively but also makes it easier to get started in the first place - which is often the hardest part!
Sounds great, right? Well, there’s a small catch…
The timers were set up on my phone - and keeping your phone nearby can be a major distraction. Sure, you could solve this with an app, locking down distractions and muting notifications. But honestly, I think the best solution is to just ditch the phone altogether.
I’ve got a bunch of stuff to do... but hey, let’s procrastinate productively and build a gadget — with all the features I need, wrapped up in a sleek design.
Finally, the circuit boards for this project were sponsored by PCBWay, more on them later!
Now, let's get started with the project! You can find all the files for this project on this repository:
Supplies

SMD components:
- 100uF 1206
- 3x 10uF 0805
- 2x 1uF 0805
- 4x 100nF 0805
- 2x 47pF 0805 (optional)
- 1k 0805
- 5x 10k 0805
- 3x 0r 0805 (optional, solder bridge)
- 330r 0805
- 33r 0805
- 220k 0805
- 100k 0805
- MMBT2222A
- SMD Switch (3 x 6 x 5mm)
- ESP32-C3-WROOM-02
- AMS1117-3.3V
Through hole components:
- 45mm Fader
- WS2812b Ring (inner diameter: ~31mm, outer diameter: ~48mm)
- Buzzer (9 x 12mm)
- Rotary Encoder
- Tactile Switch (12 x 12mm)
- OLED 0.91"
- USB3.0 socket
Other components:
- custom pcb
- 6x threaded heat inserts M3 (3 x 4.5mm)
- 4x M3x14mm
- 2x M3x4mm
- USB-A cable (male to male)
Tools:
- soldering iron, tweezers
- 3d printer
- crimping ratchet (optional)
Designing the PCB & Housing


As always, I began with the circuit. This time, I didn’t test the individual components on a breadboard first, since it seemed straightforward. There’s a small chance it might not work, but I’m willing to take that risk.
Let me explain the general idea:
The brain of the project will be the ESP32-C3 microcontroller. I had a great experience using it in my Glowtie, and it’s packed with useful features — plus, it has built-in USB communication support, which makes development a lot easier and cleaner without needing an extra USB-to-serial chip. I added all the necessary components as recommended in the datasheet. You can enter flash mode by pressing the rotary encoder in the center, and reset the ESP using the SMD switch.
Because I’m soldering everything by hand with a regular iron, I chose a USB-A socket — it's just simpler to install. If I had a hot plate, I definitely would’ve gone with USB-C to stay up-to-date with the standard.
The rest of the circuit is fairly standard. An AMS1117 LDO will regulate the 5V supply down to a stable 3.3V, with decoupling capacitors added for stability. A buzzer will be controlled by a common 2N2222A transistor in SMD form. I also added pins for an OLED display, WS2812B LEDs, the rotary encoder, and a button — and with that, the circuit is almost complete.
However, I still wanted to include an analog input. While searching through my parts for ideas, I came across a 45mm slider — perfect! I initially connected its output through a voltage divider (0–1V), like with the ESP8266. Later, I remembered that the ESP32’s ADC can read up to 3.3V directly, so the voltage divider wasn’t actually necessary. Fortunately, the attenuation feature allows full-range ADC readings of the new voltage range.
Finally, the circuit was finished, and I started working on the PCB. I think it turned out pretty decent — especially the back, which looks really awesome with some added line art!
I originally thought about adding battery powered operation, but since this device is going to stay on my desk and won’t be portable, I decided to skip it. Also, no more sessions getting cut short because the battery ran out ;)
I designed the housing in Fusion 360. There’s not much to say here, except that I opted for threaded heat inserts. I hadn’t actually tried them before, but I had heard great things — and let me tell you, I absolutely fell in love with them. They’re awesome!
The bottom and top parts will be connected with screws, while the large knob is designed to slide onto the rotary encoder. The knob should be printed in a light-diffusing material, as it will be illuminated by the LED ring — or at least, that’s the idea…
PCBWay


Building a project like this involves a wide range of skills and tools. Depending on what equipment and experience you have, some steps may take more time than others. Personally, I love designing, soldering, and programming — but fabricating PCBs myself is a skill I haven’t mastered yet… and honestly, I probably won’t, because there’s an awesome alternative out there:
That’s where the sponsor of this project comes in. If you haven’t heard of PCBWay, they’re a company that specializes in fabricating high-quality PCBs and machining parts using CNC or 3D printing. You can get professional-grade boards at a great price — and fast!
Why spend hours soldering everything onto a perfboard when you can design your own circuit and have it made on a professional PCB?
Preparing the PCB




After I received the PCBs a few days later, I was satisfied with the quality — awesome as always. With that, I began soldering. But before you get started, make sure to kick off your 3D print using the .stl files from the GitHub repository.
I designed a few different top covers, so you can mix and match the OLED and slider options. Maybe you just need the OLED or only the slider — or perhaps you want nothing but the glowing knob in the center. The choice is yours!
While the printer is doing its job, let’s finish up the hardware! I used my trusty soldering iron to handle both SMD and through-hole components. You can check the table on GitHub or refer to the layout image to see where the SMD resistors and capacitors go. The rest of the components are fairly straightforward — just make sure to double-check the orientation of the slider and buzzer pins!
Here's the recommended order for placing and soldering the components:
- MMBT2222A
- Resistors and capacitors
- AMS1117-3.3V and SMD switch
- ESP32-C3-WROOM-02
- optional WS2812b dupont connector
- USB 3.0 A socket
- 12x12mm tactile switch
- Buzzer
- OLED display (dupont connector — used for raising the display and making it replaceable)
- Slider
- Rotary encoder
The 0-ohm resistors can also be bridged with a simple blob of solder if you prefer. However, don’t skip the USB lines —programming the chip is incredibly easy thanks to the built-in USB communication. You won’t need any external programmer.
Preparing the Enclosure


The PCB is ready to be programmed, and your 3D print should hopefully be finished by now. Let’s prepare the housing:
Until now, I hadn’t worked with threaded heat inserts, but they turned out to be extremely easy to use — I didn’t even need instructions. Just place each insert in the correct spot (the bottom cover needs two inserts in the center, and the top needs four in the corners), then press your soldering iron tip firmly on top of the insert. After a second or two, it should slide into place and stay there — awesome!
One thing I learned during the process: place a flat object (like a metal ruler or another piece of flat plastic) on top of the insert after removing the soldering iron. This helps prevent excess material from forming a small bump on the surface.
Perfect! Now you should have smooth, flush screw holes ready to securely hold everything together. You can already screw the pcb to the bottom with the two M3x4 screws.
Preparing the LED Ring






Yet again, I'm using WS2812B LEDs — this time in the form of a ring! These tiny LEDs pack a punch, so I’m using them wherever I can.
My LED ring came with pre-attached cables. However, they were a bit too stiff for my taste, so I replaced them. While I was at it, I crimped a Dupont connector to fit the headers on the PCB.
If you don’t have the tools for that, you can simply solder the cables directly to the PCB. Be sure to route the wires through the top cover beforehand — you won’t be able to do so once it’s mounted.
The ring fits neatly into the recess — make sure the first LED points to the USB socket. You can glue it in place or use some double-sided tape, in my case the small tabs secured it well enough. Now place the cover on top and secure it with four M3x14 screws. Finally, add the knob and caps to your slider and button.
With that, you've finished the hardware part of the project — not too bad! Let’s move on to programming.
Programming




After connecting the Focus Wheel to my PC while holding the middle button to enter flash mode, my operating system automatically installed the appropriate driver, and I was able to upload my test sketch to the board without any issues.
Before uploading, however, make sure you've installed the ESP32 board manager in the Arduino IDE. Then, select “ESP32C3 Dev Module” and the correct COM port. Once that’s done, everything should work smoothly — hooray!
To make coding easier, I installed a few libraries:
I’ve created a few example sketches you can upload and experiment with. Fortunately, I had already written my own timer library, which uses millis() to track time. Since the ESP32 is accurate enough, this method works great for the project.
Start with: FocusWheelSetup.ino
This sketch saves calibration values to EEPROM. Just follow the instructions on the OLED — since every slider behaves slightly differently, this step will help the device learn the raw input range.
Other examples:
- FocusWheelTest.ino
Use this to test your board and components. You may want to adjust the preferences.h file to suit your setup.
- Timer.ino
A simple timer with adjustable settings, saved to EEPROM.
- TwentyTwentyRule.ino
Based on the 20-20-20 rule (look it up if you’re unfamiliar). A gentle reminder to take regular screen breaks.
- FocusWheel.ino
The main application for studying and staying focused. It includes five customizable timers (work and break periods), with one saved to EEPROM.
For my setup, the slider is used only to control the buzzer volume. This is useful, especially when you don’t want sound notifications — the visual feedback from the LEDs is often enough to keep you on track.
One last thing I discovered while working with the ESP32-C3: although it supports programming via USB, it's not as straightforward to use it for sending serial data to your PC (like you might with the ATmega32u4). Keep that limitation in mind if you plan to expand or modify the design.
Final Words and Future Improvements



Now I have myself a proper desk study buddy! I’ll be using it not only for studying but also for taking breaks — whether I'm gaming or working on other projects. Hopefully, I’ll notice a real improvement with this new device.
While building it, I was quickly reminded that the Focus Wheel could also be used as a stream deck or media control panel — the MCU has built-in BLE communication that I didn’t even use in my examples ;)
Imagine controlling your desktop volume with the slider and skipping tracks with the rotating knob! This project definitely has more potential than I originally thought. Maybe I should dive into another useful feature... although, to be honest, I already procrastinated way too much while building this one. It’s finally time to pull myself together and start studying for those annoying exams. I’m curious to see what you’ll come up with!
Thanks so much for reading! I hope you found this blog interesting and helpful. A special thanks again to PCBWay for sponsoring the PCBs for this project!
Until next time :)