Skip to the content
PCBKitNew board
2 layers120 × 80 mmRaw, the printed circuit board in 3D

resolution = [0.5, 0.5] pcbfolder = '../PCBs/' pcbnames = ["1Bitsy1bitsy"] iters = 30 env = PCBRoutingEnv(resolution=resolution, pcbfolder=pcbfolder, pcbnames=pcbnames) obs, info = env.reset() for in range(iters): act =…

Size
120 × 80 mm
Copper layers
2
Thickness
1.6 mm
Parts
51
Nets
60
Pads
193
Tracks, vias
361, 13
Pours
1
Routed
Yes
KiCad
KiCad 6 (file 20211014)
Created
28 Mar 2023
Updated
18 Jan 2024

Overview

Raw is an open-source printed circuit board by PCBench, from the PCBench/PCBench repository on GitHub, published under the MIT licence. It is a 2-layer board of 120 × 80 mm with 51 parts on 60 nets, routed with 361 tracks and 13 vias.

It is built around the MCP3208-BI/P and D12. It belongs with the ESP32 boards of this library.

Main components

2

README

README.md

PCBench: A Dataset for Printed Circuit Board Routing

PCBench is a dataset for PCB routing task, it includes a dataset consisting of 164 printed circuit boards (PCB), a data augmentation script to expand the dataset for supervised learning (SL) tasks, and a reinforcement learning (RL) environment.

Dataset

Folder Structure

All the PCB designs in our dataset are stored in the folder PCBs, where each PCB design is stored in a subfolder named {author/org}_{PCB_name}_{design_version(optional)}. Below is the folder structure of the dataset.

text
├── PCBs
│   ├── master_metadata.json
│   ├── subfolder1
│   │   ├── raw.kicad_pcb
│   │   ├── processed.kicad_pcb
│   │   ├── final.json
│   │   ├── metadata.json
│   │   ├── visual.png
│   ├── subfolder2
│   │   ├── raw.kicad_pcb
│   │   ├── processed.kicad_pcb
│   │   ├── final.json
│   │   ├── metadata.json
│   │   ├── visual.png
│   ├── ...

The raw.kicad_pcb is the raw PCB design file, process.kicad_pcb is the file after cleaning up, final.json stores only routing-related information used for ML tasks. metadata.json stores the meta information for each single PCB design. visual.png is a visualization of each single PCB design. master_meta.json contains metadata of all PCBs and global-level information.

PCB Routing Description Language (PCB-RDL)

We propose a JSON specification (final.json for each PCB design) called the PCB Routing Description Language (PCB-RDL) that expresses a PCB routing problem and its solutions intuitively using basic concepts in order to facilitate research into automated PCB routing using ML. Following figure shows is an example of PCB with marked components in PCB-RDL (Left) and it corrsponding PCB-RDL (Right).

PCB example

Data Augmentation

Run

The augmentation data can be generated with the script Scripts/Data_augmentation/augmentation.py. To generate 3 samples by randomly extracting 50% nets from the PCB 1Bitsy_1bitsy, please run the following command

text
cd Scripts/Data_augmentation/
python augmentation.py --num_samples 3 --net_ratio 0.5 --pcb_name 1Bitsy_1bitsy

Output

All the generated PCBs will be stored in the folder named augmented_data under Scripts/Data_augmentation/. In augmented_data, all the generated samples will be stored in a subfolder with the name of selected PCB. Each generated sample has the name sample_index.json. For example, the above command will generate the following file under Scripts/Data_augmentation/

text
├── augmented_data
│   ├── 1Bitsy_1bitsy
│   │   ├── 1.json
│   │   ├── 2.json
│   │   ├── 3.json

RL environment

Installation

The RL environment requires Python >= 3.7. You can simply install the environment with the following commands:

text
git clone https://github.com/PCBench/PCBench.git
cd PCBench
python setup.py install

After installation, open a Python console and type

text
from RLEnv.EnvLayer.PCBRoutingEnv import PCBRoutingEnv

If no error occurs, you have successfully installed the PCB routing environment.

API Usage

The following content shows an example of API usage of PCBRoutingEnv.

text
from RLEnv.EnvLayer.PCBRoutingEnv import PCBRoutingEnv
import random

resolution = [0.5, 0.5]
pcb_folder = '../PCBs/'
pcb_names = ["1Bitsy_1bitsy"]
iters = 30
env = PCBRoutingEnv(resolution=resolution, pcb_folder=pcb_folder, pcb_names=pcb_names)
obs, info = env.reset()
for _ in range(iters):
    act = random.randint(0,5)
    obs, rew, terminal, _, info = env.step(act)
    if terminal:
        env.reset()

You can find more examples of customizing functions of reward and state observation from RLEnv/examples.ipynb.

Parts

51
QtyValueFootprintReferences
3MountingHole_3.2mm_M3_DIN965_PadMountingHole:MountingHole_3.2mm_M3_DIN965_Pad , ,
21 μFCapacitor_THT:CP_Radial_D4.0mm_P2.00mm1μF, 1μF
2MCP3208Package_DIP:DIP-16_W7.62mmMCP3208, MCP3208
1BZ1Buzzer_Beeper:Buzzer_11.5x9.5RM5Spike Buzzer
1C3Capacitor_THT:CP_Radial_D4.0mm_P2.00mm1nF
1D1LED_THT:LED_D5.0mmPhotodiode
1D10LED_THT:LED_D3.0mm9
1D11LED_THT:LED_D3.0mm10
1D12LED_THT:LED_D3.0mm11
1D13LED_THT:LED_D3.0mm12
1D2LED_THT:LED_D3.0mm1
1D3LED_THT:LED_D3.0mm2
1D4LED_THT:LED_D3.0mm3
1D5LED_THT:LED_D3.0mm4
1D6LED_THT:LED_D3.0mm5
1D7LED_THT:LED_D3.0mm6
1D8LED_THT:LED_D3.0mm7
1ESP32-DEVKITC-32DModule:MODULE_ESP32-DEVKITC-32DESP32 Wroom-32 Dev Module
1J1Connector_Audio:Spikeling Audio Jack 3.5mmSynapse Out
1J2Connector_Audio:Spikeling Audio Jack 3.5mmSynapse In 1
1J3Connector_Audio:Spikeling Audio Jack 3.5mmSynapse In 2
1J4Connector_Audio:Spikeling Audio Jack 3.5mmCurrent In
1J5Connector_Audio:Spikeling Audio Jack 3.5mmStimulus Out
1LEDLED_THT:LED_D3.0mm8
1MountingHole_M3MountingHole:MountingHole_3.2mm_M3_DIN965_Pad
1R1Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal10Ω
1R2Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal10kΩ
1R3Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal100Ω
1R4Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal100Ω
1R5Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal10kΩ
1R6Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal100Ω
1R7Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal100Ω
1R8Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal100Ω
1R9Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal100Ω
1RGBLED_THT:LED_D5.0mm-4_RGBSpike_LED
1RV1Potentiometer_THT:Spikeling PotentiometerSynapse1 Gain
1RV2Potentiometer_THT:Spikeling PotentiometerSynapse2 Gain
1RV3Potentiometer_THT:Spikeling PotentiometerVoltage Membrane
1RV4Potentiometer_THT:Spikeling PotentiometerNoise
1RV5Potentiometer_THT:Spikeling PotentiometerPhotodiode Gain
1RV6Potentiometer_THT:Spikeling PotentiometerStimulus
1RV7Potentiometer_THT:Spikeling PotentiometerStimulus
1SW1Button_Switch_THT:SW_PUSH_6mm_H13mmMode Button
1SW2Button_Switch_THT:Spikeling reset buttonReset Button

The 48 most common of 51 parts.

Questions

How big is the Raw PCB?

It measures 120 × 80 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Raw use?

51 parts, built around the MCP3208-BI/P and D12. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Raw KiCad files?

From the PCBench/PCBench repository on GitHub, at the commit this page was made from: the board is PCBs/kitspace_Spikeling_V2.1/raw.kicad_pcb. PCBKit opens the board in the browser, with nothing to install.

Can I use the Raw design in my own project?

Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).

More from PCBench/PCBench

12
  • 2 layers398.2 × 398.2 mmLargeWordClock LargeKickstarter, the printed circuit board in 3D

    LargeWordClock LargeKickstarter

    PCBench/PCBench

    resolution = [0.5, 0.5] pcbfolder = '../PCBs/' pcbnames = ["1Bitsy1bitsy"] iters = 30 env = PCBRoutingEnv(resolution=resolution, pcbfolder=pcbfolder, pcbnames=pcbnames) obs, info = env.reset() for in range(iters): act =…

    1,591 parts21MIT
  • 4 layers95 × 95 mmRaw, the printed circuit board in 3D

    Raw

    PCBench/PCBench

    resolution = [0.5, 0.5] pcbfolder = '../PCBs/' pcbnames = ["1Bitsy1bitsy"] iters = 30 env = PCBRoutingEnv(resolution=resolution, pcbfolder=pcbfolder, pcbnames=pcbnames) obs, info = env.reset() for in range(iters): act =…

    455 parts21MIT
  • 2 layers90 × 90 mmMod12003 mod12003, the printed circuit board in 3D

    Mod12003 mod12003

    PCBench/PCBench

    resolution = [0.5, 0.5] pcbfolder = '../PCBs/' pcbnames = ["1Bitsy1bitsy"] iters = 30 env = PCBRoutingEnv(resolution=resolution, pcbfolder=pcbfolder, pcbnames=pcbnames) obs, info = env.reset() for in range(iters): act =…

    452 parts21MIT
  • 2 layers88.9 × 114.3 mmRaw, the printed circuit board in 3D

    Raw

    PCBench/PCBench

    resolution = [0.5, 0.5] pcbfolder = '../PCBs/' pcbnames = ["1Bitsy1bitsy"] iters = 30 env = PCBRoutingEnv(resolution=resolution, pcbfolder=pcbfolder, pcbnames=pcbnames) obs, info = env.reset() for in range(iters): act =…

    190 parts21MIT
  • 2 layers100 × 100 mmMod1base mod1base, the printed circuit board in 3D

    Mod1base mod1base

    PCBench/PCBench

    resolution = [0.5, 0.5] pcbfolder = '../PCBs/' pcbnames = ["1Bitsy1bitsy"] iters = 30 env = PCBRoutingEnv(resolution=resolution, pcbfolder=pcbfolder, pcbnames=pcbnames) obs, info = env.reset() for in range(iters): act =…

    187 parts21MIT
  • 6 layers117 × 55 mmKiwiSDR PCB kiwi, the printed circuit board in 3D

    KiwiSDR PCB kiwi

    PCBench/PCBench

    resolution = [0.5, 0.5] pcbfolder = '../PCBs/' pcbnames = ["1Bitsy1bitsy"] iters = 30 env = PCBRoutingEnv(resolution=resolution, pcbfolder=pcbfolder, pcbnames=pcbnames) obs, info = env.reset() for in range(iters): act =…

    173 parts21MIT
  • 4 layers143 × 74 mmKitspace lpa96, the printed circuit board in 3D

    Kitspace lpa96

    PCBench/PCBench

    resolution = [0.5, 0.5] pcbfolder = '../PCBs/' pcbnames = ["1Bitsy1bitsy"] iters = 30 env = PCBRoutingEnv(resolution=resolution, pcbfolder=pcbfolder, pcbnames=pcbnames) obs, info = env.reset() for in range(iters): act =…

    161 parts21MIT
  • 2 layers101.6 × 99.7 mmRaw, the printed circuit board in 3D

    Raw

    PCBench/PCBench

    resolution = [0.5, 0.5] pcbfolder = '../PCBs/' pcbnames = ["1Bitsy1bitsy"] iters = 30 env = PCBRoutingEnv(resolution=resolution, pcbfolder=pcbfolder, pcbnames=pcbnames) obs, info = env.reset() for in range(iters): act =…

    158 parts21MIT
  • 4 layers36.1 × 32.7 mmKitspace tri panel 4up r0.1, the printed circuit board in 3D

    Kitspace tri panel 4up r0.1

    PCBench/PCBench

    resolution = [0.5, 0.5] pcbfolder = '../PCBs/' pcbnames = ["1Bitsy1bitsy"] iters = 30 env = PCBRoutingEnv(resolution=resolution, pcbfolder=pcbfolder, pcbnames=pcbnames) obs, info = env.reset() for in range(iters): act =…

    157 parts21MIT
  • 2 layers101.6 × 99.7 mmKarabas nano karabas nano revB, the printed circuit board in 3D

    Karabas nano karabas nano revB

    PCBench/PCBench

    resolution = [0.5, 0.5] pcbfolder = '../PCBs/' pcbnames = ["1Bitsy1bitsy"] iters = 30 env = PCBRoutingEnv(resolution=resolution, pcbfolder=pcbfolder, pcbnames=pcbnames) obs, info = env.reset() for in range(iters): act =…

    147 parts21MIT
  • 4 layers65 × 60 mmReworkctf reworkctf, the printed circuit board in 3D

    Reworkctf reworkctf

    PCBench/PCBench

    resolution = [0.5, 0.5] pcbfolder = '../PCBs/' pcbnames = ["1Bitsy1bitsy"] iters = 30 env = PCBRoutingEnv(resolution=resolution, pcbfolder=pcbfolder, pcbnames=pcbnames) obs, info = env.reset() for in range(iters): act =…

    143 parts21MIT
  • 2 layers99.1 × 99.1 mmRaw, the printed circuit board in 3D

    Raw

    PCBench/PCBench

    resolution = [0.5, 0.5] pcbfolder = '../PCBs/' pcbnames = ["1Bitsy1bitsy"] iters = 30 env = PCBRoutingEnv(resolution=resolution, pcbfolder=pcbfolder, pcbnames=pcbnames) obs, info = env.reset() for in range(iters): act =…

    77 parts21MIT

Similar boards

  • 2 layers72 × 90 mmWind breakout, the printed circuit board in 3D

    Wind breakout

    idlehandsdev/wind_breakout

    Breakout board for all Adafruit Feather series boards.

    58 parts14
  • 2 layers285.1 × 94.3 mmDK60, the printed circuit board in 3D

    DK60

    Dbroqua/DK60

    [MOVED] Mechanical keyboard based on HHKB layout

    171 parts3GPL-3.0
  • 2 layers140.4 × 111.9 mmSOR Hydrogen, the printed circuit board in 3D

    SOR Hydrogen

    samienr/SOR-Hydrogen

    Wireless Split Ergonomic Keyboard

    66 parts3MIT
  • 2 layers99.8 × 100.8 mmLed board, the printed circuit board in 3D

    Led board

    svpetry/Mini8086

    A small 8086 computer system.

    121 parts3
  • 4 layers100 × 43.3 mmPdp-11-colour, the printed circuit board in 3D

    Pdp-11-colour

    ashlin4010/pdp-11.40-mini-panel

    Included in this repository are the PCB files to make a miniature PDP-11/40 front panel. The board uses a XIAO nrf52840 dev board. No software has been written yet.

    96 parts2MIT
  • 2 layers242.6 × 154.9 mmPlaca, the printed circuit board in 3D

    Placa

    devfabiosilva/embeddedIoT

    My old project for IoT and automation 8 bit system

    194 parts2MIT
  • 2 layersPCBKeys, the printed circuit board in 3D

    PCBKeys

    0x544D/PCBKeys

    Bare essential PCB keyboard

    187 parts