Page Turner Pedals

by astroderek in Circuits > Electronics

319 Views, 2 Favorites, 0 Comments

Page Turner Pedals

Screenshot 2026-03-09 at 7.11.45 PM.png

As a violinist, I've found that using my iPad for sheet music is far more organized than constantly printing out 10+ pages of music, particularly as my repertoire has become more and more advanced. With IMSLP available as an app to both download and access sheet music, this has become my go-to.

Most musicians know the struggle of page turns, particularly in situations where pieces involve minimal rests. This is a particular nuisance on a screen, where tapping too lightly won't turn the page and where tapping too hard results in skipping an extra two pages. Furthermore, page turns require one stand partner to stop playing for several measure and to time their entrance back in properly. This results in a quieter section for several measures, and the risk of an out-of-time section.

The solution to this is the page turner pedal. Using our feet to digitally turn the page enables hands-free page turns, eliminating the above nuisances, speeding up the process as well as making it more efficient for the orchestra as a whole. In this, I aim to create a budget-friendly DIY page turner.

Supplies

Screenshot 2026-03-01 at 10.34.45 PM.png
Screenshot 2026-03-01 at 10.45.36 PM.png
Screenshot 2026-03-01 at 10.46.03 PM.png
Screenshot 2026-03-01 at 10.46.18 PM.png
  1. nRF52840 Pro Micro based microcontroller: https://a.co/d/08zKjOks
  2. 400mAh LiPo battery - https://www.digikey.com/short/4379424m
  3. Momentary Normally Open (NO) foot switch/pedals (I use the two terms interchangeably): https://a.co/d/0e9y6tHi
  4. Single pole double throw (SPDT) slide/toggle switch - https://www.digikey.com/short/r0mfpj4q
  5. Soldering iron
  6. Mu text editor - download here
  7. 3D Printer + filament
  8. Multimeter
  9. Wire stripper
  10. Screwdriver
  11. OnShape: download here
  12. Jumper wires (only needed if using a foot switch without built-in wires)

Enclosure

Screenshot 2026-03-04 at 8.13.19 PM.png
Screenshot 2026-03-06 at 9.42.55 PM.png
Screenshot 2026-03-05 at 6.08.27 PM.png

I envisioned a unified two-pedal design for this device, with a central hub for the electronics. To achieve this, I worked on OnShape (as I'm most familiar with its interface) to design a central hub and mounting points. The pedals I used had their own enclosure already, so there was no need to worry about those. Primarily, the central hub enclosure would require space for the microcontroller, LiPo battery, and space for the wires from the pedals to feed in.

Designing this proved to be a moderate challenge, as this was the first time I'd worked with ground-up design. I first looked at the size of the board and built around that.

The battery presented a more challenging design. The native charging support on the microcontroller was something I wanted to take advantage of, so i made sure to position it near the edge with a cutout for the USB-C port.

Additionally, without a built-in switch, this page turner will always remain on. This means that if I wanted the ability to switch it on and off, I'd need a switch to be spliced in somewhere– more on that later. For now, I made another cutout in the enclosure to slot a switch in.

This entire thought process is worked into the sheet shown above. If you're choosing to design your own custom enclosure, prototyping and sketching out on paper is a great way to do it. Writing out dimensions and visualizing your design tangibly helps you see what works and what doesn't in what you envision.

The .stl of the enclosure I designed is attached for you to 3D print. If you've chosen to go with this design, simply upload the .stl to your slicer of choice (if you've never used a 3D printer, download Cura and work with that from there) and hit print on your printer!

Soldering and Wiring

Screenshot 2026-03-01 at 10.33.45 PM.png
Screenshot 2026-03-09 at 6.50.26 PM.png
Screenshot 2026-03-09 at 6.58.22 PM.png
Screenshot 2026-03-09 at 6.50.13 PM.png

With the enclosure was completed and printed, it's time to work on assembling the electronics. I've included a wiring diagram above to help better visualize this.

The foot switches I used had wires built into them in a format known as Single-Pole Double Throw (SPDT). This format means that there are three wires contained within: a Common, Normally Open (NO), and Normally Closed (NC). Since we want a switch that's normally open (meaning without any inputs, the circuit will be open), we'll only be working with the Common and NO wires. Cut off as much of the outside insulation as needed to expose the three wires, and seal off the NC wire with electrical tape. You can check the identity of each wire through a test with a multimeter. Leaving the switch unpressed, set the multimeter to continuity mode (typically the one with a volume icon) and touch two wires until you find the one that sets it off. These are the Common and NC wires. If you don't have a continuity mode, go to resistance (the one with an omega), set it to the lowest setting, and see which two wires give a different value than rest. Now, press the switch and find the two wires that beep together. These are the Common and NO wires. The wire that beeped both times will be your Common, and you can extrapolate from there.

Before soldering, make sure you have all required safety equipment! This includes safety goggles, water (as these get very, very hot), and any additional protection you may wish to use.

One final note before we start soldering: I've found that it's easier to start the next step (assembly) concurrently with this. Visualizing how the device comes together through some rough assembly will help you understand your wiring constraints and better adapt when soldering. I, for one, installed my foot switches before soldering, as this allowed me to trim my 6+ feet of excess wire down to the exact amount needed. In a more exact order, I first fed the foot switch wire through their cutouts on the enclosure, put the board in place in the enclosure, then trimmed wires to size, soldering to the board after. I then did the battery-switch assembly (outlined below) and soldered to the board to complete the build. You are free to go about this in whichever order suits you, but I found that this order worked quite well!

Our pedals will be arranged in a left-right orientation, with left serving as previous page and right serving as next page. With that in mind, the NO wires should be connected to pins 011 and 017 from the left and right, respectively. This may vary depending on the specific board you use, but this is a designation common to Pro Micro format boards. If using a different format, double check which pins are considered GPIO– General Purpose Input/Output, and solder these NO wires to any two of those. Both Common wires should be connected to the ground (GND). The board I used has multiple grounds, which has an added benefit in being able to visually distinguish left from right– I soldered the right pedal's COM to the right GND and the left pedal's COM to the left GND.

Important: check the polarity of the battery before soldering with a multimeter. LiPo batteries are highly polarity-sensitive, and an incorrectly wired battery (potentially by fault of the manufacturer) can cause irreparable damage to the battery and board itself. To do this, set your multimeter to measure voltage and verify that when red is touched to red and black to black, the voltage is positive. If not, this means your battery's wires have been installed backwards and will need to be flipped when soldering to the board– i.e., black will go to B+ and red to B-

The LiPo battery has no built in support on the microcontroller. If you are using a different microcontroller with a built-in JST connector, you will be able to get away with skipping this step. As for the modifications, cut off the connector leaving as much wire as possible, and strip away the top centimeter. Take some of your discarded wire from the foot switch and use it as a jumper wire for this step, and try to use the black one if possible to keep things consistent. Solder the black (negative) onto a jumper wire (as it's not long enough to reach directly to the terminal), and then the jumper wire to B-. Leave the red wire untouched for now.

Now for the switch. Use two red jumper wires from your foot switch for this step. Strip about 2cm off on both wires, and solder them to the slide switch. When soldering, keep the switch outside of the enclosure and feed the jumper wires through the switch hole as I've shown above; otherwise the switch will not be able to sit flush in the enclosure. If using a single pole double throw (SPDT) switch, it's important that you solder one wire to the middle pin, and another to one of the end pins. These switches operate by moving the connection between the middle and one of the end pins, creating open and closed circuits. I used one of these in my pedal out of familiarity, but whether you choose SPDT or SPST is strictly up to you and what you have available. The free end should then be connected to the B+ terminal on the board.

Test your circuit by switching the power on. There should be a red light on the board that blinks at an increasing rate.

Additional information:

  1. Exercise extreme caution and care when soldering the battery. Lithium fires are not fun to put out, and this battery is very sensitive to heat. Apply your heat and solder for no more than 10 seconds at a time to minimize heating throughout the wire.
  2. When testing the circuit after soldering, be sure to check for heat within components. Excess heat is usually a bad sign and may indicate that something is soldered wrong, or that there are faulty components.
  3. Always solder on a heat resistant surface, like metal or ceramic.

Assembly

Screenshot 2026-03-09 at 7.11.58 PM.png
Screenshot 2026-03-06 at 9.28.00 PM.png

With all the components now soldered, let's actually assemble the page turner. Make sure that you know which pedal is left and right during this step.

Within the enclosure, assembly is straightforward. Position the microcontroller so that the USB-C port is facing into the cutout, making sure that the port is fully and aligned. Then, use hot glue to install the microcontroller. Hot glue is ideal because it's both easy to remove if you ever need to access the microcontroller again, and it doesn't produce potentially damaging fumes like superglue. Position the LiPo battery in its appropriate slot, ensuring that the switch is also put into its cutout with hot glue (it should friction fit, but if not, then use hot glue). Mark which position is on and off on the enclosure itself so you know when it is and isn't on. Then throw the top cover on!

The enclosure I designed has mechanical attachment points to the pedals from underneath. These are designed to fit between the rubber feet and the pedal itself, allowing for a nice, robust connection. To attach them, simply unscrew the rubber feet, position the enclosure in the right spot, and reattach the rubber feet. This is a step I undertook before soldering, but I've included it in this section to keep everything organized.

Programming

Screenshot 2026-03-04 at 8.13.13 PM.png
Screenshot 2026-03-04 at 8.30.44 PM.png
Screenshot 2026-03-09 at 6.44.34 PM.png

With a fully completed wiring, programming should come simple. Before we actually get into that, though, there's a few small steps we have to take.

First and foremost, we need to make sure we can actually program the board. To do this, we use a text editor to write, modify, and visualize the code. I used Mu editor (linked in Supplies) for this, as it has a built in dialog box function that allows for running code to look for errors.

Almost equally as important, we need to make sure the microcontroller can run the program we're inputting. Plug your board into your computer as shown through the built-in USB-C connection. It should then pop up as a disk titled "CIRCUITPY". If that is the case, proceed to what's listed below. If not, and it reads something along the lines of nice!Nano or NRF52BOOT, you'll need to head to circuitpython.org to download the .uf2 file for this board. Once downloaded, copy that .uf2 into the disk and it should reboot automatically.

Within the CIRCUITPY disk, look for the file titled boot_out.txt and open that to verify the version of CircuitPython that you are running. It should look something like the second image above. Once you know what version of CircuitPython you're running, head to this link and download the libraries made for your version. Without this step, we will not have the HID library needed to utilize the Bluetooth connectivity feature. Unpack the .zip that is downloaded and search for three folders: "adafruit_hid", "adafruit_ble", and "adafruit_bluefruit_connect". Open those folder and verify that it contains several .py or .mpy documents (as there usually are two folders, where one of them contains requirements.txt. That is NOT the one we want to use), then copy it into the lib folder within the CIRCUITPY disk.

Almost there! Once you've installed the required libraries, open the code.py file in Mu and copy the code below into it. Be sure to hit Save, and the board should reboot automatically. In Mu editor, open the "Serial" button and hit Ctrl+D. The REPL dialog box should read a message somewhere that says "Advertising – waiting for connection". The third image above shows what it should read.

# Write your code here :-)
import time
import board
import digitalio
from adafruit_ble import BLERadio
from adafruit_ble.advertising.standard import ProvideServicesAdvertisement
from adafruit_ble.services.standard.hid import HIDService
from adafruit_ble.services.standard.device_info import DeviceInfoService
from adafruit_hid.keyboard import Keyboard
from adafruit_hid.keycode import Keycode

# --- BLE setup ---

ble = BLERadio()
ble.name = "Page Turner"

hid = HIDService()
device_info = DeviceInfoService(software_revision="1.0", manufacturer="DIY")
advertisement = ProvideServicesAdvertisement(hid, device_info)
advertisement.appearance = 961 # 961 = keyboard appearance code for iOS
kbd = Keyboard(hid.devices)

# --- Switch setup ---
switch1 = digitalio.DigitalInOut(board.P0_11)
switch1.direction = digitalio.Direction.INPUT
switch1.pull = digitalio.Pull.UP

switch2 = digitalio.DigitalInOut(board.P0_17)
switch2.direction = digitalio.Direction.INPUT
switch2.pull = digitalio.Pull.UP

# --- Main loop ---
while True:
if not ble.connected:
try:
ble.start_advertising(advertisement)
print("Advertising — waiting for connection...")
except Exception:
pass # already advertising, skip and keep waiting

while ble.connected:
ble.stop_advertising()

if not switch1.value:
kbd.press(Keycode.LEFT_ARROW)
kbd.release_all()
time.sleep(0.2)

if not switch2.value:
kbd.press(Keycode.RIGHT_ARROW)
kbd.release_all()
time.sleep(0.2)

time.sleep(0.01)

time.sleep(0.1) # small delay before checking connection again


Once you've saved the board and verified that it works (following the third picture above), unplug from your computer. Before unplugging the board, be sure to eject the CIRCUITPY disk, as failing to do so may wipe the contents of the disk itself and undo all your hard work. Turn on the switch and verify that a red light starts blinking. That means your soldering has worked, and there is power being delivered to the board! If you go to Bluetooth settings on your iPad, you should now see a device called "Page Turner". Connect to that, open your sheet music app, and verify that they turn pages left and right.

Make Music!

Congratulations! If the above steps were followed correctly, you now own a set of page turner pedals. Connect your device via Bluetooth to your sheet music device of choice, pull up your favorite score, and make some music!

This project was aimed to hit multiple goals, all of which were smashed beyond my expectations. Firstly, I hoped to create a page turner that was cheaper than what I could find commercially. The final bill of materials came out to $31.87, which is about $10 less than similar verified devices on Amazon. Secondly, I hoped to advance my programming and electronics skills. With a lengthy debugging process and learning how to adapt a board to Bluetooth use, I'd say this definitely presented a challenge, but was something that allowed me to learn a great deal about how devices like these work. An additional stated goal of mine was to sort of integrate product design into this to create a neat, compact system that wasn't just a mess of wires attached to switches. Overall, I am incredibly proud of the result and happy to have something that helps me perform!