An OpenPnP controller on an Arduino Nano: 4 nozzles, 6 sensors, and adaptive vacuum.

183 views
Skip to first unread message

Alex

unread,
Mar 8, 2026, 12:08:48 AM (10 days ago) Mar 8
to OpenPnP
I developed a controller that turns cheap Chinese manifold air pumps into an intelligent pneumatic control system.

Key Features

Support for 4 nozzles (8 valves): Independent vacuum and pressure control for each head.

6 analog sensors: Pressure monitoring in two receivers and individual vacuum control for each nozzle (Part Detection).

Adaptive Vacuum (Target + Delta): The system maintains a set vacuum in the receiver. For heavy chips, the maximum is -65 kPa; for delicate 0201 chips, the minimum is -15 kPa.

Auto-Purge: When switching from a deep vacuum to a weak vacuum, the system automatically "purges" the pressure valve, instantly discharging the receiver.

Soft start and Holding PWM: Pumps accelerate smoothly. Upon reaching the target, they don't turn off, but instead enter a silent micro-assist mode.

Full telemetry: Using the M105 command, the machine displays the kPa, temperature of each pump (NTC 100K), and their operating hours.

Command Interface (G-codes)
M610 S1 Start automatic pressure maintenance.
M610 S1 P N<1-4> — Adaptive vacuum.
P — Target threshold (e.g., 470 for TQFP, 880 for 0201).
N — Nozzle number for Auto-Purge (automatic reset of excess vacuum).
M611 N<1-4> P<ms> — Purge. Opens the pressure valve of nozzle N for P milliseconds.
M143 N<1-4> — Vacuum reading at a specific nozzle (response in kPa).
M105 — Full report: V (vac), P (press), Tv/Tp (temperatures), PWM (power).
M612 — Zero calibration of all sensors (perform at 0 atmospheres).
M615 — Reset engine hour meter (stops LED flashing after 500 hours).
M42 P<pin> S<0-255> — Direct control (e.g., M42 P12 S255 — light on).
M600 — Reset everything "as was" (deletes all your $6xx and resets the hours).
M105 — Outputs: V:-60.5 P:15.1 Tv:32.4 Tp:30.1 PWM_V/P:85/65 HRS_V/P:12/4.

Command Value Description
$610=470 Vacuum Target (ADC). The lower the target, the stronger the vacuum.
$611=60 Vacuum Delta. Boost window (On = Target + Delta).
$612=650 Pressure Target. The higher the target, the stronger the pressure. $613=30 Pressure Delta. (On = Target - Delta).
$617=85 Hold PWM V: Vacuum booster idle speed.
$618=0 Hold PWM V: Pressure pump idle speed.
$$— Allows you to quickly check if the settings have been reset after your experiments.

vespaman

unread,
Mar 14, 2026, 12:39:05 PM (4 days ago) Mar 14
to OpenPnP
Hi Alex,
The pics cannot be shown, I guess some account is needed.

What kind of pumps are you using ?

  - Micael

Alex

unread,
Mar 15, 2026, 7:00:05 AM (3 days ago) Mar 15
to OpenPnP
Hi 
Hardware
Controller: Arduino Nano (ATmega168).
Vacuum Sensor (A5): Inverse (4.5V = 0 kPa, 0.5V = -100 kPa). XGZP6847A100KPGN
Pressure Sensor (A0): Normal (voltage increases with pressure). XGZP6847A040KPG
PWM Motors: D11 (Vacuum 555), D10 (Pressure 5W). Frequency: 3.9 kHz (quiet).
Nozzle Valves:
N1: D9 (Vac), D8 (Pressure) | N2: D7 (Vac), D6 (Pressure)
N3: D5 (Vac), D4 (Pressure) | N4: D3 (Vac), D2 (Pressure)
Peripherals: D12 (Camera Light), D13 (Status/Service).

[+5V] --- [ Resistor 10k ] ---T--- [ Thermistor 3950 NTC 100k ] --- [ GND ]
¦
[Pin A6/A7

суббота, 14 марта 2026 г. в 19:39:05 UTC+3, micael....@gmail.com:

SM

unread,
Mar 16, 2026, 8:07:48 PM (2 days ago) Mar 16
to OpenPnP
>> ... cheap Chinese manifold air pumps ...

Link? Photo? Video?

How quickly is the vacuum created or released?


Reply all
Reply to author
Forward
0 new messages