Skip to the content
PCBKitNew board
2 layers114.3 × 102.9 mmTruss PCB, the printed circuit board in 3D

The truss remote laboratory has been designed for use with Structural Engineering and Engineering Design courses at the University of Edinburgh.

Size
114.3 × 102.9 mm
Copper layers
2
Thickness
1.6 mm
Parts
208
Nets
167
Pads
685
Tracks, vias
1,952, 282
Pours
2
Routed
Yes
KiCad
KiCad 7 (file 20221018)
Created
30 Aug 2022
Updated
14 Sep 2026

Overview

Truss PCB is an open-source printed circuit board by practable, from the practable/truss repository on GitHub, published under the AGPL-3.0 licence. It is a 2-layer board of 114.3 × 102.9 mm with 208 parts on 167 nets, routed with 1,952 tracks and 282 vias.

It is built around the HX711, LM2596S-ADJ and TXS0108EPW, with the AMS1117-3.3, AMS1117-5.0 and BC807 among its other parts. Its parts include 51 resistors, 27 capacitors, 22 connectors, 13 ICs and 11 diodes. It belongs with the AVR (ATmega, ATtiny) boards of this library.

Main components

8

README

README.md

truss

Introduction

The truss remote laboratory has been designed for use with Structural Engineering and Engineering Design courses at the University of Edinburgh. The truss consists of 6 members, each with a full-bridge strain gauge arrangement using two biaxial strain gauges (Kyowa KFGS-2-120-D16-11). Strain gauge voltages are converted to digital signals using the HX711 ADC and this HX711 library is used to read and tare the gauges. The truss is loaded using a linear servo.

truss

Contents

UI

User Interfaces have been designed with Vue3.js and built with Vite. There are currently three distinct versions of the UI that are built for production:

  • default: all data and components available on the user interface.
  • no-force: force data is hidden for student calculation from strain data.
  • open-day: simplified control interface for demonstrations.

See here for details of the differences.

Changing control interface on UI

The differences in the above UI versions amount to very simple changes in the Vue files.

The load force can be controlled with either a slider or simple buttons (as well experimental versions of a skeuomorphic display and gamepad control). Simply update the loadControlVersion parameter in App.vue.

text
loadControlVersion: 1,    //0 => input field, 1=> slider, 2=>simulation of physical knob, 3 => direct commands typed, 4 => GamePad, 5 => open day, simple buttons

To change whether the load force is displayed or the theoretical strains are available, update the boolean parameters in src/modules/uiStore.js:

text
show_force: false,       //should force values be displayed on the UI
show_theory: false,      //should the theoretical values component be available on the UI

Firmware

The truss remote lab has been designed around the Arduino Nano 33 IoT. The firmware uses a state machine with 11 states, including reading, writing, taring and resetting strain gauges and moving the linear actuator. A single microcontroller performs both reading and writing of data. The state machine will remain in the READ state until a user command to change state. Upon performing that state the state machine will return to READ. The required libraries are included here.

The firmware sends and receives JSON messages, eg:

Mode control, received from UI through Serial (for all commands see SerialCommands:

text
{"set": "position", "to": value} 
{"set": "mode", "to": "move"} 
{"set": "mode", "to":"tare_all"} 

Sending data to UI through Serial:

text
{"load_cell":"20.0", "gauge_1": "100.0", "gauge_2": "100.0", "gauge_3": "100.0", "gauge_4": "100.0", "gauge_5": "100.0", "gauge_6": "100.0", "state":"1", "pos":"10"}

PCB

truss-pcb

The PCB requires a 12V input and provides output voltages for different components: 10V (load cell excitation voltage), 6V (linear actuator power) and 5V (strain gauge excitation voltage). Details of jumper requirements for setting up the PCB in different modes will be added (TODO).

Hardware

linear-actuator

The Actuonix L16 linear actuator uses the custom library LinearServo for setting its position. It has a 50mm stroke length, but is limited in this remote lab to a maximum of 20% extension (providing around 150N of load on the truss).

Re-calibration procedure

If a strain gauge value no longer reads an acceptable result (within your experimental tolerance) then the scale factor needs to be updated in the firmware.

  • Note the value in micro-strain that the gauge is currently reading (current_value)
  • Note the current scale factor for that gauge (current_factor)
  • Calculate the value that you want it to read based on the load force (new_value)
  • new_factor = current_value*current_factor / new_value

Using the debug UI (or any other means of sending a JSON command through Websocket to the experiment): send the new calibration data:

text
{"set":"cal","to":[2.0,2.1,2.2,2.3,2.4,2.5,2.6],"auth":"foo"}

Using the auth code that you set up initially.

Then reset to the STARTUP state so that the firmware loads the new calibration data:

text
{"set":"state","to":"STATE_STARTUP"}

Parts

208
QtyValueFootprintReferences
27100nCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC1, C2, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19, C20, C21, C22, C23 +11
1710uCapacitor_SMD:CP_Elec_6.3x5.9EC1, EC2, EC3, EC4, EC5, EC6, EC7, EC8, EC10, EC11, EC12, EC13, EC14, EC20, EC21, EC22 +1
14100rResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR4, R5, R9, R10, R14, R15, R19, R20, R24, R25, R29, R30, R34, R35
1410kResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR1, R6, R11, R16, R21, R26, R31, R36, R40, R47, R48, R49, R50, R51
712kResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR2, R7, R12, R17, R22, R27, R32
733kResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR3, R8, R13, R18, R23, R28, R33
7BC807Package_TO_SOT_SMD:SOT-23Q1, Q2, Q3, Q4, Q5, Q6, Q7
7GainJumper:SolderJumper-2_P1.3mm_Bridged_RoundedPad1.0x1.5mmJP2, JP5, JP8, JP11, JP14, JP17, JP21
7HX711Package_SO:SOP-16_4.55x10.3mm_P1.27mmU1, U2, U3, U4, U5, U6, U7
7INB GNDJumper:SolderJumper-3_P1.3mm_Bridged12_RoundedPad1.0x1.5mm_DoubleJoined_SMALLJP3, JP6, JP9, JP12, JP15, JP18, JP24
7IN_BConnector_PinHeader_1.27mm:PinHeader_1x02_P1.27mm_VerticalJ5, J6, J7, J8, J9, J10, J11
6Sample RateJumper:SolderJumper-2_P1.3mm_Bridged_RoundedPad1.0x1.5mmJP4, JP7, JP10, JP13, JP16, JP19
51kResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR37, R43, R44, R45, R46
4LEDDiode_SMD:D_0805_2012Metric_Pad1.15x1.40mm_HandSolderD1, D9, D10, D11
4MountingHole_M3MountingHole:MountingHole_3.2mm_M3_Pad_ViaH1, H2, H3, H4
322uCapacitor_SMD:CP_Elec_6.3x5.9EC17, EC18, EC19
2330rResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR38, R39
28k2Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR41, R42
2GNDConnector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_VerticalJ16, J17
2TXS0108EPWPackage_SO:TSSOP-20_4.4x6.5mm_P0.65mmU8, U9
2pwr_tieNetTie:NetTie-8-15A_1oz_2ozN2, N3
1100uCapacitor_SMD:CP_Elec_10x10EC15
110VConnector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_VerticalJ22
110V PowerDiode_SMD:D_0805_2012Metric_Pad1.15x1.40mm_HandSolderD6
112VConnector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_VerticalJ18
112V PowerDiode_SMD:D_0805_2012Metric_Pad1.15x1.40mm_HandSolderD8
11N5821Diode_SMD:D_SMAD4
133uHInductor_SMD:L_12x12mm_H8mmL1
13AFuse:Fuseholder_Cylinder-5x20mm_Stelvio-Kontek_PTF78_Horizontal_OpenF1
13V3Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_VerticalJ21
13k3Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderRFB2
13n3Capacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderCff1
13v3Jumper:SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mmJP27
13v3 PowerDiode_SMD:D_0805_2012Metric_Pad1.15x1.40mm_HandSolderD3
15VConnector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_VerticalJ20
15vJumper:SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mmJP28
15v PowerDiode_SMD:D_0805_2012Metric_Pad1.15x1.40mm_HandSolderD7
1680uCapacitor_SMD:CP_Elec_10x10EC28
16VConnector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_VerticalJ19
16v PowerDiode_SMD:D_0805_2012Metric_Pad1.15x1.40mm_HandSolderD5
1860rResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderRFB1
1AMS1117-3.3Package_TO_SOT_SMD:SOT-223-3_TabPin2U13
1AMS1117-5.0Package_TO_SOT_SMD:SOT-223-3_TabPin2U12
1Arduino_Nano_v3.xModule:Arduino_NanoA1
1BAJ0BC0FP-E2Package_TO_SOT_SMD:TO-252-2IC1
1BZV55B9V1Diode_SMD:D_MiniMELFD2
1BaseJumper:SolderJumper-2_P1.3mm_Bridged_RoundedPad1.0x1.5mmJP23
1DT0Jumper:SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mmJP30
1DT1Jumper:SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mmJP31
1DT2Jumper:SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mmJP32
1DT3Jumper:SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mmJP33
1DT4Jumper:SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mmJP34
1DT5Jumper:SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mmJP35
1DT6Jumper:SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mmJP36
1DT7Jumper:SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mmJP37
1HV IOConnector_PinHeader_2.54mm:PinHeader_1x05_P2.54mm_VerticalJ15
1IO HeaderConnector_PinHeader_2.54mm:PinHeader_1x08_P2.54mm_VerticalJ13
1IRF5305_PBFPackage_TO_SOT_THT:TO-220-3_VerticalQ8
1LC VsupJumper:SolderJumper-3_P1.3mm_Open_RoundedPad1.0x1.5mm_NumberLabelsJP20
1LIMJumper:SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mmJP38
1LM2596S-ADJPackage_TO_SOT_SMD:TO-263-5_TabPin3U11
1LOGO000_Graphics_Immo:Remote Labs SN BlockG***
1LOGO000_Graphics_Immo:practactable.io_text_80x30G***
1LOGO000_Graphics_Immo:practactable.io_text_20x8G***
1LV IOConnector_PinHeader_2.54mm:PinHeader_1x05_P2.54mm_VerticalJ14
1LimitSwitchConnector_Molex:Molex_KK-254_AE-6410-02A_1x02_P2.54mm_VerticalJ2
1PWMJumper:SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mmJP29
1PWM_CONNJumper:SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mmJP1
1SCKJumper:SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mmJP39
1SampleRateJumper:SolderJumper-2_P1.3mm_Bridged_RoundedPad1.0x1.5mmJP25
1Serial IOConnector_PinHeader_2.54mm:PinHeader_1x05_P2.54mm_VerticalJ12
1ServoConnector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_VerticalJ3
1Truss ConnectionConnector_Dsub:DSUB-37_Female_Vertical_P2.77x2.84mm_MountingHolesJ4
1VFBJumper:SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mmJP22
1V_USBJumper:SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mmJP26
1XT60_60A_maleConnector_AMASS:AMASS_XT60PW-MJ1

Questions

How big is the Truss PCB PCB?

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

What parts does the Truss PCB use?

208 parts, built around the HX711, LM2596S-ADJ, TXS0108EPW and AMS1117-3.3. 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 Truss PCB KiCad files?

From the practable/truss repository on GitHub, at the commit this page was made from: the board is mini-truss-pcb/truss_PCB/truss_PCB.kicad_pcb and its schematic mini-truss-pcb/truss_PCB-backups/TRUSS PCB VERSION 1/actuator_sch.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Truss PCB design in my own project?

Its repository publishes it under the AGPL-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).

More from practable/truss

1
  • 2 layers34.3 × 99.7 mmTruss connector breakout, the printed circuit board in 3D

    Truss connector breakout

    practable/truss

    The truss remote laboratory has been designed for use with Structural Engineering and Engineering Design courses at the University of Edinburgh.

    14 partsAGPL-3.0

Similar boards

  • 4 layers169.7 × 99.1 mmRemoteLabs supervisor PCB, the printed circuit board in 3D

    RemoteLabs supervisor PCB

    practable/supervisor-pcb

    Allow students to program a remote labs experiment themselves, while protecting hardware from damage due to misfunction

    201 parts
  • 2 layers60 × 60 mmHv discharge, the printed circuit board in 3D

    Hv discharge

    reivax-boucoi/PCB_Kicad

    Repo for all my home projects involving PCBs developped with Kicad

    55 parts1
  • 2 layers73 × 54 mmFishCoreBoard v3 3, the printed circuit board in 3D

    FishCoreBoard v3 3

    getriscvyy/divesync-heavy

    A syringe-actuated buoyancy control device developed at the Bio-Inspired Robotics and Controls Lab at University of Houston.

    46 parts1
  • 4 layers309.5 × 145 mmMicro HIL v0.1, the printed circuit board in 3D

    Micro HIL v0.1

    danielsimonreinhardt/microHIL

    microHIL is a self-developed testing device for setting up a basic hardware-in-the-loop environment

    396 partsMIT
  • 2 layers54.4 × 59.1 mmENCODER USB, the printed circuit board in 3D

    ENCODER USB

    Shubham-Khandelwal1/Universal-Robotic-Arm-Driver

    The architecture follows a per-joint control philosophy, where each PCB operates as an independent node responsible for motor control and feedback acquisition, while communicating with a central compute unit (Jetson).

    57 parts
  • 2 layers58.5 × 75 mmCloneless pcb v1, the printed circuit board in 3D

    Cloneless pcb v1

    ThorbenMoos/Cloneless_artifacts

    PCB designs, FPGA controllers, verification collateral and software artifacts related to the Cloneless series of tamper-resistant open-source ASICs

    16 partsGPL-3.0
  • 4 layers203.8 × 99.1 mmISOpower complete bothboards, the printed circuit board in 3D

    ISOpower complete bothboards

    practable/iso-power-pcb

    Remote power control board for ISO experiment containers, used for remote labs projects

    196 partsGPL-3.0
  • 2 layers61.5 × 86.5 mmPico HX711, the printed circuit board in 3D

    Pico HX711

    joshcarter/tensile_test

    Program and data for the testing of tensile strength of 3D printed parts

    32 partsBSD-3-Clause