Vacuum Lifter Automation

Thread Starter

teachme1

Joined Aug 23, 2020
2
I'm designing a simple automated vacuum lifter, from a converted 3D printer.

The application: this only requires one movement on the Z axis. The manifold needs to move down, activate air (picking up parts), move back up, and release the parts onto a placed tray.


I have little experience with the electronic side of things.

I need to program and coordinate the pneumatics with the Z travels/timing, activation, etc.

EX:
The manifold moves down the Z axis... how do I set up the pneumatic part to activate. Do I need a solenoid valve and how I would integrate something like that, with the rest of the program/setup?
Most likely a solenoid doesn't use G-code.
 

DNA Robotics

Joined Jun 13, 2014
647
The manual pick & place tool I saw had a hole in the side to vent the vacuum to the atmosphere. When you want to pick up a chip, you cover the vent with your finger so you get vacuum to the tip / suction cup. To release the chip, take your finger off the vent. So a solenoid would open the vent to release the part when energized. Here is some G Code info on instructions you will need.

https://en.wikipedia.org/wiki/G-code
The NIST RS274NGC Interpreter - Version 3 explains G-Codes
https://tsapps.nist.gov/publication/get_pdf.cfm?pub_id=823374
3-D printers have their own set of G codes and M codes.
Here is a list http://www.makeit-3d.com/wp-content/uploads/RepRapGcodeCheatSheet.pdf
https://3dprinterchat.com/3d-printer-g-codes/

A lot more Prusa specific 3D G-Code list
https://prusa3d.github.io/Prusa-Firmware-Doc/group__GCodes.html

Rapid Linear Motion — G0

For rapid linear motion, program G0 X… Y… Z… A… B… C…, where all the axis words are
optional, except that at least one must be used. This will produce coordinated linear motion to the destination point at the current traverse rate (or slower if the machine will not go that fast). It is expected that cutting will not take place when a G0 command is executing.
Linear Motion at Feed Rate — G1
For linear motion at feed rate (for cutting or not), program G1 X… Y… Z… A… B… C…,
where all the axis words are optional, except that at least one must be used. This will produce coordinated linear motion to the destination point at the current feed rate (or slower if the machine will not go that fast).
Dwell — G4
For a dwell, program G4 P… . This will keep the axes unmoving for the period of time in milliseconds specified by the P number.
Example G4 P200
In this case sit still doing nothing for 200 milliseconds. During delays the state of the machine (for example the temperatures of its extruders) will still be preserved and controlled.
Length Units — G20 and G21
Program G20 to use inches for length units. Program G21 to use millimeters.
It is usually a good idea to program either G20 or G21 near the beginning of a program before any
motion occurs, and not to use either one anywhere else in the program. It is the responsibility of
the user to be sure all numbers are appropriate for use with the current length units.
F is Feed Rate it should move at a certain number of inches per minute or millimeters per minute.
Fan on – M106 PWM value S0 - 255 Set Fan Speed to S and start. Example: M106 S123
Fan off – M107 none Turn Fan off

This is part of the sample Gcode for a little box that came with my Anet A8 Prusa i3 3D Printer.
Code:
M140 S50.000000  ; Set heated bed temperature not waiting
M109 T0 S200.000000   ;Extruder heater
T0
M190 S50.000000   ;heated bed heater on. Waiting
;Sliced at: Thu 07-07-2016 18:12:19
;Basic settings: Layer height: 0.2 Walls: 1.2 Fill: 15
;Print time: #P_TIME#
;Filament used: #F_AMNT#m #F_WGHT#g
;Filament cost: #F_COST#
;M190 S50 ;Uncomment to add your own bed temperature line
;M109 S200 ;Uncomment to add your own temperature line
G21       ;metric values. Program G20 to use inches for length units.
G90       ;absolute positioning
M107      ;start with the fan off. M106 S255 is fan on,PWM value S0 - 255
G28 X0 Y0  ;move X/Y to min endstops
G28 Z0     ;move Z to min endstops
G1 Z15.0 F3000 ;move the platform down 15mm.   F3000 is the feed speed
G92 E0                  ;zero the extruded length
G1 F200 E3              ;extrude 3mm of feed stock.   E is extruder feed
G92 E0                  ;zero the extruded length again
G1 F3000
;Put printing message on LCD screen
M117 Printing...
;Layer count: 60
;LAYER:0
M107      ;start with the fan off.
G0 F3000 X60.80 Y76.30 Z0.20  ;Move fast to this start position.
;TYPE:SKIRT
G1 F1200 X159.20 Y76.30 E3.27280 ;Extruding to this position.
G1 X159.20 Y143.70 E5.51446      ;Extruding to this position.
G1 X60.80 Y143.70 E8.78726
G1 X60.80 Y76.30 E11.02893
G1 F2400 E7.52893
G0 F3000 X65.00 Y80.50
;TYPE:WALL-INNER
G1 F2400 E11.02893
G1 F1200 X155.00 Y80.50 E14.02234
G1 X155.00 Y139.50 E15.98462
G1 X65.00 Y139.50 E18.97803
G1 X65.00 Y80.50 E20.94031
G0 F3000 X64.60 Y80.10
G1 F1200 X155.40 Y80.10 E23.96034
G1 X155.40 Y139.90 E25.94922
G1 X64.60 Y139.90 E28.96925
G1 X64.60 Y80.10 E30.95813
G0 F3000 X64.20 Y79.70
;TYPE:WALL-OUTER
G1 F1200 X155.80 Y79.70 E34.00476
G1 X155.80 Y140.30 E36.02026
G1 X64.20 Y140.30 E39.06689
G1 X64.20 Y79.70 E41.08239
G0 F3000 X65.14 Y80.70

;LAYER:1

M106 S38     ;Turn fan on, S is speed,PWM value S0 - 255
G0 F3000 X155.00 Y80.50 Z0.40


;LAYER:59
G0 X155.00 Y139.50 Z12.00  ; Z is at 12mm
;TYPE:WALL-INNER
G1 F1800 X155.00 Y80.50 E7604.40498  ; etc.
;TYPE:WALL-OUTER
G1 F1800 X154.20 Y81.30 E7643.89847
G1 X65.80 Y81.30 E7646.83125
G1 X65.80 Y138.70 E7648.73547
G1 X154.20 Y138.70 E7651.66825
G0 F3000 X154.20 Y139.00
G0 X155.50 Y140.09
G0 X155.80 Y140.30
G1 F1800 X64.20 Y140.30 E7654.70733
G1 X64.20 Y79.70 E7656.71785
G1 X155.80 Y79.70 E7659.75693
G1 X155.80 Y140.30 E7661.76746
G0 F3000 X154.80 Y139.30
M107
G1 F2400 E7658.26746
G0 F3000 X154.80 Y139.30 Z17.00
;End GCode
M104 S0       ;extruder heater off
M140 S0       ;heated bed heater off (if you have it)
G91          ;relative positioning
G1 E-1 F300   ;retract the filament a bit before lifting the nozzle, to release some of the pressure
G1 Z+0.5 E-5 X-20 Y-20 F3000 ;move Z up a bit and retract filament even more
G28 X0 Y0      ;move X/Y to min endstops, so the head is out of the way
M84           ;steppers off
G90           ;absolute positioning
I have never written Gcode this way so it may not work but might be worth a try as a starting point. Except for the G1 instructions, this may not work on your printer. I set the s value on the fan wire to full on to operate your solenoid.
If you get that working and tuned with positions, speed and solenoid completely on and off, you need to copy & paste that operation for every time you want the machine to do it. If that is a production machine operating fast for an 8 hour shift, it is going to be a long file. I have a 3-D print file that is 25 megabytes and takes 18 hours to print.
I would think you could use the X axis to move the part over to the tray before releasing it.
Save it as a text file and rename it VacLift.gcode

Code:
;VacLift.gcode
G21       ;metric values. Program G20 to use inches for length units.
G90       ;absolute positioning
M107      ;start with the fan off. Solenoid off vac on tube.
G1 F3000 Z0.00 ;move the vac tube to zero.  F3000 is the feed speed
G4 P2000 ; Pause 2 seconds.
G1 F3000 Z25.00 ;move the vac tube up to 25mm.
G4 P2000 ; Pause 2 seconds. to put tray in place.
M106 S255 ; PWM value S0 - 255 Solenoid on, release part.
G4 P2000 ; Pause 2 seconds. to get tray away.
G1 F3000 Z0.00 ;move the vac tube to zero.  Touch the part.
M107      ;Solenoid off vac on tube to grab part.
G4 P2000 ; Pause 2 seconds.
G1 F3000 Z25.00 ;move the vac tube up to 25mm.
G4 P2000 ; Pause 2 seconds. to put tray in place.
M106 S255 ; Solenoid on, release part.
G4 P2000 ; Pause 2 seconds to get tray away.
G1 F3000 Z0.00 ;move the vac tube to zero.  Touch the part.
M107      ;Solenoid off vac on tube to grab part.
G4 P2000 ; Pause 2 seconds.
G1 F3000 Z25.00 ;move the vac tube up to 25mm.
G4 P2000 ; Pause 2 seconds. to put tray in place.
M106 S255 ;Fan on, Solenoid on, release part.
G4 P2000 ; Pause 2 seconds. to get tray away.
G1 F3000 Z0.00 ;move the vac tube to zero.  Touch the part.
So I was curious enough to get out my 3-D printer and try it. The G1 Z movements worked fine. The G4 P pause is in milliseconds so 2000 is 2 seconds. The M106 did turn the fan on but not the whole time Z was going down. But that will be okay because the fan wire will be completely on, energizing the solenoid and dropping the part during the pause at the top of travel.

If you get this working, please let us know the details.

Good luck.
 
Last edited:

Thread Starter

teachme1

Joined Aug 23, 2020
2
The manual pick & place tool I saw had a hole in the side to vent the vacuum to the atmosphere. When you want to pick up a chip, you cover the vent with your finger so you get vacuum to the tip / suction cup. To release the chip, take your finger off the vent. So a solenoid would open the vent to release the part when energized. Here is some G Code info on instructions you will need.

https://en.wikipedia.org/wiki/G-code
The NIST RS274NGC Interpreter - Version 3 explains G-Codes
https://tsapps.nist.gov/publication/get_pdf.cfm?pub_id=823374
3-D printers have their own set of G codes and M codes.
Here is a list http://www.makeit-3d.com/wp-content/uploads/RepRapGcodeCheatSheet.pdf
https://3dprinterchat.com/3d-printer-g-codes/

A lot more Prusa specific 3D G-Code list
https://prusa3d.github.io/Prusa-Firmware-Doc/group__GCodes.html

Rapid Linear Motion — G0

For rapid linear motion, program G0 X… Y… Z… A… B… C…, where all the axis words are
optional, except that at least one must be used. This will produce coordinated linear motion to the destination point at the current traverse rate (or slower if the machine will not go that fast). It is expected that cutting will not take place when a G0 command is executing.
Linear Motion at Feed Rate — G1
For linear motion at feed rate (for cutting or not), program G1 X… Y… Z… A… B… C…,
where all the axis words are optional, except that at least one must be used. This will produce coordinated linear motion to the destination point at the current feed rate (or slower if the machine will not go that fast).
Dwell — G4
For a dwell, program G4 P… . This will keep the axes unmoving for the period of time in milliseconds specified by the P number.
Example G4 P200
In this case sit still doing nothing for 200 milliseconds. During delays the state of the machine (for example the temperatures of its extruders) will still be preserved and controlled.
Length Units — G20 and G21
Program G20 to use inches for length units. Program G21 to use millimeters.
It is usually a good idea to program either G20 or G21 near the beginning of a program before any
motion occurs, and not to use either one anywhere else in the program. It is the responsibility of
the user to be sure all numbers are appropriate for use with the current length units.
F is Feed Rate it should move at a certain number of inches per minute or millimeters per minute.
Fan on – M106 PWM value S0 - 255 Set Fan Speed to S and start. Example: M106 S123
Fan off – M107 none Turn Fan off

This is part of the sample Gcode for a little box that came with my Anet A8 Prusa i3 3D Printer.
Code:
M140 S50.000000  ; Set heated bed temperature not waiting
M109 T0 S200.000000   ;Extruder heater
T0
M190 S50.000000   ;heated bed heater on. Waiting
;Sliced at: Thu 07-07-2016 18:12:19
;Basic settings: Layer height: 0.2 Walls: 1.2 Fill: 15
;Print time: #P_TIME#
;Filament used: #F_AMNT#m #F_WGHT#g
;Filament cost: #F_COST#
;M190 S50 ;Uncomment to add your own bed temperature line
;M109 S200 ;Uncomment to add your own temperature line
G21       ;metric values. Program G20 to use inches for length units.
G90       ;absolute positioning
M107      ;start with the fan off. M106 S255 is fan on,PWM value S0 - 255
G28 X0 Y0  ;move X/Y to min endstops
G28 Z0     ;move Z to min endstops
G1 Z15.0 F3000 ;move the platform down 15mm.   F3000 is the feed speed
G92 E0                  ;zero the extruded length
G1 F200 E3              ;extrude 3mm of feed stock.   E is extruder feed
G92 E0                  ;zero the extruded length again
G1 F3000
;Put printing message on LCD screen
M117 Printing...
;Layer count: 60
;LAYER:0
M107      ;start with the fan off.
G0 F3000 X60.80 Y76.30 Z0.20  ;Move fast to this start position.
;TYPE:SKIRT
G1 F1200 X159.20 Y76.30 E3.27280 ;Extruding to this position.
G1 X159.20 Y143.70 E5.51446      ;Extruding to this position.
G1 X60.80 Y143.70 E8.78726
G1 X60.80 Y76.30 E11.02893
G1 F2400 E7.52893
G0 F3000 X65.00 Y80.50
;TYPE:WALL-INNER
G1 F2400 E11.02893
G1 F1200 X155.00 Y80.50 E14.02234
G1 X155.00 Y139.50 E15.98462
G1 X65.00 Y139.50 E18.97803
G1 X65.00 Y80.50 E20.94031
G0 F3000 X64.60 Y80.10
G1 F1200 X155.40 Y80.10 E23.96034
G1 X155.40 Y139.90 E25.94922
G1 X64.60 Y139.90 E28.96925
G1 X64.60 Y80.10 E30.95813
G0 F3000 X64.20 Y79.70
;TYPE:WALL-OUTER
G1 F1200 X155.80 Y79.70 E34.00476
G1 X155.80 Y140.30 E36.02026
G1 X64.20 Y140.30 E39.06689
G1 X64.20 Y79.70 E41.08239
G0 F3000 X65.14 Y80.70

;LAYER:1

M106 S38     ;Turn fan on, S is speed,PWM value S0 - 255
G0 F3000 X155.00 Y80.50 Z0.40


;LAYER:59
G0 X155.00 Y139.50 Z12.00  ; Z is at 12mm
;TYPE:WALL-INNER
G1 F1800 X155.00 Y80.50 E7604.40498  ; etc.
;TYPE:WALL-OUTER
G1 F1800 X154.20 Y81.30 E7643.89847
G1 X65.80 Y81.30 E7646.83125
G1 X65.80 Y138.70 E7648.73547
G1 X154.20 Y138.70 E7651.66825
G0 F3000 X154.20 Y139.00
G0 X155.50 Y140.09
G0 X155.80 Y140.30
G1 F1800 X64.20 Y140.30 E7654.70733
G1 X64.20 Y79.70 E7656.71785
G1 X155.80 Y79.70 E7659.75693
G1 X155.80 Y140.30 E7661.76746
G0 F3000 X154.80 Y139.30
M107
G1 F2400 E7658.26746
G0 F3000 X154.80 Y139.30 Z17.00
;End GCode
M104 S0       ;extruder heater off
M140 S0       ;heated bed heater off (if you have it)
G91          ;relative positioning
G1 E-1 F300   ;retract the filament a bit before lifting the nozzle, to release some of the pressure
G1 Z+0.5 E-5 X-20 Y-20 F3000 ;move Z up a bit and retract filament even more
G28 X0 Y0      ;move X/Y to min endstops, so the head is out of the way
M84           ;steppers off
G90           ;absolute positioning
I have never written Gcode this way so it may not work but might be worth a try as a starting point. Except for the G1 instructions, this may not work on your printer. I set the s value on the fan wire to full on to operate your solenoid.
If you get that working and tuned with positions, speed and solenoid completely on and off, you need to copy & paste that operation for every time you want the machine to do it. If that is a production machine operating fast for an 8 hour shift, it is going to be a long file. I have a 3-D print file that is 25 megabytes and takes 18 hours to print.
I would think you could use the X axis to move the part over to the tray before releasing it.
Save it as a text file and rename it VacLift.gcode

Code:
;VacLift.gcode
G21       ;metric values. Program G20 to use inches for length units.
G90       ;absolute positioning
M107      ;start with the fan off. Solenoid off vac on tube.
G1 F3000 Z0.00 ;move the vac tube to zero.  F3000 is the feed speed
G4 P2000 ; Pause 2 seconds.
G1 F3000 Z25.00 ;move the vac tube up to 25mm.
G4 P2000 ; Pause 2 seconds. to put tray in place.
M106 S255 ; PWM value S0 - 255 Solenoid on, release part.
G4 P2000 ; Pause 2 seconds. to get tray away.
G1 F3000 Z0.00 ;move the vac tube to zero.  Touch the part.
M107      ;Solenoid off vac on tube to grab part.
G4 P2000 ; Pause 2 seconds.
G1 F3000 Z25.00 ;move the vac tube up to 25mm.
G4 P2000 ; Pause 2 seconds. to put tray in place.
M106 S255 ; Solenoid on, release part.
G4 P2000 ; Pause 2 seconds to get tray away.
G1 F3000 Z0.00 ;move the vac tube to zero.  Touch the part.
M107      ;Solenoid off vac on tube to grab part.
G4 P2000 ; Pause 2 seconds.
G1 F3000 Z25.00 ;move the vac tube up to 25mm.
G4 P2000 ; Pause 2 seconds. to put tray in place.
M106 S255 ;Fan on, Solenoid on, release part.
G4 P2000 ; Pause 2 seconds. to get tray away.
G1 F3000 Z0.00 ;move the vac tube to zero.  Touch the part.
So I was curious enough to get out my 3-D printer and try it. The G1 Z movements worked fine. The G4 P pause is in milliseconds so 2000 is 2 seconds. The M106 did turn the fan on but not the whole time Z was going down. But that will be okay because the fan wire will be completely on, energizing the solenoid and dropping the part during the pause at the top of travel.

If you get this working, please let us know the details.

Good luck.
You're amazing, really appreciate your help! Ill keep you updated on how it turns out!
 

MisterBill2

Joined Jan 23, 2018
18,167
If the distance to be moved is constant for all the parts being produced then you can get away with a very simple unload system having two solenoid air valves and one air cylinder run by a very small PLC from Automation Direct. It would need one or two buttons and two limit switches to be optimized. The ladder logic would be very simple, really it can be done with relays but ladder logic allows you to add a timer if you need to. One solenoif valve, a 4-way, extends the pickup vacuum device down to the part, and triggers a limit switch. That tells the program to operate the second solenoid valve. It then opens the air supply to the vacuum generator, creating the vacuum and grabbing the part. After some time for the vacuum to build the first solenoid valve switches back and the cylinder retracts, lifting the part. When the upper limit switch is operated the push button to release the part is enabled.When the button signal is detected the air valve to the vacuum generator is switched off so that the part is released. At this time the system is ready to do it again. About six lines of ladder code , and a small PLC that costs less than the relays and timer to do it without a PLC.
 
Top