Final Project — Duello


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)

Final Project Summary Slide 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

Enclosure photos


What Does It Do?

Duello allows two students to compete in a physical quiz game.

The interaction flow is:

  1. Player 1 turns on the host device.
  2. The host ESP32-C3 creates a local Wi-Fi network.
  3. Player 2 turns on the second device.
  4. The second ESP32-C3 connects to the host device.
  5. Player 1 starts the game.
  6. Both OLED screens show the same question and answer choices.
  7. Each player answers using the physical A/B/C/D buttons.
  8. The host device calculates scores using correctness and answer speed.
  9. Both devices display the round result.
  10. The game continues to the next question.
  11. 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:

DimensionSize
Width85 mm
Length140 mm
Height60 mm

Mechanical Design

Enclosure photos

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.

Enclosure photos

Enclosure photos


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.

Enclosure photos


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.

Enclosure photos

Enclosure photos


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.

Enclosure photos


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.

Enclosure photos


Electronics and PCB

Custom PCB

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

Enclosure photos

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.

Enclosure photos Enclosure photos Enclosure photos Enclosure photos


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.

Enclosure photos


Button Input

The input system uses four red physical push buttons. These correspond to the four multiple-choice answers:

LabelGPIO
AGPIO2
BGPIO6
CGPIO4
DGPIO3

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.

Enclosure photos Enclosure photos


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.

Enclosure photos Enclosure photos Enclosure photos Enclosure photos Enclosure photos


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.

PartEstimated CurrentNotes
ESP32-C3 normal operation40–100 mADepends on code and Wi-Fi use
ESP32-C3 Wi-Fi peaks250–350 mA peakShort current spikes during wireless communication
1.5 inch RGB OLED40–120 mADepends on screen brightness and pixels lit
Four push buttonsVery smallGPIO pull-up behavior
Total typical estimate90–220 mANormal use
Possible peak estimate350–500 mAWi-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:

PhaseMeaning
0Waiting to start
1Question active
2Showing round result
3Final 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 FABLAB network.
  • 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:

RoutePurpose
/stateSends the current quiz state to the client
/answerReceives 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:

  1. 3D print the red PLA base.
  2. Laser cut the 3 mm plywood cover.
  3. Vinyl cut the white A/B/C/D labels.
  4. Insert the magnets into the base.
  5. Insert the matching magnets into the cover.
  6. Place the OLED on the integrated 3D-printed stand.
  7. Mount the push buttons into the laser-cut cover.
  8. Tighten the button nuts from the back of the cover.
  9. Crimp the button wires using 2.80 mm Faston connectors.
  10. Interconnect the button ground terminals.
  11. Route one shared ground line back to the PCB.
  12. Route each button signal wire back to the PCB.
  13. Connect the OLED using the 7-pin connector.
  14. Connect the LiPo battery through the slide switch.
  15. Add the 100 µF capacitor near the battery input and ground.
  16. Mount the PCB inside the base using double-sided 3M mounting tape.
  17. Close the cover and check magnet alignment.
  18. Turn on the device using the slide switch.
  19. Test OLED, buttons, battery power, and Wi-Fi game flow.

Enclosure photos


Bill of Materials

Cost for One Device

ComponentQuantitySourceApprox. Cost TRYApprox. Cost USD
ESP32-C3 Super Mini1Robotistan / Direnc.net1505
Custom PCB material1Fab Lab inventory1003
1.5 inch RGB OLED module1Robotistan / Direnc.net45014
Red push buttons4Direnc.net2006
1S 3.7 V 1000 mAh LiPo battery1Robotistan / Direnc.net2508
Slide switch1Direnc.net301
100 µF 25 V capacitor and small parts1 setDirenc.net / Fab Lab502
Faston connectors, PH connector, wires1 setDirenc.net / Fab Lab1505
Magnets8Fab Lab / local supplier1003
Premium red PLAPartial spoolFab Lab inventory1003
3 mm plywood1 pieceFab Lab inventory502
White vinylSmall pieceFab Lab inventory251
Double-sided 3M mounting tape1 pieceFab Lab inventory502
Total1655 TRY55 USD

Cost for Two Devices

QuantityApprox. Cost TRYApprox. Cost USD
2 Duello devices3310 TRY110 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

SystemStatusNotes
3D-printed baseWorkingHolds electronics and includes OLED stand
Laser-cut coverWorkingHolds buttons and aligns with base
Magnet assemblyWorkingAllows tool-free opening and closing
OLED displayWorkingDisplays game interface
Button inputsWorkingFour buttons mapped to A/B/C/D
Shared ground wiringWorkingReduces wiring complexity
Custom PCBWorkingIntegrates ESP32-C3, buttons, OLED, and power
LiPo batteryWorkingPowers device portably
Slide switchWorkingTurns device on and off
Wi-Fi connectionWorkingClient connects to host
Two-device gameWorkingFull quiz flow runs
Timing synchronizationNeeds improvementPlayable but not perfectly synchronized
User experienceNeeds improvementScreen layout and flow can be polished

Source Files

Add links to final files here.



License

The code for Duello is released under the MIT License.

The design files and documentation are released under a Creative Commons license.