Skip to content
Mechanical, Build & Pneumatics·Lesson 38 of 47

Pneumatics Won't Fire: A Full Diagnostic Tree

Walk the exact order to debug a dead solenoid: CAN IDs, code enable, wiring, air pressure, and leaks, using CTRE PCM / REV PH behavior.

Sign in to track progress, earn XP, and save lessons.

Symptom

You command a piston and nothing moves. Pneumatics failures are almost always systematic; walk this tree top to bottom and do not skip steps.

1. CAN ID 0 (the #1 mistake)

The power distribution device and the legacy CTRE PCM should be configured so the FRC libraries can find them. As FRC Zero's troubleshooting guide states emphatically: the PDP and PCM should ALWAYS have the same CAN ID of 0, because FRC libraries assume this. A wrong CAN ID makes a perfectly wired module invisible. (The REV Pneumatic Hub is addressed separately by its own CAN ID; match what your code expects.)

2. Is the robot actually enabled and the module told to run?

  • Confirm the Robot Status Light shows enabled (Teleop/Test), not just connected.
  • The compressor must be enabled. With the modern WPILib API you construct a Compressor object and call enableDigital() (closed-loop control on the pressure switch); simply constructing the object starts default closed-loop control.
  • Instantiate solenoids with the right module type:
// CTRE PCM
Solenoid intake = new Solenoid(PneumaticsModuleType.CTREPCM, 1);
// REV Pneumatic Hub
DoubleSolenoid claw = new DoubleSolenoid(
    PneumaticsModuleType.REVPH, 0, 1);

Using the wrong PneumaticsModuleType is a silent no-op.

3. Power and fuses

The PCM/PH and VRM are powered from the power distribution device. Check the fuse/breaker feeding the module. A blown fuse = dead module.

4. Air pressure

  • High side should reach the system max (the legal ceiling is 120 PSI); the regulated low side typically reads ~60 PSI to the cylinders.
  • If low side reads 0, the regulator is backwards or set to zero.
  • If high side reads 0, a manual vent valve is open or the compressor isn't charging.

5. Double-solenoid logic

A double solenoid driven by two separate, conflicting commands will fire asynchronously or chatter. Drive it with a single set(kForward/kReverse) call and matching tubing lengths/fittings on both ports.

6. Leaks

If the compressor runs continuously and pressure won't hold, you have a leak. Spray a small amount of soapy water on every fitting; bubbles reveal the leak. A stuck pressure switch can also run the compressor forever, check it.

7. Sticky faults

Clear PCM/PH sticky faults in Phoenix Tuner / REV Hardware Client self-test, then verify CAN wiring. Persistent faults after clearing point to a real wiring or firmware problem, update firmware.

The discipline

Change one thing, retest, then move on. The fastest pneumatics debuggers don't guess; they walk the tree.

Key takeaways

  • The single most common pneumatics bug is a wrong CAN ID, the PDP and legacy CTRE PCM should both be CAN ID 0.
  • Enable the compressor in code (construct a Compressor / enableDigital()) and instantiate solenoids with the correct PneumaticsModuleType (CTREPCM vs REVPH).
  • A continuously running compressor that won't hold pressure means a leak (soapy-water test) or a stuck pressure switch.

Lesson quiz

Required

Answer all 3 questions correctly to complete this lesson.

1.Your compressor builds pressure on the storage gauge, but a cylinder won't extend even though the storage side reads full. The low (working) side gauge reads 0 psi. What is the most likely cause?

2.In WPILib code, what automatically enables the PCM/Pneumatic Hub closed-loop compressor control that uses the pressure switch to cycle the compressor?

3.A double solenoid controlling a cylinder is set to kOff in code. What happens at the cylinder?

Answer every question to submit.