formatting

This commit is contained in:
cpu
2025-11-27 18:56:27 +01:00
parent 160753afcf
commit 511c990f3c

178
Readme.md
View File

@@ -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
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
* **Software:**
* KiCad (for PCB design and Gerber export)
### Software
* KiCad (for PCB design and SVG export)
* Inkscape (for SVG manipulation)
* Blender (for 3D model creation)
* Chitubox (or your printer's slicing software)
* **Hardware:**
### Hardware
* 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)
* UV light curing Solder Mask e.g. from Mechanic
## Step-by-Step Guide
### Installation
Ensure you have both installed:
@@ -62,113 +80,157 @@ sudo apt update
sudo apt install inkscape blender
```
Make sure you have the correct versions:
Make sure you have recent versions installed:
```bash
inkscape --version
Inkscape 1.2.2
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. 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.
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**.
### 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...).
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).
If you prefer to do all the steps manually, here is the step-by-step guide.
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 its 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.
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:
**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
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
```
### 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.
2. Go to the **Parameter Settings**.
#### 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)**
* Model Thickness (Blender): `0.1 mm`
* 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)
* **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.
### 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
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 the solder mask just clean the uncured part with Izopropanol.
3. **Safety First:** When working with NaOH, always wear gloves and eye protection, as it is caustic.
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.
5. Rinse the board thoroughly with water and proceed to etching.
* 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 UV light curing solder mask, allow more time to it to harden. Clean the uncured part with Izopropanol afterwards.
2. **Safety First:** When working with chemicals like NaOH or Sodium Carbonate, always wear gloves and eye protection.
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.
4. Rinse the board thoroughly with water.