산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

아두이노로 실시간 PC 모니터 만들기: LCD에 CPU/GPU 온도 표시

부품 및 소모품

아두이노 레오나르도 (또는 UART 변환기가 있는 아두이노/ATmega)×1
LCD 16x2 (I2C 모듈 포함)×1
점퍼 와이어 (일반)×1

프로젝트 소개

단순한 재미와 학습 목적으로 시작된 프로젝트지만, 하드웨어 변수를 제어·저장·표시하는 등 다양한 응용이 가능합니다.

1. LCD 연결 (I2C 어댑터 사용)

아두이노로 실시간 PC 모니터 만들기: LCD에 CPU/GPU 온도 표시

I2C 주소는 아두이노 플레이그라운드의 I2C 스캐너 스케치로 확인할 수 있습니다. (보통 0x3F 또는 0x27)

2. 아두이노 코드 작성

시리얼 통신으로 들어오는 데이터를 문자 단위로 읽어 버퍼에 저장하고, 종료 문자(* 또는 #)를 만나면 LCD 해당 줄에 출력합니다.

#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 recieved = Serial.read();
    inData += recieved;
    
    if (recieved == '*') { // 첫 번째 줄 (GPU 온도)
      inData.remove(inData.length() - 1, 1); // '*' 제거
      lcd.setCursor(0, 0);
      lcd.print("GPU Temp.: " + inData + char(223) + "C ");
      inData = "";
    }
    if (recieved == '#') { // 두 번째 줄 (CPU 온도)
      inData.remove(inData.length() - 1, 1); // '#' 제거
      lcd.setCursor(0, 1);
      lcd.print("CPU Temp.: " + inData + char(223) + "C ");
      inData = "";
    }
    // 연결 해제 시 화면 초기화
    if (inData == "DIS") {
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("Disconnected!");
    }
  }
}

3. PC 측 C# 애플리케이션 (OpenHardwareMonitorLib 사용)

C#으로 윈도우 폼 애플리케이션을 만들어 OpenHardwareMonitor 라이브러리로 CPU/GPU 온도를 읽고, 시리얼 포트로 아두이노에 전송합니다.

필수 준비물

주요 코드 구조

using System.IO.Ports;
using OpenHardwareMonitor.Hardware;

SerialPort port = new SerialPort();
Computer c = new Computer() { GPUEnabled = true, CPUEnabled = true };
float gpuTemp, cpuTemp;

// 폼 로드 시
private void Form1_Load(object sender, EventArgs e) {
  c.Open(); // 하드웨어 모니터링 시작
  // 사용 가능한 COM 포트 콤보박스에 추가
  foreach (string p in SerialPort.GetPortNames()) comboBox1.Items.Add(p);
  port.BaudRate = 9600;
}

// 타이머 틱 이벤트 (주기적 전송)
private void timer1_Tick(object sender, EventArgs e) {
  Status();
}

// 하드웨어 정보 수집 및 전송
private void Status() {
  foreach (var hw in c.Hardware) {
    hw.Update();
    foreach (var sensor in hw.Sensors) {
      if (sensor.SensorType == SensorType.Temperature) {
        if (hw.HardwareType == HardwareType.GpuNvidia) 
          gpuTemp = sensor.Value.GetValueOrDefault();
        else if (hw.HardwareType == HardwareType.CPU)
          cpuTemp = sensor.Value.GetValueOrDefault();
      }
    }
  }
  // 프로토콜: "GPU온도*CPU온도#"
  try {
    port.Write(gpuTemp + "*" + cpuTemp + "#");
  } catch { /* 에러 처리 */ }
}

// 연결 버튼
private void btnConnect_Click(...) {
  port.PortName = comboBox1.Text;
  port.Open();
  timer1.Interval = Convert.ToInt32(comboBox2.Text); // 갱신 주기(ms)
  timer1.Enabled = true;
}

// 해제 버튼
private void btnDisconnect_Click(...) {
  port.Write("DIS*"); // 아두이노에 알림
  port.Close();
  timer1.Enabled = false;
}

중요: 관리자 권한으로 실행해야 하드웨어 센서에 접근할 수 있습니다.

회로도

아두이노로 실시간 PC 모니터 만들기: LCD에 CPU/GPU 온도 표시

완성 모습

아두이노로 실시간 PC 모니터 만들기: LCD에 CPU/GPU 온도 표시

이제 고가의 모니터링 장비 없이도 아두이노와 LCD로 실시간 PC 하드웨어 상태를 확인할 수 있습니다.

제조공정

  1. 아두이노 나노 비행 시뮬레이터 2020 컨트롤 패널 – LCD & CDI 디스플레이
  2. 아두이노로 모니터 앰비라이트(Ambilight) 시스템 직접 만들기
  3. 아두이노 우노로 만드는 LCD 애니메이션 & 게임 기초
  4. 아두이노와 MAX30100으로 만드는 실시간 IoT 심박수 모니터
  5. 가스 온수기 파일럿 라이트 감시 시스템 – 열전대 전압 모니터링으로 안전 확보
  6. 아두이노 우노로 1.17인치 TFT LCD에 이미지 표시하기 - SD 카드 활용
  7. 아두이노 나노 DIY 오실로스코프 (10Hz~50kHz, 128x64 LCD)
  8. 아두이노 나노와 16x2 LCD로 MAX30102 심박수 모니터 만들기
  9. 아두이노 메가 기반 고급 홈 모니터링 시스템: IoT 센서 연동
  10. DS1302 RTC와 아두이노 우노로 만드는 신뢰할 수 있는 알람 시계