Loading 3D model… large boards can take a moment.
A keyboard personalized for myself, designed in KiCad, with custom firmware written in Rust.
The story behind this board can be found in this reddit post.
I also gave a (time-constrained) talk on making this keyboard which you can view here. Sadly I didn't get to cover everything I wanted to talk about when it comes to embedded Rust, but I hope you find it entertaining.
The STEP files for the case are available in the case directory.
They were produced with Rust bindings to OpenCascade. You can find the code for the keyboard case here.
The case can be printed as two separate parts with a dovetail connection (use your slicer and cut up the parts for whatever suits your print bed size), or it can be printed as one full piece.
The PCB can then be slotted into the case with the top edge first (the edge with the USB connector), then press the bottom edge in to fit it into the case. It's usually a snug fit. You can then use 4 M2x4 flat head "laptop screws" to secure the PCB in the middle two holes on the top and bottom edges.
The case feet can be printed and pressed directly into the bottom of the case. The STEP files were printed on a Prusa MK4 and MK3S, both of which had successful tolerances for the press-fit of the case feet.
Version v0.3.1 adds an ESD protector on the USB connector, and was kindly sponsored and manufactured by PCBWay.
Version 0.3 adds some iterative hardware improvements over v0.2:
Version 0.2 improves upon some of the issues in v0.1, with some intentional choices that could be seen as a downgrade:
Version 0.1 works but there are some issues:
Version 0.1 uses Kailh hotswap sockets. Combined with the top plate, this is good for trying out different switches, but adds complexity in the build process. It requires more parts, and I had to 3D print 3.4mm M2 spacers.
For every PCB fabrication order, I make a github release and upload the files I used to make the order.
You can see a list of releases here.
For most PCB fabrication shops, they expect gerber files, which are essentially files that describe the layout of pads/traces/geometry for each layer in a PCB. They also contain the drill locations if your PCB has any holes. All these layers should be placed in a directory and compressed to a zip file for uploading.
To create a gerber zip in KiCAD:
File -> Plotgerber (this is just convention, any name will do)PlotGenerate Drill Files with an Excellon drill file format, and a Gerber map file formatDrill Units are in MillimetersGenerate Drill Filegerber directory into a gerber.zip file and it's ready to upload!Note: Check the PCB vendor's website for special KiCAD instructions, as they sometimes prefer certain settings when exporting.
OSHPark can directly accept *.kicad_pcb files so you don't need to export gerbers when ordering there.
From the schematic viewer:
bom_csv_grouped_by_value_with_fp.csv extension, so add itModify the CSV file:
Ref -> DesignatorQnty -> QuantityCmp nameDescriptionVendorLCSC Part #jlcpcb.com/parts and copy over both the footprint and the LCSC part number into their respective columnsIn general, try to use as many "basic parts" as you can from JLCPCB. Each "extended part" costs an extra 300 yen per board.
From KiCad's PCB design tool:
File -> Fabrication Outputs -> Footprint Position (.pos) FileFormat: CSVUnits: MillimetersFiles: Single file for boardInclude footprints with SMD pads even if not marked Surface Mount: checkedGenerate Position FileModify the CSV file:
Ref -> DesignatorQnty -> QuantityVal -> ValuePosX -> Mid XPosY -> Mid YRot -> RotationSide -> LayerWhen uploading to JLCPCB, you may need to modify the rotation values. It will show you red dots on pin 1 for the relevant components, as well as a red + for components with polarity, so double check against your silkscreen and placement. Positive rotation goes counter-clockwise, so if you need to rotate a part counter-clockwise one turn, add 90 degrees. Subtract 90 to rotate one turn clockwise, and modulo 360 degrees to keep the overall rotation value positive.
Set the DEFMT_LOG environment variable.
No comments yet. Be the first to ask about this board.