Compare commits

..

2 Commits

Author SHA1 Message Date
cpu
e09923f601 added print configuration images and fixed Readme 2026-06-07 17:07:40 +02:00
cpu
496ef45a44 fixed paths 2026-06-07 15:19:45 +02:00
13 changed files with 457 additions and 26 deletions

View File

@@ -99,13 +99,13 @@ This guide was developed to work with Inkscape 1.2.2, Blender 5.0.0 and KiCad 9.
1. Open your PCB project in the KiCad PCB Editor.
2. Go to **File -> Plot** and select `Plot format` as `SVG` and set the `Output directory`.
3. In the `Include Layers` section select layers `B.Cu`, `B.Mask` and `F.Silkscreen`. Each layer will be ploted as a separate 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 i.e. add board outset into each file generated.
4. Optionaly, select additional layer(s) e.g. `Edge.Cuts` in the `Plot on All Layers` section. This way you can merge layers i.e. add board outset into each file generated. *This is usually not needed.*
5. Click **Plot** and **Close**.
<img src="images/KiCad.png" alt="KiCad" width="500"/> <img src="images/KiCad_Plot.png" alt="KiCad Plot" width="500"/>
### 2. SVG to STL Conversion
The SVG file will be converted to STL in two steps. This can be done manually or with an automated script.
The SVG file will be converted to STL in two steps. This can be done either manually or automatically with the script.
#### Manual Conversion
@@ -189,13 +189,7 @@ Check `Apply Modifiers` and save the file.
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:
**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
```
Use the shell script [svg2stl.sh](svg2stl.sh) to do the whole job in one go:
**Setup:**
@@ -203,14 +197,9 @@ wget https://gitea.virtonline.eu/2HoursProject/svg2stl/raw/branch/main/pcb_to_st
chmod +x svg2stl.sh
nano svg2stl.sh
```
Make sure you set the exact width of your model in `TARGET_WIDTH_MM`. Take the width from the outset measurement shown in the KiCad. The height will adjust itself proportionaly. The thickness `THICKNESS_MM` of the model can be adjusted as well. Set the resolution of your 3D printer's screen in `EXPORT_DPI`.
The thickness `THICKNESS_MM` of the model can be adjusted. Set the resolution of your 3D printer's screen in `EXPORT_DPI`.
```bash
# 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 of the generated 3D model in mm
THICKNESS_MM="0.1"
# Print resolution
@@ -219,21 +208,32 @@ EXPORT_DPI=1494
```
**Usage:**
Convert all `svg` files having the prefix `Step_Down_Carrier_Board` and apply inversion for file with postfix `B_Mask`.
```bash
./svg2stl.sh my_design.svg
./svg2stl.sh -i B_Mask examples/3D_print_svg_2_stl/Step_Down_Carrier_Board
```
### 3. Slicing in Chitubox
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.
This is where you set the exposure time. The Chitubox slicer 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**.
1. Open Chitubox
```Bash
cd /opt/CBD/CHITUBOX_Basic
./CHITUBOX_Basic.sh
```
2. Import your STL file. Lay it flat and center on the build plate.
<img src="images/Chitubox.png" alt="Chitubox" width="1000"/>
3. Go to the **Slice Settings** and set the following parameters.
*Note: You can also import the print profile from [Anycubic_Photon_Mono_4_profile_00.cfgx](profile/Anycubic_Photon_Mono_4_profile_00.cfgx).*
<img src="images/Print_configuration-Machine.png" alt="Print_configuration-Machine" width="250" />
<img src="images/Print_configuration-Resin.png" alt="Print_configuration-Resin" width="250" />
#### Exposure Time Examples:
* Pre-sensitized boards from Bungard requre 2 minutes to cure.
* Solder mask in a syringe from Mechanic require 10 minutes to harden.
* Solder mask in a syringe from Mechanic require 30 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)**
@@ -256,10 +256,12 @@ Since the minimum exposure time per layer is 0.1s and maximum 200s, calculate th
* Bottom Layer Count: `1`
* **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).
<img src="images/Print_configuration-Print.png" alt="Print_configuration-Machine" width="250" />
4. **Crucially, turn off Anti-aliasing**. Go to the "Advanced" tab and set **Anti-aliasing**. This ensures the sharpest possible pixels for crisp traces.
<img src="images/Print_configuration-Advance.png" alt="Print_configuration-Machine" width="250" />
5. Slice the model and save the file to the USB drive.
<img src="images/Chitubox.png" alt="Chitubox" width="1000"/>
### 4. Exposing the Board

View File

@@ -14,6 +14,6 @@ chmod +x export.sh
The script will first generate gerber files in the `output` directory and then convert them into `ngc` format in the `gcode` directory.
Launch the `gSender` program.
* Load the `drill.ngc` file for drilling holes.
* Load the `outline.ngc` file for milling the board outlines.
* Load the `back.ngc` file if you want to mill the isolation traces.
* Load the `gcode/drill.ngc` file for drilling holes.
* Load the `gcode/outline.ngc` file for milling the board outlines.
* Load the `gcode/back.ngc` file if you want to mill the isolation traces.

View File

@@ -11,7 +11,7 @@ kicad-cli pcb export drill -o output $1
mkdir -p gcode
docker run --rm -i -t -v ".:/data" ptodorov/pcb2gcode \
docker run --rm -i -t -u "$(id -u):$(id -g)" -v ".:/data" ptodorov/pcb2gcode \
--back="output/$filename-B_Cu.gbl" \
--drill="output/$filename.drl" \
--outline="output/$filename-Edge_Cuts.gm1"

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

View File

@@ -0,0 +1,429 @@
{
"create_time": "",
"id": "",
"version": "",
"printerinfo": {
"vendor": "AnyCubic",
"direction_type": "Front",
"input_slice_suffixs": "",
"output_slice_suffixs": "",
"net_send_slice_suffixs": "",
"netsending": {
"currentvalue": false
},
"machinetype": {
"currentvalue": "Anycubic Photon Mono 4"
},
"machinename": {
"currentvalue": "Anycubic Photon Mono 4"
},
"projecttype": {
"currentvalue": 0
},
"resolutionx": {
"currentvalue": 9024
},
"resolutiony": {
"currentvalue": 5120
},
"machinewidth": {
"currentvalue": 153.4080047607422
},
"machinedepth": {
"currentvalue": 87.04000091552734
},
"machineheight": {
"currentvalue": 165.0
},
"blockxysizeRatio": {
"currentvalue": false
},
"resolutionLock": {
"currentvalue": false
},
"sizeLock": {
"currentvalue": false
},
"bdisplaycorrectenable": {
"currentvalue": false
},
"displaycorrectlefttopx": {
"currentvalue": 0.0
},
"displaycorrectlefttopy": {
"currentvalue": 0.0
},
"displaycorrectrighttopx": {
"currentvalue": 0.0
},
"displaycorrectrighttopy": {
"currentvalue": 0.0
},
"displaycorrectleftbottomx": {
"currentvalue": 0.0
},
"displaycorrectleftbottomy": {
"currentvalue": 0.0
},
"displaycorrectrightbottomx": {
"currentvalue": 0.0
},
"displaycorrectrightbottomy": {
"currentvalue": 0.0
},
"bbuildareaoffsetenable": {
"currentvalue": false
},
"buildareaoffsetleft": {
"currentvalue": 0.0
},
"buildareaoffsetright": {
"currentvalue": 0.0
},
"buildareaoffsettop": {
"currentvalue": 0.0
},
"buildareaoffsetbottom": {
"currentvalue": 0.0
},
"printtype": {
"currentvalue": 0
},
"mirrortype": {
"currentvalue": 0
},
"sliceformat": {
"currentvalue": 0
},
"zliftheightinsupportmode": {
"currentvalue": 4.74e-322
},
"raftshape": {
"currentvalue": 0
},
"autoSupportMode": {
"currentvalue": 0
},
"autoSupportType": {
"currentvalue": 0
}
},
"current_support": 1,
"current_material": 0,
"current_magic": 25606,
"material": [
{
"name": "Default",
"visible": true,
"current_slice": 0,
"current_support": 0,
"slice": [
{
"visible": true,
"name": "profile",
"resin": {
"visible": true,
"resintype": {
"currentvalue": "normal"
},
"resindensity": {
"currentvalue": 1.100000023841858
},
"resincost": {
"currentvalue": 30.0
},
"resinunit": {
"currentvalue": 1
},
"resincostmeasure": {
"currentvalue": 0
},
"resinmassunit": {
"currentvalue": 0
},
"color": {
"currentvalue": 0
},
"is_transparent": {
"currentvalue": true
},
"name": {
"currentvalue": "normal"
}
},
"print": {
"visible": true,
"bottom_layer_drop_height_visible": false,
"normal_layer_drop_height_visible": false,
"matchingresinmodel": {
"currentvalue": 0
},
"matchingresintips": {
"currentvalue": ""
},
"layerheight": {
"currentvalue": 0.05000000074505806
},
"bottomlayercount": {
"currentvalue": 1
},
"normalexposuretime": {
"currentvalue": 150.0
},
"bottomlayerexposuretime": {
"currentvalue": 150.0
},
"transitionlayercount": {
"currentvalue": 0
},
"transitionlayertype": {
"currentvalue": 0
},
"printwaitmode": {
"currentvalue": 1
},
"normalresttimebeforelift": {
"currentvalue": 0.0
},
"bottomresttimebeforelift": {
"currentvalue": 0.0
},
"normalresttimeafterretract": {
"currentvalue": 0.0
},
"bottomresttimeafterretract": {
"currentvalue": 0.0
},
"normalresttimeafterlift": {
"currentvalue": 0.0
},
"bottomresttimeafterlift": {
"currentvalue": 0.0
},
"lightofftime": {
"currentvalue": 0.0
},
"bottomlightofftime": {
"currentvalue": 5.0
},
"bottomlayerliftheight": {
"currentvalue": 5.0
},
"normallayerliftheight": {
"currentvalue": 2.0
},
"bottomlayerliftheight2": {
"currentvalue": 3.0
},
"normallayerliftheight2": {
"currentvalue": 4.0
},
"bottomlayerliftspeed": {
"currentvalue": 120.0
},
"normallayerliftspeed": {
"currentvalue": 120.0
},
"bottomlayerliftspeed2": {
"currentvalue": 180.0
},
"normallayerliftspeed2": {
"currentvalue": 360.0
},
"bottomlayerdropspeed": {
"currentvalue": 240.0
},
"normallayerdropspeed": {
"currentvalue": 360.0
},
"bottomlayerdropspeed2": {
"currentvalue": 180.0
},
"normallayerdropspeed2": {
"currentvalue": 180.0
},
"normallayerdropheight2": {
"currentvalue": 3.0
},
"bottomlayerdropheight2": {
"currentvalue": 4.0
},
"edgeexposuremm": {
"currentvalue": 0.0
},
"bottomedgeexposuremm": {
"currentvalue": 0.0
},
"edgeexposuretimes": {
"currentvalue": 4.0
},
"bottomedgeexposuretimes": {
"currentvalue": 4.0
},
"ac_mode_type": {
"currentvalue": true
}
},
"gcode": {
"visible": false,
"bgcode": {
"currentvalue": true
},
"startgcode": {
"currentvalue": ""
},
"layergcode": {
"currentvalue": ""
},
"endgcode": {
"currentvalue": ""
}
},
"advanced": {
"visible": true,
"bottomlightintensitypwm": {
"currentvalue": 255
},
"bottomlightintensitypwmshowmode": {
"currentvalue": 0
},
"normallightintensitypwm": {
"currentvalue": 255
},
"normallightintensitypwmshowmode": {
"currentvalue": 0
},
"bantialiasing": {
"currentvalue": false
},
"edgeblurtype": {
"currentvalue": 0
},
"antialiaslevel": {
"currentvalue": 0
},
"midgreylevel": {
"currentvalue": 255
},
"mingreylevel": {
"currentvalue": 63
},
"maxgreylevel": {
"currentvalue": 255
},
"bimageblur": {
"currentvalue": true
},
"imageblurpixel": {
"currentvalue": 1
},
"binnerouttercircleoffsetenable": {
"currentvalue": false
},
"bprinttimecompensationenable": {
"currentvalue": false
},
"innercircleoffset": {
"currentvalue": 0.0
},
"outtercircleoffset": {
"currentvalue": 0.0
},
"circleparitydifference": {
"currentvalue": 0.0
},
"bbottominnerouttercircleoffsetenable": {
"currentvalue": false
},
"bottominnercircleoffset": {
"currentvalue": 0.0
},
"bottomouttercircleoffset": {
"currentvalue": 0.0
},
"bimagemask": {
"currentvalue": false
},
"imagemaskfile": {
"currentvalue": ""
},
"bsurfacerougheditable": {
"currentvalue": false
},
"surfaceroughlevel": {
"currentvalue": 1
},
"maskgrayscaleunit": {
"currentvalue": 4
},
"modelsupporttimesub": {
"currentvalue": 0.0
},
"softwareprintingtimehour": {
"currentvalue": 0
},
"softwareprintingtimeminute": {
"currentvalue": 0
},
"softwareprintingtimesecond": {
"currentvalue": 0
},
"actualprintingtimehour": {
"currentvalue": 0
},
"actualprintingtimeminute": {
"currentvalue": 0
},
"actualprintingtimesecond": {
"currentvalue": 0
},
"printinglayer": {
"currentvalue": 1
},
"layerprinttime": {
"currentvalue": 0.0
},
"enable_obscure": {
"currentvalue": false
},
"obscure_level": {
"currentvalue": 0
},
"enable_scale_compensation": {
"currentvalue": false
},
"compensation_x": {
"currentvalue": 100.0
},
"compensation_y": {
"currentvalue": 100.0
},
"compensation_z": {
"currentvalue": 100.0
},
"centerOffsetX": {
"currentvalue": 0.0
},
"centerOffsetY": {
"currentvalue": 0.0
},
"centerCount": {
"currentvalue": 5
},
"centerRadius": {
"currentvalue": 50.0
},
"matrixXCount": {
"currentvalue": 5
},
"matrixYCount": {
"currentvalue": 5
}
}
}
]
}
],
"support": [],
"magic": []
}