HCI/Arduino

[Arduino] Thermistor 센서 값 받아 아두이노 출력 하기

sillon 2024. 9. 27. 17:15
728x90
반응형

아두이노 회로

 

온도 측정을 위한 회로 설계

22k옴 저항 사용

 

아두이노 코드

int Thermistor_Input = A0; // 온도 측정을 위한 입력 핀
float Vi = 1023.0; // 아두이노의 최대 ADC 값 (10-bit ADC)
float R1 = 22000.0; // 기본 저항 값 (22kΩ)
float R2 = 0; // 온도에 따라 변하는 서미스터 저항 값
float logR2 = 0; // 서미스터 저항의 로그값 저장
float T = 0; // 온도 값 저장
float c1 = -1.185559046e-03; // 서미스터의 계수 값
float c2 = 5.505203063e-04; // 서미스터의 계수 값
float c3 = -9.653138374e-07; // 서미스터의 계수 값

unsigned long startTime = 0; // 시작 시간을 저장할 변수
const unsigned long measurementDuration = 20000000; // 20초 (마이크로초 단위)

void setup() {
  Serial.begin(115200); // 시리얼 통신을 115200 bps 속도로 시작
  startTime = micros(); // 시작 시간 기록
}

void loop() {
  // 경과 시간이 20초를 넘지 않았을 경우에만 센서 값을 측정
  if (micros() - startTime <= measurementDuration) {
    int Vo = analogRead(Thermistor_Input); // 아날로그 입력 핀에서 서미스터 출력 값 읽기
    R2 = R1 * (Vi / (float)Vo - 1); // 서미스터 저항 값 계산
    logR2 = log(R2); // 저항 값을 로그로 변환
    T = (1.0 / (c1 + c2 * logR2 + c3 * logR2 * logR2 * logR2)); // 서미스터의 계수 값을 이용해 온도 계산 (단위: 켈빈)
    T = T - 273.15; // 켈빈 온도를 섭씨 온도로 변환
    Serial.println(T); // 온도 출력
  } else {
    Serial.println("20초 측정 완료");
    while (true) {
      // 아무것도 하지 않음 (측정을 중단하고 프로그램을 멈춤)
    }
  }
}

해당 코드는 thermistor 센서를 통해 계속해서 아두이노로 온도 정보가 전송되고있다.

내 아두이노의 경우는 COM5 포트에서 해당 값을 확인 할 수 있다.

 

아두이노가 연결된 포트는 장치관리자>포트 에서 확인 가능

 

Serial Monitor 을 통해 값이 잘 측정 되고있다

728x90
반응형