Skip to content

Commit

Permalink
initial commit
Browse files Browse the repository at this point in the history
  • Loading branch information
sphawes committed Oct 11, 2024
1 parent e07adf4 commit 0be5a91
Show file tree
Hide file tree
Showing 11 changed files with 137 additions and 2 deletions.
15 changes: 15 additions & 0 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Opulo LumenPnP Feeder License and Copyright Notices

LumenPnP is (c) by Opulo

This notice must be included in any distributions of this project or derivative works.

Because this project consists of many types of source, individual parts of the project are made available under different licenses.

1. The hardware designs located at `./cad` are available under the CERN-OHL-W v2 license. Full text is available at https://cern.ch/cern-ohl.

2. The software located at `./scripts` is available under Mozilla MPL v2.0. Full text is available at https://www.mozilla.org/en-US/MPL/2.0/.

3. Opulo's logo, branding, and other media is used throughout this project. This is Copyright (c) Opulo and all rights are reserved. You may not distribute derivative works or products bearing the Opulo logo, icon, or other relevant mark. Derivative works should remove Opulo branding.

4. The name `Opulo` and `LumenPnP` are trademarked, and only to be used by Opulo. Any derivative works should remove both marks.
26 changes: 24 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,24 @@
# paste-extruder
Paste extruder head for the LumenPnP
# LumenPnP Paste Extruder

This repository contains the source for a prototype paste extruder head for the LumenPnP.

![v4](./img/hero.gif)

**This is a prototype design. It is still in development.**

This extruder head is designed for solder paste and conductive ink dispensing applications. It quickly and easily replaces the left toolhead on any version LumenPnP. It has been used to add conductive ink on a PCB, then have the right pick head proceed to populate parts, resulting in a fully working PCBA.

Controlling this toolhead is currently done using `leash`, a python libary for interfacing with the LumenPnP, which can be found [here](https://github.com/opulo-inc/leash).

## Parts

| Item | Quantity |
| ---- | -------- |
| [M3 Nut](https://www.mcmaster.com/90591A250/) | 1 |
| [M3 Threaded Rod](https://www.mcmaster.com/94595A215/) | 1 |
| [Nema 8 Stepper Motor (The higher current rating the better)](https://www.amazon.com/s?k=nema+8+stepper+motor) | 1 |
| [M2x6mm Socket Head Bolt](https://www.mcmaster.com/91290A013/) | 1 |
| [M3 Square Nut](https://www.mcmaster.com/97259A101/) | 1 |
| [M3x18mm Socket Head Bolt](https://www.mcmaster.com/91290A121/) | 1 |
| [3ml Luer Lock Syringe](https://www.mcmaster.com/7510A42/) | 1 |
| [Luer Lock Tip (size depends on application)](https://www.mcmaster.com/products/needles/fitting-connection~luer-lock/dispensing-tips-with-luer-lock-connection/tip-type~tapered/) | 1 |
Binary file added cad/cartridge-clamp.FCStd
Binary file not shown.
Binary file added cad/cartridge-clamp.FCStd1
Binary file not shown.
Binary file added cad/cartridge-gear.FCStd
Binary file not shown.
Binary file added cad/extruder-base.FCStd
Binary file not shown.
Binary file added cad/extruder-base.FCStd1
Binary file not shown.
Binary file added cad/extruder-gear.FCStd
Binary file not shown.
Binary file added cad/plunger.FCStd
Binary file not shown.
Binary file added img/hero.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
98 changes: 98 additions & 0 deletions scripts/extrude.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
from leash import Lumen

lumen = Lumen()

lumen.connect()
lumen.home()

boardHeight = 9.6

resistorPads = [
[361.6, 216.2],
[361.6, 214.4],
[365.8, 214.4],
[364.6, 213.2],
[367.4, 210.2],
[365.8, 210.2],
[365.6, 206.2],
[364.4, 207.4],
[361.6, 204.4],
[361.6, 206.0],
[357.4, 206.2],
[358.6, 207.4],
[355.8, 210.2],
[357.4, 210.2],
[357.4, 214.4],
[358.6, 213.2]
]

ledPads = [
[360.2, 219.8],
[362.0, 219.8],
[367.6, 217.4],
[368.8, 216.2],
[371.2, 210.6],
[371.2, 209.0],
[368.8, 203.6],
[367.4, 202.2],
[362.0, 199.8],
[360.2, 199.8],
[354.6, 202.2],
[353.2, 203.6],
[351.0, 209.0],
[351.0, 210.8],
[353.6, 216.2],
[354.8, 217.4]

]

lumen.safeZ()

lumen.goto(x=20, y=20)

lumen.sm.send("G92 A0")
lumen.setSpeed(f=2000)
lumen.sm.send("M906 A400")
lumen.goto(a = lumen.position["a"] + 100 )

lumen.sleep(2)

lumen.setSpeed(f=50000)

lumen.safeZ()

for pos in resistorPads:
# move above position
lumen.goto(x = pos[0], y = pos[1], z = lumen.parkZ)
# plunge to position
lumen.goto(z = boardHeight)

# extrude
lumen.setSpeed(f=2000)
lumen.goto(a = lumen.position["a"] + 5 )

lumen.sleep(0.1)

# z back to safe z
lumen.setSpeed(f=50000)
lumen.goto(z = lumen.parkZ)

for pos in ledPads:
# move above position
lumen.goto(x = pos[0], y = pos[1], z = lumen.parkZ)
# plunge to position
lumen.goto(z = boardHeight)

# extrude
lumen.setSpeed(f=2000)
lumen.goto(a = lumen.position["a"] + 5 )

lumen.sleep(0.1)

# z back to safe z
lumen.setSpeed(f=50000)
lumen.goto(z = lumen.parkZ)

lumen.sm.send("M906 A100")
lumen.idle()

0 comments on commit 0be5a91

Please sign in to comment.