Week 15 — System Integration



Hero Shot

Finished final project version

This week I focused on integrating the electronic, mechanical, interface, wiring, power, and networking parts of my final project into one functional device. My goal was not only to make each part work separately, but to make the whole system behave like a finished product.

My final project is called Duello. Duello is a wireless competitive learning device for middle school students. Two devices connect over Wi-Fi and allow two players to answer teacher-programmed multiple-choice questions using physical A/B/C/D buttons. The device displays questions, options, scores, round results, and the final winner on a 1.5 inch RGB OLED screen.

The final integrated device consists of:

  • a 3D-printed base
  • a laser-cut plywood cover
  • four red push buttons
  • white vinyl A/B/C/D labels
  • a 1.5 inch RGB OLED module
  • an ESP32-C3 Super Mini integrated custom PCB
  • a 1S 3.7 V 1000 mAh LiPo battery
  • an on/off slide switch
  • crimped internal wiring
  • magnets connecting the base and cover

The base and cover are connected using magnets, so the device can be opened for debugging and maintenance without screws. The final device is approximately 85 mm wide, 140 mm long, and 60 mm high.


System Overview

Duello is made from two main mechanical parts: a 3D-printed base and a laser-cut top cover.

The 3D-printed base is printed using premium red PLA. It holds the main electronics, including the custom PCB, LiPo battery, internal wiring, and OLED support. The OLED stand is integrated directly into the 3D-printed base, so the screen has a fixed position inside the enclosure.

The laser-cut top cover is made from 3 mm plywood. It acts as the main user interface panel. It holds the four push buttons using their own nuts, includes the screen opening, and connects to the base using magnets. The buttons are red, and the A/B/C/D button labels are white vinyl stickers.

3D printed base

Laser-cut top cover

The device is powered by a 1S 3.7 V 1000 mAh LiPo battery. The battery is connected through an on/off slide switch, so the device can be fully turned on and off. The battery connects to the ESP32-C3 board power pads, and the ESP32-C3 board handles power regulation and charging when an external USB power source is connected.

Slide switch on/off wiring

ESP Power


Bill of Materials

ComponentQuantityPurpose
ESP32-C3 Super Mini1Main microcontroller and Wi-Fi module
Custom PCB1Holds ESP32-C3 connections, OLED connector, button inputs, and power connections
1.5 inch RGB OLED module1Main visual output
Red push buttons4A/B/C/D user input buttons
White vinyl stickers4 labelsButton labels
1S 3.7 V 1000 mAh LiPo battery1Portable power source
Slide switch1Turns device on and off
100 µF 25 V capacitor1Power stabilization near battery input
3D printed base1Main enclosure body
3 mm plywood cover1Top user interface panel
Magnets8 total4 in base and 4 in cover
2.80 mm insulated female Faston connectorsMultipleButton wiring
7-pin PH connector / crimped OLED cable1 setOLED wiring
Jumper wiresSeveralInternal PCB connections
Double-sided 3M mounting tape1 piecePCB mounting

Mechanical Integration

Base and Cover System

The enclosure was designed as a two-part system. The bottom part is a 3D-printed base, and the top part is a laser-cut plywood cover.

I chose this combination because each fabrication method was useful for a different purpose. The 3D-printed base gave me more control over the internal structure. I could create the walls, internal layout, OLED stand, battery space, PCB placement area, and cable routing space directly in the CAD model.

The laser-cut plywood cover was better for the user interface because it created a flat and clean front panel. The button holes and screen opening could be cut precisely, which helped the buttons and OLED align with the outside of the device.

The base was designed in Fusion 360. The cover geometry was exported from Fusion 360 and then edited in Adobe Illustrator before laser cutting. The base was printed on the Bambu Lab A1, and the cover was cut on the xTool P3.


Magnet Integration

The cover and base 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 into the parts. The tolerance for the 3D print and the kerf compensation for the laser-cut cover were accurate enough that the magnets fit securely.

This connection system is useful because the enclosure can be opened for debugging, wiring changes, and maintenance. At the same time, the magnets are strong enough to keep the cover attached during normal use.

During assembly testing, I checked that:

  • the cover aligned with the base
  • the magnets pulled the cover into the correct position
  • the cover could be removed without tools
  • the cover did not fall off during normal handling
  • the internal cables did not block the cover from closing

Electronics Integration

Custom PCB Placement

The custom PCB is placed inside the 3D-printed base. It is based on the ESP32-C3 Super Mini and connects the OLED screen, button inputs, battery power, and ground connections.

ESP Power

Internal cabling and PCB integration

Internal PCB and button wiring

The PCB was designed to keep the main electronics in one compact area. This made the internal layout cleaner because the OLED and buttons could connect to the PCB instead of being wired directly to the ESP32-C3 pins one by one.

The PCB is mounted inside the base using double-sided 3M mounting tape. This was a simple and low-profile mounting method that kept the PCB fixed inside the enclosure while avoiding extra screws or standoffs.

The PCB integrates:

  • ESP32-C3 Super Mini connections
  • OLED SPI pins
  • button input pins
  • common ground connections
  • power input connections
  • battery-related power routing

OLED Screen Integration

The project uses a 1.5 inch RGB OLED module with a 7-pin SPI interface. The OLED operates at 3.3 V.

The OLED is mounted on a 3D-printed stand that is part of the base. This helped keep the screen aligned with the laser-cut cover opening. The OLED wiring is made using a 7-pin PH connector on the OLED side and crimped/jumper-style connections to the PCB side.

The OLED displays:

  • connection status
  • current question
  • answer options
  • scores
  • selected answer
  • round result
  • final winner

The OLED integration was important because the screen is the main feedback system of the device. The player needs to clearly see the question and options while using the physical buttons.


Button Integration

The four red push buttons are mounted directly onto the laser-cut plywood cover. Each button is inserted through its circular hole and tightened using its own nut from the back side of the cover.

This made the buttons mechanically strong because they are not held by glue or friction. The button nuts clamp the button bodies to the wooden panel.

Crimped button wiring

Each button has two terminals. One terminal goes to a GPIO input on the PCB, and the other terminal connects to ground.

The buttons use a shared common ground. This means the ground terminals of all four buttons are interconnected, and only one main ground line returns to the PCB. This reduced the number of ground wires going back to the board and made the internal wiring cleaner.

The button connections use Tam İzoleli Dişi Faston Tip Kablo Ucu 2.80mm connectors. These crimped Faston connectors make the button wiring more secure and more serviceable than directly soldering every wire permanently.

The button pins are read in the code using INPUT_PULLUP. This means each input normally reads HIGH, and when the button is pressed it connects to ground and reads LOW.

The button mapping is:

ButtonGPIO
AGPIO2
BGPIO6
CGPIO4
DGPIO3

Cable Integration

Cable integration was one of the most important parts of this week. The device has a removable cover, but the buttons are attached to the cover while the PCB is inside the base. This means the wiring has to be long enough to open the device, but short enough to fit cleanly inside when the cover is closed.

To make the wiring more reliable, I used crimped connectors for both the buttons and the OLED.

The button wiring uses:

  • 2.80 mm insulated female Faston connectors on the button side
  • shared ground wiring between the buttons
  • signal wires routed individually to the PCB
  • crimped cable ends for stronger connections

The OLED wiring uses:

  • 7-pin PH connection on the OLED side
  • crimped/jumper-style connections to the PCB

This improved system integration because the electronics were not just temporarily connected on a breadboard. The wiring became part of the final packaged device.


Power Integration

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 whole device to be turned on and off. This is important because the device is portable and battery-powered.

Slide switch on/off wiring

A 100 µF 25 V capacitor is placed near the battery input and GND. This helps stabilize the power input, especially because Wi-Fi devices can create short current spikes.

The ESP32-C3 board handles battery charging when an external power source is connected through USB. This means I did not need to design a separate battery charging circuit for this version.


Power Estimate

The main power consumers are the ESP32-C3 and the RGB OLED. The buttons do not use significant power because they only connect GPIO pins to ground when pressed.

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 smallOnly GPIO 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.


Networking Integration

Duello uses two ESP32-C3 devices communicating over Wi-Fi.

For the current prototype:

  • Player 1 device acts as the host/server.
  • Player 1 creates a local Wi-Fi access point named FABLAB.
  • Player 2 connects to this Wi-Fi network.
  • Player 2 requests the game state from Player 1.
  • Player 2 submits its answers to Player 1.
  • Player 1 controls the quiz state, timing, scoring, and round progression.

The system uses HTTP communication. The host device uses server routes such as:

  • /state for sending the current game state
  • /answer for receiving the second player’s answer

The player device polls the host for updated state and sends its selected answer back to the host. This allows both devices to display the same quiz question and results.

There is no external antenna. The devices use the ESP32-C3 Super Mini Wi-Fi directly. In testing, the devices worked reliably within the Fab Lab range.


Software Integration

The code is divided into two roles:

Host Device

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
  • shows the same game feedback on its OLED

Player Device

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

The game has four main phases:

PhaseMeaning
0Waiting to start
1Question active
2Showing round result
3Final score screen

The scoring system gives up to 10 points for a correct answer. The points decrease by 1 for each second that passes. Incorrect answers or missing answers receive 0 points.


Assembly Process

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 3D-printed base.
  5. Insert the matching magnets into the plywood cover.
  6. Place the OLED module on the integrated 3D-printed stand.
  7. Mount the four push buttons into the laser-cut cover.
  8. Tighten the button nuts from the back side of the cover.
  9. Crimp the button wires using 2.80 mm insulated female 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 cable.
  14. Connect the LiPo battery through the slide switch.
  15. Add the 100 µF capacitor near battery input and GND.
  16. Mount the PCB inside the base using double-sided 3M mounting tape.
  17. Close the cover and check magnet alignment.
  18. Turn the device on using the slide switch.
  19. Test OLED, buttons, battery power, and Wi-Fi game flow.

System Integration Tests

After assembling the device, I tested both the electronic and mechanical integration.

Electronics Working Test

In this test, the OLED displayed the interface and the buttons were tested while the electronics were inside the enclosure. This was important because electronics can work on the table but fail after being packaged if a cable is loose, the screen is misaligned, or the enclosure presses on a connection.


Wi-Fi and Full Game Test

I tested the two-device game flow by turning on both devices and allowing the second ESP32-C3 to connect to the host ESP32-C3.

The test checked that:

  • the host device created the Wi-Fi network
  • the player device connected to the host
  • both devices showed the same quiz state
  • both devices accepted button input
  • the host calculated scores
  • both devices showed the round result
  • both devices showed the final winner

This test proved that the input, output, networking, and scoring systems were integrated into one working game.


Battery and Switch Test

I tested the device using the internal LiPo battery and the on/off slide switch.

The test checked that:

  • the device turned on when the switch was moved to ON
  • the device turned off when the switch was moved to OFF
  • the OLED and ESP32-C3 powered correctly from the battery
  • the device could run without a USB cable
  • the wiring stayed connected inside the enclosure

Slide switch on/off test


Shake Tests

I performed shake tests to check whether the mechanical and electrical connections were stable. During the shake tests, I looked for:

  • cover detachment
  • loose magnets
  • PCB movement
  • screen movement
  • button movement
  • cable disconnection
  • device reset
  • OLED failure
  • button failure

After the shake tests, the electronics continued to work. This showed that the magnetic cover, button mounting, PCB mounting, and internal wiring were reliable enough for normal handling.


Drop Test

I also performed a drop test from approximately 100 cm, around chest height.

The goal was to check whether the device could survive accidental handling mistakes. After the drop test, the electronics continued to work, and the device was still functional.

This was an important system integration test because it tested the enclosure, magnets, PCB mounting, OLED wiring, button wiring, and battery wiring together.


Assembly and Disassembly Tests

I tested opening and closing the enclosure multiple times. This confirmed that the magnets make the device serviceable and that the cover can be removed without damaging the wires.


Problems and Design Decisions

Cable Management

One of the biggest integration challenges was cable management. The cover holds the buttons, but the PCB is inside the base. Because the cover is removable, the cables need to be flexible enough to open the device, but they also need to fit inside the enclosure when it is closed.

I solved this by using crimped connectors and careful cable routing. The button wiring and OLED wiring are removable and more reliable than temporary jumper connections.


Shared Button Ground

Using a shared ground for the buttons reduced wiring complexity. Instead of sending four separate ground wires back to the PCB, I connected the button ground terminals together and routed one main ground line back to the PCB.

This made the wiring cleaner, but it also means the shared ground connection must be reliable. If the shared ground fails, multiple buttons could stop working.


OLED Mounting

The OLED is placed on an integrated 3D-printed stand. This helped align the display with the cover and avoided needing a separate mounting bracket.

The main challenge was making sure the screen height matched the cover opening. If the stand was too low, the screen would look recessed. If it was too high, the cover would press too much on the module.


PCB Mounting

The PCB is mounted with double-sided 3M mounting tape. This was fast, simple, and low-profile. It also avoided adding screw holes or standoffs.

For a future version, I would prefer to add a more formal PCB mounting system, such as printed standoffs, screws, or clips.


Battery Integration

The battery made the device portable, but it also added extra integration requirements. I needed to include a power switch, make sure the battery wiring was secure, and add a capacitor near the battery input.

The slide switch worked well because it allowed the device to be fully turned off when not in use.


Networking Timing

The two devices communicate wirelessly, but exact timing synchronization over Wi-Fi is not perfect. The current system is playable and demonstrates the concept, but future versions could improve synchronization.


What Worked Well

The system integration was successful because the device worked as a complete object, not just as separate parts.

The OLED was visible and aligned. The buttons were firmly mounted with nuts. The PCB fit inside the base. The LiPo battery powered the device. The slide switch turned the device on and off. The magnets made the enclosure removable. The crimped cables improved reliability. The two ESP32-C3 devices communicated wirelessly. The full game flow worked from question display to final winner screen.

Most importantly, the device passed shake and drop tests while continuing to function.


What I Would Improve

For the next version, I would improve:

  • exact timing synchronization between the devices
  • user experience and screen layout
  • PCB mounting with screws or printed clips
  • internal cable channels
  • battery monitoring
  • classroom-ready question editing
  • support for more than two devices
  • teacher dashboard
  • sound or buzzer feedback
  • larger or higher-resolution display

Final Reflection

This week helped me understand that system integration is not just about placing parts inside an enclosure. A project can work electronically but still fail as a system if the cables are loose, the screen is not aligned, the power path is unreliable, the cover does not close, or the device cannot survive handling.

In this version, I successfully integrated the PCB, OLED screen, four push buttons, LiPo battery, slide switch, 3D-printed base, laser-cut plywood cover, magnets, crimped wiring, and wireless ESP32-C3 communication into one working prototype.

The final result is a functional integrated version of Duello, a portable wireless quiz device that can be used by two students to play a competitive learning game.