아두이노 우노 Q 장애물 회피 센서

IR 장애물 회피 센서는 적외선을 사용하여 앞의 물체를 감지합니다. 장애물이 있을 때 디지털 LOW 신호를 보내고, 경로가 명확할 때 HIGH를 보냅니다. Bridge와 Telegram을 사용하면, Arduino UNO Q가 감지 영역에 물체가 들어올 때 즉시 경고를 보낼 수 있습니다.

이 자습서에서 배울 내용:

Arduino UNO Q 장애물 회피 센서

필요한 하드웨어

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

IR 장애물 회피 센서 정보

적외선 장애물 회피 센서는 IR 송신기와 수신기를 사용하여 물체를 감지합니다. 송신기가 IR 빔을 방출하고, 물체가 빔을 반사하면 수신기가 이를 감지하고 OUT 핀이 LOW가 됩니다.

ir 장애물 회피 센서 사용법 핀아웃

핀 배치

  • VCC 핀: VCC (3.3V 또는 5V)에 연결
  • GND 핀: GND (0V)에 연결
  • OUT 핀: 디지털 출력 — LOW = 장애물 감지됨, HIGH = 장애물 없음

작동 원리

  • 센서 앞에 장애물이 있을 때: OUT 핀 = LOW
  • 경로가 명확할 때: OUT 핀 = HIGH
  • 감지 범위: 2 cm에서 30 cm — 온보드 포텐셜미터로 조정 가능
  • 감지 각도: 약 35°

※ 주의:

배송 중에 IR 송신기와 수신기가 정렬되지 않을 수 있습니다. 센서가 올바르게 반응하지 않으면 서로 평행하도록 부드럽게 구부립니다.

배선도

Arduino UNO Q ir 장애물 회피 센서 연결 배선도

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

IR Obstacle Sensor Pin Arduino UNO Q MCU
VCC 3.3V
GND GND
OUT D8

IR 장애물 회피 센서 프로그래밍 방법

  • 센서 핀을 디지털 입력으로 구성:
pinMode(SENSOR_PIN, INPUT);
  • 출력을 읽음 — LOW는 장애물 감지, HIGH는 경로 명확:
int state = digitalRead(SENSOR_PIN); if (state == LOW) Serial.println("Obstacle detected!"); else Serial.println("No obstacle.");

Arduino UNO Q 코드

Arduino UNO Q에는 함께 작동하는 두 개의 프로세서가 있습니다:

  • STM32 MCU는 100ms마다 센서를 읽고 Serial을 통해 결과를 보냅니다
  • Qualcomm MPU는 Wi-Fi가 있는 Debian Linux를 실행합니다 — 이 섹션에서는 MCU만 프로그래밍합니다. 나중 섹션에서 두 프로세서가 Bridge를 통해 함께 작동하는 방법을 보여줍니다.
/* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-obstacle-avoidance-sensor */ // IR Obstacle Avoidance Sensor: // OUT pin: LOW = obstacle detected, HIGH = no obstacle #define SENSOR_PIN 8 // The Arduino UNO Q MCU pin connected to OUT of the IR obstacle sensor void setup() { Serial.begin(9600); pinMode(SENSOR_PIN, INPUT); Serial.println("Arduino UNO Q IR Obstacle Avoidance Sensor ready"); } void loop() { int state = digitalRead(SENSOR_PIN); // LOW = obstacle, HIGH = clear if (state == LOW) Serial.println("Obstacle detected!"); else Serial.println("No obstacle."); delay(100); }

빠른 단계

Arduino UNO Q를 처음 사용하나요? 계속하기 전에 아두이노 우노 Q 시작하기 자습서를 따르세요.

  • 연결: 배선도에 표시된 대로 IR 장애물 센서를 Arduino UNO Q MCU에 연결합니다.
  • Arduino App Lab 열기: Arduino App Lab을 시작하고 Arduino UNO Q를 감지할 때까지 기다립니다.
  • 새 앱 만들기: Create New App 버튼을 클릭합니다.
create new app in 아두이노 app lab on Arduino UNO Q
  • 앱에 이름을 지정합니다(예: ObstacleSensor).
  • Create를 클릭하여 확인합니다.
아두이노 app lab app folders and files on Arduino UNO Q
  • 스케치 붙여넣기: 위의 MCU 코드를 복사하여 sketch/sketch.ino에 붙여넣습니다.
  • 업로드: Arduino App Lab의 Run 버튼을 클릭합니다.
click run 버튼 in 아두이노 app lab on Arduino UNO Q
  • 센서 앞에 손을 올려놓고 Serial Monitor를 관찰합니다.
  • 포텐셜미터를 조정하여 감지 범위를 변경합니다.

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
[2026-04-29 09:00:01] Arduino UNO Q IR Obstacle Avoidance Sensor ready [2026-04-29 09:00:02] No obstacle. [2026-04-29 09:00:03] No obstacle. [2026-04-29 09:00:04] Obstacle detected! [2026-04-29 09:00:05] Obstacle detected! [2026-04-29 09:00:06] No obstacle.

Bridge: Linux + MCU

이 섹션에서는 Linux 측이 Bridge를 통해 장애물 상태를 읽고 이벤트를 수신할 수 있도록 Arduino UNO Q의 두 프로세서를 프로그래밍하는 방법을 보여줍니다:

  • 장애물 센서는 MCU에 연결됩니다 — MCU는 100ms마다 센서를 읽습니다
  • MPU는 센서 핀을 직접 읽을 수 없습니다 — Bridge 함수를 호출하여 현재 상태를 얻거나 이벤트를 수신합니다
  • MPU는 Wi-Fi를 가지고 있습니다 — 전체 Debian Linux를 실행하며 장애물이 감지되면 즉시 Telegram 경고를 보낼 수 있습니다
  • Arduino_RouterBridge는 두 프로세서 간 RPC 통신을 가능하게 합니다
  • ⚠️ /dev/ttyHS1 (Linux)과 Serial1 (MCU)은 라우터에서 예약됨 — 사용자 코드에서 절대 열지 마세요

MCU 코드 (Bridge)

/* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-obstacle-avoidance-sensor */ #include "Arduino_RouterBridge.h" #define SENSOR_PIN 8 // The Arduino UNO Q MCU pin connected to OUT of the IR obstacle sensor bool cached_obstacle = false; bool obstacle_event = false; bool prev_obstacle = false; unsigned long last_read_ms = 0; const unsigned long READ_INTERVAL = 100; String get_state(String arg) { return cached_obstacle ? "obstacle" : "clear"; } String get_event(String arg) { if (obstacle_event) { obstacle_event = false; return "obstacle_detected"; } return "none"; } void setup() { Bridge.begin(); Monitor.begin(); pinMode(SENSOR_PIN, INPUT); Bridge.provide("get_state", get_state); Bridge.provide("get_event", get_event); Monitor.println("Arduino UNO Q IR Obstacle Avoidance Sensor Bridge ready"); } void loop() { unsigned long now = millis(); if (now - last_read_ms >= READ_INTERVAL) { last_read_ms = now; int state = digitalRead(SENSOR_PIN); // LOW = obstacle cached_obstacle = (state == LOW); if (cached_obstacle && !prev_obstacle) { obstacle_event = true; Monitor.println("Obstacle detected!"); } else if (!cached_obstacle && prev_obstacle) { Monitor.println("Obstacle cleared."); } prev_obstacle = cached_obstacle; } }

Python 코드 (Bridge)

/* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-obstacle-avoidance-sensor */ from arduino.app_utils import * import time def loop(): state = Bridge.call("get_state") print(f"Obstacle state: {state}") time.sleep(0.2) App.run(user_loop=loop)

빠른 단계

  • 연결: 배선도에 표시된 대로 IR 장애물 센서를 Arduino UNO Q에 연결합니다.
  • Arduino App Lab 열기하고 ObstacleSensorBridge라는 이름의 새 앱을 만듭니다.
  • MCU 스케치를 붙여넣기하여 sketch/sketch.ino에 넣습니다.
  • Python 코드를Python 파일에 붙여넣습니다.
  • 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 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
  • 업로드: Run 버튼을 클릭합니다.
click run 버튼 in 아두이노 app lab on Arduino UNO Q
  • 센서 앞에 물체를 놓고 두 콘솔을 관찰합니다.

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
[2026-04-29 09:00:01] Arduino UNO Q IR Obstacle Avoidance Sensor Bridge ready [2026-04-29 09:00:04] Obstacle detected! [2026-04-29 09:00:06] Obstacle cleared.
DIYables_Apps
Stop
sketch.ino
1#include "Arduino_RouterBridge.h"
Serial Monitor
Python
[2026-04-29 09:00:02] Obstacle state: clear [2026-04-29 09:00:03] Obstacle state: clear [2026-04-29 09:00:04] Obstacle state: obstacle [2026-04-29 09:00:05] Obstacle state: obstacle [2026-04-29 09:00:06] Obstacle state: clear

Telegram

센서 앞의 장애물이 감지되었을 때 즉시 Telegram 경고를 받고 원격으로 상태를 쿼리합니다.

MCU 스케치: 이전 Bridge 섹션에서 동일한 MCU 스케치를 유지합니다.

Python 코드 (Telegram)

/* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-obstacle-avoidance-sensor */ from arduino.app_utils import * import requests import time TELEGRAM_BOT_TOKEN = "YOUR_TELEGRAM_BOT_TOKEN" CHAT_ID = "YOUR_CHAT_ID" last_update_id = 0 def get_updates(): global last_update_id url = f"https://api.telegram.org/bot{TELEGRAM_BOT_TOKEN}/getUpdates" params = {"offset": last_update_id + 1, "timeout": 5} try: response = requests.get(url, params=params, timeout=10) data = response.json() if data["ok"]: return data["result"] except Exception as e: print(f"Error getting updates: {e}") return [] def send_message(chat_id, text): url = f"https://api.telegram.org/bot{TELEGRAM_BOT_TOKEN}/sendMessage" payload = {"chat_id": chat_id, "text": text} try: requests.post(url, data=payload, timeout=10) except Exception as e: print(f"Error sending message: {e}") def loop(): # Auto-alert on obstacle detected event = Bridge.call("get_event") if event == "obstacle_detected": print("Obstacle detected!") send_message(CHAT_ID, "🚧 Obstacle detected in front of the sensor!") # Handle Telegram commands updates = get_updates() for update in updates: last_update_id = update["update_id"] if "message" not in update: continue message = update["message"] chat_id = message["chat"]["id"] text = message.get("text", "").strip() print(f"Received: {text}") if text == "/start": send_message(chat_id, "Arduino UNO Q Obstacle Sensor Bot\n" "/state - Current obstacle state (obstacle / clear)\n" "Automatic alert when an obstacle is detected!") elif text == "/state": result = Bridge.call("get_state") send_message(chat_id, f"Obstacle state: {result}") else: send_message(chat_id, "Unknown command. Send /start for help.") time.sleep(0.1) App.run(user_loop=loop)

빠른 단계

  • YOUR_TELEGRAM_BOT_TOKEN을 BotFather에서 받은 실제 봇 토큰으로 교체합니다.
  • YOUR_CHAT_ID를 Telegram 채팅 ID로 교체합니다.
  • 이 Python 코드를 앱의 Python 파일에 붙여넣습니다 (동일한 MCU 스케치 유지).
  • Run 버튼을 클릭합니다 — 센서 앞에 물체를 놓아 Telegram 경고를 트리거합니다.

App Lab 콘솔 출력

DIYables_Apps
Stop
sketch.ino
1#include "Arduino_RouterBridge.h"
Serial Monitor
Python
[2026-04-29 09:10:01] Waiting for Telegram messages... [2026-04-29 09:10:04] Obstacle detected! [2026-04-29 09:10:10] Received: /state
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
🚧 Obstacle detected in front of the sensor!
10:15 AM
/state
10:16 AM ✓✓
Obstacle state: clear
10:17 AM

OpenClaw

You can adapt the OpenClaw to this tutorial by refering the instruction on 아두이노 우노 Q - OpenClaw Tutorial

프로젝트 아이디어

Arduino UNO Q와 함께 IR 장애물 회피 센서로 많은 유용한 프로젝트를 구축할 수 있습니다:

  • 출입문 방문자 카운터: 출입문에 센서를 장착합니다 — 장애물 (사람)이 지나갈 때마다 이벤트 카운터가 증가합니다; MPU는 /count를 보낼 때 일일 집계가 포함된 Telegram 요약을 보냅니다
  • 배송 알림자: 센서를 우편함이나 배송 영역을 향하게 설정합니다 — 소포가 떨어지고 감지되면, Python은 Telegram 경고 "Package delivered!"를 휴대폰으로 보냅니다
  • 로봇 장애물 정지: 센서를 모터 구동 로봇에 연결합니다 — MCU가 장애물을 감지하면 즉시 모터를 정지합니다; MPU는 장애물 이벤트 시간이 포함된 Telegram 알림을 보냅니다
  • 자동 게이트 트리거: 센서를 사용하여 차량이 접근하는 것을 감지합니다 — 장애물이 200ms 이상 연속으로 감지되면, MCU가 릴레이를 트리거하여 게이트를 열고, Python이 Telegram 로그 항목을 보냅니다
  • 산업용 부품 카운터: 조립 라인 컨베이어에 센서를 장착합니다 — 분당 통과하는 부품의 수를 세고 Python 타이머를 사용하여 5분마다 Telegram으로 집계를 보냅니다

직접 도전해보세요

Arduino UNO Q의 IR 장애물 회피 센서로 더 나아갈 준비가 되셨나요? 다음 과제를 시도해 보세요:

  • 쉬움: 프로그램이 시작된 이후 발생한 장애물 감지 이벤트의 수를 반환하는 /count Telegram 명령을 추가합니다 — Python 코드에서 카운터로 추적됩니다.
  • 중간: 디바운스 필터를 구현합니다: 이벤트가 등록되고 Telegram 경고가 전송되기 전에 장애물이 최소 300ms 동안 연속으로 감지되어야 합니다 — 진동이나 반사 깜빡임으로 인한 거짓 트리거를 제거합니다.
  • 고급: 양방향 사람 카운터를 구축합니다: 출입문에 몇 센티미터 떨어진 두 개의 IR 장애물 센서를 설치합니다 — 먼저 어느 센서가 트리거되는지를 기반으로 들어오는지 나가는지를 결정하고, 현재 점유 수와 함께 Telegram 업데이트를 보냅니다.

관련 튜토리얼