센서 융합 기반 자율 이동 제어 시스템

3방향 초음파 거리와 충돌 이벤트를 융합해 장애물을 회피하고, 블루투스로 주행 모드를 전환하는 STM32 기반 이동 시스템

프로젝트 개요

이 프로젝트는 사람이 접근하기 어려운 좁은 공간을 탐색하거나 물품을 운반할 수 있도록 제작한 STM32 기반 자율 이동 플랫폼입니다. 전방·좌측·우측의 초음파 센서로 주변 거리를 측정해 이동 방향을 결정하고, 진동 센서가 충돌을 감지하면 즉시 정지하는 안전 동작을 구현했습니다. 스마트폰과의 Bluetooth 통신을 통해 자동·수동 주행 모드를 바꾸거나 직접 전진·후진·정지 명령을 보낼 수도 있습니다.

2023년 부산대학교 임베디드시스템설계및실험 수업에서 진행한 팀 프로젝트입니다. 센서 측정, 모터 제어, 인터럽트 처리, 무선 통신과 상태 표시를 하나의 STM32F107 펌웨어에 통합해 실제 4륜 RC 플랫폼에서 동작을 검증했습니다.

STM32F107 보드와 3방향 초음파 센서, 모터 드라이버, TFT LCD를 결합한 4륜 이동 플랫폼.

시스템 구성

  • 제어 보드: STM32F107과 STM32F10x Standard Peripheral Library
  • 주변 인식: 전방·좌측·우측에 배치한 HC-SR04P 초음파 센서 3개
  • 충돌 감지: SW-18010P 진동 센서와 EXTI 외부 인터럽트
  • 구동부: L298 모터 드라이버 2개와 기어드 DC 모터 4개
  • 원격 제어: Bluetooth 모듈과 USART2 수신 인터럽트
  • 상태 출력: TFT LCD의 거리·주행 상태 표시와 TIM3 PWM 기반 버저 경고음

핵심 데이터 흐름은 다음과 같습니다.

3방향 거리 측정 → 장애물 위치 판단 → 이동 방향 결정 → L298 모터 제어

Bluetooth 명령 → USART2 인터럽트 → 주행 모드 및 방향 변경

충돌 감지 → EXTI 인터럽트 → 즉시 정지 → 버저 경고 → 수동 모드 전환

자동 주행 로직

메인 루프는 세 초음파 센서의 거리를 순차적으로 측정하고, 거리 조건에 따라 네 바퀴의 방향을 제어합니다.

  1. 전방 거리가 5cm 미만이면 즉시 후진해 장애물에서 벗어납니다.
  2. 전방 거리가 15cm 미만이면 좌우 거리를 비교하고 더 넓은 공간이 있는 방향으로 회전합니다.
  3. 좌측 또는 우측 장애물이 5cm 이내로 가까워지면 반대 방향으로 회전합니다.
  4. 모든 방향에 충분한 여유가 있으면 전진을 유지합니다.

각 바퀴는 motorfl, motorfr, motorbl, motorbr 함수로 독립 제어하고, 이를 setFront, setBack, setLeft, setRight, setStop 동작으로 추상화했습니다. 초음파 센서에는 10µs 이상의 Trigger 펄스를 보내고 Echo 신호의 TIM2 카운터 차이로 거리를 계산했습니다.

통신과 이벤트 기반 안전 제어

USART2를 9600bps로 설정하고 수신 인터럽트에서 한 문자 명령을 처리했습니다. am은 자동·수동 모드를 선택하고, 수동 모드에서는 f, b, s로 전진·후진·정지를 제어합니다. 메인 루프의 폴링을 기다리지 않고 통신 입력에 반응하도록 주행 상태를 전역 상태값으로 관리했습니다.

진동 센서는 EXTI0 인터럽트에 연결했습니다. 충돌 이벤트가 발생하면 현재 이동 명령을 정지로 바꾸고 수동 모드로 전환한 뒤, 메인 루프에서 약 5초 동안 다섯 번의 경고음을 출력합니다. 충돌 후 자동 주행이 바로 재개되지 않도록 사용자가 상태를 확인하고 직접 제어권을 가져가게 한 안전 설계입니다.

TFT LCD에는 전·좌·우 거리, 현재 주행 모드, 이동 상태를 지속적으로 표시해 센서 판단과 제어 결과를 현장에서 확인할 수 있도록 했습니다.

구현 결과와 배운 점

실제 주행 시험에서 Bluetooth 연결과 모드 전환, 수동 전진·후진·정지, 초음파 기반 장애물 회피가 정상적으로 동작함을 확인했습니다. 또한 주행 중 충돌이 감지되면 차량이 정지하고 버저가 울린 뒤 수동 모드로 전환되는 예외 처리 흐름도 검증했습니다.

이 프로젝트를 통해 GPIO와 Timer, PWM, USART, NVIC/EXTI 인터럽트를 함께 구성하고, 여러 비동기 입력을 주행 상태로 통합하는 임베디드 제어 구조를 구현했습니다. 센서 값 자체를 읽는 것에서 나아가 거리 임계값과 충돌 이벤트의 우선순위를 실제 모터 동작과 연결하는 경험을 쌓았습니다.

기술 스택

STM32F107 · Embedded C · IAR Embedded Workbench · STM32F10x Standard Peripheral Library · GPIO · TIM/PWM · NVIC/EXTI · USART2 · Bluetooth · HC-SR04P · L298 Motor Driver · TFT LCD