Solenoid Valve Won't Open in OpenPnP: The 60-Second Fix
Your nozzle has no vacuum and you can't pick anything up. Before you start unwiring the solenoid, check the actuator command — on the PikkoBot Vertex 4 that's the cause far more often than a hardware fault, and it's a one-field change.
The 60-Second Fix
OpenPnP drives the nozzle vacuum through an actuator, and the actuator command is a G-code word. Two values show up in the wild:
Nozzle: S180
and
Nozzle: S255
S180 is a partial-open command. Some solenoid valves open reliably at it and some don't — it depends on the valve batch and the supply voltage you're running. When it doesn't, the valve stays shut, the nozzle never gets vacuum, and everything downstream looks broken: no pickup, no placement, no error message that points at the solenoid.
Fix:
- OpenPnP →
Machine Setup→Drivers→Actuator - Find the nozzle actuator and look at the command value
- If it reads
S180, change it toS255 - Apply, restart OpenPnP, then test with
Nozzle tip→ vacuum on
If the valve clicks and you get vacuum, you're done. This is the single most common "my machine can't pick up components" report we get, and it's a config field, not a part failure.
Confirming It's the Valve and Not Something Else
"S255 didn't change anything" narrows it to three things. Work through them in this order, because each one is cheaper to check than the next:
1. Is there vacuum at all? Put a fingertip over the nozzle tip and enable vacuum. If you feel nothing and hear no pump change, the problem is upstream of the solenoid — pump, tubing, or the vacuum sensor's threshold. If you feel suction but the component drops in transit, you're in the vacuum-level territory covered in Vacuum Settings, not a solenoid problem.
2. Is the valve getting power? With vacuum enabled, measure across the valve terminals. A 12 V valve should read close to 12 V when the actuator is on and 0 V when it's off. If it reads 0 V both ways, the driver board isn't switching — check the signal wire from the controller before you replace anything.
3. Is the valve itself alive? Disconnect it and measure resistance across the terminals. A typical 12 V solenoid reads 20-80 Ω. Open circuit means a dead coil — replace it. Zero ohms means a short.
If You're on Custom Hardware
The steps above assume a stock Vertex 4. If you've built your own machine or rewired the valve, the pin-mapping class of problems comes back into play, and they're worth checking directly:
Pin mismatch. The pin number in OpenPnP and the physical pin the valve is wired to are two different things, and nothing validates that they agree. Trace the wire and confirm.
Current capacity. Solenoid valves draw 100-300 mA. Most controller GPIO pins source 20-40 mA. If the valve is wired straight to a pin instead of through a MOSFET or relay driver, it will not open no matter what the configuration says.
Pin numbering scheme. BCM 17 and physical pin 17 are not the same pin on a Raspberry Pi, and "GPIO 17" on one controller board is not "GPIO 17" on another. Cross-reference the actual pinout diagram for your board.
GRBL: $4=17
Smoothieware: solenoid.pin = 2.4
Marlin: check pins.h for the solenoid output
Prevention
Write your pin map down somewhere you'll find it in six months. This is enough:
Solenoid: GPIO 17 (BCM) / pin 11 (physical)
Driver input: 5 V signal
Valve: 12 V, 200 mA
OpenPnP: Machine Setup -> Drivers -> Actuator -> Nozzle = S255
The reason this matters more than it looks: when the valve stops working after a firmware update or a config reload, the question is always "what changed?" If you have the working values written down, you answer it in a minute. If you don't, you re-derive the whole configuration from scratch.
Related Documentation
- FAQ & Troubleshooting — the other PikkoBot-specific gotchas, including the ones that look like hardware faults
- OpenPnP v4 Calibration Guide — the calibration sequence the actuator settings sit inside
- Getting Started — first-time setup in order
