
Vibecheck sensorboard
harrislab-brown/VibeCheck
VibeCheck is a low-cost and easy-to-use vibration measurement system developed for the course Vibration of Mechanical Systems (ENGN 1735/2735) at Brown University.

VibeCheck is a low-cost and easy-to-use vibration measurement system developed for the course Vibration of Mechanical Systems (ENGN 1735/2735) at Brown University.
Vibecheck mainboard is an open-source printed circuit board by harrislab-brown, from the harrislab-brown/VibeCheck repository on GitHub, published under the CC-BY-SA-4.0 licence. It is a 4-layer board of 69.5 × 69.5 mm with 206 parts on 170 nets, routed with 1,619 tracks and 512 vias.
It is built around the RC4580N, TPA6111A2D and MT9700, with the USBLC6-2SC6, WS2812B-2020 and BSS138 among its other parts. Its parts include 64 capacitors, 54 resistors, 25 diodes, 9 connectors and 6 ICs. It belongs with the computers and single-board computers boards and the STM32 boards of this library.
VibeCheck is a low-cost and easy-to-use vibration measurement system developed for the course Vibration of Mechanical Systems (ENGN 1735/2735) at Brown University. While many of the features of VibeCheck are tailored specifically to meet the needs of the course laboratory component, the hardware offers a robust solution for interrogating a wide range of vibrating mechanical systems.
Key features:
All communication between a host computer application and the MCU uses the onboard USB-C port and standard serial protocol. There are two main ways to communicate with the board.
Graphical web app: VibeCheck_Web is a companion web application for communicating with the VibeCheck hardware. It provides a simple interface to access all of the commonly used functions of the device. This includes plotting real-time acceleration data measured by the sensors and logging incoming data to a file in CSV format.
Serial Protocol: Users can also communicate with the VibeCheck hardware directly using the serial interface. A complete list of the available commands and examples of their use can be found in the /Firmware/README file. Since the protocol uses plain text encoding, users should be able to easily extend the behavior of the VibeCheck (e.g. to perform frequency sweeps) using simple scripts in languages like Python or MATLAB.
The hardware was designed using KiCad, an open source electronics design tool. All design and manufacturing files can be found in the /VibeCheck/Hardware folder. We ordered the boards from JLCPCB (Aug. 2024) and the cost was $25 per main board (qty. 10) and $1.60 per sensor board (qty. 50).
There are two boards in this project, the main board that acts as a data acquisition and communication hub and sensor boards that can be used to measure acceleration and angular rate. Each mainboard can connect to three sensor boards.
Microcontroller: This project uses an STM32H723 microcontroller. This high performance MCU uses an Arm-Cortex M7 processor clocked at frequencies up to 550 MHz. It has 1MB of embedded flash memory and 564kB of SRAM.
USB: The microcontroller has an integrated USB-FS physical layer. Communication to the hardware from a host computer uses the USB interface.
Sensor communication: Three SPI peripherals from the MCU are broken out to connectors. Thin cables carry SPI data between the mainboard and the sensor baord.
Waveform generator: The MCU's stereo digital to analog output is used as a waveform generator. To buffer and boost the signal coming from the ADC pins, the board uses a headphone amplifier chip to drive a 3.5mm stereo headphone jack. A mute button on the board enables / disables the headphone amplifier chip.
Strobe LEDs: The board has 12 high-power white LEDs to act as a strobe. The strobe LEDs are driven using hardware timers on the MCU with logic-level FETs to switch the LED current.
Status LEDs: The board has three addressible RGB LEDs per sensor channel. These LEDs are used to display status updates and visually indicate the current acceleration measured by the sensor boards.
GPIO: A collection of MCU pins have been broken out to a GPIO header. This header includes power and ground pins, unused timer channels, and two digital to analog (DAC) pins.
I2C: A 5V I2C interface is broken out to a connector on the board. This connector follows the specifications used by the Adafruit STEMMA QT and SparkFun Qwiic line of boards.
Debug: Programming and debugging of the board is accomplished using an ST-Link V3 Minie. A Tag-Connect tc2030-nl footprint and associated debugger cable is used to connect the ST-Link to the board.
The sensor boards use the LSM6DS3 accelerometer chip. This MEMS device designed for mobile phone applications has a 3-axis accelerometer with selectable measurement ranges from +/-2 g to +/-16 g and variable sample rates up to 6.6kHz. The sensor also has an onboard 3-axis angular rate sensor. The sensor board connects to the main board with an 8-pin JST-SH cable which provies power to the sensor board and enables communication. The sensor board can be mounted to the vibrating system of interest using 2x M3 screws with 25 mm hole spacing. Or, for the most compact form factor, the mounting holes can be removed by breaking the mouse bites and the sensor board can be mounted directly with adhesive or to an adhesive-backed magnet.
The microcontroller firmware for this project is written in C. The STM32CubeIDE development environment is used to write, flash, and debug code for this project. A combination of ST's HAL and direct register maniulation are used to interface with the hardware peripherals depending on the performance requirements of each section of code. The firmware was designed using a quasi-object oriented approach in which each subsystem (e.g. strobe, waveform generator, etc.) is represented by a struct. Interface methods are emulated using functions which take a pointer to the struct to which they pertain.
The serial protocol is implemented using a text-based shell class based on the command pattern. Concrete input and output handlers can be defined and registered with the shell to extend the serial protocol functionality. Each handler has knowledge of both the shell and the class that it affects, but otherwise the shell and the lower-level classes for each VibeCheck subsystem are decoupled.
The SPI driver for the sensor chips was written following the datasheet. Acceleration data is read in high-priority interrupts which are triggered by the data ready pins of the sensor chips, ensuring accurate time stamps. The raw sensor data is double-buffered before conversion to text encoding. Transmitting the acceleration as human-readable strings is a bottleneck in the data acquisition system but we opted for this design due to its superior ease of use. The firmware could be adapted to favor performance by transmitting the raw binary data from the sensors over USB using COBS encoding to delimit packets.
| Qty | Value | Footprint | References |
|---|---|---|---|
| 27 | 100n | Capacitor_SMD:C_0402_1005Metric | C202, C203, C205, C207, C208, C209, C210, C211, C301, C308, C401, C402, C403, C404, C405, C406 +11 |
| 21 | TestPoint | TestPoint:TestPoint_Pad_D1.0mm | TP401, TP402, TP403, TP404, TP405, TP406, TP407, TP408, TP409, TP410, TP411, TP412, TP413, TP1001, TP1002, TP1003 +5 |
| 17 | 10u | Capacitor_SMD:C_0805_2012Metric | C201, C302, C303, C305, C1002, C1003, C1004, C1005, C1006, C1007, C1008, C1009, C1010, C1011, C1012, C1013 +1 |
| 14 | 10k | Resistor_SMD:R_0402_1005Metric | R201, R202, R203, R204, R206, R207, R208, R503, R506, R905, R912, R1014, R1016, R1018 |
| 12 | 30 | Resistor_SMD:R_0805_2012Metric | R1001, R1002, R1003, R1004, R1005, R1006, R1007, R1008, R1009, R1010, R1011, R1012 |
| 12 | LED_WHT | footprints:LED-SMD_L4.0-W1.50_HL-A-4014H421W-S1-HR3-DM-HL | D1001, D1002, D1003, D1004, D1005, D1006, D1007, D1008, D1009, D1010, D1011, D1012 |
| 11 | 22u | Capacitor_SMD:C_0805_2012Metric | C304, C309, C310, C311, C312, C906, C907, C908, C911, C913, C914 |
| 9 | WS2812B-2020 | LED_SMD:LED_WS2812B-2020_PLCC4_2.0x2.0mm | D401, D402, D403, D404, D405, D406, D407, D408, D409 |
| 7 | 330 | Resistor_SMD:R_0402_1005Metric | R205, R501, R503, R504, R1013, R1015, R1017 |
| 4 | 15k | Resistor_SMD:R_0603_1608Metric | R903, R906, R907, R910 |
| 4 | 2u2 | Capacitor_SMD:C_0805_2012Metric | C204, C206, C909, C910 |
| 4 | 80 | Resistor_SMD:R_0603_1608Metric | R901, R902, R908, R909 |
| 3 | 1k | Resistor_SMD:R_0402_1005Metric | R302, R502, R505 |
| 3 | 22 | Resistor_SMD:R_0402_1005Metric | R401, R402, R403 |
| 3 | BSS138 | Package_TO_SOT_SMD:SOT-23 | Q201, Q202, Q203 |
| 3 | Conn_01x08_Socket | Connector_JST:JST_SH_SM08B-SRSS-TB_1x08-1MP_P1.00mm_Horizontal | J601, J701, J801 |
| 3 | NTR4170N | Package_TO_SOT_SMD:SOT-23 | Q1001, Q1002, Q1003 |
| 3 | SW_Push | Button_Switch_SMD:SW_SPST_PTS645 | SW201, SW501, SW502 |
| 2 | 12p | Capacitor_SMD:C_0402_1005Metric | C212, C213 |
| 2 | 1u | Capacitor_SMD:C_0603_1608Metric | C306, C915 |
| 2 | 5K1 | Resistor_SMD:R_0402_1005Metric | R303, R304 |
| 2 | 5k9 | Resistor_SMD:R_0603_1608Metric | R904, R911 |
| 2 | LED_RED | LED_SMD:LED_0603_1608Metric | D501, D502 |
| 1 | 100k | Resistor_SMD:R_0603_1608Metric | R301 |
| 1 | 150u | Capacitor_SMD:CP_Elec_6.3x7.7 | C1001 |
| 1 | 24MHz | Crystal:Crystal_SMD_3225-4Pin_3.2x2.5mm | Y201 |
| 1 | 2u2 | Inductor_SMD:L_1008_2520Metric | L302 |
| 1 | 39n | Inductor_SMD:L_0603_1608Metric | L301 |
| 1 | 47 | Resistor_SMD:R_0402_1005Metric | R209 |
| 1 | 4k7 | Resistor_SMD:R_0603_1608Metric | R305 |
| 1 | AMS1117-3V3 | Package_TO_SOT_SMD:SOT-223-3_TabPin2 | U303 |
| 1 | Conn_01x04_Socket | Connector_JST:JST_SH_SM04B-SRSS-TB_1x04-1MP_P1.00mm_Horizontal | J201 |
| 1 | Conn_02x06 | Connector_PinHeader_2.54mm:PinHeader_2x06_P2.54mm_Vertical | J202 |
| 1 | DAC TRG | TestPoint:TestPoint_Pad_D1.0mm | TP202 |
| 1 | FILT1 BYPASS | Jumper:SolderJumper-3_P1.3mm_Bridged12_RoundedPad1.0x1.5mm | JP902 |
| 1 | FILT2 BYPASS | Jumper:SolderJumper-3_P1.3mm_Bridged12_RoundedPad1.0x1.5mm | JP901 |
| 1 | GPIO_timing1 | TestPoint:TestPoint_Pad_D1.0mm | TP203 |
| 1 | GPIO_timing2 | TestPoint:TestPoint_Pad_D1.0mm | TP204 |
| 1 | LED_GRN | LED_SMD:LED_0603_1608Metric | D301 |
| 1 | LOGO | LOGO | G*** |
| 1 | MT9700 | Package_TO_SOT_SMD:SOT-23-5 | U302 |
| 1 | PH-313D | footprints:AUDIO-SMD_PJ-313D-2 | J901 |
| 1 | RC4580 | Package_SO:SOIC-8-1EP_3.9x4.9mm_P1.27mm_EP2.41x3.81mm | U901 |
| 1 | RGBLED_5V | TestPoint:TestPoint_Pad_D1.0mm | TP201 |
| 1 | STM32H723VGTx | Package_QFP:LQFP-100_14x14mm_P0.5mm | U201 |
| 1 | Schottky Diode | Diode_SMD:D_SOD-323 | D201 |
| 1 | TC2030-NL | Connector:Tag-Connect_TC2030-IDC-NL_2x03_P1.27mm_Vertical | J204 |
| 1 | TPA6111A2 | Package_SO:SOIC-8-1EP_3.9x4.9mm_P1.27mm_EP2.29x3mm | U902 |
| 1 | TP_3V3A | TestPoint:TestPoint_Pad_D1.0mm | TP304 |
| 1 | TP_5V | TestPoint:TestPoint_Pad_D1.0mm | TP302 |
| 1 | TP_5VA | TestPoint:TestPoint_Pad_D1.0mm | TP305 |
| 1 | TP_USB+ | TestPoint:TestPoint_Pad_D1.0mm | TP11 |
| 1 | TP_USB- | TestPoint:TestPoint_Pad_D1.0mm | TP12 |
| 1 | USBLC6-2SC6 | Package_TO_SOT_SMD:SOT-23-6 | U301 |
| 1 | USB_C_Receptacle_USB2.0_16P | Connector_USB:USB_C_Receptacle_GCT_USB4105-xx-A_16P_TopMnt_Horizontal | J301 |
| 1 | VIBE_CHECK_LOGO | footprints:VIBE_CHECK_LOGO | G*** |
| 1 | VIBE_CHECK_LOGO_SILKSCREEN | footprints:VIBE_CHECK_LOGO_SILKSCREEN | G*** |
| 1 | VIBE_RESPONSE_SILKSCREEN | footprints:VIBE_RESPONSE_SILKSCREEN | G*** |
| 1 | debug_conn | Connector_PinHeader_2.54mm:PinHeader_2x06_P2.54mm_Vertical_SMD | J501 |

harrislab-brown/VibeCheck
VibeCheck is a low-cost and easy-to-use vibration measurement system developed for the course Vibration of Mechanical Systems (ENGN 1735/2735) at Brown University.


manhoosbilli1/tpa6110-stereo-amp-input-router
Stereo audio amplifier (TPA6110A2) with 74AHC1G66 analog input switching and op-amp signal conditioning

c3lingo/c3lingo-interpreter-unit
A customized audio mixer and personal monitoring console for simultaneous interpreters.

zephray/NekoInk
Next gen. of NekoCal: An open-source hackable and programmable e-paper display


yminp/dj-filter-fx
A voltage-controlled DJ filter unit with LFO-like envelope function


It measures 69.5 × 69.5 mm and has 4 copper layers, 1.6 mm thick.
206 parts, built around the RC4580N, TPA6111A2D, MT9700 and USBLC6-2SC6. 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 harrislab-brown/VibeCheck repository on GitHub, at the commit this page was made from: the board is Hardware/vibecheck_mainboard/vibecheck_mainboard.kicad_pcb and its schematic Hardware/vibecheck_mainboard/ACCEL_LSM6DS3.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Its repository publishes it under the CC-BY-SA-4.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).