• Models
  • Contests
  • Slicer
  • Login
  • Start Here
    thingiverse-iconprintables-iconcults3d-iconmakerworld-iconmyminifactory-icon

    3D GO

    3D ModelsContestsCollectionsSaved ModelsOn a mobile device?

3D GO

Privacy Policy
Mouse Guts! 3D Printer File Image 1
Mouse Guts! 3D Printer File Thumbnail 1

Mouse Guts!

Steve DeGroof avatarSteve DeGroof

October 5, 2025

printables-icon
DescriptionCommentsTags

Description

What we've got here is a model that allows you to build a wireless mouse from scratch. This is just the base of a mouse. The idea is for this to serve as a starting place for a custom mouse of your own design. I'm looking forward to seeing what sort of remixes people come up with.

Fair warning: You'll need to be fairly comfortable with soldering and wiring for this project. It also doesn't hurt to have some familiarity with the Arduino IDE and C/C++ programming.

In addition to the models here, you'll need:

  • a PMW3610 breakout board such as the ones here and here; or, if you'd rather build your own, use the PCB files from here
  • a BLE M0 or BLE 32u4 Feather microcontroller (aka Bluefruit LE Feather)
  • a 9mm mechanical scroll wheel encoder compatible with the APLS EC10E1220501, such as this, this or this
  • an Omron D2F microswitch for each button, such as this or this
  • some 0.5mm mouse glides / skates like these
  • a 5mm thick lithium ion or lithium polymer battery (somewhere around 500mAh, like this one)
  • a micro USB cable for programming and charging the mouse
  • wires, solder, connectors (optional), heat-shrink tubing (optional)

Note: With a 500mAh battery, you'll likely get about a day or two off a full charge.

 

Printing

Print one of the “mouse” models. I found PLA to be perfectly fine. No supports required.

If you want a scroll wheel, print the axle at the finest layer height you can manage (I used 0.07mm). Once you've got the axle, print “axle-test” and check which hole it fits best in (2.0mm works best for me), then print the corresponding “wheel” model. The axle should fit in the wheel so that it slides in but tight enough that it doesn't slip.

 

Bluetooth Firmware Update

Chances are the firmware on the Feather is not up to date. Follow the instructions on this page to update the firmware. You just need the app and to supply USB power to the Feather for this. NOTE: The Feather will remain in “DFU” mode for 5 minutes after the update, during which time it's unlikely you'd be able to program it using the Arduino IDE.

 

Assembly (part 1)

Check to make sure the lens is attached to the PMW3610 breakout board properly. You don't want the lens falling out while using the mouse. If it seems loose, you have 2 options: a) carefully melt the plastic posts with a soldering iron, or b) put a drop of glue on each post.

On the PMW3610 breakout board, solder together pads 1 and 2 on JP1 (not J1).

Solder wires to the microswitches (just the 2 pins closest to the plungers). I added crimp pins to mine so I could rewire as needed. If you're feeling brave, you can solder directly to the microcontroller.

Slip the wires through the holes on the button bracket and press each switch in place. It should be a tight fit with the unused pin hanging off the back of the bracket.

Solder 3 wires to the scroll wheel encoder. Best to use 3 different colors. With the PCB (non-metal) side facing you, the pins are A, B and C. Make a note of which wire color corresponds to which pin.

Slip the encoder into the scroll wheel bracket, with the metal side facing down and away from the center of the model. Pull the wires through the bottom of the bracket.

Insert the wheel into the scroll wheel bracket. The hub of the wheel should be facing the encoder.

Insert the axle through the holes in the bracket, encoder and wheel. This might take a bit of twisting and wiggling since the holes aren't necessarily lined up. The axle is longer than required, so you can cut off any excess. If you need to remove it at some point, you can push it out with a paperclip or jeweler's screwdriver.

 

Wiring

The following are all “ground” and should be connected together (I used a 6-pin header for this):

  • Pin 2 (GND) of J1 on the PMW3610 breakout board
  • One wire from each microswitch
  • The C wire from the scroll wheel encoder 
  • GND on the Feather

The remaining connections depend on whether you're using an M0 or 32u4 Feather:

ConnectionM0 BLE32u4 BLE
PMW3610 board J1 VIN3V3V
PMW3610 board J1 SDIOA0A0
PMW3610 board J1 SCLKA1A1
PMW3610 board J1 nCSA4A4
Scroll wheel encoder AA2SDA
Scroll wheel encoder BA3SCL
Left button switch99
Right button switch1010
Middle button switch1111

Note: The source code for this design allows for 2 additional mouse buttons (back& forward) using pins 12 and 13. 

I used fairly bulky connectors here for prototyping purposes. I've done one of these with heat-shrink tubing around the connections instead of plastic housings, and it was much more compact. Use whatever works for you.

 

Assembly (Part 2)

With the lens facing down and J1 on your left, snap the PMW3610 breakout board onto the inner 4 posts. The lens should line up with the hole in the bottom of the model.

With the USB port facing towards you and the top of the board facing down, snap the Feather onto the outer 4 posts.

Insert the battery into the slot and connect it to the Feather's charging port. Note the polarity of the wires on the connector. Some batteries have the opposite polarity for some reason. 

Add 3 or more skates to the bottom of the model.

 

Programming

You're going to need to set up the Arduino IDE for this (instructions here). Follow the instructions on this page for the M0 and this one for the 32u4. You'll also need the BLE library (M0 page / 32u4 page). At this point you can either play with some of the examples they've got, or barrel ahead with loading the mouse code.

To load the mouse code:

  1. Download wirelessmouse.ino from the Other Files section on this page
  2. In the Arduino IDE, select File→New Sketch
  3. When the new window pops up, select File→Save As, and save it as wirelessmouse
  4. Select Sketch→Show Sketch Folder
  5. Delete the wirelessmouse.ino file in this folder and replace it with the one you just downloaded
  6. The IDE should now show the mouse source code
  7. Make sure the correct board and port are selected, and select Sketch→Upload

If all goes well, you now have a working wireless mouse. It should show up as “SD Mouse” in the list of Bluetooth devices on your computer or phone. You can always change the “SD ” on line 17 of the code to whatever you want, to help identify it in the devices list.

 

Debugging

There are 4 debug flags starting on line 30 of the source code. If you change one or more of these to “true” and re-upload the sketch, the IDE's serial monitor will display debug messages. This may be useful if one or more of the mouse's functions isn't working as expected. Just make sure to switch them back to "false" when you're done.

Also, if the scroll wheel is scrolling the wrong way, you have 2 options: a) swap wires A and B on the mouse, or b) swap the values of SCROLL_PIN_A and SCROLL_PIN_B on lines 57-61 and re-upload the sketch.

 

Design Considerations

When making a housing to fit around this, make sure there's enough clearance around the components and that the scroll wheel turns freely.

Keep in mind that the USB port on the Feather is used both for programming the mouse and for charging the battery. You'll probably want that accessible from the outside.

And here's the same mouse with most of the PLA connectors replaced with heat shrink tubing. Slightly less bulky.

Disclaimer

I've provided as much information as I could. I might've made some mistakes or omitted a step or two. If I did, let me know and I'll update the instructions.

However…

The information provided here is for general informational purposes only. I assume no responsibility for errors or omissions in the content or for any actions taken based on the information provided. Links to external websites are provided for convenience and do not imply endorsement. I am not responsible for the accuracy, reliability, or content of third-party websites. Use of these instructions is at your own risk, and I am not liable for any damages arising from their use.

License:

Creative Commons — Attribution

Related Models

bakercube preview image

bakercube

iomaa profile image

iomaa

44,430

Book Page Holder V3 preview image

Book Page Holder V3

fifindr profile image

fifindr

3,488

Customizable Spotify Keychain / Tag preview image

Customizable Spotify Keychain / Tag

ewt profile image

ewt

2,997

Bottle Opener and Cap GUN! preview image

Bottle Opener and Cap GUN!

3Deddy profile image

3Deddy

43,979

Funnel Tray preview image

Funnel Tray

fifindr profile image

fifindr

3,519

Aldi Cart keychain preview image

Aldi Cart keychain

Nexus profile image

Nexus

1,079

Mini Tape Gun - Tape Dispenser preview image

Mini Tape Gun - Tape Dispenser

brycelowe profile image

brycelowe

23,750

Drill Paint Mixer preview image

Drill Paint Mixer

fifindr profile image

fifindr

2,417