728x90
아두이노 회로
온도 측정을 위한 회로 설계
아두이노 코드
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