This document serves as a comprehensive guide to the Lord of the Strings project, detailing every step from mechanical fabrication to software control, and is designed to enable anyone to reproduce the full self-playing guitar system from scratch while understanding how its hardware and software work together.
- For software setup and execution, refer to the How to run section.
To securely fix the guitar and all hardware components together, prepare a wooden base to serve as a stable support for the entire system.
Start by using a 120 × 70 × 5 cm spruce (epicea) wooden plank as the main base. This plank will be placed underneath the guitar and will support both the instrument and the mounted mechanisms.
Design and 3D-print a set of small guitar holder pieces whose purpose is to prevent the guitar from moving during operation. These holders should be shaped to gently block the guitar without damaging it.
Position the printed holders at:
- the bottom of the guitar body,
- the beginning of the neck,
- and on both sides of the guitar body.
Once positioned correctly, screw the holders onto the wooden plank to lock the guitar in place. Ensure that the guitar is firmly constrained while remaining removable if needed.
The first step is to design a motor stand capable of holding six motors above the guitar head.
The stand must distribute the motors symmetrically while keeping them as close as possible without obstructing their rotational paths.
The structure should be elevated above the guitar head and rigid enough to withstand continuous motor operation.
Once the design is finalized in Fusion360, 3D-print the stand. After printing:
- Mount the six motors onto the stand using appropriate screws.
- Position the assembled stand above the guitar head.
- Firmly fix it in place by nailing or screwing it down to ensure stability during operation.
The camshaft system is responsible for converting motor rotation into vertical piston motion.
This system consists of cams, bearings, and retention elements.
- Design small cams that will press down on the pistons as the camshaft rotates.
- Shape the cams to provide smooth and controlled downward motion.
- Design plexiglass bearing washers that fit precisely into the camshaft holes in the piston box walls.
- Design small TPU spacers that sit on both sides of each cam to prevent lateral movement.
Manufacturing steps:
- 3D-print the cams.
- 3D-print the TPU spacers.
- Laser-cut the plexiglass bearings.
- Cut six metal bars that will act as camshafts.
- Cut all bars to precise dimensions (to be specified).
- Clean and deburr each bar to prevent friction or damage to bearings and spacers.
The piston box is the structural frame that holds the pistons and camshafts.
It consists of:
- A flat base with eleven vertical piston holes
- Elevated leg stands
- Two side walls
Each side wall contains:
- Six holes to support the camshafts via plexiglass bearings
- Two additional holes for velcro straps used to mount the mechanism onto the guitar
Fabrication steps:
- Design the piston box frame.
- 3D-print all piston box components.
- Design and 3D-print the two camshaft doors.
- Design and 3D-print the two top covers.
- Laser-cut plexiglass plaques that slide into the side walls.
- Cut four velcro strips (two hooks and two loops) and assemble two adjustable straps.
FrameOpen.stl.zip topparts.stl.zip bridge.stl.zip plexiplate.step.zip
Each piston is composed of several elements designed to press down on guitar strings accurately and reliably.
- Design and 3D-print TPU mushroom heads for string contact.
- Design and laser-cut plexiglass trident bodies to guide vertical motion.
- Cut eleven springs to identical lengths for consistent return force.
- Design and fabricate string pressers adapted to fretboard position.
pistonHead.stl.zip PistonLegs.dxf.zip stringPressersFinal.zip
Assembly steps:
- Prepare the piston box frame by cleaning all internal guides and openings.
- Gather four screws of appropriate dimensions (2.5 mm).
- Laser-cut a 3 mm thick plexiglass piston plate with rectangular openings.
- 3D-print Teflon piston holders.
- Press-fit the Teflon holders into the plexiglass plate.
Piston assembly:
- Insert the spring onto the central rod of the trident body.
- Mount the TPU mushroom head at the top.
- Insert the piston into its corresponding Teflon holder.
- Attach the correct string presser according to its position.
Final steps:
- Verify that each piston moves freely.
- Slide the fully assembled piston plate into the piston box.
- Insert the first camshaft door into the piston box.
- Assemble the bearing stack on each camshaft in the following order:
- TPU spacer
- Teflon bearing (large radius)
- Plexiglass bearing washer (inside door hole)
- Teflon bearing
- TPU spacer
- Determine the required insertion depth for each camshaft.
- Align cam positions with corresponding pistons using reference photos.
- Add cams and TPU spacers to the shaft:
- Some pistons require one cam
- Others require two cams
- Slide the assembled camshaft into the piston box.
- Insert the second camshaft door.
- Verify free rotation of all camshafts.
- Place the top cover and secure all screws.
- Manually rotate each camshaft to confirm smooth piston motion and spring return.
- Mount the completed piston box onto the guitar using velcro straps.
- Align each piston with its corresponding string and fret location.
- Design and 3D-print TPU coupling tubes.
- Use three different tube lengths depending on motor position.
longestTube.stl.zip mediumTube.stl.zip smallestTube.stl.zip
Bridge assembly (for central camshafts):
- Assemble bearing stack on camshaft:
- TPU washer
- Teflon washer
- Plexiglass washer
- Insert camshaft into bridge so plexiglass washer sits in bridge hole.
- Complete stack on opposite side:
- Teflon washer
- TPU washer
Final steps:
- Mount the bridge.
- Connect all camshafts to motors using TPU coupling tubes.
- Adjust camshaft insertion depth as required.
The servos are used to pluck the strings. They are positioned where a guitarist’s fingers would normally pluck the strings and mechanically replace the musician’s fingers.
- Design a dedicated bridge that sits on top of the guitar body.
- The bridge must hold all servos rigidly and keep them aligned with the strings.
- 3D-print the bridge using a stiff material to limit vibrations and deformation.
- Position the bridge above the string plucking area, close to where fingers usually strike the strings.
- Fix the bridge securely to the guitar body using screws or clamps.
- Ensure the bridge does not interfere with string vibration or dampen the sound.
- Insert each servo into its corresponding slot on the bridge.
- Align each servo so that its rotation plane is perpendicular to the string.
- Secure the servos tightly to prevent movement during repeated plucking.
- Attach a plucking arm or pick to each servo horn.
- Adjust the arm length so it can reach the string without excessive force.
- Verify that the arm can move freely without colliding with neighboring servos or strings.
- Manually rotate each servo horn to ensure smooth contact with the string.
- Check that each servo returns to its neutral position without touching the string.
- Make sure all servos are evenly spaced and symmetrically arranged.
- Avoid overtightening screws to prevent damaging the servos or bridge.
- Use flexible or rounded plucking tips to reduce string wear.
- Recheck alignment after prolonged use or mechanical adjustments.
- ESP8266 – master controller and WiFi interface
- Arduino Uno – real-time motor control and low-level actuation
- Stepper motor drivers – drive the camshafts for fretting
- Adafruit PCA9685 – PWM controller for servo-based string plucking
- LM2596 buck converter – voltage regulation
- 12 V power supply
- 9 V battery/power suply
All components share a common ground to ensure stable communication and correct signal referencing.
-
12 V → Stepper motors
-
12 V → 5 V (buck converter) → PCA9685 and servos
-
9 V battery – powers the Arduino Uno via its regulated input and the ESP8266 through the Arduino’s logic supply
The buck converter was configured to step down 12 V to 5 V and power the PCA9685 directly. This avoids drawing current from the Arduino’s 5 V pin, improves power stability, and prevents WiFi disconnections during operation.
The software stack is divided into three layers:
- User interaction
- High-level coordination
- Low-level actuation
- Web-based chord builder
- Drag-and-drop song timeline
- JSON-based song representation:
{
"id": "...",
"chordName": "...",
"chordKey": "...",
"description": "...",
"startTime": 0,
"duration": 0
}
- Servo motor control
- WiFi communication
- JSON parsing
- Event scheduling
- Six independent event queues (one per string)
- Stepper motor control
- Timing and synchronization
- Execution of fretting and strumming commands
The separation between high-level logic and real-time control ensures modularity, robustness, and extensibility.
-
Download the repo
- Clone the repository:
git clone https://github.com/epfl-cs358/2025fa-lord_of_the_strings.git cd 2025fa-lord_of_the_strings
- Clone the repository:
-
Start the Vue front-end
- Go to the app folder:
cd client/StrumMasterApp - Install dependencies:
npm install
- Start the dev server:
npm run dev
- Open the URL shown in the terminal (
http://localhost:3000).
- Go to the app folder:
-
Connect to the ESP
- Power on the ESP through the battery.
- On your computer, connect to the ESP Wi-Fi network ("strummaster_control").
-
Use the web interface
- Go to
http://localhost:3000in your browser. - Use the navigation bar to access:
- Chord Builder – create/edit chord shapes.
- Play Chords – trigger chords (Do, Rem, Mim, Fa, Sol, Lam, Si dim, Reset to Neutral).
- Play Notes – play individual notes.
- Debug and Calibrate Motors – test and calibrate stepper motors and servos.
- All actions in these tabs send commands to the ESP to control the guitar’s steppers and servos in real time.
- Go to








