formatting
This commit is contained in:
178
Readme.md
178
Readme.md
@@ -1,3 +1,22 @@
|
|||||||
|
# Content
|
||||||
|
- [Using a Resin 3D Printer for PCB Exposure](#using-a-resin-3d-printer-for-pcb-exposure)
|
||||||
|
- [The Printer: Anycubic Photon Mono 4](#the-printer-anycubic-photon-mono-4)
|
||||||
|
- [Technical Specifications](#technical-specifications)
|
||||||
|
- [Why is it a good tool for DIY PCBs?](#why-is-it-a-good-tool-for-diy-pcbs)
|
||||||
|
- [Workflow Overview](#workflow-overview)
|
||||||
|
- [Prerequisites](#prerequisites)
|
||||||
|
- [Software](#software)
|
||||||
|
- [Hardware](#hardware)
|
||||||
|
- [Step-by-Step Guide](#step-by-step-guide)
|
||||||
|
- [Installation](#installation)
|
||||||
|
- [1. Export Layers from KiCad](#1-export-layers-from-kicad)
|
||||||
|
- [2. SVG to STL Conversion](#2-svg-to-stl-conversion)
|
||||||
|
- [Manual Conversion](#manual-conversion)
|
||||||
|
- [Automated Conversion](#automated-conversion)
|
||||||
|
- [3. Slicing in Chitubox](#3-slicing-in-chitubox)
|
||||||
|
- [4. Exposing the Board](#4-exposing-the-board)
|
||||||
|
- [5. Developing](#5-developing)
|
||||||
|
|
||||||
# Using a Resin 3D Printer for PCB Exposure
|
# Using a Resin 3D Printer for PCB Exposure
|
||||||
|
|
||||||
This guide documents the process of using a resin 3D printer, such as the Anycubic Photon Mono 4, as a UV light source to expose photosensitive materials like pre-sensitized copper boards or solder masks. The printer's LCD screen acts as a precise digital mask.
|
This guide documents the process of using a resin 3D printer, such as the Anycubic Photon Mono 4, as a UV light source to expose photosensitive materials like pre-sensitized copper boards or solder masks. The printer's LCD screen acts as a precise digital mask.
|
||||||
@@ -42,18 +61,17 @@ The process involves exporting 2D layer images from your PCB design, converting
|
|||||||
|
|
||||||
## Prerequisites
|
## Prerequisites
|
||||||
|
|
||||||
* **Software:**
|
### Software
|
||||||
* KiCad (for PCB design and Gerber export)
|
* KiCad (for PCB design and SVG export)
|
||||||
* Inkscape (for SVG manipulation)
|
* Inkscape (for SVG manipulation)
|
||||||
* Blender (for 3D model creation)
|
* Blender (for 3D model creation)
|
||||||
* Chitubox (or your printer's slicing software)
|
* Chitubox (or your printer's slicing software)
|
||||||
* **Hardware:**
|
|
||||||
|
### Hardware
|
||||||
* A resin 3D printer (e.g., Anycubic Photon Mono 4)
|
* A resin 3D printer (e.g., Anycubic Photon Mono 4)
|
||||||
* Photosensitive PCB. For consistent results, a pre-sensitized board like the **Bungard positive photoresist boards** is highly recommended due to its uniform coating. Available on [www.conrad.sk](https://www.conrad.sk/sk/p/bungard-150306e50-100x60mm-zakladny-material-jednostranna-35-m-foto-vrstva-pozitiv-d-x-s-100-mm-x-60-mm-1-ks-525472.html)
|
* Photosensitive PCB. For consistent results, a pre-sensitized board like the **Bungard positive photoresist boards** is highly recommended due to its uniform coating. Available on [www.conrad.sk](https://www.conrad.sk/sk/p/bungard-150306e50-100x60mm-zakladny-material-jednostranna-35-m-foto-vrstva-pozitiv-d-x-s-100-mm-x-60-mm-1-ks-525472.html)
|
||||||
* UV light curing Solder Mask e.g. from Mechanic
|
* UV light curing Solder Mask e.g. from Mechanic
|
||||||
|
|
||||||
## Step-by-Step Guide
|
|
||||||
|
|
||||||
### Installation
|
### Installation
|
||||||
|
|
||||||
Ensure you have both installed:
|
Ensure you have both installed:
|
||||||
@@ -62,113 +80,157 @@ sudo apt update
|
|||||||
sudo apt install inkscape blender
|
sudo apt install inkscape blender
|
||||||
```
|
```
|
||||||
|
|
||||||
Make sure you have the correct versions:
|
Make sure you have recent versions installed:
|
||||||
```bash
|
```bash
|
||||||
inkscape --version
|
inkscape --version
|
||||||
Inkscape 1.2.2
|
|
||||||
|
|
||||||
blender --version
|
blender --version
|
||||||
Blender 5.0.0
|
|
||||||
```
|
```
|
||||||
|
This guide was developed to work with Inkscape 1.2.2 and Blender 5.0.0
|
||||||
|
|
||||||
|
## Step-by-Step Guide
|
||||||
|
|
||||||
### 1. Export Layers from KiCad
|
### 1. Export Layers from KiCad
|
||||||
|
|
||||||
1. Open your PCB project in the KiCad PCB Editor.
|
1. Open your PCB project in the KiCad PCB Editor.
|
||||||
2. Go to **File -> Plot** and select `Plot format` as `SVG`, set the `Output directory`.
|
2. Go to **File -> Plot** and select `Plot format` as `SVG` and set the `Output directory`.
|
||||||
3. In the `Include Layers` section select one layer (e.g. `F.Cu`, `F.Mask` or `F.Silkscreen`). If you select multiple layers they will be ploted as separate files.
|
3. In the `Include Layers` section select one layer (e.g. `F.Cu`, `F.Mask` or `F.Silkscreen`). If you select multiple layers they will be ploted as separate files.
|
||||||
4. Optionaly, select additional layer(s) e.g. `Edge.Cuts` in the `Plot on All Layers` section. This way you can merge layers (e.g. front copper layer with board outset) into a single svg file.
|
4. Optionaly, select additional layer(s) e.g. `Edge.Cuts` in the `Plot on All Layers` section. This way you can merge layers (e.g. front copper layer with board outset) into a single svg file.
|
||||||
5. Click **Plot** and **Close**.
|
5. Click **Plot** and **Close**.
|
||||||
|
|
||||||
### 2. Prepare the SVG
|
### 2. SVG to STL Conversion
|
||||||
|
|
||||||
Step 1: Open Your SVG in Inkscape
|
The SVG file will be converted to STL in two steps. This can be done manually or with an automated script.
|
||||||
|
|
||||||
File → Open → Select your SVG.
|
#### Manual Conversion
|
||||||
|
|
||||||
Press Ctrl + F (or go to Edit → Find/Replace...).
|
If you prefer to do all the steps manually, here is the step-by-step guide.
|
||||||
A panel will open (usually on the right).
|
|
||||||
Look for the "Object Type" section `Options`.
|
|
||||||
Uncheck "All Types" (if selected) and check only "Text".
|
|
||||||
Click the Find button at the bottom of the panel.
|
|
||||||
Result: All hidden text objects in the document will be selected (you will see their bounding boxes appear).
|
|
||||||
Press Delete on your keyboard (Edit -> Delete).
|
|
||||||
|
|
||||||
Step 2: Select Everything
|
##### Prepare the SVG
|
||||||
|
|
||||||
Press Ctrl + A to select all.
|
**Step 1: Open Your SVG in Inkscape**
|
||||||
|
|
||||||
Step 3: Convert Strokes to Paths
|
Go to **File → Open** and select your SVG.
|
||||||
|
|
||||||
Go to Path → Stroke to Path (Shift + Alt + C).
|
Remove embedded texts. Embedded texts can be redundant for searchability. To remove them:
|
||||||
|
1. Press `Ctrl + F` (or go to **Edit → Find/Replace...**).
|
||||||
|
2. In the panel (usually on the right), under `Options`, look for "Object Type".
|
||||||
|
3. Uncheck "All Types" (if selected) and check only "Text".
|
||||||
|
4. Click the **Find** button. All hidden text objects will be selected.
|
||||||
|
5. Press `Delete` (or go to **Edit → Delete**).
|
||||||
|
|
||||||
This converts any lines into editable paths.
|
**Step 2: Select Everything**
|
||||||
|
|
||||||
Step 4: Unionize Paths
|
Press `Ctrl + A` to select all objects on your canvas.
|
||||||
|
|
||||||
Now you want all separate paths to become one:
|
**Step 3: Convert Strokes to Paths**
|
||||||
|
|
||||||
Path → Union (Ctrl ++).
|
Go to **Path → Stroke to Path** (`Shift + Alt + C`). This converts any lines into editable paths, which is crucial for Blender.
|
||||||
|
|
||||||
Now your SVG should appear as a single curve object.
|
**Step 4: Unionize Paths**
|
||||||
|
|
||||||
Step 5: In the top toolbar click on the `lock proportions` icon and set the width (W:) or height (H:) of the object.
|
To combine all separate paths into a single object:
|
||||||
|
Go to **Path → Union** (`Ctrl ++`).
|
||||||
|
Your SVG should now appear as a single curve object.
|
||||||
|
|
||||||
Step 6: Export Your Cleaned SVG
|
**Step 5: Set Object Dimensions**
|
||||||
|
|
||||||
Go to File → Export
|
In the top toolbar, click on the `lock proportions` icon and set the **width (W:) or height (H:)** of the object.
|
||||||
|
|
||||||
Set `DPI` to `1494`and select `Plain SVG`, set the export path and click `Export`.
|
**Step 6: Export Your Cleaned SVG**
|
||||||
|
|
||||||
Make sure it’s in Plain SVG format (not Inkscape SVG) for best Blender compatibility.
|
Go to **File → Export**.
|
||||||
|
Set `DPI` to `1494`, select `Plain SVG` format, set the export path, and click **Export**.
|
||||||
|
Ensure you export in **Plain SVG** format (not Inkscape SVG) for optimal compatibility with Blender.
|
||||||
|
|
||||||
### 3. Convert the SVG to a 3D Model
|
|
||||||
|
|
||||||
Step 1: Open Blender in the Scene Collection and delete the default cube
|
##### Convert the SVG to a 3D Model
|
||||||
|
|
||||||
Step 2: Units to Millimeters
|
**Step 1: Open Blender**
|
||||||
|
|
||||||
Go to Scene Properties (the cone/sphere/cube icon on the right sidebar) and open Units.
|
Open Blender. In the `Scene Collection`, delete the default cube.
|
||||||
|
|
||||||
Set: Unit Scale: 0.001, Length: Millimeters
|
**Step 2: Set Units to Millimeters**
|
||||||
|
|
||||||
|
Go to `Scene Properties` (the cone/sphere/cube icon on the right sidebar) and open `Units`.
|
||||||
|
Set: `Unit Scale: 0.001`, `Length: Millimeters`.
|
||||||
This tells Blender that 1 Blender unit = 1 mm.
|
This tells Blender that 1 Blender unit = 1 mm.
|
||||||
|
|
||||||
Step 3: Import SVG
|
**Step 3: Import SVG**
|
||||||
|
|
||||||
File → Import → SVG
|
Go to **File → Import → SVG**.
|
||||||
|
Select the imported object by clicking on its edge.
|
||||||
|
|
||||||
Select the imported object by clicking on it's edge.
|
**Step 4: Convert Object to Mesh**
|
||||||
|
|
||||||
Step 4: Object -> Convert -> Mesh
|
With the object selected, go to **Object -> Convert -> Mesh**.
|
||||||
|
|
||||||
Step 5: Press key 'N' and look at the `Dimensions`. The z-axis is zero.
|
**Step 5: Check Dimensions**
|
||||||
|
|
||||||
Step 6: Click Add Modifier -> Generate -> Solidify (Thickness: 0.1, Even Thickness: yes, Fill Rim: ON)
|
Press the `N` key to open the `Transform` panel and look at the `Dimensions`. The Z-axis dimension should be zero.
|
||||||
|
|
||||||
Keep looking what is the real thickness showing at the z-axis in the `Dimensions`.
|
**Step 6: Add Solidify Modifier**
|
||||||
|
|
||||||
Step 7: Export -> File format `stl`. Check `apply modifiers` and save the file.
|
Click **Add Modifier → Generate → Solidify**.
|
||||||
|
Set `Thickness: 0.1`, `Even Thickness: yes`, and `Fill Rim: ON`.
|
||||||
|
Monitor the real thickness displayed on the Z-axis in the `Dimensions` panel.
|
||||||
|
|
||||||
This entire workflow can be automated in the Ubuntu terminal using **Inkscape's command-line mode** and **Blender's Python scripting API**.
|
**Step 7: Export to STL**
|
||||||
|
|
||||||
|
Go to **File → Export → Stl (.stl)**.
|
||||||
|
Check `Apply Modifiers` and save the file.
|
||||||
|
|
||||||
|
#### Automated Conversion
|
||||||
|
|
||||||
|
This entire workflow can be automated in the Linux terminal using **Inkscape's command-line mode** and **Blender's Python scripting API**.
|
||||||
|
|
||||||
Use the single shell script [svg2stl.sh](svg2stl.sh) to do the whole job in one go:
|
Use the single shell script [svg2stl.sh](svg2stl.sh) to do the whole job in one go:
|
||||||
|
|
||||||
**Usage:**
|
**Download:**
|
||||||
|
```bash
|
||||||
|
wget https://gitea.virtonline.eu/2HoursProject/svg2stl/raw/branch/main/svg2stl.sh
|
||||||
|
wget https://gitea.virtonline.eu/2HoursProject/svg2stl/raw/branch/main/pcb_to_stl.py
|
||||||
|
```
|
||||||
|
|
||||||
|
**Setup:**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
chmod +x svg2stl.sh
|
chmod +x svg2stl.sh
|
||||||
|
nano svg2stl.sh
|
||||||
|
```
|
||||||
|
Set the resolution `EXPORT_DPI` of your 3D printer's screen and object width `TARGET_WIDTH_MM`. The height will adjust proportionaly. The thickness `THICKNESS_MM` of the model can be adjusted as well.
|
||||||
|
```bash
|
||||||
|
# 1. Dimensions (Millimeters)
|
||||||
|
# Set the desired width in mm (e.g. 55.15).
|
||||||
|
# Leave as "0" to keep the original size from the SVG.
|
||||||
|
TARGET_WIDTH_MM="45.08"
|
||||||
|
|
||||||
|
# Thickness of the 3D model in mm
|
||||||
|
THICKNESS_MM="0.1"
|
||||||
|
|
||||||
|
# 2. Inkscape Settings
|
||||||
|
# DPI based on the 3D printer resolution (e.g. 1494 for Anycubic Photon Mono 4)
|
||||||
|
EXPORT_DPI=1494
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
**Usage:**
|
||||||
|
```bash
|
||||||
./svg2stl.sh my_design.svg
|
./svg2stl.sh my_design.svg
|
||||||
```
|
```
|
||||||
|
|
||||||
### 3. Slicing in Chitubox
|
### 3. Slicing in Chitubox
|
||||||
|
|
||||||
This is where you set the exposure time. The slicer (without hacking) requires at least one bottom and one normal layer to be defined. So, the idea is to split the thickness of the model into two or more layers and define the exposure time for each layer.
|
This is where you set the exposure time. The Chitubox slicer (without hacking) requires at least one bottom and one normal layer to be defined. So, the idea is to split the thickness of the model into two or more layers and define the exposure time for each layer.
|
||||||
|
|
||||||
1. Open Chitubox and import your STL file. Lay it flat on the build plate.
|
1. Open Chitubox and import your STL file. Lay it flat on the build plate.
|
||||||
2. Go to the **Parameter Settings**.
|
2. Go to the **Parameter Settings**.
|
||||||
|
|
||||||
#### Exposure Time Examples:
|
#### Exposure Time Examples:
|
||||||
Since the minimum exposure time per layer is 0.1s and maximum 200s, calculate the total exposure time. Pre-sensitized boards from Bungard requre 2 minutes to cure. Solder mask in a syringe from Mechanic require 10 minutes to harden.
|
|
||||||
|
|
||||||
|
* Pre-sensitized boards from Bungard requre 2 minutes to cure.
|
||||||
|
* Solder mask in a syringe from Mechanic require 10 minutes to harden.
|
||||||
|
|
||||||
|
Since the minimum exposure time per layer is 0.1s and maximum 200s, calculate the total exposure time.
|
||||||
* **1 minutes (60 seconds)**
|
* **1 minutes (60 seconds)**
|
||||||
* Model Thickness (Blender): `0.1 mm`
|
* Model Thickness (Blender): `0.1 mm`
|
||||||
* Bottom Layer Count: `1`
|
* Bottom Layer Count: `1`
|
||||||
@@ -190,7 +252,7 @@ Since the minimum exposure time per layer is 0.1s and maximum 200s, calculate th
|
|||||||
* **Bottom Exposure Time:** `0.1 s` (minimum value)
|
* **Bottom Exposure Time:** `0.1 s` (minimum value)
|
||||||
* **Normal Exposure Time:** `200 s` (This will apply to the 3 normal layers, giving 3*200 = 600s total).
|
* **Normal Exposure Time:** `200 s` (This will apply to the 3 normal layers, giving 3*200 = 600s total).
|
||||||
|
|
||||||
4. **Crucially, turn off Anti-aliasing**. Go to the "Advanced" tab and set **Anti-aliasing** and **Grey Level** to `0`. This ensures the sharpest possible pixels for crisp traces.
|
4. **Crucially, turn off Anti-aliasing**. Go to the "Advanced" tab and set **Anti-aliasing**. This ensures the sharpest possible pixels for crisp traces.
|
||||||
5. Slice the model and save the file to the USB drive.
|
5. Slice the model and save the file to the USB drive.
|
||||||
|
|
||||||
### 4. Exposing the Board
|
### 4. Exposing the Board
|
||||||
@@ -204,9 +266,9 @@ Since the minimum exposure time per layer is 0.1s and maximum 200s, calculate th
|
|||||||
### 5. Developing
|
### 5. Developing
|
||||||
|
|
||||||
1. After exposure, you must develop the board to reveal the pattern.
|
1. After exposure, you must develop the board to reveal the pattern.
|
||||||
2.
|
* For a **positive photoresist board** (like the Bungard brand), the developer is a weak alkaline solution. A common and effective developer is a **1% solution of Sodium Hydroxide (NaOH)** in distilled or demineralised water.
|
||||||
- For a **positive photoresist board** (like the Bungard brand), the developer is a weak alkaline solution. A common and effective developer is a **1% solution of Sodium Hydroxide (NaOH)** in distilled or demineralised water.
|
* For a **negative dry film resist**, the developer is a solution of Sodium Carbonate (washing soda). Mix approximately 10 grams of sodium carbonate per liter of warm water until dissolved.
|
||||||
- For the solder mask just clean the uncured part with Izopropanol.
|
* For the UV light curing solder mask, allow more time to it to harden. Clean the uncured part with Izopropanol afterwards.
|
||||||
3. **Safety First:** When working with NaOH, always wear gloves and eye protection, as it is caustic.
|
2. **Safety First:** When working with chemicals like NaOH or Sodium Carbonate, always wear gloves and eye protection.
|
||||||
4. Submerge the board in the developer solution and gently agitate it. The UV-exposed areas of the resist will dissolve, revealing the copper underneath. This should take 30-60 seconds.
|
3. Submerge the board in the appropriate developer solution and gently agitate it. This should take 30-90 seconds, depending on the resist and developer freshness.
|
||||||
5. Rinse the board thoroughly with water and proceed to etching.
|
4. Rinse the board thoroughly with water.
|
||||||
|
|||||||
Reference in New Issue
Block a user