Skip to the content
2 layers100 × 100 mmControl board, the printed circuit board in 3D

A mostly 3D-printed optical bench that couples a 635 nm laser into an optical fiber by itself. Knock a mirror out of line and four stepper-driven adjusters steer the beam back to peak coupling, with no hands on the…

Size
100 × 100 mm
Copper layers
2
Thickness
1.6 mm
Parts
31
Nets
41
Pads
144
Tracks, vias
378, 318
Pours
2
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
27 Sep 2026
Updated
10 Oct 2026

Overview

Control board is an open-source printed circuit board by CoraBeanz, from the CoraBeanz/ROS-Optics-Bench repository on GitHub. It is a 2-layer board of 100 × 100 mm with 31 parts on 41 nets, routed with 378 tracks and 318 vias.

It is built around the MF-RHT200-0 and P6KE18CA. Its parts include 10 connectors, 5 capacitors, 4 ICs, 3 diodes and 2 resistors. It belongs with the ESP32 boards of this library.

Main components

2

README

README.md

Self-Aligning Laser-to-Fiber Bench. Seen from above, a 635 nm laser beam passes an aperture, two polarizers and a beamsplitter, folds off two motorized mirrors, M1 and M2, and is focused into a single-mode fiber. M1 gets knocked, the focused spot slides off the fiber's core and the coupling drops to almost nothing; M2's motors search until the light comes back, then both mirrors walk the beam back to its peak. A fiber-face inset shows the spot stepping outward in a square spiral beside the core until it finds it, and a chart plots the output-to-reference photodiode ratio, as a share of its peak, through the knock and the recovery, replayed from the bench twin simulator.

A mostly 3D-printed optical bench that couples a 635 nm laser into an optical fiber by itself. Knock a mirror out of line and four stepper-driven adjusters steer the beam back to peak coupling, with no hands on the knobs.

status: bench bring-up laser: 635 nm into a fiber firmware: ESP32 and Arduino robotics: ROS 2 Humble test panel: PySide6 simulation: bench twin PCBs: KiCad 10 CAD: Onshape

How it works · The bench · Optical path · Auto-align · Electronics · Software · Roadmap · Parts list

How it works

Getting a laser into a single-mode fiber means landing a focused spot on a core a few microns across, at the right angle. By hand that takes two kinematic mirrors, four knobs and a lot of patience. Here a NEMA 8 stepper turns each knob, and two photodiodes tell the motors how close they are.

1 · Score the coupling2 · Find the light3 · Steer and walk
A beamsplitter sends part of the laser to a reference photodiode, and the fiber's output lands on a second one. Their ratio is the score, so laser flicker cancels out.After a knock the spot has usually left the core and the output reads nothing. M2 steps the spot outward in a square spiral until the output photodiode sees light again.M2 alone moves the spot across the core. M1 with a matched, opposite M2 move changes only the angle. Alternating the two climbs the long, thin peak that one-knob-at-a-time adjusting stalls on.

The bench

Onshape render of the whole bench on four printed breadboard tiles: the control board at the back left, the laser, aperture, polarizer and beamsplitter in front, the two motor-mirror assemblies in the middle, and the lens and fiber mounts at the right.

Close-up render of the laser, polarizer and beamsplitter, then M1 and M2, each with two NEMA 8 motors turning its adjusters through brass couplers and hex rods.
Laser, polarizer and beamsplitter, then M1 and M2, each with two NEMA 8 motors turning its adjusters through brass couplers and hex rods.

Light. A 635 nm Quarton laser module under 1 mW, trimmed by a 2 mm printed aperture and dimmed by two crossed polarizers.

Steering. Two 1 in mirrors in Thorlabs KMS-style kinematic mounts. A NEMA 8 stepper turns each 100 TPI adjuster through a brass coupler and a 2 mm hex rod: four motorized axes, 79 nm of screw travel per microstep.

Focus. An f = 8 mm asphere on a micrometer stage focuses the beam onto a fixed FC bulkhead. The lens moves; the fiber stays put.

Sensing. BPW34 photodiodes on MCP6002 transimpedance amps, read by a 16-bit ADS1115.

Control. An ESP32 Feather V2 drives four TMC2209s on one UART bus and takes plain-text commands over USB from a desktop test panel or from ROS 2 on a Jetson.

Base. Printed breadboard tiles on a 25 mm hole grid, so parts come off and go back in the same place.

The full CAD model is one STEP file exported from Onshape with its subassembly tree, cad/assemblies/ros_laser_bench_main_assembly.step. Every part to buy, print or check is in the parts list (source: docs/bom/bom.csv).

Optical path

Top view of the optical path: laser, 2 mm aperture, crossed polarizers and beamsplitter along the bottom, with the reference photodiode on the beamsplitter's side port; M1 turns the beam up to M2, 150 mm away, which sends it along the top through two irises to the f = 8 mm asphere on its stage and into the FC bulkhead, and the fiber loops to the output photodiode. A strip along the bottom gives the design distances along the beam.

The beam folds in a Z. M1 and M2 sit 150 mm apart, and M2 is 310 mm from the lens, so tilting the two mirrors together can set both where the beam crosses the lens and the angle it arrives at, and through them where the focused spot lands on the fiber face and the angle it enters at. One microstep tilts a mirror by about 4.6 µrad. One turn of M2's X adjuster moves the spot about 230 µm across the fiber face, and one turn of its Y adjuster about 165 µm, because at a 45° fold a vertical tilt bends the beam by √2 times the tilt instead of twice it.

The 2 mm aperture does mode matching. The laser's 7 x 3 mm beam is much bigger than the single-mode fiber's mode seen at the lens (1.5 mm across), so only its centre can couple. In the bench twin 83% of the light through the aperture couples, against 25% of the whole beam without it. The fiber gets about a quarter of the laser's power either way, but with the aperture the light that could never couple is stopped before the beamsplitter, so the out/ref score at the peak is 0.67 instead of 0.20. In phase 1 the OV9281's bare sensor takes the lens's place, and with the two irises it lets the mirrors put the beam on the lens axis by spot position before the lens and fiber go in.

Auto-align

Coupling over M1X and M2X computed by the bench twin: a long, thin, bright ridge running diagonally. After M1 is knocked 1.2 mrad, a square spiral on M2 finds the light on the ridge, then the steer-and-walk path follows the ridge to 99% of the best, while one motor at a time stalls part-way along it at 83%. Three steps beside it: find the light with a square spiral on M2, steer with M2 alone, walk with M1 and an opposite M2 move. A results strip compares the two methods over 100 simulated knocks.

With a single-mode fiber the coupling depends on where the spot lands on the core (set by the beam's angle at the lens) and on the angle it comes in at (set by the beam's offset at the lens). The first is about 25 times more sensitive, and both mirrors change both, so in motor coordinates the peak is a ridge 23 times longer than it is wide, running diagonally across M1 and M2. Turning one knob at a time crawls along it. Auto-align, in the test panel and as a ROS 2 action, uses the two moves people use by hand instead:

  • Find. If the output photodiode sees nothing, M2 steps the spot outward in a square spiral, up to Search (turns) either way, until the out/ref ratio clears 2% of its aligned value.
  • Steer. M2 alone moves the spot across the core: the narrow direction, 25 microsteps to the 1/e point on M2X.
  • Walk. M1 plus a matched, opposite M2 move keeps the spot where it is and changes only the angle: the wide direction, about 580 microsteps of M1.
  • Repeat walk and steer on both planes until a sweep gains less than 0.3%. Each line search approaches its points from the same side, so the play in the hex couplings always sits the same way.

The first run on a fiber also measures the walk directions on the real bench, since they depend on motor directions and lever arms. In 100 simulated knocks of 0.3 to 3 mrad, steer and walk brought all 100 back above 99.9% of the best coupling, with a median of 19 s and a worst case of 66 s. One motor at a time got 59 back to 90%. Everything here comes from the bench twin; Auto-align hasn't run on the hardware yet.

Electronics

PartRole
Adafruit ESP32 Feather V2Real-time side: steppers, soft limits, photodiode sampling, laser
4x Adafruit TMC2209 breakout on one UART busStepper drivers: 3200 microsteps per adjuster turn, StealthChop, current set over UART
ADS1115 (16-bit ADC) + 2x BPW34 photodiode on an MCP6002 transimpedance amp (47 kΩ)Reference and output power
12 V supplyMotor power; the Feather runs from USB
Jetson (ROS 2)Camera, optimizer, experiment control
Arducam OV9281 (global shutter, UVC)Bare-sensor beam profiler for phase 1
Top render of the control board: sockets for the ESP32 Feather V2, four TMC2209 breakouts with their screw-terminal edges facing out, and the ADS1115; the 12 V input with fuse, diodes and bulk capacitor; JST-XH plugs for the drivers, laser and both photodiodes; and a 10-pin test header.Top render of the photodiode amp board: the BPW34 footprint, the MCP6002 op-amp, the feedback resistor and capacitor, and a 3-pin JST-XH plug.
Control board, 100 x 100 mm, two layers. The Feather, the four TMC2209 breakouts and the ADS1115 plug in.Photodiode amp, 34 x 25 mm. Build two: reference and output.

Both boards are KiCad 10 projects generated from Python, all through-hole, with Gerbers ready to order in electronics/pcb. Every cable on the bench is in electronics/system_wiring.svg, and the full pin table is in electronics/wiring.md.

Software

Block diagram of the code. The ESP32 firmware drives the four motor drivers, the laser and the ADS1115, and talks plain text over USB serial. bench_link connects either the real ESP32 or the bench twin simulator to two front ends, the PySide6 test panel and the ROS 2 packages on the Jetson, which both run the same Aligner. The camera feeds the beam_spot node. A band at the bottom shows the CAD, PCB and parts-list files.

Where each piece lives, and how far it has been run:

ModuleWhat it doesRun so far
firmware/optics_benchArduino IDE sketch for the ESP32: four axes with soft limits and positions kept in flash, auto-ranging photodiode sampling, the laser, and the serial protocolOn the bench: laser, all four motors and both photodiodes
tools/test_gui.pyDark-mode PySide6 test panel: jog, go-to, photodiode readout and plots, CSV logging and Auto-align; --sim runs it on the bench twinOn the bench; Auto-align on the simulator only
tools/bench_twinPhysical model of the bench and the Aligner both front ends run; tools/twin.py runs trials and draws figures14 unit tests
host/ros2_wsROS 2 Humble packages for the Jetson: the bench as topics, services and actions, Align as an action, and a beam-spot node for the OV9281Against the simulator on Humble

Building the firmware

  1. In the Arduino IDE, install the ESP32 boards package (Boards Manager, "esp32" by Espressif).
  2. Install the libraries below with the Library Manager.
  3. Open firmware/optics_bench/optics_bench.ino.
  4. Select your ESP32 board and port, then Upload. Serial Monitor runs at 115200 baud with newline line endings.

Code in src/ is compiled with the sketch automatically. Record any library added through the Library Manager here so the build can be reproduced.

LibraryVersionUsed for
TMCStepper (teemuatlut)0.7.3TMC2209 register setup over UART
AccelStepper (Mike McCauley)1.64Ramped STEP/DIR motion
Adafruit ADS1X152.6.2ADS1115 photodiode ADC over I2C (pulls in Adafruit BusIO)

The firmware was last built with the esp32 boards package 3.3.7.

Every pin is set in firmware/optics_bench/config.h. The wiring diagram and full pin table for the Feather ESP32 V2, the four Adafruit TMC2209 breakouts, the laser, the ADS1115 and the two photodiode amplifier boards are in electronics/wiring.md. The serial protocol is plain text and documented in firmware/optics_bench/src/comms/protocol.h, so the Serial Monitor or the Jetson can use the same commands.

Bench test panel

The test panel connected to the simulator after a knock and an automatic recovery: the four motor rows, the photodiode readout, and plots of the reference and output voltages and their ratio dropping at the knock and climbing back.

tools/test_gui.py is a small desktop app for the bench tests: laser on/off, jog, nudge and go-to for the four mirror motors, and live photodiode readings. It is a dark-mode Qt window built on PySide6 (the LGPL Qt binding) and pyserial, both listed in tools/requirements.txt.

text
py -3 -m pip install -r tools/requirements.txt
py -3 tools/test_gui.py          # pick the ESP32's COM port, Connect
py -3 tools/test_gui.py --sim    # try it without hardware

py -3 picks the regular Python install on Windows; a bare python can resolve to another bundled interpreter such as KiCad's.

  • Positions are in microsteps, 3200 per adjuster turn. One turn of a 100 TPI adjuster is 254 um, so a full step is about 1.3 um of screw travel.
  • Zero and soft limits. "Reset to 0" on a motor's row calls its current knob position zero without moving it, and "Reset all to 0" does all four. Use them whenever the stored position has stopped matching reality, for example after turning an adjuster by hand. The soft limits (default -3 to +3 turns, adjustable up to +-8) stay relative to zero, because the hex bit only has about 4 turns of engagement one way. Positions and limits are saved to flash and survive a power cycle. If power drops mid-move, the panel warns that positions may be off until you press "Reset all to 0" (zeroing the motors one at a time doesn't clear it).
  • Coil release. A motor is powered only while it moves: it is released 0.5 s after it stops, so the motors stay cool between moves, and the non-back-driving adjuster screws hold the mirror. The On box shows whether a motor is powered; ticking it holds that motor powered until you untick it. AUTO_RELEASE in config.h turns this off.
  • Hold-to-jog (the double arrows) keeps a motor running while the button is held. The firmware stops it by itself if the panel stops refreshing the jog, so a crashed GUI can't run a motor to its limit.
  • Keys: arrows move M1 (Left/Right = M1X, Down/Up = M1Y), A/D and S/W move M2X and M2Y by the selected step, L toggles the laser, Esc stops everything.
  • Diag shows the TMC2209 status (current, StealthChop, overtemperature, short and open-load flags). A driver that doesn't answer on the UART shows a red dot and refuses to move.
  • Auto-align. Pick the fiber on the bench and press Align. It finds the light, then peaks the out/ref ratio by steering with M2 and walking M1 and M2 together (see Auto-align). The first run after connecting or switching fiber also measures the walk directions, so start it near the peak; the panel keeps them until it disconnects. Later runs recover from wherever the beam is, for example after a knock. If there is no light on the output photodiode, it first searches with M2 up to Search (turns) either way (default 0.4 turn: about ±90 µm across the fiber face and ±65 µm up and down; one turn of M2X moves the spot about 230 µm, one turn of M2Y about 165 µm). The search covers a square, so its time grows with the square of that number, and the log says how many points it will visit. Soft limits still stop any move that would pass them. Stop or Esc ends it. It uses the same serial commands as the rest of the panel, but it has only been run against the simulator so far.
  • Photodiodes. Tick Live to stream the reference and output photodiode voltages (5 to 50 readings a second, each the average of all ADC samples since the last one). The panel shows each voltage with its photocurrent and optical power, the output/reference ratio with the best ratio seen and the motor positions where it happened, and a rolling plot (log scale optional). Measure dark switches the laser off briefly, records the offsets and subtracts them from then on. ADC range fixes the ADS1115 gain instead of auto-ranging, and Save CSV writes up to the last 30,000 readings (10 minutes at 50 a second).
  • Simulator. --sim (or the Simulator port) runs the bench twin behind the same serial commands: the photodiodes read what the modelled optics couple into the chosen fiber, with the best position hidden a little way from zero. Knock M1 and Knock M2 tilt a mirror by 0.5 to 2 mrad as if bumped, Unknock takes the knocks out, and Peak? shows where the best position is. Knock, then Align, to watch it recover. The same commands work from the console as SIM KNOCK M1 [mrad], SIM PEAK, SIM FIBER sm630 and SIM RESET.
First power-up checklist
  1. Flash the firmware and connect. A driver whose 12 V supply is off doesn't answer on the UART, so it shows a red dot, and a move on that axis is refused with "driver offline".
  2. With the 12 V supply on, send REPROBE ALL (or just move the axis, which retries). The dots should go green, and the REPROBE reply should end in slots=ok (the connection bar picks it up on the next INFO).
  3. Take the hex bits out of the adjusters and nudge each motor by 1/4 turn to check which way positive turns. Flip it with invert in config.h if needed.
  4. Refit the bits, press "Reset all to 0", and start aligning.
  5. With the ADS1115 and photodiode boards connected, the photodiode panel should show ADC: ok. Cover each diode and shine a light on it to check its channel, then press Measure dark with the room lit as it will be during runs.

Bench twin (simulator)

tools/bench_twin is a small physical model of the bench, used to size and test the alignment routine before the hardware can. It models:

  • Optics: the 7 x 3 mm laser beam cut by the 2 mm aperture, the two mirrors 150 mm apart, iris 2 at 3 mm, and the f = 8 mm lens. Single-mode coupling is the overlap of the laser field with the fiber mode, including the aperture's hard edge. Multimode coupling is the share of the focused spot that the core accepts.
  • Motors: 100 TPI adjusters on a 17.3 mm lever and a little play in each hex coupling. The randomized benches the simulator and the trials use also add a little crosstalk between each mount's two axes.
  • Photodiodes: the reference and output photodiodes through the ADS1115, with noise and dark offsets.
  • Knocks: a bumped mirror mount tilts by an amount the motors don't know about.
text
py -3 tools/twin.py                       key numbers (--fiber sm630, mm50 or smf28)
py -3 tools/twin.py ceiling               best coupling vs aperture size and lens focal length
py -3 tools/twin.py trials -n 100 --compare   knock a mirror and recover, 100 times, both methods
py -3 tools/twin.py landscape             redraws docs/images/twin_landscape.png (needs matplotlib)
py -3 -m unittest discover tools/tests

What it says so far, for the single-mode fiber:

  • The peak is narrow and diagonal. Moving M2X alone, coupling falls to 1/e within 25 microsteps (1.5 full steps). Moving M1 and M2 together the opposite way ("walking"), it stays up for about 580 microsteps. So in motor coordinates the peak is a long, thin ridge, 23 times longer than it is wide, running diagonally across M1 and M2. Adjusting one motor at a time stalls part-way along it.
  • Recovery. In 100 simulated knocks of 0.3 to 3 mrad on a random mirror, steer and walk got all 100 back above 99.9% of the best coupling, with a median of 19 s and a worst case of 66 s (at 60 RPM and 600 RPM/s). One motor at a time got 59 of 100 back to 90%, and its worst case ended at 41%. Most of the time goes into finding the light again. Knocks of M1 above about 5 mrad can defeat the search even though M2 could still put the spot back on the core: the beam then crosses the lens about 1.5 mm off axis and enters the fiber too steeply, so M2 alone brings back under 3% of the peak and the spiral never sees light (7 of the 48 M1 knocks in a run of 100 knocks of 3 to 6 mrad). A larger Search (turns) doesn't help these.
  • The 2 mm aperture is close to ideal for coupling efficiency. With the f = 8 mm lens, 83% of the light that gets through it can be coupled. The best combination tried reaches 86% (a 2.5 mm aperture with f = 11 mm), and 2 mm with f = 9 mm gets 85%. Without the aperture only 25% couples, because the 7 x 3 mm beam is much bigger than the fiber mode seen at the lens (1.5 mm). The aperture passes only 30% of the beam, so the fiber gets about a quarter of the laser's power either way; what it changes is the out/ref ratio at the peak, 0.67 instead of 0.20, since the reference photodiode sits after it.
  • The play in the hex couplings matters. One degree of play is about 9 microsteps, a third of the single-mode peak's width. Each line search in the routine therefore approaches its points from one side.

The numbers rest on estimates to replace with bench measurements, all set in tools/bench_twin/bench.py and optics.py:

EstimateValue usedHow to measure
Adjuster lever arm17.3 mm (from the 24.5 mm motor spacing)Scan M2X across the peak; the width scales with it
Play per hex coupling1 degree (9 microsteps)Hysteresis test: approach the same point from both sides
Laser beam7 x 3 mm across (taken as the 1/e^2 width)Camera or knife edge
Fiber mode4.2 um across (630HP)Datasheet
Lens clear aperture5 mmThe lens listing
Beamsplitter, laser power, polarizer setting50/50, 0.9 mW, 30%Photodiode volts

The banner at the top of this page replays one of these runs: M1 knocked 1.5 mrad on the single-mode fiber, recovered in 17 s. The figures are drawn by the scripts in docs/images/src; the banner and the Auto-align figure run the twin to get their numbers.

ROS 2 on the Jetson

host/ros2_ws holds ROS 2 Humble packages for the Jetson: a driver node that puts the ESP32 (or the simulator) on ROS topics, services and actions, with Align as an action; a node that finds the laser spot on the OV9281; and launch files. They use tools/bench_link.py and tools/bench_twin directly, so they align the same way the test panel does. Setup and usage: host/ros2_ws/README.md.

text
ros2 launch optics_bench_bringup bench.launch.py                          # on the simulator
ros2 launch optics_bench_bringup bench.launch.py port:=/dev/optics_bench  # on the bench

Roadmap

The laser, all four mirror motors and both photodiodes (on hand-wired amplifiers for now) work on the bench, and first fiber coupling by hand is under way. The PCBs are designed but not ordered yet. Auto-align and the ROS 2 packages have run only against the bench twin so far, and the ROS 2 packages haven't run on the Jetson, the ESP32 or the camera yet.

  • Bench CAD in Onshape: printed base, motor-mirror assemblies, optics mounts (cad/)
  • Firmware for the laser, the four mirror motors and both photodiodes, and the test panel, running on the bench
  • Bench twin and Auto-align, tested in simulation over hundreds of knocks
  • ROS 2 Humble packages, run against the simulator
  • Control board and photodiode amp PCBs designed, with Gerbers ready (electronics/pcb)
  • Phase 1, beam steering: the camera and the two irises put the beam on a known axis by spot position
  • Phase 2, fiber coupling: swap the camera for the lens and fiber and climb to maximum coupled power, multimode first, then single-mode
  • Phase 3, the demo: bump a mirror and watch it recover on the real bench
  • PCBs ordered and built, and ROS 2 running on the Jetson

Stack

LayerBuilt with
Optics635 nm diode laser, 2 mm aperture, crossed polarizers, 1 in mirrors in kinematic mounts, f = 8 mm asphere, FC fiber
Mechanics3D-printed mounts and base designed in Onshape; NEMA 8 steppers, brass couplers and hex rods on 100 TPI adjusters
ElectronicsESP32 Feather V2, TMC2209 drivers, ADS1115 and BPW34 photodiodes on MCP6002 amps; KiCad 10 boards generated from Python
FirmwareC++ Arduino IDE sketch on the ESP32: TMCStepper, AccelStepper, plain-text serial protocol
DesktopPython, PySide6 and pyserial: the dark-mode test panel
SimulationPython and numpy: Gaussian-beam coupling, motors with play, photodiodes, and the Aligner
RoboticsROS 2 Humble on a Jetson: driver node with Align and MoveTo actions, v4l2_camera and a beam-spot node

Repository layout

text
cad/
├── assemblies/            the whole bench as one STEP from Onshape, and its README
├── parts/pcb/             STEP models and 3D renders of the two PCBs
└── print/, vendor/        placeholders for print-ready files and purchased-part models
docs/
├── bom/                   parts list: bom.csv, and the README tools/make_bom_md.py generates from it
└── images/                README figures; images/src/ holds the scripts that draw the SVGs
electronics/
├── wiring.md, wiring.svg  pin table and wiring diagram for the Feather, drivers, laser, ADC and amps
├── system_wiring.svg      every cable on the bench
└── pcb/                   KiCad projects (control board, photodiode amp), their generator and fab outputs
firmware/optics_bench/     Arduino IDE sketch for the ESP32
├── optics_bench.ino       setup() and loop()
├── config.h               pin map, bus addresses, motor limits
└── src/                   motion (drivers, soft limits), sensing (ADS1115), laser, comms (protocol)
host/ros2_ws/              ROS 2 Humble workspace for the Jetson: driver, camera, interfaces, bringup
tools/
├── test_gui.py            the bench test panel
├── bench_link.py          serial and simulator links to the controller, shared by the panel and ROS
├── bench_twin/            the bench simulator and the Aligner
├── twin.py                trials, coupling ceiling, landscape figure
├── tests/                 unit tests for the twin and the Aligner
└── make_bom_md.py         writes docs/bom/README.md from bom.csv

Parts

31
QtyValueFootprintReferences
4100uF 25VCapacitor_THT:CP_Radial_D6.3mm_P2.50mmC1, C2, C3, C4
4M3MountingHole:MountingHole_3.2mm_M3H1, H2, H3, H4
112V INTerminalBlock_Phoenix:TerminalBlock_Phoenix_MKDS-1,5-2-5.08_1x02_P5.08mm_HorizontalJ5
112V IN 5.5x2.1Connector_BarrelJack:BarrelJack_HorizontalJ6
112V ON (green)LED_THT:LED_D3.0mmD3
11N5822Diode_THT:D_DO-201AD_P15.24mm_HorizontalD1
11kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR1
14.7kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR2
1470uF 25VCapacitor_THT:CP_Radial_D10.0mm_P5.00mmC5
1ADS1115 (0x48)optics_bench:Adafruit_ADS1115_SocketA2
1ESP32 Feather V2optics_bench:Adafruit_Feather_ESP32_V2_SocketA1
1LaserConnector_JST:JST_XH_B3B-XH-A_1x03_P2.50mm_VerticalJ7
1MF-RHT200Fuse:Fuse_Bourns_MF-RHT200F1
1P6KE18CADiode_THT:D_DO-15_P10.16mm_HorizontalD2
1PD outputConnector_JST:JST_XH_B3B-XH-A_1x03_P2.50mm_VerticalJ9
1PD referenceConnector_JST:JST_XH_B3B-XH-A_1x03_P2.50mm_VerticalJ8
1TMC2209 M1X (addr 0)optics_bench:Adafruit_TMC2209_SocketU1
1TMC2209 M1Y (addr 1)optics_bench:Adafruit_TMC2209_SocketU2
1TMC2209 M2X (addr 2)optics_bench:Adafruit_TMC2209_SocketU3
1TMC2209 M2Y (addr 3)optics_bench:Adafruit_TMC2209_SocketU4
1Test (Analog Discovery)Connector_PinHeader_2.54mm:PinHeader_1x10_P2.54mm_VerticalJ10
1VM M1XConnector_JST:JST_XH_B2B-XH-A_1x02_P2.50mm_VerticalJ1
1VM M1YConnector_JST:JST_XH_B2B-XH-A_1x02_P2.50mm_VerticalJ2
1VM M2XConnector_JST:JST_XH_B2B-XH-A_1x02_P2.50mm_VerticalJ3
1VM M2YConnector_JST:JST_XH_B2B-XH-A_1x02_P2.50mm_VerticalJ4

More from CoraBeanz/ROS-Optics-Bench

1
  • 2 layers34.3 × 25.4 mmPd amp, the printed circuit board in 3D

    Pd amp

    CoraBeanz/ROS-Optics-Bench

    A mostly 3D-printed optical bench that couples a 635 nm laser into an optical fiber by itself. Knock a mirror out of line and four stepper-driven adjusters steer the beam back to peak coupling, with no hands on the…

    9 parts2

Similar boards

  • 2 layers123.5 × 112.1 mmJX8P PSU, the printed circuit board in 3D

    JX8P PSU

    calphool/JX8P_PSU

    Replacement power supply for Roland JX8P

    32 partsMIT
  • 2 layers92 × 96 mmPrecond, the printed circuit board in 3D

    Precond

    liubo817/SPRO4

    49 parts
  • 2 layers100 × 197.6 mmPsu breakout, the printed circuit board in 3D

    Psu breakout

    techana/psu-breakout

    ATX/AT PSU breakout boards — passive 2-layer PCB with banana jacks for bench testing of vintage and modern PC power supplies

    100 parts
  • 2 layers137 × 89 mmOVHD Mainboard, the printed circuit board in 3D

    OVHD Mainboard

    stefanofinetti/MF_OverHead_Panel

    Complete project for the Airbus A319/320/321/330 OverHead Panel

    127 parts5GPL-3.0
  • 2 layers44.5 × 46.9 mmOSO SWAT B1-jig, the printed circuit board in 3D

    OSO SWAT B1-jig

    joeycastillo/Sensor-Watch

    A board replacement for the classic Casio F-91W wristwatch

    31 parts2.1k
  • 2 layers65 × 30 mmRgb to hdmi, the printed circuit board in 3D

    Rgb to hdmi

    hoglet67/RGBtoHDMI

    Bare-metal Raspberry Pi project that provides pixel-perfect sampling of Retro Computer RGB/YUV video and conversion to HDMI

    31 parts1kGPL-3.0
  • 2 layers191 × 98.5 mmMacroKeypad, the printed circuit board in 3D

    MacroKeypad

    hackclub/OnBoard

    💡 Join 1,000 teenagers and make your first PCB with a $100 grant!

    31 parts915
  • 2 layers39 × 45.2 mmCH32V003F4P6-R0-1v1, the printed circuit board in 3D

    CH32V003F4P6-R0-1v1

    openwch/ch32v003

    CH32V003 is an ultra-cheap RISC-V MCU with 2KB SRAM, 16KB flash, and up to 18 GPIOs that sells for under $0.10

    31 parts599

Questions

How big is the Control board PCB?

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

What parts does the Control board use?

31 parts, built around the MF-RHT200-0 and P6KE18CA. 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 Control board KiCad files?

From the CoraBeanz/ROS-Optics-Bench repository on GitHub, at the commit this page was made from: the board is electronics/pcb/control_board/control_board.kicad_pcb and its schematic electronics/pcb/control_board/control_board.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Control board design in my own project?

Its repository states no licence, so its author keeps all rights: ask CoraBeanz before reusing the design.