If fritzing gets #1 spot on HN I would like to wholeheartedly recommend https://www.kicad.org/ as well. IMHO much saner workflow and good UX in the latest version.I did a simple PCB and got it manufactured on https://jlcpcb.com/ for a couple bucks. Quite a rewarding experience.
I would also suggest that anyone who cares about computers gets to know basic electronics. How do transistors work, what is a bus (e.g I2C or SPI) and how is it all connected? (Drumroll ... a PCB of course). There is a ton of tutorials on youtube that do it end to end. E.g Phils Lab https://www.youtube.com/watch?v=rLDqQ2L_mUQ for a PCB design. Or Ben Eaters excellent beginner tutorial "Hello World from Scratch" https://www.youtube.com/watch?v=LnzuMJLZRdU
Even better is that with kicad you can fully automate fab outputs via CI pipeline for example in gitlab. I have my projects run ERC and DRC then if they pass, gerbers for JLCPCB, BOM (with parts #s for LCSC) and placement for assembly as well as an interactive BOM are generated.
Is there a good tutorial for setting up a pipeline like you’ve described using? Really cool!
When adding components, add "LCSC" to overall schematic (BOM export will fail if added to each part separately (join issue)) and the part number in each part in order to use the JLCPCB assembly service. Only parts with LCSC column are exported in the JLCPCB BOMs.
.gitlab-ci.yml
...
tests:
image: setsoft/kicad_auto:dev_k6
stage: testing
script:
- "[ -f *.kicad_pcb ] && kibot -c test.kibot.yaml"
tags:
- docker
pcb_outputs:
image: setsoft/kicad_auto:dev_k6
stage: gen_fab
script:
- "[ -f *.kicad_pcb ] && kibot -c output.kibot.yaml"
only:
refs:
- master
artifacts:
when: always
paths:
- Fabrication/
tags:
- docker
...
test.kibot.yaml kibot:
version: 1
preflight:
run_erc: false
update_xml: false
run_drc: true
check_zone_fills: true
ignore_unconnected: false
output.kibot.yaml # Gerber and drill files for JLCPCB, without stencil
# URL: https://jlcpcb.com/
kibot:
version: 1
filters:
- name: only_jlc_parts
comment: 'Only parts with JLC (LCSC) code'
type: generic
include_only:
- column: 'LCSC'
regex: '^C\d+'
variants:
- name: rotated
comment: 'Just a place holder for the rotation filter'
type: kibom
variant: rotated
pre_transform: _rot_footprint
outputs:
- name: JLCPCB_gerbers
comment: Gerbers compatible with JLCPCB
type: gerber
dir: JLCPCB
options: &gerber_options
exclude_edge_layer: true
exclude_pads_from_silkscreen: true
plot_sheet_reference: false
plot_footprint_refs: true
plot_footprint_values: false
force_plot_invisible_refs_vals: false
tent_vias: true
use_protel_extensions: true
create_gerber_job_file: false
disable_aperture_macros: true
gerber_precision: 4.6
use_gerber_x2_attributes: false
use_gerber_net_attributes: false
line_width: 0.1
subtract_mask_from_silk: true
layers:
# Note: a more generic approach is to use 'copper' but then the filenames
# are slightly different.
- F.Cu
- B.Cu
- F.Paste
- B.Paste
- F.SilkS
- B.SilkS
- F.Mask
- B.Mask
- Edge.Cuts
- name: JLCPCB_drill
comment: Drill files compatible with JLCPCB
type: excellon
dir: JLCPCB
options:
pth_and_npth_single_file: false
pth_id: '-PTH'
npth_id: '-NPTH'
metric_units: false
output: "%f%i.%x"
- name: JLCPCB
comment: ZIP file for JLCPCB
type: compress
dir: Fabrication/JLCPCB
options:
files:
- from_output: JLCPCB_gerbers
dest: /
- from_output: JLCPCB_drill
dest: /
- name: ibom
comment: Interactive BOM
type: ibom
dir: Fabrication/ibom
options:
dark_mode: true
- name: 'JLCPCB_position'
comment: "Pick and place file, JLCPCB style"
type: position
dir: Fabrication/JLCPCB-BOM
options:
variant: rotated
output: '%f_cpl_jlc.%x'
format: CSV
units: millimeters
separate_files_for_front_and_back: false
only_smd: true
columns:
- id: Ref
name: Designator
- Val
- Package
- id: PosX
name: "Mid X"
- id: PosY
name: "Mid Y"
- id: Rot
name: Rotation
- id: Side
name: Layer
- name: 'JLCPCB_bom'
comment: "BoM for JLCPCB"
type: bom
dir: Fabrication/JLCPCB-BOM
options:
output: '%f_%i_jlc.%x'
exclude_filter: 'only_jlc_parts'
ref_separator: ','
columns:
- field: Value
name: Comment
- field: References
name: Designator
- Footprint
- field: 'LCSC'
name: 'LCSC part number'
csv:
hide_pcb_info: true
hide_stats_info: true
quote_all: true*