Duello — A Wireless Competitive Learning Device
Duello is a wireless competitive learning device designed for middle school students. It turns teacher-programmed multiple-choice questions into a physical two-player quiz game. Each player uses a handheld box with four physical answer buttons, a 1.5 inch RGB OLED screen, and an ESP32-C3 based custom PCB.
The goal of Duello is to make classroom review activities more interactive by combining the competitive feeling of digital quiz platforms with the physical interaction of buttons, screens, and a custom fabricated object.
Poster (Placeholder)

Video (Placeholder)
Project Overview
Duello is a two-player wireless quiz device. Each player has one device with four red push buttons labeled A, B, C, and D. The labels are made using white vinyl stickers. A 1.5 inch RGB OLED screen displays the question, answer choices, scores, round results, and final winner.
For the current prototype, one ESP32-C3 device acts as the host/server and creates a local Wi-Fi access point. The second ESP32-C3 device connects to it as a client. The host controls the quiz state, timing, scoring, and round progression. The player device receives the current game state over Wi-Fi and sends its selected answer back to the host.
The quiz questions are set in the program code by the teacher or developer. The current version uses a 10 second time limit for each question, but both the question count and time limit can be changed in the code.
The final project combines:
- 2D design
- 3D design
- 3D printing
- laser cutting
- vinyl cutting
- PCB design
- PCB milling
- soldering
- crimping
- embedded programming
- wireless networking
- system integration
- packaging
System Diagram

What Does It Do?
Duello allows two students to compete in a physical quiz game.
The interaction flow is:
- Player 1 turns on the host device.
- The host ESP32-C3 creates a local Wi-Fi network.
- Player 2 turns on the second device.
- The second ESP32-C3 connects to the host device.
- Player 1 starts the game.
- Both OLED screens show the same question and answer choices.
- Each player answers using the physical A/B/C/D buttons.
- The host device calculates scores using correctness and answer speed.
- Both devices display the round result.
- The game continues to the next question.
- At the end, both devices show the final score and winner.
The scoring system is based on both correctness and speed. A correct answer can receive up to 10 points. The score decreases by 1 point for each second that passes. Incorrect answers, missing answers, or answers after the time limit receive 0 points.
Final System
The final system is made of two similar physical devices. The current demo uses two devices, but the concept can later be expanded to support more players.
Each device includes:
- ESP32-C3 Super Mini
- custom PCB
- 1.5 inch RGB OLED module
- four red push buttons
- white vinyl button labels
- 1S 3.7 V 1000 mAh LiPo battery
- on/off slide switch
- 100 µF 25 V capacitor
- 3D-printed red PLA base
- 3 mm laser-cut plywood cover
- press-fit magnets
- crimped internal wiring
The final device dimensions are approximately:
| Dimension | Size |
|---|---|
| Width | 85 mm |
| Length | 140 mm |
| Height | 60 mm |
Mechanical Design

Enclosure
The enclosure is made from two main parts:
- a 3D-printed base
- a laser-cut plywood cover
The base is printed using premium red PLA. It holds the PCB, battery, wiring, and OLED module. The OLED stand is integrated directly into the 3D-printed base, so the screen has a fixed position inside the enclosure.
The cover is laser cut from 3 mm plywood. It acts as the user interface panel. It holds the four push buttons using their own nuts and includes the opening for the OLED screen.


3D-Printed Base
The base was designed in Fusion 360 and printed on a Bambu Lab A1. The print took around 3–4 hours.
The base includes:
- internal space for the PCB
- space for the LiPo battery
- an integrated OLED stand
- cable routing space
- magnet holes
- enough internal height for connectors and wiring
The 3D-printed base was useful because it allowed me to create a custom internal structure for the electronics instead of using a generic box.

Laser-Cut Cover
The cover was designed by exporting the geometry from Fusion 360 and editing it in Adobe Illustrator. It was cut from 3 mm plywood using the xTool P3. The laser cutting took around 20 seconds.
The cover includes:
- four circular holes for the push buttons
- an OLED screen opening
- magnet positions
- a flat user interface surface
The cover is removable, which makes debugging and maintenance easier.


Magnet Assembly
The base and cover are connected using magnets instead of screws. There are 4 magnets in the base and 4 magnets in the cover. Each magnet is approximately 1 cm in diameter.
The magnets are press-fit. The 3D print tolerance and laser kerf were accurate enough that the magnets fit securely.
This design decision made the device easier to open during debugging while still keeping the cover attached during normal use.

2D Design and Vinyl Cutting
I used vinyl cutting to make the white A, B, C, and D labels for the red push buttons.
The labels help the user understand which button corresponds to each answer choice on the OLED screen. Since the device is designed for quiz-style multiple-choice questions, the physical labels are an important part of the user interface.
The vinyl labels were cut using the Cricut Maker 3.

Electronics and PCB
Custom PCB
The electronics are based on a custom PCB designed in KiCad and milled using the Roland SRM-20.

The PCB integrates the main connections for:
- ESP32-C3 Super Mini
- OLED SPI pins
- four button inputs
- shared button ground
- battery power input
- switch/power routing
- connector points for internal wiring
The PCB was designed to make the wiring cleaner than connecting each component directly to the microcontroller. It also helped make the electronics more compact and easier to package inside the enclosure.

Microcontroller
The project uses an ESP32-C3 Super Mini as the main microcontroller.
I chose the ESP32-C3 because it supports Wi-Fi, is small enough to fit inside the enclosure, and can run the embedded quiz logic. In the current system, one ESP32-C3 acts as the Wi-Fi host and server, while the second ESP32-C3 acts as the client/player device.
No external antenna is used. The ESP32-C3 Super Mini Wi-Fi was enough for lab-scale testing.
OLED Output
The output system is a 1.5 inch RGB OLED module using a 7-pin SPI connection. The OLED operates at 3.3 V.
The OLED displays:
- connection status
- waiting screen
- question text
- A/B/C/D answer options
- current scores
- submitted answer screen
- round result
- final winner screen
The OLED is mounted on the integrated 3D-printed stand inside the base and aligned with the opening in the plywood cover.

Button Input
The input system uses four red physical push buttons. These correspond to the four multiple-choice answers:
| Label | GPIO |
|---|---|
| A | GPIO2 |
| B | GPIO6 |
| C | GPIO4 |
| D | GPIO3 |
The buttons are connected using INPUT_PULLUP in the code. This means the pin normally reads HIGH, and when the button is pressed it connects to ground and reads LOW.
The buttons share a common ground. The ground terminals of all four buttons are interconnected, and one shared ground line returns to the PCB. This reduced the number of ground wires inside the device.
The button wiring uses Tam İzoleli Dişi Faston Tip Kablo Ucu 2.80mm connectors. These crimped connectors made the button wiring more reliable and serviceable than permanent solder-only connections.

Power System
The final version is powered by a 1S 3.7 V 1000 mAh LiPo battery.
The power path is:
1S 3.7 V LiPo battery
↓
on/off slide switch
↓
ESP32-C3 Super Mini power pads
↓
ESP32-C3 board regulation
↓
custom PCB, OLED, buttons, and Wi-Fi system
The slide switch allows the full device to be turned on and off. This is important because the device is portable and battery-powered.
The battery connects directly through the ESP32-C3 power pads, and the ESP32-C3 board handles regulation. When an external power source is connected through USB, the board can charge the battery.
A 100 µF 25 V capacitor is placed near the battery input and ground to help stabilize the power input.

Power Estimate
The main power consumers are the ESP32-C3 and the RGB OLED. The buttons use very little current because they only act as input switches.
| Part | Estimated Current | Notes |
|---|---|---|
| ESP32-C3 normal operation | 40–100 mA | Depends on code and Wi-Fi use |
| ESP32-C3 Wi-Fi peaks | 250–350 mA peak | Short current spikes during wireless communication |
| 1.5 inch RGB OLED | 40–120 mA | Depends on screen brightness and pixels lit |
| Four push buttons | Very small | GPIO pull-up behavior |
| Total typical estimate | 90–220 mA | Normal use |
| Possible peak estimate | 350–500 mA | Wi-Fi peak and bright OLED |
With a 1000 mAh LiPo battery, the rough runtime estimate is:
1000 mAh / 220 mA ≈ 4.5 hours
In real use, the runtime may be lower because of Wi-Fi peaks, OLED brightness, battery condition, and regulator losses. However, the battery capacity is enough for classroom demo use.
Embedded Programming
The embedded software has two versions:
- host device code
- player/client device code
The host device controls the game. The player device connects to the host and follows the game state.
Game Phases
The code uses four main phases:
| Phase | Meaning |
|---|---|
| 0 | Waiting to start |
| 1 | Question active |
| 2 | Showing round result |
| 3 | Final score screen |
Host Device Responsibilities
The host device:
- creates the Wi-Fi access point
- starts the local web server
- stores the quiz questions
- controls the current question
- handles Player 1 button input
- receives Player 2 answers
- calculates scores
- controls phase changes
- sends game state to Player 2
- displays game feedback on its OLED
Player Device Responsibilities
The player/client device:
- connects to the host Wi-Fi network
- requests the current game state
- displays the current question and options
- handles Player 2 button input
- sends Player 2 answer to the host
- displays round results and final score
Networking
Duello uses ESP32-to-ESP32 wireless communication.
For the current prototype:
- Player 1 device creates a Wi-Fi access point named
FABLAB. - Player 2 connects to the
FABLABnetwork. - Player 1 runs a local HTTP server.
- Player 2 requests the current game state.
- Player 2 submits its selected answer back to the host.
The host uses two main HTTP routes:
| Route | Purpose |
|---|---|
/state | Sends the current quiz state to the client |
/answer | Receives Player 2’s answer |
The player device polls the host for updated state and sends an answer when the player presses a button.
The tested reliable distance is lab-scale use. The devices worked anywhere they could connect to the FABLAB Wi-Fi network in the lab.
Scoring Logic
Each question has a 10 second time limit.
The scoring logic is:
elapsedSeconds = elapsed time after question starts
points = 10 - elapsedSeconds
If the answer is correct, the player receives the calculated points. If the answer is incorrect, missing, or submitted after the time limit, the player receives 0 points.
This makes the game competitive because players need to answer both correctly and quickly.
Assembly and Integration
The assembly process was:
- 3D print the red PLA base.
- Laser cut the 3 mm plywood cover.
- Vinyl cut the white A/B/C/D labels.
- Insert the magnets into the base.
- Insert the matching magnets into the cover.
- Place the OLED on the integrated 3D-printed stand.
- Mount the push buttons into the laser-cut cover.
- Tighten the button nuts from the back of the cover.
- Crimp the button wires using 2.80 mm Faston connectors.
- Interconnect the button ground terminals.
- Route one shared ground line back to the PCB.
- Route each button signal wire back to the PCB.
- Connect the OLED using the 7-pin connector.
- Connect the LiPo battery through the slide switch.
- Add the 100 µF capacitor near the battery input and ground.
- Mount the PCB inside the base using double-sided 3M mounting tape.
- Close the cover and check magnet alignment.
- Turn on the device using the slide switch.
- Test OLED, buttons, battery power, and Wi-Fi game flow.

Bill of Materials
Cost for One Device
| Component | Quantity | Source | Approx. Cost TRY | Approx. Cost USD |
|---|---|---|---|---|
| ESP32-C3 Super Mini | 1 | Robotistan / Direnc.net | 150 | 5 |
| Custom PCB material | 1 | Fab Lab inventory | 100 | 3 |
| 1.5 inch RGB OLED module | 1 | Robotistan / Direnc.net | 450 | 14 |
| Red push buttons | 4 | Direnc.net | 200 | 6 |
| 1S 3.7 V 1000 mAh LiPo battery | 1 | Robotistan / Direnc.net | 250 | 8 |
| Slide switch | 1 | Direnc.net | 30 | 1 |
| 100 µF 25 V capacitor and small parts | 1 set | Direnc.net / Fab Lab | 50 | 2 |
| Faston connectors, PH connector, wires | 1 set | Direnc.net / Fab Lab | 150 | 5 |
| Magnets | 8 | Fab Lab / local supplier | 100 | 3 |
| Premium red PLA | Partial spool | Fab Lab inventory | 100 | 3 |
| 3 mm plywood | 1 piece | Fab Lab inventory | 50 | 2 |
| White vinyl | Small piece | Fab Lab inventory | 25 | 1 |
| Double-sided 3M mounting tape | 1 piece | Fab Lab inventory | 50 | 2 |
| Total | 1655 TRY | 55 USD |
Cost for Two Devices
| Quantity | Approx. Cost TRY | Approx. Cost USD |
|---|---|---|
| 2 Duello devices | 3310 TRY | 110 USD |
These costs are approximate because some components came from suppliers and some materials came from Fab Lab inventory.
Testing and Results
OLED Test
I tested the OLED screen separately and then again after it was integrated into the enclosure. The OLED successfully displayed the game interface, including questions, options, scores, results, and the final winner screen.
Button Test
I tested the four physical buttons using the ESP32-C3 input pins. Each button was mapped to one answer option: A, B, C, or D.
The buttons worked with INPUT_PULLUP, so a pressed button reads as LOW. After the buttons were mounted into the wooden cover and wired with crimped connectors, they continued to work inside the enclosure.
Battery and Switch Test
I tested the device using the internal LiPo battery and the on/off slide switch.
The device turned on when the switch was moved to ON and turned off when the switch was moved to OFF. This confirmed that the battery and switch were integrated correctly into the power path.
Wi-Fi Test
I tested the connection between the two ESP32-C3 devices.
The host device created the FABLAB Wi-Fi network. The second device connected to this network and received game state updates from the host. The second device also sent answer data back to the host.
Full Game Test
I tested the complete quiz game using two devices.
The test confirmed that:
- the host device could start the game
- both devices displayed questions
- both players could answer using buttons
- the host received the client answer
- scores were calculated correctly
- round results were shown
- the final winner screen was displayed
Shake Test
I performed shake tests to check whether the device could survive normal handling.
During the shake test, I checked for:
- loose magnets
- cover detachment
- PCB movement
- OLED movement
- button movement
- cable disconnection
- device reset
- button failure
- OLED failure
After the shake test, the electronics continued to work.
Drop Test
I performed a drop test from approximately 100 cm, around chest height.
After the drop test, the device still functioned. The OLED, buttons, battery power, and wireless game system continued to work. This showed that the mechanical and electrical integration was strong enough for normal classroom handling.
Problems and Fixes
Cable Management
Cable management was one of the main challenges. The cover contains the buttons, but the PCB is inside the base. Because the cover is removable, the cables need to be long enough to open the device but short enough to fit inside when the cover is closed.
I improved this by using crimped connectors and routing the wires more carefully inside the enclosure.
Shared Ground Wiring
The four buttons share a common ground. This reduced the number of wires returning to the PCB, but it also made the shared ground connection important. If the shared ground fails, multiple buttons could stop working.
Using crimped connectors and secure wiring helped make this more reliable.
OLED Mounting
The OLED had to align with the cover opening. I solved this by designing the OLED stand as part of the 3D-printed base. This fixed the screen position and made the display visible through the cover.
PCB Mounting
The PCB is mounted using double-sided 3M mounting tape. This was simple and low-profile. It worked for the prototype, but in a future version I would add printed clips, standoffs, or screw mounting holes.
Battery Integration
Adding the LiPo battery made the device portable, but it also required a more careful power path. I added a slide switch so the device could turn on and off, and I added a 100 µF capacitor near the battery input to help stabilize power.
Timing Synchronization
The two devices communicate over Wi-Fi. The game is playable, but the exact timing between two devices is not perfectly synchronized. For the current prototype, this is acceptable, but future versions could improve synchronization by using better time sharing or a more precise start signal.
What Worked
| System | Status | Notes |
|---|---|---|
| 3D-printed base | Working | Holds electronics and includes OLED stand |
| Laser-cut cover | Working | Holds buttons and aligns with base |
| Magnet assembly | Working | Allows tool-free opening and closing |
| OLED display | Working | Displays game interface |
| Button inputs | Working | Four buttons mapped to A/B/C/D |
| Shared ground wiring | Working | Reduces wiring complexity |
| Custom PCB | Working | Integrates ESP32-C3, buttons, OLED, and power |
| LiPo battery | Working | Powers device portably |
| Slide switch | Working | Turns device on and off |
| Wi-Fi connection | Working | Client connects to host |
| Two-device game | Working | Full quiz flow runs |
| Timing synchronization | Needs improvement | Playable but not perfectly synchronized |
| User experience | Needs improvement | Screen layout and flow can be polished |
Source Files
Add links to final files here.
Related Weekly Work
- Computer-Aided Design
- Embedded Programming
- Electronics Design
- Electronics Production
- Input Devices
- Output Devices
- Networking and Communications
- Interface and Application Programming
- System Integration
- Applications and Implications
- Invention, Intellectual Property, and Income
License
The code for Duello is released under the MIT License.
The design files and documentation are released under a Creative Commons license.