
Frothfet
hoeken/frothfet
Yarrboard load controller board with current sense, volt sense, fuses, and sender support.

Arduino + MPU6050 vibration monitoring system with threshold detection, Python live plotting, and KiCad PCB design.
STM32 Vibrations Monitor is an open-source printed circuit board by AnooshZ, from the AnooshZ/VibrationMonitor-MPU6050 repository on GitHub, published under the MIT licence. It is a 2-layer board of 45.4 × 36 mm with 44 parts on 66 nets, routed with 351 tracks and 36 vias.
It is built around the MPU-6050, TPS7A2033PDBVR-TP and USBLC6-2SC6. Its parts include 17 capacitors, 9 resistors, 4 ICs, 4 connectors and 2 diodes. It belongs with the STM32 boards of this library.
A real-time vibration monitoring system built around the MPU6050 accelerometer, originally developed using an Arduino UNO and Python, and subsequently redesigned around an STM32F103 microcontroller on a custom-designed PCB.
The project explores embedded systems, sensor interfacing, digital signal processing, PCB design, and hardware debugging.
The original Arduino prototype successfully demonstrated vibration detection, signal filtering, threshold-based LED indication, and real-time Python visualization. The STM32 redesign aims to improve sampling consistency, timing control, and overall system flexibility while providing practical experience developing and validating custom embedded hardware.
Current Status: Custom PCB manufactured, assembled, powered, and successfully programmed. Hardware bring-up completed; STM32 firmware development in progress.
The project began as an experiment in vibration analysis using an Arduino UNO and MPU6050 accelerometer.
The initial implementation acquired accelerometer measurements, processed vibration data, applied filtering, and communicated results to a Python application for real-time visualization and data logging.
Although the prototype worked, I encountered limitations involving sampling consistency, timing accuracy, and flexibility in controlling the underlying hardware.
To address these limitations, I redesigned the system around an STM32F103C8T6 microcontroller and developed my first custom PCB using KiCad.
A major objective throughout this redesign was to learn directly from technical documentation rather than relying heavily on tutorials. This involved studying component datasheets, application notes, and the STM32 reference manual to understand peripheral configuration, clock circuitry, power distribution, communication interfaces, and PCB layout.
| Stage | Status |
|---|---|
| Arduino + MPU6050 prototype | ✅ Complete |
| Vibration detection and filtering | ✅ Complete on Arduino |
| Python visualization and CSV logging | ✅ Complete on Arduino |
| STM32 schematic design | ✅ Complete |
| Custom PCB layout and design-rule verification | ✅ Complete |
| PCB manufacturing and assembly | ✅ Complete |
| Power rail verification | ✅ Complete |
| SWD communication and MCU identification | ✅ Complete |
| STM32 programming and debugging | ✅ Complete |
| Bare-metal GPIO configuration and LED blinking | ✅ Complete |
| External MPU6050 integration | 🔄 Upcoming |
| STM32 I²C firmware | 🔄 Upcoming |
| STM32 vibration acquisition and processing | 🔄 Planned |
| STM32-to-Python communication | 🔄 Planned |
| Physical board demonstration videos | 🔄 Coming soon |
The first version of the system was developed using an Arduino UNO, MPU6050 sensor module, and Python.
| Arduino Pin | Connection |
|---|---|
| 5V | MPU6050 module VCC |
| GND | MPU6050 GND |
| A4 | MPU6050 SDA |
| A5 | MPU6050 SCL |
| D8 | LED output |
Arduino: Acquires acceleration measurements, performs vibration-related calculations, applies filtering, and activates the LED when the configured vibration threshold is exceeded.
Python: Receives serial measurements, plots vibration magnitude and RMS values in real time, and saves measurement data for later analysis.
Watch the Arduino vibration monitoring demo
The demonstration uses a massage gun to introduce controlled vibrations at different intensity levels.
At lower vibration levels, the LED remains off. At higher vibration levels, the measured vibration exceeds the threshold and activates the LED.
The Python visualization displays the corresponding changes in vibration magnitude and RMS measurements.
The second iteration replaces the Arduino development board with a custom PCB designed around the STM32F103C8T6 ARM Cortex-M3 microcontroller.
This redesign provides greater control over the hardware and creates a foundation for implementing more consistent sampling, hardware timers, sensor communication, and embedded signal processing.
| Component / Interface | Purpose |
|---|---|
| STM32F103C8T6 | Main ARM Cortex-M3 microcontroller |
| TPS7A2033 LDO | Regulated 3.3V power supply |
| 8 MHz external crystal | External clock source |
| USB Micro-B connector | USB connectivity and power input |
| USB ESD protection | Protection for USB data lines |
| SWD header | Programming and hardware debugging |
| UART header | Serial communication and debugging |
| I²C header | External MPU6050 sensor connection |
| Analog supply filtering | Filtering for the MCU analog power domain |
| BOOT0 selection switch | Boot mode configuration |
| Reset circuitry | MCU reset control |
| Status LEDs | Power indication and firmware-controlled output |
The PCB uses a dedicated 3.3V low-dropout regulator to supply the STM32 and associated circuitry.
The design includes local decoupling capacitors near the microcontroller power pins, bulk capacitance for supply stability, and filtering for the analog supply domain.
An 8 MHz external crystal and its supporting capacitors are included to provide an external clock option.
The STM32 can also operate using its internal oscillator, allowing firmware development and initial bring-up without requiring the external crystal to be configured.
A dedicated SWD header exposes the STM32 programming and debugging signals.
Using an ST-Link programmer and STM32CubeIDE, the microcontroller can be programmed, halted, inspected, and debugged directly on the custom PCB.
The PCB includes an I²C header for connecting an external MPU6050 module.
This allows the sensor interface to be developed and tested independently before integrating vibration processing into the STM32 firmware.
The schematic and PCB layout were developed in KiCad.
The design process involved:
The boards were manufactured through JLCPCB, with additional manual soldering and hardware bring-up performed after delivery.
The KiCad project files are available in the KiCad/ directory.
These include:
.kicad_pro — KiCad project configuration.kicad_sch — Complete electrical schematic.kicad_pcb — PCB layout and routingThe directory also contains PCB renders and schematic images for convenient viewing without KiCad.
After receiving the manufactured PCB, I began testing the board before developing the full application firmware.
Using a digital multimeter, I verified the board's power connections and regulated 3.3V supply.
The onboard power indicator LED also confirmed the presence of the regulated supply.
Using an ST-Link programmer and STM32CubeProgrammer, I successfully established communication with the STM32F103.
The debugger identified the target microcontroller and was able to access its internal flash memory.
This confirmed that the microcontroller was powered, responsive, and accessible through the custom SWD interface.
During initial bring-up, the debugger could not establish communication with the microcontroller.
Investigation of the reset circuitry revealed an issue with the physical reset pushbutton footprint and its pin mapping, which caused the NRST signal to remain asserted.
After identifying and removing the problematic switch, SWD communication was successfully restored.
This was a valuable practical lesson in component footprint verification, PCB assembly, and systematic hardware fault isolation.
The board can currently be reset through the debugging interface or by power cycling.
After confirming SWD communication, I created a bare-metal STM32 project in STM32CubeIDE.
Rather than relying on automatically generated GPIO initialization code, I configured the necessary registers directly using the STM32 reference manual.
This involved:
Result: The onboard LED successfully blinks under firmware control.
This verified the complete development path from writing and compiling firmware to programming and executing code on the custom STM32 PCB.
The STM32 firmware is currently under active development.
The initial milestone was establishing reliable programming and GPIO control, which has now been achieved.
The next stage is integrating the MPU6050 accelerometer through the external I²C header.
The objective is to progressively replace the functionality of the original Arduino prototype with firmware developed specifically for the STM32 platform.
I am currently focusing on register-level programming to develop a deeper understanding of the STM32 peripherals, memory-mapped I/O, peripheral clock control, and embedded C.
This approach provides direct experience with the underlying microcontroller hardware before introducing higher-level abstraction libraries where appropriate.
The custom PCB has completed its initial hardware bring-up, and the STM32 has been successfully programmed and tested with a blinking LED.
I am currently working on the firmware and preparing to integrate the external MPU6050 sensor.
Videos demonstrating the physical PCB, successful firmware execution, sensor communication, and eventually real-time vibration monitoring will be uploaded as development progresses.
These demonstrations will document the transition from the original Arduino prototype to the working custom STM32-based system.
VibrationMonitor-MPU6050/
│
├── Arduino/
│ └── Original Arduino prototype firmware
│
├── Python/
│ └── Real-time plotting and data logging
│
├── KiCad/
│ ├── STM32_Vibrations_Monitor.kicad_pro
│ ├── STM32_Vibrations_Monitor.kicad_sch
│ ├── STM32_Vibrations_Monitor.kicad_pcb
│ └── KiCad Images/
│ ├── PCB_3D_Top_View.jpeg
│ ├── PCB_3D_Bottom_View.jpeg
│ ├── PCB_Design.jpeg
│ └── Schematic.jpeg
│
├── Demo/
│ └── Original Arduino demonstration
│
├── LICENSE
└── README.mdSTM32 firmware files and physical PCB demonstrations will be added as development continues.
Hardware and PCB Design
Embedded Development
Software and Data Processing
Documentation and Version Control
This project has provided practical experience across both hardware and firmware development.
Some of the most valuable learning experiences have included:
The next objective is to bring the complete vibration monitoring application onto the STM32 platform.
Anoosh Zaidi
Computer Engineering Student
Toronto Metropolitan University
This project is part of my ongoing exploration of embedded systems, PCB design, hardware debugging, and firmware development.
This project is released under the MIT License. See LICENSE for details.
| Qty | Value | Footprint | References |
|---|---|---|---|
| 4 | 1.5k | Resistor_SMD:R_0603_1608Metric | R2, R6, R7, R9 |
| 4 | 100nF | Capacitor_SMD:C_0603_1608Metric | C1, C2, C3, C4 |
| 4 | MountingHole | MountingHole:MountingHole_2.2mm_M2 | H1, H2, H3, H4 |
| 3 | 0.1uF | Capacitor_SMD:C_0603_1608Metric | C9, C11, C13 |
| 3 | Conn_01x04 | Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical | J1, J3, J4 |
| 2 | 1.0uF | Capacitor_SMD:C_0805_2012Metric | C16, C17 |
| 2 | 10k | Resistor_SMD:R_0603_1608Metric | R1, R8 |
| 2 | 10nF | Capacitor_SMD:C_0603_1608Metric | C7, C15 |
| 2 | 1uF | Capacitor_SMD:C_0805_2012Metric | C5, C8 |
| 2 | 22pF | Capacitor_SMD:C_0603_1608Metric | C10, C12 |
| 2 | 4.7K | Resistor_SMD:R_0603_1608Metric | R3, R5 |
| 1 | 120R | Inductor_SMD:L_0603_1608Metric | FB1 |
| 1 | 2.2nF | Capacitor_SMD:C_0603_1608Metric | C14 |
| 1 | 330 | Resistor_SMD:R_0603_1608Metric | R4 |
| 1 | 4.7uF | Capacitor_SMD:C_0805_2012Metric | C6 |
| 1 | Crystal_GND24 | Crystal:Crystal_SMD_Abracon_ABM3B-4Pin_5.0x3.2mm | Y2 |
| 1 | LED | LED_SMD:LED_0603_1608Metric | D1 |
| 1 | MPU-6050 | Sensor_Motion:InvenSense_QFN-24_4x4mm_P0.5mm | U2 |
| 1 | RED | LED_SMD:LED_0603_1608Metric | D2 |
| 1 | STM32F103C8Tx | Package_QFP:LQFP-48_7x7mm_P0.5mm | U1 |
| 1 | SW_Push | Custom_Switch:SMT_FS | SW1 |
| 1 | SW_SPDT | Custom_Slide_Switch:SWITCH_1SCQN | SW2 |
| 1 | TPS7A2033PDBVR | Custom_Power:DBV0005A-MFG | U3 |
| 1 | USBLC6-2SC6 | Package_TO_SOT_SMD:SOT-23-6 | U4 |
| 1 | USB_B_Micro | Connector_USB:USB_Micro-B_Molex-105017-0001 | J2 |

hoeken/frothfet
Yarrboard load controller board with current sense, volt sense, fuses, and sender support.

engelberd/sensor-system
Working notes for the first custom RP2350A board with ADXL355, USB-C development power/data, 12 V field input, RS485, and a power architecture biased toward a clean accelerometer supply.


NautyXie/pcap04-capacitance-readout
KiCad 7 project for the PCAP04 3-channel capacitance readout board. 100 × 100 mm, 4 layers, SMA edge connectors.



SharbelMarshi/txrx-optical-communication-kicad
A Free-Space Optical Communication link KiCad project

It measures 45.4 × 36 mm and has 2 copper layers, 1.6 mm thick.
44 parts, built around the MPU-6050, TPS7A2033PDBVR-TP 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 AnooshZ/VibrationMonitor-MPU6050 repository on GitHub, at the commit this page was made from: the board is KiCad/STM32_Vibrations_Monitor.kicad_pcb and its schematic KiCad/STM32_Vibrations_Monitor.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
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).