[오제이 튜브 임베디드 강의] 23. 온도센서를 붙여보자

2026. 4. 26. 19:37·Embedded

온도 센서 소개

고추 건조기의 핵심 기능은 온도를 측정하고 제어하는 것이다. 이번 강의부터 온도 센서를 다루며, 난이도가 높아 총 3강에 걸쳐 진행된다. 이번 글에서는 센서 소개, 샘플 코드 분석, 하드웨어 배선까지 다루고, 실제 동작은 다음 글에서 진행한다.

온도 센서는 크게 세 부분으로 구성된다.

  • 프로브: 온도를 감지하는 쇠 막대 부분. 열이 가해지면 내부 저항값이 변하고, 이에 따라 전압값이 변한다
  • 모듈: 프로브에서 받은 전압 변화를 내장 칩이 계산하여 디지털 데이터 신호로 변환
  • 3개 핀: VCC(전원), GND(접지), DAT(데이터)

온도센서 실물 — 프로브·전선·모듈

순수 센서 vs 모듈

순수 센서 (ADC 방식)

프로브만 있는 순수 센서를 사용하려면, 회로를 직접 구성하여 ADC(아날로그→디지털 변환)로 전압 변화를 측정해야 한다. 이전 글("데이터시트 읽어주는 남자")에서 다룬 것처럼 STM32에는 12비트 ADC가 내장되어 있어 0~3.6V를 4096단계로 나눌 수 있다. 측정된 전압값을 온도 변환 테이블과 대조하여 온도를 구하는 방식인데, 회로 구성과 캘리브레이션의 난이도가 매우 높다.

모듈 방식 (이번 강의)

우리가 사용하는 모듈형 센서는 내장 칩이 온도 계산을 대신 해준다. 모듈이 프로브의 전압 변화를 받아 내부적으로 온도를 계산하고, DAT 핀을 통해 디지털 데이터로 STM32에 전달한다. 우리는 이 데이터를 받아서 FND에 표시하면 된다.

1-Wire 통신의 특징

이 온도 센서 모듈은 1-Wire(원 와이어) 통신을 사용한다. 이전에 다룬 SPI(MOSI/MISO/SCLK/CS)나 UART(TX/RX)와 달리, DAT 핀 하나로 읽기와 쓰기를 모두 수행하는 독특한 방식이다.

통신 방식 데이터 선 수 특징
SPI 2개 (MOSI, MISO) + 클럭 전이중, 클럭 기반
UART 2개 (TX, RX) 전이중, 타임베이스
1-Wire 1개 (DAT) 반이중, 같은 핀으로 Read/Write

1-Wire에서는 같은 DAT 핀의 GPIO 모드를 Output↔Input으로 전환하면서 데이터를 주고받는다. Output 모드에서 신호를 보내고, Input 모드로 전환하여 응답을 읽는 방식이다.

샘플 코드 분석: read_bit (1비트 읽기)

강의에서 제공된 Arduino용 OneWire 라이브러리의 read_bit 함수를 분석한다. 데이터시트를 처음부터 구현하는 것보다 샘플 코드를 분석하는 것이 훨씬 효율적이다.

read_bit 함수의 동작 순서:

  1. 인터럽트 비활성화 — 타이밍이 중요하므로 다른 인터럽트가 끼어들지 않게
  2. DAT 핀을 Output 모드로 전환 → LOW 출력 — "데이터를 보내달라"는 신호
  3. 3μs 대기
  4. DAT 핀을 Input 모드로 전환 — 같은 핀을 이제 읽기용으로 변경
  5. 10μs 대기
  6. DAT 핀에서 1비트 읽기 — High면 1, Low면 0
  7. 인터럽트 재활성화
  8. 53μs 대기 — 다음 비트 읽기 전 슬롯 완료 대기
  9. 읽은 값(r) 반환

read_bit 함수 코드

핵심은 같은 DAT 선을 Output→Input으로 모드 전환하면서 사용한다는 점이다. Output으로 LOW 신호를 보내 센서에게 "데이터를 보내라"고 요청하고, Input으로 전환하여 센서가 보낸 응답을 읽는다.

샘플 코드 분석: read (1바이트 읽기)

read 함수는 read_bit을 8번 호출하여 1바이트(8비트)를 조합한다.

동작 과정:

  1. bitMask가 0x01(= 00000001)에서 시작
  2. read_bit()이 1을 반환하면, r |= bitMask로 해당 비트 위치를 1로 설정
  3. bitMask <<= 1로 마스크를 왼쪽으로 시프트 (00000010, 00000100, ...)
  4. 8번 반복하면 bitMask가 00000000이 되어 for문 종료
  5. 조합된 바이트 r을 반환

이 방식은 LSB(최하위 비트)부터 읽는다. 이전 글("FND 제어")에서 다룬 send 함수가 MSB부터 보냈던 것과 반대 방향이다.

하드웨어 배선

프로브 ↔ 모듈 연결

온도 센서 프로브의 3가닥 전선을 모듈의 해당 핀에 연결한다.

프로브 전선 색상 모듈 핀
빨간색 VCC
노란색 DAT
검정색 GND

모듈 ↔ 보드 연결

모듈 핀 연결 보드 핀
VCC 빨간색 점퍼선 → 빵판 + 레일 3.3V
GND 검정색 점퍼선 → 빵판 - 레일 GND
DAT 노란색 점퍼선 PA3 (11번 핀)

 

프로브·모듈·빵판·보드 최종 연결

다음 글 예고

하드웨어 배선이 완료되었다. 다음 글에서는 오늘 분석한 OneWire 라이브러리를 STM32 환경에 포팅하여, 실제로 온도를 읽고 FND에 표시하는 과정을 다룬다.

'Embedded' 카테고리의 다른 글

[오제이 튜브 임베디드 강의] 25. 어디서도 안 알려주는 프로토콜의 원리  (0) 2026.04.26
[오제이 튜브 임베디드 강의] 24. 1-Wire 통신! 나름 유명했다.  (0) 2026.04.26
[오제이 튜브 임베디드 강의] 22. STM32에서는 SPI 기능을 제공한다구  (0) 2026.04.26
[오제이 튜브 임베디드 강의] 21. FND 제어 소스 분석  (0) 2026.04.26
[오제이 튜브 임베디드 강의] 20. SPI통신 제대로 배워보자  (0) 2026.04.26
'Embedded' 카테고리의 다른 글
  • [오제이 튜브 임베디드 강의] 25. 어디서도 안 알려주는 프로토콜의 원리
  • [오제이 튜브 임베디드 강의] 24. 1-Wire 통신! 나름 유명했다.
  • [오제이 튜브 임베디드 강의] 22. STM32에서는 SPI 기능을 제공한다구
  • [오제이 튜브 임베디드 강의] 21. FND 제어 소스 분석
onebrotravel
onebrotravel
  • onebrotravel
    매일을 여행처럼
    onebrotravel
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • Embedded N
      • OS
      • DSA
      • DevTools
      • Infra
      • Projects
  • 인기 글

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
onebrotravel
[오제이 튜브 임베디드 강의] 23. 온도센서를 붙여보자
상단으로

티스토리툴바