Real-Time Arduino PC Monitor met LCD Display: CPU & GPU Temperaturen
Componenten en Benodigdheden
| Arduino Leonardo (of andere Arduino met UART) | × | 1 |
| LCD 16x2 (met I2C converter) | × | 1 |
| Jumper wires (algemeen) | × | 1 |
Over dit Project
Inleiding
Dit project ontstond uit de behoefte aan plezier en kennis. Het is eenvoudig te bouwen en heeft veel toepassingen, zoals het controleren, opslaan en weergeven van hardware-variabelen.
Aansluiten van de LCD
Sluit de LCD aan (ik gebruikte een I2C converter). Het schema is hierboven te zien.
De Arduino Code
Stel de 16x2 LCD in met adres 0x3F (adres te vinden via I2C scanner sketch op Arduino Playground).
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F, 16, 2);
String inData;
void setup() {
lcd.init();
Serial.begin(9600);
lcd.backlight();
}
void loop() {
while (Serial.available() > 0) {
char recieved = Serial.read();
inData += recieved;
if (recieved == '*') {
inData.remove(inData.length() - 1, 1);
lcd.setCursor(0, 0);
lcd.print("GPU Temp.: " + inData + char(223) + "C ");
inData = "";
if (inData == "DIS") {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Disconnected!");
}
}
if (recieved == '#') {
inData.remove(inData.length() - 1, 1);
lcd.setCursor(0, 1);
lcd.print("CPU Temp.: " + inData + char(223) + "C ");
inData = "";
}
}
}
Uitleg: We gebruiken een char variabele om de seriële invoer te lezen en toe te voegen aan inData. Een * markeert het einde van de GPU-temperatuur, een # markeert het einde van de CPU-temperatuur. Zo weet de Arduino wanneer hij de data moet verwerken en printen.
Configuratie: C# Applicatie
Waarom C#? Het is snel te schrijven en makkelijk voor Windows Forms applicaties.
Je hebt de OpenHardwareMonitorLib.dll nodig. Download deze, maak een nieuw Windows Forms project, voeg de DLL toe als referentie.
Interface Ontwerp
Ontwerp het formulier met:
- ComboBox voor COM-poort selectie
- ComboBox voor update-interval
- Connect / Disconnect knoppen
- Status labels
- NotifyIcon voor systeembak minimalisatie
De C# Code (Kern)
using System.IO.Ports;
using OpenHardwareMonitor.Hardware;
SerialPort port = new SerialPort();
Computer c = new Computer() { GPUEnabled = true, CPUEnabled = true };
float value1, value2; // GPU & CPU temp
private void Init() {
// Poort instellingen, scan beschikbare poorten
port.BaudRate = 9600;
// ... vul comboBox1 met poortnamen
}
private void Status() {
foreach (var hardware in c.Hardware) {
if (hardware.HardwareType == HardwareType.GpuNvidia) {
hardware.Update();
foreach (var sensor in hardware.Sensors)
if (sensor.SensorType == SensorType.Temperature)
value1 = sensor.Value.GetValueOrDefault();
}
if (hardware.HardwareType == HardwareType.CPU) {
hardware.Update();
foreach (var sensor in hardware.Sensors)
if (sensor.SensorType == SensorType.Temperature)
value2 = sensor.Value.GetValueOrDefault();
}
}
try {
port.Write(value1 + "*" + value2 + "#");
} catch (Exception ex) {
timer1.Stop();
// Foutafhandeling
}
}
// Connect knop: open poort, start timer
// Disconnect knop: stuur "DIS*", sluit poort, stop timer
// Timer tick: roep Status() aan
// Form Load: c.Open()
// Let op: programma moet als Administrator draaien!
Schema
Aansluitschema voor LCD met I2C op Arduino Leonardo.
Productieproces
- Arduino Nano Flight Simulator 2020 Bedieningspaneel – LCD & CDI Display
- Bouw een indrukwekkend monitor Ambilight-systeem met Arduino
- Bouw Boeiende LCD Animaties & Games met Arduino UNO
- Real-time IoT hartslagmonitor met Arduino en MAX30100
- Veilige CV-ketelbewaking: Thermocouple-spanningsmonitor voor pilootvlammen
- Afbeeldingen Weergeven op een 1,17-inch TFT LCD met Arduino UNO
- Zelfbouw Arduino Nano Oscilloscoop (10 Hz – 50 kHz) met 128×64 LCD
- MAX30102 hartslagmonitor bouwen met Arduino Nano en 16x2 LCD
- Geavanceerd thuismonitoringssysteem met Arduino Mega en IoT-sensoren
- Bouw een betrouwbare Arduino-weerstation met DHT-sensoren
- Bouw een betrouwbare wekker met DS1302 RTC en Arduino UNO