AnalogGaugeUSB is a DIY hardware project that brings the retro charm of analog gauges to your modern PC setup. It uses a Raspberry Pi Pico to drive physical needles and RGB lighting, displaying real-time CPU and GPU load information from your Windows computer.
- Real-time Monitoring: Displays CPU and GPU usage (0-100%) on two separate analog gauges.
- RGB Lighting: extensive RGB backlight support for customizable aesthetics (CPU and GPU sides, left and right).
- USB HID Interface: Driverless plug-and-play connection using standard Human Interface Device (HID) protocol.
- Easy Debugging: SWD pins are accessible on the back side of the enclosure for easy firmware debugging.
- Windows Service: Background service runs automatically to fetch sensor data and update the display.
- 3D Printable Enclosure: Complete files included for printing a custom case.
- Microcontroller: Raspberry Pi Pico (RP2040)
- Display: 3V Analog Voltmeters
- Lighting: Common Anode RGB LEDs
- Red Cathode: 100Ω resistor
- Green Cathode: 10Ω resistor
- Blue Cathode: 10Ω resistor
- Connection: USB (Micro-USB to PC)
| Component | Function | GPIO Pin |
|---|---|---|
| CPU Gauge | Needle (PWM) | GP10 |
| GPU Gauge | Needle (PWM) | GP6 |
| GPU Right LED | Blue / Green / Red | GP0 / GP1 / GP2 |
| GPU Left LED | Blue / Green / Red | GP3 / GP4 / GP5 |
| CPU Right LED | Blue / Green / Red | GP7 / GP8 / GP9 |
| CPU Left LED | Blue / Green / Red | GP11 / GP12 / GP13 |
The firmware is written in C using the Pico SDK and TinyUSB. It enumerates as a USB HID device.
- VID:
0x6D6F - PID:
0x1004 - Report ID:
1
It receives 3-byte reports to control the hardware:
- Report ID (
0x01) - Component ID (
0=CPU Needle,1=GPU Needle,2-13=LED channels) - Value (
0-255)
The Windows host application is a .NET 10.0 Worker Service.
- Uses LibreHardwareMonitor to fetch cpu and gpu load sensors.
- Uses HidSharp to communicate with the USB device.
- Installs as a Windows Service to run silently in the background.
- Firmware: CMake, ARM GCC Toolchain (for Pico development).
- Software: .NET 10.0 SDK.
- Hardware: 3D Printer (for enclosure), Soldering iron, Wires.
- Navigate to the
firmwaredirectory. - Create a build directory:
mkdir build cd build - Configure and build:
cmake .. make
- Hold the BOOTSEL button on your Pico and plug it in.
- Copy the generated
.uf2file to the RPI-RP2 drive.
- Navigate to the
servicedirectory. - Publish the project:
dotnet publish -c Release -r win-x64 -o publish
- Run the installation script (requires Admin privileges):
Alternatively, manually create the service using
install.bat
sc create "Analog Gauge USB" binPath= "..."
- Open
enclosure/AnalogGaugeUSB v6.f3din Fusion 360 or use the provided.stlfiles. - Print the parts:
AnalogGaugeUSB-front.stlAnalogGaugeUSB-back.stlAnalogGaugeUSB-inside1.stl,inside2.stl,inside3.stl
- Assemble the gauges and LEDs into the case and wire them to the Pico according to the pinout.
This project is licensed under the MIT License - see the LICENSE file for details.


