Mault / Hardware build guide

Build the card sorter

01 / Set up

Set up your build

Choose how you're building the sorter. The parts list, wiring and assembly steps below follow these choices, which are saved in this browser.

01

Where are your parts from?

02

Controller board

03

Sorting modules

Each module adds two bins. With the catch-all at the bottom, that's 7 bins.
3
Module 1
Bin 2
Bin 1
Module 2
Bin 4
Bin 3
Module 3
Bin 6
Bin 5
Bin 7catch-all, all 3 bottoms open

Each module has three servos, a bottom trapdoor, a paddle gate, and a left/right pusher, plus an IR sensor. Closing every trapdoor above the target bin and opening only the ones beneath it lets a card fall to the right module before the pusher ejects it.

02 / Parts

Bill of materials

Quantities scale with the number of modules you're building: 3 modules × 3 servos, 1 feeder, 4 IR sensors, 10 of the PCA9685's 16 channels in use. The remaining channels are free for additional sorting modules (up to 5 modules on a single PCA9685). Check off each part as you gather it. Checkmarks are saved in this browser.

Building forOwn partsUno R43 modulesChange
Would rather not source every part yourself? The Mault shop sells kits with everything except the 3D-printed parts. You'll still need to print those yourself.
0 of 32 parts0%

Electronics

QtyPartNotesBuy
1Arduino Uno R4Runs firmware/main/main.ino; USB connection to the host computer for Web Serial
1Adafruit PCA9685 16-channel 12-bit PWM/servo driverI²C servo driver, drives all 10 servos
9SG90 micro servo, positional (180°)3 per module × 3 modules: bottom trapdoor, paddle gate, pusher
1MG90S servo, 360° continuous rotationFeeder, drives cards out of the hopper into module 1

Sensing

QtyPartNotesBuy
4Reflective/obstacle IR sensor module (3-pin: VCC, GND, digital OUT)One at the gate of each module (1-3), plus one in the hopper throat

Power

QtyPartNotesBuy
16V regulated power supply, 3ADedicated servo bus power into the PCA9685 V+ terminal. Do not power 10 servos off the Uno R4's onboard 5V. 5.5mm x 2.5mm barrel plug, center positive.
1USB-A–to–USB-C cableArduino Uno R4 ↔ host computer
1DC barrel jack or screw-terminal pigtailAdapts the PSU output to the PCA9685's V+ / GND terminal

Structural

QtyPartNotesBuy
-PLA or PETG filamentQuantity per your slicer's estimate for the model above
620mm ID 26mm OD 3mm Width O-RingFitted onto the feeder roller for grip on the card face
49.2mm ID 14mm OD 2.4mm Section O-RingFits onto the hopper roller
13D-printed Servo Controller PlatePrinted once, regardless of module count
23D-printed Bins PlateCatches the cards the pusher ejects to each side
13D-printed End Bin PlateUsed alongside the Bins Plates to complete the bin assembly

Fasteners & wiring supplies

QtyPartNotesBuy
24M3×6 screw14 attach each bin base to the housing; 8 attach the base panels to the base; 2 mount a camera or phone bracket
8M3 nutPaired with the base panel M3×6 screws
2M3 washerUsed with the M3×8 screws that mount the hopper roller
2M3×8 screwMounts the hopper roller
1M3×25 screwAdjusts the hopper roller tension with the spring
17/32" x 11/16" springTensions the adjustable wall against the card stack
59M2×6 screw (17 per module, +4 for the board mount, +3 for the servo driver board, +1 for the feeder)17 per module (3 modules): flapper (bottom/sides) and pusher arms, plus 6 to screw the bottom and side paddles into the housing; +4 to mount the Uno R4; +3 to mount the PCA9685 servo driver board; +1 for the feeder
6M2×8 screw2 per module (3 modules), to mount the pusher. M2×10 works fine if you don't have M2×8 on hand.
10Servo horn screw (Included with servos)Included with each servo; secures the horn to the shaft
1 packJumper WiresIR sensor/Servos. Using these you may have to daisy chain some together, just electrical tape them to make sure they don't come apart.
2Wago connectorsOptionalSplices power and ground to each IR sensor without twisting/soldering wires together
~50Dupont ConnectorsOptionalThese are only needed if you're making your own custom length wires.
1Dupont CrimperOptionalThese are only needed if you're making your own custom length wires.

Optional

QtyPartNotesBuy
1Logitech C920 webcamThis is the one I use. Any webcam works as long as you can manually adjust focus, brightness, etc. (auto-adjusting can throw off scans)
1Anker PowerConf C200 webcamRecommended alternative to the C920. Also lets you manually adjust focus, brightness, etc.
11/4"-20 camera mount screwStandard tripod-mount thread, screws into a webcam or phone mount's socket
0-25Hopper sled weightsDrop into the weighted hopper sled to press the stack down so cards feed more reliably. Add up to 25
1 packServo extension cablesOnly needed for more than 3 sorting modules, where the stock servo leads won't reach the servo driver board

Some "Buy" links are Amazon affiliate links. We may earn a small commission on qualifying purchases at no extra cost to you.

03 / Assembly

Assembly

Eight phases, structural work first. Checkboxes are saved in this browser, so you can close the tab mid-build and pick back up later.

Stuck on a step? Join the Discord if you need help.

Building forOwn partsUno R43 modulesChange
0 of 42 steps0%
Phase 01

Print the structural parts

Every printed part of a 3-module sorter, colored by what to print. The key lists how many of each you need, numbered by plate in the print file. Change the module count or board in the setup above and the model and counts update.

Drag to rotate, scroll to zoom, right-drag to pan. Hover or tap a part in the key to show only that part.

Using an MG90S servo for the feeder? Print the MG90S feeder horn from the Alternative Horn plate instead of the standard roller horn.

Dry-fit the Base Support pieces and sorting modules with the pins first. Once everything lines up, super glue each pin into place.

Phase 02

Assemble the modules

The linkage's TOP/BOTTOM labels describe how it's installed, not which way the module faces. Since you build with the platform upside down, TOP points away from the platform. This is the trapdoor a card falls through to reach the next module, or the current one on a match. The horn gets seated onto the servo once the module is calibrated from the app. See Calibrate from the app below.

The linkage's TOP/BOTTOM labels describe how it's installed, not which way the module faces. Since you build with the platform upside down, TOP points away from the platform. One paddle servo drives both flappers together. They open and close as a pair, not independently. The horn gets seated onto the servo once the module is calibrated from the app. See Calibrate from the app below.

The linkage's TOP/BOTTOM labels describe how it's installed, not which way the module faces. Since you build with the platform upside down, TOP points away from the platform. The horn gets seated onto the servo once the module is calibrated from the app. See Calibrate from the app below.

These give the roller grip on the card face. Space them evenly along the roller's length.

The feeder roller is printed in two parts: the roller itself and a separate roller horn. Neither part has "servo" printed on it. The roller horn is the small piece that fits onto the servo shaft.

Have the two-part roller? Screw the roller horn onto the servo shaft first, then pass the horn through the hole in the feeder base, then slide the other half of the roller onto the horn.

Same as the feeder roller, these give it grip on the card face.

The roller should be stiff once mounted. It should not free-roll.

This one tells the feeder when the hopper is empty. Placement matters more than the module sensors.

Phase 03

Flash the firmware

The Arduino IDE needs a sketch to live in a folder with the same name, so open main.ino from inside firmware/main rather than moving it elsewhere.

Library Manager → search each by name. ArduinoBLE powers Bluetooth on the Uno R4 WiFi. The Uno R4 Minima has no Bluetooth hardware and doesn't use it, so Minima builds can skip it.

Picking the exact board matters: Bluetooth is only compiled in when the WiFi board is selected.

Phase 04

Wire and calibrate

Everything hangs off one I²C bus (PCA9685) and 4 digital input pins (IR sensors). The PCA9685's logic side runs off the Uno R4's onboard supply; its V+ servo rail must come from the external supply, and that supply's ground must be tied back to the Uno R4's ground. A floating servo ground is the most common reason a freshly wired unit won't move.

Wire colors vary between parts and suppliers, so don't rely on the colors in the diagram or photos. Trace each wire from its pin label and make sure it ends up at the correct place.

The PCA9685's header pins point straight out to the side. You may need to bend them 90° upward so they clear the panel and stay easy to reach when wiring to the Uno R4. Use the table below. The logic voltage is 3.3V on ESP32, not 5V.

I²C bus

PCA9685 pinArduino Uno R4Wire in diagram
SDASDA
SCLSCL
VCC (logic)5V
GNDGND

There are wire channels, that use zip ties, in the side of the base to help keep everything neat.

PCA9685 channel map

Ch.Assignment
0Module 1, bottom
1Module 1, paddle
2Module 1, pusher
3Module 2, bottom
4Module 2, paddle
5Module 2, pusher
6Module 3, bottom
7Module 3, paddle
8Module 3, pusher
9Unused, available for additional sorting modules
10Unused, available for additional sorting modules
11Unused, available for additional sorting modules
12Unused, available for additional sorting modules
13Unused, available for additional sorting modules
14Unused, available for additional sorting modules
15Feeder (continuous rotation)

For the power and ground, you will have to combine 4 wires into one, either with a breadboard or by twisting and soldering them together. You will need to manually calibrate the sensors to have a shorter throw, as to not get false positives.

IR sensors

All 4 read active-LOW (pin goes low when a card is present) using the Uno R4's internal pull-up. Wire the sensor's digital OUT straight to the pin, no external pull-up resistor needed.

SensorPinSignal wire in diagram
Module 1 gateD2
Module 2 gateD3
Module 3 gateD4
Hopper throatD5

Skipping the common ground is the #1 cause of servos that twitch but never move correctly.

Servo power

FromToWire in diagram
External 6V PSU, +PCA9685 V+ terminal block
External 6V PSU, −PCA9685 GND terminal block and Uno R4 GND

Fitting a horn off-center biases the whole linkage. The exact open/closed and left/right pulses get fine-tuned in the next step.

For pusherLeft/pusherRight, swing the arm toward the inner wall but stop before it touches, about 10-12% away from neutral. The pusher doesn't need to hit the wall to fling the card, and pressing against it strains the servo. The app warns you past 16%.

Check it by pulling the card back to about 2 inches (5 cm): the LED should go off again. If it stays on, back the screw off a little. A sensor set too far reaches past the card path and reports cards that aren't there.

If a sensor doesn't trigger, or triggers with nothing in front of it, repeat the previous step for that sensor.

Phase 05

Load and run