
Power board
VeeT23/SPECTRAL
Performance line following robot submitted to Southwork Robotics 2026

Performance line following robot submitted to Southwork Robotics 2026
SPECTRAL is an open-source printed circuit board by VeeT23, from the VeeT23/SPECTRAL repository on GitHub, published under the GPL-3.0 licence. It is a 2-layer board of 60 × 40 mm with 56 parts on 50 nets, routed with 392 tracks and 67 vias.
It is built around the ATA6561-GAQW-N and BSS138. Its parts include 18 resistors, 13 capacitors, 12 connectors, 2 ICs and 2 transistors. It belongs with the robots and motor control boards and the ESP32 boards of this library.
Short description of the embedded system and what it does.
SPECTRAL is a performance line following robot
| Component | Part Number | Description |
|---|---|---|
| MCU | ESP32-WROOM-32UE | Main microcontroller |
| Orientation Sensor | BNO055 | 9-DoF absolute orientation sensor with accelerometer, gyroscope, and magnetometer |
| Motor Controller | ODrive Micro | 100 W BLDC motor controller |
| Motor | Flash Hobby D4215 | 4215 650 KV BLDC motor, 3S–6S |
| CAN Transceiver | ATA6561 | CAN transceiver for motor controller communication |
| GPIO | Function | Interface | Notes |
|---|---|---|---|
| 16 | A0 | Sensor Address | Sensor address select |
| 17 | A1 | Sensor Address | Sensor address select |
| 18 | A2 | Sensor Address | Sensor address select |
| 32 | S0 | Sensor Output | Sensor output |
| 33 | S1 | Sensor Output | Sensor output |
| 34 | S2 | Sensor Output | Sensor output |
| 35 | S3 | Sensor Output | Sensor output |
| 39 | S4 | Sensor Output | Sensor output |
| 19 | CAN_STBY | CAN | CAN transceiver standby control |
| 4 | CAN_RX | CAN | CAN receive |
| 5 | CAN_TX | CAN | CAN transmit |
| 22 | SDA | I2C | I2C data |
| 21 | SCL | I2C | I2C clock |
| 25 | BUZZER | GPIO | Buzzer control |
| 26 | NEOPIXEL | GPIO | Exposed on board; currently unused |
| 27 | FAN_PWM | PWM | Exposed on board; currently unused |
SPECTRAL/
├── firmware/
│ ├── common/
│ ├── control_station_firmware/
│ └── spectral_firmware/
├── hardware/
│ ├── main_board/
│ ├── power_module/
│ └── sensor_module/
├── .gitignore
└── README.md| Parameter | Value | Description |
|---|---|---|
| Control Frequency | 1000 Hz | Main control loop frequency |
| Display Update Period | 40 ms | Period between display updates |
| Wheel Spacing | 104 mm | Distance between drive wheels |
| Wheel Diameter | 60 mm | Drive wheel diameter |
| Wheel Circumference | 0.1885 m | Calculated wheel circumference |
| Line Following Kp | 1.0 | Proportional gain |
| Line Following Ki | 0.01 | Integral gain |
| Line Following Kd | 0.01 | Derivative gain |
| Number of Sensor Modules | 5 | Number of IR sensor modules |
| Sensors per Module | 8 | Number of sensors on each module |
| Total IR Sensors | 40 | Total number of IR sensors |
| IR Threshold | 2000 | Sensor threshold used for line detection |
| Controller MAC | D8:3B:DA:46:57:80 | MAC address of the remote controller |
| Radio RX Timeout | 1000 ms | Maximum time without receiving controller data |
| Telemetry Frequency | 120 Hz | Telemetry transmission frequency |
| Radio Debug | Disabled | Enables/disables radio debug output |
| CAN Bitrate | 500 kbit/s | CAN bus communication speed |
| CAN TX Timeout | 40 ms | Maximum time to wait for CAN transmission |
| Serial Baud Rate | 115200 | Serial communication baud rate |
| ODrive Heartbeat Timeout | 200 ms | Maximum time without receiving an ODrive heartbeat |
| Motors Enabled | Yes | Enables motor operation |
The following CAN command IDs are used to communicate with the ODrive motor controller:
| Command | CAN ID | Description |
|---|---|---|
| Heartbeat | 0x01 | ODrive heartbeat |
| Emergency Stop | 0x02 | Trigger emergency stop |
| Set Axis State | 0x07 | Change ODrive axis state |
| Get Encoder Estimate | 0x09 | Request encoder position/velocity estimate |
| Set Input Velocity | 0x0D | Set motor velocity command |
| Clear Errors | 0x18 | Clear ODrive errors |
| State | Value | Description |
|---|---|---|
| Idle | 1 | Motor disabled / idle |
| Closed Loop | 8 | Motor enabled for closed-loop control |
Spectral uses a 450 mAh 3s 75C lipo Running power is unknown however the circuit supports up to 10A continous. Idle power is measured to be ~140ma
WARNING: AS IT STANDS CURRENTLY, SPECTRAL LACKS OVER DISCHARGE PROTECTION, MONITOR BATTERY VOLTAGE BETWEEN RUNS TO AVOID DAMAGE TO THE BATTERY
This project is closed, however I will add documentation/clean up issues on request.
This project is licensed under the GNU GENERAL PUBLIC LICENSE.
Veronica Tobias
| Qty | Value | Footprint | References |
|---|---|---|---|
| 9 | 100 | Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder | R3, R4, R5, R6, R7, R15, R16, R17, R18 |
| 9 | 4.7K | Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder | R1, R2, R8, R9, R10, R11, R12, R13, R14 |
| 5 | 1nf | Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolder | C3, C4, C5, C6, C7 |
| 3 | 0.1uf | Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolder | C1, C8, C10 |
| 3 | 10uf | Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolder | C2, C9, C11 |
| 2 | 100uf | Capacitor_THT:CP_Radial_D5.0mm_P2.00mm | C12, C13 |
| 2 | BSS138 | Package_TO_SOT_SMD:SOT-23 | Q1, Q4 |
| 1 | 3V3 | TestPoint:TestPoint_Pad_D2.0mm | TP3 |
| 1 | 5V | TestPoint:TestPoint_Pad_D2.0mm | TP4 |
| 1 | ATA6561-GAQW-N | Package_SO:SOIC-8_3.9x4.9mm_P1.27mm | U2 |
| 1 | BOOT | SW_PTS636_CNK:SW_PTS636_CNK | SW1 |
| 1 | BOOT | TestPoint:TestPoint_Pad_D2.0mm | TP1 |
| 1 | Buzzer | PS1240P02CT3:XDCR_PS1240P02CT3 | BZ1 |
| 1 | CAN | Connector_JST:JST_GH_SM04B-GHS-TB_1x04-1MP_P1.25mm_Horizontal | J6 |
| 1 | EN | TestPoint:TestPoint_Pad_D2.0mm | TP2 |
| 1 | ESP32-WROOM-32UE_M113EH6400UH3Q0_ | RF_Module:ESP32-WROOM-32UE | U1 |
| 1 | GND | TestPoint:TestPoint_Keystone_5005-5009_Compact | TP5 |
| 1 | IMU | Connector_JST:JST_GH_SM04B-GHS-TB_1x04-1MP_P1.25mm_Horizontal | J7 |
| 1 | NEOPIXEL | Connector_JST:JST_GH_SM03B-GHS-TB_1x03-1MP_P1.25mm_Horizontal | J12 |
| 1 | OLED | Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical | J8 |
| 1 | PWM | Connector_JST:JST_GH_SM03B-GHS-TB_1x03-1MP_P1.25mm_Horizontal | J11 |
| 1 | Power | Connector_JST:JST_GH_BM04B-GHS-TBT_1x04-1MP_P1.25mm_Vertical | J9 |
| 1 | RED | LED_SMD:LED_0603_1608Metric_Pad1.05x0.95mm_HandSolder | D1 |
| 1 | RESET | SW_PTS636_CNK:SW_PTS636_CNK | SW2 |
| 1 | Sensor 1 | Connector_JST:JST_GH_SM06B-GHS-TB_1x06-1MP_P1.25mm_Horizontal | J1 |
| 1 | Sensor 2 | Connector_JST:JST_GH_SM06B-GHS-TB_1x06-1MP_P1.25mm_Horizontal | J2 |
| 1 | Sensor 3 | Connector_JST:JST_GH_SM06B-GHS-TB_1x06-1MP_P1.25mm_Horizontal | J3 |
| 1 | Sensor 4 | Connector_JST:JST_GH_SM06B-GHS-TB_1x06-1MP_P1.25mm_Horizontal | J4 |
| 1 | Sensor 5 | Connector_JST:JST_GH_SM06B-GHS-TB_1x06-1MP_P1.25mm_Horizontal | J5 |
| 1 | UART | Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical | J10 |
It measures 60 × 40 mm and has 2 copper layers, 1.6 mm thick.
56 parts, built around the ATA6561-GAQW-N and BSS138. 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.
From the VeeT23/SPECTRAL repository on GitHub, at the commit this page was made from: the board is hardware/main_board/main.kicad_pcb and its schematic hardware/main_board/main.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Its repository publishes it under the GPL-3.0 licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).

VeeT23/SPECTRAL
Performance line following robot submitted to Southwork Robotics 2026

VeeT23/SPECTRAL
Performance line following robot submitted to Southwork Robotics 2026


bartkepl/CanGeigerProbe
Polowa sonda promieniowania jonizującego z miniaturową lampą Geigera-Müllera, komunikująca się cyfrowo przez CAN 2.0B.

bartkepl/CanGnssNode
Polowy węzeł pozycyjny z modułem GNSS Quectel L76-L (GPS/GLONASS/Galileo/QZSS) i czujnikiem orientacji (akcelerometr + magnetometr), komunikujący się cyfrowo przez CAN 2.0B.


doppelgrau/esp32-f9p-io-board
An IO-PCB (two motor-driver/H-bridge, CAN, RS232, ADS1115, relay, ethernet, ardusimple f9p compatible connector) with an ESP32 for 12V power, three 15V tolerant analog inputs, three 5V tolerant inputs.

FL0WL0W/ESP32C3-CAN-Extender
This module uses an ESP32C3 with WiFi and BLE. It has 3 configurable outputs (5V push pull, Open Drain, 12V pullup), 4 analog or digital inputs, CAN transceiver, and an automotive power supply so it can be installed…

Mage-Control-Systems-Ltd/CANBOB
A breakout board that enables USB or SPI to CAN communication using the MCP2515.
