Мониторинг ПК в реальном времени: Arduino + LCD-дисплей
Компоненты и материалы
- Arduino Leonardo (или любой другой с USB-HID/Serial) — 1 шт.
- LCD 16×2 с I2C-адаптером — 1 шт.
- Провода-перемычки — 1 комплект
О проекте
Проект выводит температуру CPU и GPU на LCD-дисплей, подключённый к Arduino. Данные собирает C#-приложение на ПК с помощью библиотеки OpenHardwareMonitorLib и передаёт по последовательному порту. Arduino принимает пакеты и обновляет две строки дисплея.
Схема подключения LCD (I2C)
- VCC → 5V, GND → GND
- SDA → A4, SCL → A5 (для Leonardo: SDA/SCL на отдельных пинах)
- Адрес I2C по умолчанию 0x3F (проверить сканером).
Скетч Arduino
Принимает символы до разделителей * (GPU, строка 0) и # (CPU, строка 1). Очищает буфер после печати. Поддерживает команду DIS* для сообщения «Disconnected!».
#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, 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, 1);
lcd.setCursor(0,1);
lcd.print("CPU Temp.: " + inData + char(223) + "C ");
inData = "";
}
}
}
C#-приложение (Windows Forms)
- Ссылка на
OpenHardwareMonitorLib.dll(из Open Hardware Monitor). - Форма: ComboBox для COM-порта, ComboBox для интервала таймера, кнопки Connect/Disconnect, статусбар, NotifyIcon для сворачивания в трей.
- Таймер опрашивает датчики CPU/GPU (Temperature) и шлёт строку
gpuTemp*cpuTemp#. - Требуются права администратора для доступа к датчикам.
Ключевые фрагменты C#
// Инициализация порта
port.BaudRate = 9600; port.Parity = Parity.None; port.StopBits = StopBits.One;
port.DataBits = 8; port.Handshake = Handshake.None; port.RtsEnable = true;
// Опрос датчиков
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();
}
}
port.Write(value1 + "*" + value2 + "#");
Сборка и запуск
- Собрать схему, загрузить скетч в Arduino.
- Скомпилировать C#-проект (Visual Studio), запустить от имени администратора.
- Выбрать COM-порт, интервал обновления (мс), нажать Connect.
- На дисплее появятся температуры GPU (верхняя строка) и CPU (нижняя).
Расширения
Можно добавить мониторинг загрузки CPU/GPU, частот, вольтажа, скорости вентиляторов — достаточно расширить протокол (новые разделители) и логику на Arduino.
Производственный процесс
- Панель управления полётным симулятором 2020 на Arduino Nano: LCD и CDI-дисплеи
- Создание потрясающей системы Ambilight для монитора на Arduino
- Создание анимации и игр на LCD 16×2 с Arduino UNO
- IoT-монитор пульса в реальном времени на Arduino и MAX30100
- Мониторинг термопары газового водонагревателя: SMS/Email алерт при погасании горелки
- Вывод изображений на 1.17-дюймовый TFT LCD с Arduino UNO
- Самодельный осциллограф на Arduino Nano (10 Гц – 50 кГц) с ЖК-дисплеем 128×64
- Монитор частоты сердца на MAX30102 с Arduino Nano и дисплеем 16x2
- Продвинутая система домашнего мониторинга на Arduino Mega с IoT-датчиками
- Надёжные будильник на DS1302 RTC и Arduino UNO — сборка и код