아두이노 우노 Q 온도 센서

실시간으로 온도를 정확하게 측정하는 것은 가장 일반적인 Arduino 작업 중 하나이며, DS18B20 센서는 Arduino UNO Q에서 이를 쉽게 만들어줍니다. 간단한 1-Wire 인터페이스를 통해 디지털 온도 값을 코드에 직접 제공하므로 아날로그 변환이 필요하지 않습니다.

이 튜토리얼에서는 다음을 배우게 됩니다:

Arduino UNO Q - 온도 센서

필요한 하드웨어

1×Arduino UNO Q 아마존
1×USB Cable for Arduino Uno Q 아마존
1×DS18B20 온도 센서 (어댑터 포함) 쿠팡 | 아마존
1×DS18B20 온도 센서(어댑터 없음) 아마존
1×점퍼케이블 쿠팡 | 아마존
1×(추천) 아두이노 우노용 스크루 터미널 블록 쉴드 쿠팡 | 아마존
1×(추천) Sensors/Servo Expansion Shield for Arduino Uno 쿠팡 | 아마존
1×(추천) 아두이노 우노용 브레드보드 쉴드 쿠팡 | 아마존
1×(추천) 아두이노 우노용 케이스 쿠팡 | 아마존
1×(추천) 아두이노 우노용 프로토타이핑 베이스 플레이트 & 브레드보드 키트 아마존
공개: 이 포스팅 에 제공된 일부 링크는 아마존 제휴 링크입니다. 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

DS18B20 온도 센서 정보

DS18B20은 1-Wire 프로토콜을 사용하여 단일 데이터 와이어를 통해 통신하는 디지털 온도 센서입니다.

  • 프로토콜: 1-Wire 디지털 — 하나의 데이터 핀이 전원과 통신을 모두 처리
  • 범위: -55°C ~ +125°C (-67°F ~ +257°F), -10°C ~ +85°C 사이에서 ±0.5°C 정확도
  • 출력: 디지털 — 아날로그-디지털 변환 불필요
  • 전원: 3.3V 또는 5V로 구동; 기생 전원 모드 지원 (데이터 라인에서 전원 공급)
  • 다중 센서: 최대 127개의 DS18B20 센서가 하나의 데이터 핀을 공유할 수 있으며, 각각 고유한 64비트 주소 보유
  • 패키지 타입: TO-92 트랜지스터 스타일 패키지 및 방수 스테인리스 스틸 프로브

핀배치

ds18b20 온도 센서 핀배치

DS18B20 온도 센서는 3개의 핀을 가지고 있습니다:

DS18B20 핀 기능 Arduino UNO Q 핀
GND 접지 GND
VCC 전원 (3.3V 또는 5V) 5V
DATA 1-Wire 데이터 버스 4
  • 풀업 저항: 데이터 핀과 VCC 사이에 4.7kΩ 저항이 신뢰할 수 있는 1-Wire 통신을 위해 필요합니다.
  • 어댑터: 배선 어댑터가 포함된 DS18B20 센서 구매를 권장합니다. — 풀업 저항과 나선형 터미널 블록이 포함되어 있어서 추가 부품이 필요하지 않습니다.

DS18B20 온도 센서 프로그래밍 방법

  • 라이브러리 포함:
#include <OneWire.h> #include <DallasTemperature.h>
  • 센서의 DATA 핀에 연결된 핀에 대한 OneWire 객체와 DallasTemperature 객체를 생성합니다:
OneWire oneWire(SENSOR_PIN); // Initialize a new OneWire instance on the sensor pin DallasTemperature DS18B20(&oneWire); // Create a DallasTemperature object linked to the OneWire instance
  • setup() 에서 센서 초기화:
DS18B20.begin(); // Start the sensor initialization process
  • 온도 읽기 요청:
DS18B20.requestTemperatures();
  • 섭씨 온도 읽기:
float temperature_C = DS18B20.getTempCByIndex(0);
  • (선택사항) 섭씨를 화씨로 변환:
float temperature_F = temperature_C * 9.0 / 5.0 + 32.0;

배선도

  • 브레드보드 배선 (풀업 저항 포함):
Arduino UNO Q 온도 센서 배선도

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

  • 어댑터를 사용한 배선도 (추가 저항 불필요):
Arduino UNO Q ds18b20 어댑터 배선도

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

배선 어댑터가 포함된 DS18B20 센서 구매를 권장합니다. 이 어댑터에는 저항이 포함되어 있으므로 추가 저항이 필요하지 않아 연결이 간단합니다.

MCU 코드 (직접 Arduino 스케치)

여기에 STM32 MCU에서 직접 실행되어 DS18B20 센서에서 온도를 읽고 값을 App Lab 콘솔에 출력하는 Arduino 스케치가 있습니다.

  • DallasTemperature 라이브러리를 사용하여 DS18B20 센서 초기화
  • 500ms마다 온도 읽기 요청
  • 섭씨 온도를 읽고 화씨로 변환
  • App Lab 콘솔에 두 값 모두 출력
/* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-temperature-sensor */ #include <OneWire.h> #include <DallasTemperature.h> #define SENSOR_PIN 4 // The Arduino UNO Q pin connected to DS18B20 sensor's DQ pin OneWire oneWire(SENSOR_PIN); // setup a oneWire instance DallasTemperature DS18B20(&oneWire); // pass oneWire to DallasTemperature library void setup() { DS18B20.begin(); // initialize the sensor } void loop() { DS18B20.requestTemperatures(); // send the command to get temperatures float temperature_C = DS18B20.getTempCByIndex(0); // read temperature in Celsius float temperature_F = temperature_C * 9.0 / 5.0 + 32.0; // convert Celsius to Fahrenheit delay(500); }

빠른 단계

  • Arduino UNO Q를 처음 사용하시나요? 계속하기 전에 아두이노 우노 Q 시작하기 튜토리얼을 따라 개발 환경을 준비하세요.
  • 센서 배선: 위의 배선도에 따라 DS18B20을 Arduino UNO Q의 핀 4에 연결하세요. 어댑터를 사용하는 경우 어댑터 배선도를 따르세요.
  • 연결: USB-C 케이블로 Arduino UNO Q를 컴퓨터에 연결합니다.
  • Arduino App Lab 열기: Arduino App Lab을 실행하고 Arduino UNO Q를 감지할 때까지 기다립니다. — 처음 실행할 때 몇 분이 걸릴 수 있습니다.
  • 새 앱 만들기: 새 앱 만들기 버튼을 클릭합니다.
Arduino UNO Q의 아두이노 app lab에서 새 앱 만들기
  • 앱에 이름을 지정합니다. 예를 들어: DIYables_DS18B20
  • 만들기를 클릭하여 확인합니다.
  • 새 앱 내에서 생성된 폴더 및 파일 집합이 표시됩니다.
Arduino UNO Q의 아두이노 app lab 앱 폴더 및 파일
  • sketch/sketch.ino 파일을 찾습니다. — 여기에 MCU 스케치를 붙여넣을 것입니다.
  • 스케치 붙여넣기: 위의 MCU 코드를 복사하여 해당 스케치 파일에 붙여넣습니다. 다른 파일은 기본값으로 유지합니다.
    • Install the library: Click the Add sketch library button (the open book icon with a + sign) in the left sidebar.
    add sketch 라이브러리 in 아두이노 app lab on Arduino UNO Q
    • Search for DallasTemperature created by Miles Burton , Tim Newsome , Guil Barros , Rob Tillaart and click the Install button.
    My Apps / DIYables Apps
    Run
    Bricks
    No bricks added...
    Sketch Libraries
    No sketch libra...
    Files
    python
    sketch
    .gitignore
    README.md
    app.yaml
    sketch.ino
    Add sketch library
    DallasTemperature Miles Burton , Tim Newsome , Guil Barros , Rob Tillaart

    Supports DS18B20, DS18S20, DS1822, DS1820

    3.9.0
    Install
    More Info
    • Search for OneWire created by Jim Studt, Tom Pollard, Robin James, Glenn Trewitt, Jason Dangel, Guillermo Lovato, Paul Stoffregen, Scott Roberts, Bertrik Sikken, Mark Tillotson, Ken Butcher, Roger Clark, Love Nystrom and click the Install button.
    My Apps / DIYables Apps
    Run
    Bricks
    No bricks added...
    Sketch Libraries
    No sketch libra...
    Files
    python
    sketch
    .gitignore
    README.md
    app.yaml
    sketch.ino
    Add sketch library
    OneWire Jim Studt, Tom Pollard, Robin James, Glenn Trewitt, Jason Dangel, Guillermo Lovato, Paul Stoffregen, Scott Roberts, Bertrik Sikken, Mark Tillotson, Ken Butcher, Roger Clark, Love Nystrom

    2.3.8
    Install
    More Info
    • Search for Arduino_RouterBridge created by Arduino and click the Install button.
    My Apps / DIYables Apps
    Run
    Bricks
    No bricks added...
    Sketch Libraries
    No sketch libra...
    Files
    python
    sketch
    .gitignore
    README.md
    app.yaml
    sketch.ino
    Add sketch library
    Arduino_RouterBridge Arduino

    This library provides a simple RPC bridge for Arduino UNO Q boards, allowing communication between the board and other devices using MsgPack serialization.

    0.4.1
    Install
    More Info
    • 업로드: Arduino App Lab의 실행 버튼을 클릭하여 STM32에 컴파일 및 업로드합니다.
    Arduino UNO Q의 아두이노 app lab에서 실행 버튼 클릭
    • 읽기 확인: 콘솔 탭 → 시리얼 모니터 서브탭을 열어 실시간 온도 출력을 확인합니다.
    • 테스트: 센서를 손에 잡거나 따뜻한 물에 놓으면 온도가 올라가는 것을 볼 수 있습니다.
    • 팁: DS18B20은 변환을 완료하는 데 약 750ms가 걸립니다. — 읽기가 고정된 것 같으면 delay() 값을 최소 800ms로 늘리세요.

    App Lab 콘솔 출력

    DIYables_Apps
    Stop
    sketch.ino
    1#include "Arduino_RouterBridge.h"
    Serial Monitor
    Python
    Message (Enter to send a message to "Newbiely" on usb(2820070321))
    New Line
    9600 baud
    Temperature: 22.31°C ~ 72.16°F Temperature: 22.44°C ~ 72.39°F Temperature: 22.50°C ~ 72.50°F Temperature: 24.37°C ~ 75.87°F Temperature: 26.00°C ~ 78.80°F Temperature: 28.12°C ~ 82.62°F

    Linux + MCU 브릿지 프로그래밍

    Arduino UNO Q는 두 개의 프로세서를 함께 사용합니다: MPU (Qualcomm, Debian Linux 실행) 및 MCU (STM32, Zephyr OS 및 Arduino 스케치 실행). 이들은 Arduino_RouterBridge 라이브러리를 통해 RPC를 사용하여 통신합니다. — raw 시리얼 포트를 통하지 않습니다.

    • DS18B20은 MCU (STM32)에 연결됩니다. — 센서는 MPU가 아닌 STM32의 디지털 핀에 배선됩니다. MCU는 센서에서 raw 1-Wire 데이터를 직접 읽습니다.
    • MPU는 센서를 직접 읽을 수 없습니다. — 온도를 얻으려면 MPU가 Bridge.call()을 통해 MCU에 요청을 보내야 합니다. MCU는 해당 Bridge.provide() 함수를 실행하고 결과를 반환합니다.
    • MPU는 Wi-Fi를 가지고 있습니다. — MPU가 Wi-Fi 지원이 있는 전체 Debian Linux를 실행하므로 인터넷에 연결할 수 있고 MCU가 할 수 없는 작업을 할 수 있습니다: Telegram 메시지 보내기, REST API 호출, 클라우드 서비스에 데이터 업로드 등.
    • 통신: Linux 쪽의 Bridge.call()은 MCU 쪽의 Bridge.provide() 함수를 호출합니다.
    • ⚠️ 예약됨: /dev/ttyHS1 (Linux) 및 Serial1 (MCU)은 Arduino Router가 사용합니다. — 절대 직접 열지 마세요.

    요약하면: MCU는 센서를 읽습니다 → MPU는 값을 요청합니다 → MPU는 인터넷에서 사용합니다.

    MCU 스케치 — Linux 쪽에 온도 읽기 공개:

    /* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-temperature-sensor */ #include "Arduino_RouterBridge.h" #include <OneWire.h> #include <DallasTemperature.h> #define SENSOR_PIN 4 // The Arduino UNO Q pin connected to DS18B20 sensor's DQ pin OneWire oneWire(SENSOR_PIN); DallasTemperature DS18B20(&oneWire); void setup() { DS18B20.begin(); Bridge.begin(); Monitor.begin(); Bridge.provide("read_temperature_c", read_temperature_c); Bridge.provide("read_temperature_f", read_temperature_f); Monitor.println("MCU Bridge ready."); } void loop() {} float read_temperature_c() { DS18B20.requestTemperatures(); return DS18B20.getTempCByIndex(0); } float read_temperature_f() { float c = DS18B20.getTempCByIndex(0); return c * 9.0 / 5.0 + 32.0; }

    Python 스크립트 (Arduino App Lab) — Linux에서 온도 읽기:

    /* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-temperature-sensor */ from arduino.app_utils import * import time def loop(): temp_c = Bridge.call("read_temperature_c") temp_f = Bridge.call("read_temperature_f") print(f"Temperature: {temp_c:.2f}°C ~ {temp_f:.2f}°F") time.sleep(1) App.run(user_loop=loop)
    • 참고: MCU 스케치에서 Bridge.begin()이 호출되고 스케치가 업로드된 후 Linux 쪽에서 Python 스크립트를 실행하세요.
    • ⚠️ 경고: /dev/ttyHS1 (Linux에서) 또는 Serial1 (MCU에서)을 코드에서 직접 열거나 사용하지 마세요. — 이들은 Arduino Router가 예약하고 있으며 액세스하면 브릿지가 손상됩니다.

    빠른 단계

    • MCU 스케치 업로드: Arduino App Lab을 열고 새 앱을 만든 다음 위의 Bridge MCU 스케치를 sketch/sketch.ino에 붙여넣고 DallasTemperatureOneWire 라이브러리를 설치한 다음 실행을 클릭합니다.
    • Python 스크립트 추가: 같은 앱의 Python 탭에 위의 Python 코드를 붙여넣습니다.
    • 앱 실행: 실행을 클릭합니다. — Linux 쪽이 매초 온도 읽기를 요청하기 시작합니다.
    • 콘솔 확인: 콘솔 탭 → Python 콘솔 서브탭을 열어 Linux 쪽의 실시간 온도 출력을 확인합니다.
    • 팁: time.sleep(1) 값을 조정하여 온도를 폴링하는 빈도를 제어합니다. — Linux 쪽의 CPU 사용량을 줄이려면 값을 증가시킵니다.

    App Lab 콘솔 출력

    DIYables_Apps
    Stop
    sketch.ino
    1#include "Arduino_RouterBridge.h"
    Serial Monitor
    Python
    Temperature: 22.31°C ~ 72.16°F Temperature: 22.44°C ~ 72.39°F Temperature: 24.37°C ~ 75.87°F Temperature: 26.00°C ~ 78.80°F

    Telegram 통합

    Telegram에서 원격으로 DS18B20 센서의 온도를 읽을 수 있습니다. — 어디서나 명령을 보내면 현재 온도 값을 즉시 받을 수 있습니다.

    아직 Telegram 봇이 없다면 계속하기 전에 아두이노 우노 Q - 텔레그램 봇을 참고하여 봇 토큰을 얻으세요.

    이 섹션에서는:

    • Arduino UNO Q의 Linux 쪽에서 Python 스크립트를 실행하여 Telegram 메시지를 대기합니다.
    • Bridge.call()을 통해 온도 요청을 MCU 쪽으로 전달합니다.
    • 온도 읽기를 Telegram 회신으로 보냅니다.

    MCU 스케치: 이전 브릿지 섹션의 동일한 MCU 스케치를 유지합니다. — 변경 사항이 없습니다. STM32에 이미 업로드되고 실행 중인지 확인하세요.

    Python 스크립트 (Arduino App Lab) — DS18B20 온도 센서용 Telegram 봇:

    /* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-temperature-sensor */ from arduino.app_utils import * import requests import time BOT_TOKEN = "YOUR_BOT_TOKEN" API_URL = f"https://api.telegram.org/bot{BOT_TOKEN}" last_update_id = 0 def send_message(chat_id, text): requests.post(f"{API_URL}/sendMessage", json={"chat_id": chat_id, "text": text}) def get_updates(): global last_update_id resp = requests.get(f"{API_URL}/getUpdates", params={"offset": last_update_id + 1, "timeout": 5}) return resp.json().get("result", []) def loop(): global last_update_id updates = get_updates() for update in updates: last_update_id = update["update_id"] msg = update.get("message", {}) chat_id = msg.get("chat", {}).get("id") text = msg.get("text", "").strip() if text == "/temperature": temp_c = Bridge.call("read_temperature_c") temp_f = Bridge.call("read_temperature_f") send_message(chat_id, f"Temperature: {temp_c:.2f}°C ~ {temp_f:.2f}°F") else: send_message(chat_id, "Commands:\n/temperature — get current temperature reading") time.sleep(1) App.run(user_loop=loop)
    • 참고: YOUR_BOT_TOKEN을 Telegram의 @BotFather에서 받은 토큰으로 바꾸세요.
    • 봇에 /temperature를 보내 DS18B20 센서의 현재 온도 읽기를 받습니다.

    빠른 단계

    • MCU 스케치 업로드: 이전 섹션의 브릿지 MCU 스케치를 사용합니다. (아직 하지 않았다면 먼저 업로드하세요)
    • Telegram 스크립트 붙여넣기: 위의 Python 코드를 Arduino App Lab의 앱 Python 탭에 복사합니다.
    • 토큰 설정: 스크립트의 YOUR_BOT_TOKEN을 실제 봇 토큰으로 바꾸세요.
    • 앱 실행: 실행을 클릭합니다. — 봇이 즉시 Telegram 메시지 수신을 시작합니다.
    • 테스트: 봇에 /temperature를 보내 현재 읽기값을 받습니다.
    • 팁: 휴대폰의 Telegram에서 /temperature 폴을 예약하여 하루 종일 온도 추세를 모니터링할 수 있습니다.

    App Lab 콘솔 출력

    DIYables_Apps
    Stop
    sketch.ino
    1#include "Arduino_RouterBridge.h"
    Serial Monitor
    Python
    [2026-04-29 09:12:01] Telegram: /temperature [2026-04-29 09:12:01] Temperature: 22.50°C ~ 72.50°F [2026-04-29 09:15:34] Telegram: /temperature [2026-04-29 09:15:34] Temperature: 25.12°C ~ 77.22°F [2026-04-29 09:20:07] Telegram: /temperature [2026-04-29 09:20:07] Temperature: 28.37°C ~ 83.07°F
    Telegram
    Telegram 12:45
    Welcome to Telegram!
    ArduinoBot 10:19
    Chatting with Arduino...
    telegram-botfather
    BotFather Yesterday
    Your bot has been created.

    ArduinoBot

    bot
    Today
    /temperature
    10:15 AM ✓✓
    Temperature: 22.50°C ~ 72.50°F
    10:16 AM
    /temperature
    10:17 AM ✓✓
    Temperature: 28.37°C ~ 83.07°F
    10:18 AM

    OpenClaw 통합

    이 튜토리얼을 OpenClaw에 맞게 조정할 수 있습니다. 아두이노 우노 Q - OpenClaw 튜토리얼의 지침을 참조하세요.

    응용 프로그램/프로젝트 아이디어

    다음은 DS18B20 온도 센서와 Arduino UNO Q로 구축할 수 있는 프로젝트 아이디어입니다:

    • 방 온도 모니터: 매분 온도 읽기를 기록하고 Linux 쪽에 추세를 표시합니다.
    • 온도 경고 시스템: 온도가 설정된 임계값을 초과하면 Telegram 경고를 보냅니다.
    • 스마트 온도조절기: Linux 쪽에서 DS18B20 온도를 읽고 읽기값을 기반으로 Bridge.call()을 통해 릴레이 또는 팬을 제어합니다.
    • 데이터 로거: Python 쪽에서 몇 초마다 온도 읽기를 Linux 파일 시스템의 CSV 파일에 저장합니다.
    • 다중 센서 네트워크: 여러 DS18B20 센서를 하나의 핀에 연결하고 (각각 고유 ID) Linux 쪽에서 모두 읽습니다.
    • 식물 보호 시스템: 실외 온도를 모니터링하고 서리 조건이 감지되면 Telegram 경고를 보냅니다.

    DS18B20에 대한 자세한 정보가 필요하신가요? Arduino DS18B20 튜토리얼을 확인하세요.

    자신을 도전해보세요

    Arduino UNO Q와 DS18B20 온도 센서로 이러한 도전을 시도하여 기술을 한 단계 업그레이드하세요:

    • 쉬움: MCU 스케치를 수정하여 온도 읽기와 함께 센서의 고유한 64비트 주소도 읽고 표시합니다.
    • 중간: 같은 데이터 핀에 두 번째 DS18B20 센서를 추가하고 Python 쪽에서 고유 주소를 사용하여 두 센서를 독립적으로 읽습니다.
    • 어려움: 읽기를 파일에 저장하고 Telegram을 통해 요청할 때 요약 보고서 (최소값/최대값/평균)를 전송하는 Telegram 제어 온도 로거를 만듭니다.