Echtzeit-PC-Monitor mit Arduino & LCD: CPU/GPU-Temperaturen anzeigen
Komponenten und Zubehör
- Arduino Leonardo (oder anderes Board mit USB-HID/UART) × 1
- LCD 16×2 (mit I²C-Adapter) × 1
- Jumper-Kabel (diverse) × 1
Über dieses Projekt
Die Idee entstand aus Spaß am Basteln und dem Wunsch, Hardware-Sensoren des PCs (CPU-/GPU-Temperatur) auf einem externen Display darzustellen. Das Projekt ist einfach nachzubauen und vielseitig erweiterbar.
Hardware-Aufbau
Das LCD wird über einen I²C-Adapter an den Arduino angeschlossen (SDA/SCL an A4/A5 beim Leonardo). Die I²C-Adresse (hier 0x3F) kann mit einem I²C-Scanner-Sketch ermittelt werden.
Arduino-Sketch
Der Arduino empfängt serielle Daten vom PC. Ein spezielles Protokoll trennt die Werte für die zwei Zeilen:
- Ein
*markiert das Ende der ersten Zeile (GPU-Temperatur). - Ein
#markiert das Ende der zweiten Zeile (CPU-Temperatur). - Der String
DIS*signalisiert „Disconnected“ und löscht das Display.
Um Latenzen zu vermeiden, werden Zeichen einzeln per Serial.read() in einen Puffer (inData) gelesen und bei Erreichen des Trennzeichens verarbeitet.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F, 16, 2);
String inData;
void setup() {
Serial.begin(9600);
lcd.init();
lcd.backlight();
}
void loop() {
while (Serial.available() > 0) {
char c = Serial.read();
inData += c;
if (c == '*') {
inData.remove(inData.length() - 1);
lcd.setCursor(0, 0);
lcd.print("GPU Temp.: " + inData + char(223) + "C ");
if (inData == "DIS") { lcd.clear(); lcd.print("Disconnected!"); }
inData = "";
}
if (c == '#') {
inData.remove(inData.length() - 1);
lcd.setCursor(0, 1);
lcd.print("CPU Temp.: " + inData + char(223) + "C ");
inData = "";
}
}
}
PC-Seite: C#-Anwendung mit OpenHardwareMonitor
Eine Windows-Forms-Anwendung (C#) liest über die Bibliothek OpenHardwareMonitorLib.dll die Sensorwerte von CPU und GPU (NVIDIA) aus und sendet sie zyklisch per SerialPort an den Arduino.
Wichtige Schritte
- Referenz auf
OpenHardwareMonitorLib.dllim Projekt hinzufügen. Computer-Objekt mitCPUEnabled = trueundGPUEnabled = trueinstanziieren undOpen()aufrufen.- Verfügbare COM-Ports scannen und in einer ComboBox anzeigen.
- SerialPort konfigurieren (9600 Baud, 8N1, RTS enable).
- In einem Timer-Tick (
Status()) Sensoren aktualisieren, Temperaturen lesen und String"GPUtemp*CPUtemp#"senden. - Connect/Disconnect-Buttons steuern Port und Timer.
- Die Anwendung muss als Administrator ausgeführt werden, damit OpenHardwareMonitor auf die Hardware-Sensoren zugreifen kann.
// Ausschnitt aus der C#-Logik
private void Status() {
foreach (var hw in c.Hardware) {
if (hw.HardwareType == HardwareType.GpuNvidia) {
hw.Update();
foreach (var s in hw.Sensors)
if (s.SensorType == SensorType.Temperature) value1 = s.Value.GetValueOrDefault();
}
if (hw.HardwareType == HardwareType.CPU) {
hw.Update();
foreach (var s in hw.Sensors)
if (s.SensorType == SensorType.Temperature) value2 = s.Value.GetValueOrDefault();
}
}
try { port.Write(value1 + "*" + value2 + "#"); }
catch { timer1.Stop(); /* Fehlerbehandlung */ }
}
Erweiterungsmöglichkeiten
- Weitere Sensoren (Lüfterdrehzahlen, Spannungen, Auslastung) einbinden.
- Größeres Display (z. B. 20×4 oder grafisches LCD) verwenden.
- Tray-Minimierung, Balloon-Tipps, automatischer Reconnect.
Fazit
Ein günstiges, anpassbares Zweit-Display für PC-Enthusiasten, das zeigt, wie einfach Hardware-Monitoring mit Arduino und C# realisierbar ist.
Herstellungsprozess
- Arduino Nano Flight Simulator 2020 Kontrollpanel – LCD & CDI Display
- Monitor-Ambilight selbst bauen mit Arduino Nano & WS2812B LEDs
- LCD-Animationen & Spiele mit Arduino UNO erstellen
- Echtzeit-IoT-Herzfrequenzmonitor mit Arduino & MAX30100
- Sichere Warmwasserbereitung: Thermospannungs-Monitor für Zündflamme (Arduino & Raspberry Pi)
- Bilder auf 1,17-Zoll-TFT-LCD mit Arduino UNO anzeigen
- DIY-Oszilloskop mit Arduino Nano (10 Hz–50 kHz) und 128×64-LCD
- MAX30102 Herzfrequenz-Monitor mit Arduino Nano & 16x2 LCD bauen
- Fortgeschrittenes Heimüberwachungssystem mit Arduino Mega und IoT-Sensoren
- Zuverlässigen Wecker mit DS1302 RTC und Arduino UNO bauen