Skip to the content
2 layers35 × 54 mmEvoluent, the printed circuit board in 3D

PCBs using better sensor for Evoluent VerticalMouse products

Size
35 × 54 mm
Copper layers
2
Thickness
1.6 mm
Parts
30
Nets
52
Pads
160
Tracks, vias
414, 71
Pours
244
Routed
Yes
KiCad
KiCad 7 (file 20221018)
Created
22 Nov 2022
Updated
20 Jan 2025

Overview

Evoluent is an open-source printed circuit board by mon, from the mon/evoluent_better_pcb repository on GitHub, published under the MIT licence. It is a 2-layer board of 35 × 54 mm with 30 parts on 52 nets, routed with 414 tracks and 71 vias.

It is built around the ATMEGA32U4-MU, XC6206P332MR and VRH1902LTX, with the 0603WAF1002, CC0603KRX7R9BB104 and CL10A106KP8NNN among its other parts. Its parts include 10 capacitors, 9 resistors, 5 connectors, 4 ICs and 1 transistor. It belongs with the sensors and measurement boards and the AVR (ATmega, ATtiny) boards of this library.

Main components

12

README

README.md

Evoluent VM4/VMC/VMD better PCB

Let's face it - the sensor that Evoluent ships with the VerticalMouse series of mice is at best "OK" and recently, dreadful. While my VM4 and the wireless VMC was "fine, but office-spec", the VMD jitters, jumps, and cannot keep up with even moderately fast moves across the mousepad.

So, I created this drop-in replacement PCB to upgrade the sensor to a gaming grade PMW3360DM, using an atmega32u4 and Arduino.

Supported models

So far this seems to work with

  • VMD
  • VMC
  • VM4 (large and small)

It may work with the VM3.

The current design only supports wired models.

Installation

PCB image

The PCB has the same shape and pinouts as the stock PCB and is a drop-in replacement.

Step 1

Remove the bottom off your mouse - this unfortunately requires taking some of the non-slip feet off. Be as careful as possible to not mangle the feet when you remove them, or you will significantly affect the smooth feel of the mouse.

It is normal for surface smoothness to be poor after you replace the feet. When I upgraded my VMD, it took 2-3 weeks to return to normal feeling.

For the Large VerticalMouse D, the screws (some of which are Torx security bits) are located here: VMD Right Large

For the VerticalMouse C, the screws are located here:
VMC

For the Small VerticalMouse 4, the screws are located here:
VM4 Right Small

Step 2

With the bottom of the mouse removed, unplug all cables from the existing PCB.

The USB cable (the one located at the back of the PCB) can take a fair amount of force to remove. Ensure you grip at the base of the cable to avoid damage.

The ribbon cables must also be gripped at the base when removing/replacing them, as they are more fragile than normal cables.

Step 3

Unscrew and remove the existing PCB. The screws are located here: VM inner screws

Step 4

Repeat the disassembly steps in reverse.

Step 5 (Optional)

For shipped PCBs: If the default firmware is not to your liking, customise it using the Arduino toolchain. See the "Firmware" section (you can skip the bootloader as the PCB ships with one).

For PCBs you make yourself: You need to flash the bootloader and firmware, see the "Firmware" section.

Firmware

  • Using the ICSP pins on the left of the PCB, flash the atmega with the Arduino Leonardo bootloader.
  • Install the AdvMouse library from the PMW3360_Arduino repository
  • Install the Encoder library under Tools -> Manage Libraries
  • The Arduino IDE might not automatically recognise the required files for the project to build. They are:
    • SROM_0x04_Arduino.ino
    • better_evoluent.ino
    • usb_rename.cpp
    • usb_rename.h
  • Customise your button layout in the struct button_t buttons[].
    • The pin map is:
    • 10: Top mouse button
    • 6: Middle mouse button
    • 4: Lower mouse button
    • 12: Scrollwheel click (for mice that have one)
    • A0: Lower thumb button
    • 2: Upper thumb button
    • (Thumb button pins are reversed on the VMC)
    • 8: Sensitivity/DPI button
  • (Optional) Adjust the DPI increments in dpi_steps[]
  • (Optional) If your buttons are chattery and double-clicking when they shouldn't, increase DEBOUNCE from 20 to some higher number, such as 50.
  • (Optional) Rename the mouse's device name using the USBRename line. The default is Evoluent VMD with manufacturer mon.im.
  • flash evoluent_better_pcb.ino, selecting Arduino Leonardo as the device type.

I recommend using Device Manager to assign a very high COM port number to the mouse - that way, you won't accidentally reflash the mouse when working with other Arduino projects.

The default firmware is basic, but functional. It is based on PMW3360_Arduino's PMW3360DM-Mouse example and extended for my own uses. It has a serial interface to configure mouse parameters which is useful when nailing down your preferred DPI.

The default DPI is the second entry in the list. Clicking the DPI button when the DPI indicator LEDs are off will show the current DPI. Clicking again within 5 seconds will move the selected DPI through the list. This does not persist over a power cycle.

The PCB

It uses the recommended circuit for the PMW3360, with a 1.8v core voltage and 3.3v IO voltage, with the Arduino also running at 3.3v (not 5v).

The PCB is in the evoluent subfolder. There are gerbers in evoluent/production.

Assembly/BOM

There is a full BOM csv in evoluent/production.

The PMW3360DM (with lens) can be easily bought from aliexpress for about $10 USD.

The FPC connectors for the buttons can be any thru-hole soldered, 1mm pitch connector. The schematic has the JST 08FMZ-BT/10FMZ-BT, but I ended up buying something else.

The USB connector is compatible with JST-PH.

The other components are fairly standard, and if the 3v3/1v8 regulators are unavailable, there will be pin-compatible replacements easily available.

Support

I use this PCB in my mouse daily. I have been running it for almost 2 years now without issues, so please get in contact if you are having problems.

You are free to manufacture this PCB and sell it on Tindie etc, just remember to provide attribution :)

Parts

30
QtyValueFootprintReferences
410kResistor_SMD:R_0603_1608MetricR1, R3, R6, R7
30.1uFCapacitor_SMD:C_0603_1608MetricC3, C5, C7
310uFCapacitor_SMD:C_0603_1608MetricC4, C6, C8
31uFCapacitor_SMD:C_0603_1608MetricC1, C9, C10
222rResistor_SMD:R_0603_1608MetricR4, R5
24.7kResistor_SMD:R_0603_1608MetricR8, R9
116MHz CSTNE16M0V530000R0Evoluent:Resonator_SMD_muRata_CSTxExxV-3Pin_3.0x1.1mmY1
12N7002EPackage_TO_SOT_SMD:SOT-23Q1
139RResistor_SMD:R_0603_1608MetricR2
14.7uFCapacitor_SMD:C_0603_1608MetricC2
1ATmega32U4-MPackage_DFN_QFN:QFN-44-1EP_7x7mm_P0.5mm_EP5.2x5.2mmU1
1MCP1700-3302E_SOT23Package_TO_SOT_SMD:SOT-23U4
1Main switchesEvoluent:10FMZ-BTJ2
1PMW3360-T2QUEvoluent:PMW3360-T2QUU3
1Programming headerConnector_PinHeader_2.54mm:PinHeader_2x03_P2.54mm_VerticalJ5
1Rear lightsConnector_Molex:Molex_PicoBlade_53047-0210_1x02_P1.25mm_VerticalJ4
1TLV70019_SOT23-5Package_TO_SOT_SMD:SOT-23-5U2
1Thumb switchesEvoluent:08FMZ-BTJ3
1USB_AConnector_JST:JST_PH_B5B-PH-K_1x05_P2.00mm_VerticalJ1

Similar boards

  • 2 layers50 × 75 mmAP64200, the printed circuit board in 3D

    AP64200

    kaminaris/GigaESC

    52 parts47
  • 4 layers76 × 100 mmChlorine revD, the printed circuit board in 3D

    Chlorine revD

    kanengomibako/Chlorine

    206 parts11Unlicense
  • 2 layers72 × 60 mmJewelled lc1 chargerProgrammer, the printed circuit board in 3D

    Jewelled lc1 chargerProgrammer

    matthiasnowak/jewelled

    This is a panel meant for production of the Earrings, allowing for 2 Earrings per panel.

    119 parts3
  • 4 layers40.3 × 68.8 mmNrfMain, the printed circuit board in 3D

    NrfMain

    batkay/CapstonePCB

    76 parts
  • 2 layers287.8 × 126.7 mmNoName, the printed circuit board in 3D

    NoName

    AlaaSaadAbdo/battoota

    Keyboards

    267 parts188

Questions

How big is the Evoluent PCB?

It measures 35 × 54 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Evoluent use?

30 parts, built around the ATMEGA32U4-MU, XC6206P332MR, VRH1902LTX and 0603WAF1002. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Evoluent KiCad files?

From the mon/evoluent_better_pcb repository on GitHub, at the commit this page was made from: the board is evoluent/evoluent.kicad_pcb and its schematic evoluent/evoluent.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Evoluent design in my own project?

Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).