AIoT + Robotics

부품을 연결하는 수준에서, 안정적으로 동작하는 시스템 설계로

AIoT 프로젝트는 센서 하나를 읽는 것으로 끝나지 않습니다. 전원 여유, 노이즈, 통신 지연, 저장장치 수명, 온디바이스 AI 추론까지 함께 설계해야 실제 로봇과 스마트 장치가 오래 버팁니다.

1. AIoT 시스템 한눈에 보기

AIoT는 센서로 현실을 읽고, AI 또는 규칙으로 판단하며, 액추에이터와 네트워크로 반응하는 시스템입니다. 작은 프로젝트라도 아래 6개 블록을 나누어 생각하면 오류를 훨씬 빨리 찾을 수 있습니다.

블록 역할 대표 부품/기술 설계 질문
입력 온도, 거리, 자세, 소리, 영상 등 현실 데이터 수집 DHT22, BME280, VL53L0X, IMU, USB/CSI 카메라 정확도보다 반복성과 응답 속도가 더 중요한가?
판단 임계값, 상태 머신, 머신러닝 모델로 행동 결정 ESP32, Raspberry Pi, Orange Pi, NPU 모듈 클라우드가 끊겨도 안전하게 동작해야 하는가?
출력 모터, 서보, LED, 릴레이, 스피커 제어 TB6612FNG, PCA9685, MOSFET, 릴레이 모듈 부하 전류와 순간 피크 전류를 감당하는가?
전원 배터리, 레귤레이터, 보호회로로 안정 공급 18650, BMS, Buck/Boost 컨버터, 퓨즈 모터가 멈춰 버티는 순간에도 전압이 꺼지지 않는가?
통신 센서 버스, 원격 제어, 데이터 업로드 I2C, SPI, UART, Wi-Fi, BLE, MQTT 실시간 제어와 로그 업로드를 같은 통신으로 처리해도 되는가?
기록 설정, 로그, 모델, 측정 데이터 저장 microSD, eMMC, NVMe, SQLite, CSV 전원 차단 때 파일이 깨져도 복구할 수 있는가?

2. 센서와 데이터 수집

센서 선택은 가격표가 아니라 측정 범위, 샘플링 속도, 노이즈, 인터페이스, 보정 방법으로 결정합니다. 특히 AIoT에서는 데이터 품질이 모델 성능보다 먼저입니다.

센서 선택 기준
  • 정확도 참값과 얼마나 가까운지입니다. 온도 실험처럼 절대값이 중요하면 보정된 센서가 필요합니다.
  • 정밀도 같은 상황에서 값이 얼마나 흔들리지 않는지입니다. 로봇 제어에서는 반복성이 더 중요할 때가 많습니다.
  • 샘플링 속도 자세 제어 IMU는 수십~수백 Hz가 필요하지만, 실내 온습도는 1초에 한 번도 충분합니다.
  • 전압 레벨 ESP32는 3.3V 논리 레벨입니다. 5V 센서를 직결하면 입력 핀이 손상될 수 있어 레벨 시프터가 필요합니다.
프로젝트별 추천 센서 조합
프로젝트 센서 주의점
실내 환경 모니터링 BME280, SCD40, PMS5003 미세먼지 센서는 팬 소음과 예열 시간이 있고, CO2 센서는 주기적 보정이 필요합니다.
라인트레이서/자율주행 IR 반사 센서, ToF 거리 센서, IMU 조명 변화에 약하므로 흰색/검정 기준값을 현장에서 다시 잡아야 합니다.
AI 카메라 장치 USB 카메라, CSI 카메라, 조도 센서 해상도보다 프레임률과 조명이 더 중요합니다. 추론용 이미지는 작게 리사이즈합니다.
스마트 화분/급수 토양 수분, 수위, 온습도 저가형 토양 수분 센서는 부식되기 쉬우므로 전원을 계속 켜두지 않습니다.

3. 모터와 구동기 제어

ESP32나 Arduino의 GPIO는 신호를 보낼 뿐, 모터를 직접 돌릴 만큼의 전류를 공급하지 못합니다. 그래서 부하를 실제로 움직이는 회로는 반드시 모터 드라이버, MOSFET, 릴레이, 별도 전원을 함께 설계해야 합니다.

주요 구동기 종류

PCA9685로 서보 여러 개 제어하기

PCA9685는 I2C 두 가닥(SDA, SCL)만으로 16채널 PWM을 출력하는 칩입니다. ESP32의 PWM 핀이 부족하거나 서보가 4개 이상인 로봇 팔에서는 거의 필수에 가깝습니다.

  • 기본 I2C 주소는 보통 0x40입니다.
  • A0~A5 납땜 패드로 주소를 바꾸면 여러 보드를 같은 I2C 버스에 병렬 연결할 수 있습니다.
  • 서보 전원은 PCA9685 로직 전원과 분리하고, GND만 공통으로 묶습니다.
  • 서보가 떨리면 전원 용량 부족, 긴 점퍼선, 접지 불량을 먼저 의심합니다.
PWM, PID, 데드존 이해하기
  • PWM은 켜짐/꺼짐 비율로 평균 전압을 조절하는 방식입니다. 모터 속도, LED 밝기, 서보 제어에 쓰입니다.
  • PID 제어는 목표값과 현재값의 차이를 줄이는 알고리즘입니다. 바퀴 속도, 온도, 자세 제어에서 안정성을 높입니다.
  • 데드존은 신호를 줘도 모터가 움직이지 않는 구간입니다. 저속 제어가 이상하면 최소 구동 PWM을 측정해 보정합니다.

4. 배터리와 전원 설계

AIoT 장치의 오류는 코드보다 전원에서 많이 시작됩니다. Wi-Fi 송신 순간, 모터 기동 순간, NPU 추론 순간에 전류가 튀면서 보드가 재부팅되는 경우가 흔합니다.

18650 배터리 방전율(C-rate) 계산

배터리가 순간적으로 낼 수 있는 최대 전류는 용량(Ah) x C-rate입니다.

  • 3000mAh, 10C 배터리: 3Ah x 10 = 30A
  • 1200mAh, 1C 배터리: 1.2Ah x 1 = 1.2A
  • 모터의 정상 동작 전류보다 스톨 전류가 훨씬 큽니다. 바퀴가 막힌 상태의 전류까지 확인해야 합니다.
직렬(S), 병렬(P), BMS
  • 직렬(S): 전압이 합산됩니다. 3.7V 셀 3개를 직렬(3S)로 연결하면 공칭 11.1V가 됩니다.
  • 병렬(P): 용량과 방전 가능 전류가 합산됩니다. 같은 셀끼리만 병렬 연결합니다.
  • BMS: 과충전, 과방전, 과전류, 셀 밸런싱을 관리합니다. 리튬 배터리 팩에는 필수입니다.
전원 설계 순서: 부하 목록 작성 → 각 부하의 최대 전류 확인 → 30% 이상 여유 확보 → 로직 전원과 모터 전원 분리 → GND 공통 연결 → 퓨즈와 스위치 추가.

전원 문제 증상별 원인

증상 가능한 원인 점검 방법
모터가 돌 때 ESP32 재부팅 전압 강하, 접지 불량, 역기전력 멀티미터로 5V/3.3V 라인 전압을 모터 기동 순간에 측정합니다.
서보가 떨림 전류 부족, 신호선 노이즈, PWM 주파수/펄스폭 오류 서보 전원만 별도 5~6V 어댑터로 공급하고 GND를 공통으로 묶습니다.
Wi-Fi 연결 중 보드 꺼짐 송신 피크 전류 부족 USB 케이블을 짧고 굵은 것으로 바꾸고, 5V 레귤레이터 용량을 확인합니다.

5. 통신 프로토콜

통신은 "어떤 선을 어디에 꽂는가"보다 속도, 거리, 장치 수, 오류 복구를 기준으로 고르는 것이 좋습니다.

방식 장점 적합한 용도 주의점
UART 단순하고 디버깅 쉬움 GPS, 블루투스 모듈, 보드 간 1:1 통신 TX/RX를 교차 연결하고 보드 간 GND를 공유합니다.
I2C 두 가닥으로 여러 장치 연결 온습도, OLED, PCA9685, RTC 주소 충돌과 긴 배선에 약합니다.
SPI 빠른 속도와 안정적인 클럭 디스플레이, SD카드, 고속 ADC 장치마다 CS 선이 필요합니다.
Wi-Fi 인터넷 연결과 대용량 전송 웹 대시보드, 이미지 업로드, OTA 업데이트 전력 소모가 크고 연결 끊김을 코드에서 처리해야 합니다.
BLE 저전력 근거리 통신 스마트폰 설정 앱, 비콘, 웨어러블 대용량 데이터 전송에는 적합하지 않습니다.
MQTT IoT 메시지 표준에 가까운 발행/구독 구조 센서 데이터 수집, 장치 상태 모니터링 브로커 주소, 인증, 오프라인 큐 정책을 정해야 합니다.
MQTT 토픽 설계 예시
school/lab1/robot01/status
school/lab1/robot01/sensor/temperature
school/lab1/robot01/cmd/motor
school/lab1/robot01/event/error

토픽은 장소, 장치, 데이터 종류가 드러나게 설계합니다. 명령 토픽과 상태 토픽을 분리하면 문제 추적이 쉬워집니다.

6. MCU, SBC, NPU 선택

보드를 고를 때는 "성능이 높은가"보다 실시간 제어가 필요한가, 리눅스가 필요한가, AI 추론을 어디서 할 것인가를 먼저 정합니다.

분류 대표 예 강점 한계
MCU Arduino, ESP32, RP2040 부팅 빠름, 저전력, GPIO 제어 안정적 복잡한 영상 처리와 리눅스 앱 실행은 어렵습니다.
SBC Raspberry Pi, Orange Pi, Radxa 리눅스, Python, 웹 서버, 카메라 처리에 강함 전원 차단과 파일시스템 손상에 더 민감합니다.
NPU/AI 가속 Hailo, Rockchip NPU, Coral TPU 낮은 전력으로 이미지/음성/LLM 추론 가속 모델 변환, 런타임 호환성, 드라이버 관리가 필요합니다.
보드 선택 예시
  • ESP32: Wi-Fi 센서 노드, 스마트 스위치, 간단한 로봇 제어에 좋습니다.
  • Raspberry Pi 계열: 카메라, 웹 대시보드, Python 교육, ROS 실습에 적합합니다.
  • RK3588 계열 SBC: 카메라 여러 대, 영상 처리, 온디바이스 AI 추론 실험에 유리합니다.
  • MCU + SBC 조합: ESP32가 실시간 모터 제어를 맡고, SBC가 비전/AI/웹 서버를 맡는 구조가 안정적입니다.

7. 저장장치와 로그

AIoT 장치는 데이터를 계속 씁니다. 저장장치가 약하면 전원 차단 한 번으로 OS가 손상되거나 로그 파일이 깨질 수 있습니다.

# 센서 로그를 날짜별 CSV로 저장하는 파일명 예시
logs/robot01-2026-06-11.csv
logs/robot01-2026-06-12.csv

8. 소프트웨어 구조

프로젝트가 커질수록 하나의 긴 파일보다 역할별로 나누는 편이 안정적입니다. 특히 하드웨어 접근 코드와 판단 로직을 분리하면 센서가 바뀌어도 전체를 다시 쓰지 않아도 됩니다.

aiot-project/
  app.py              # 프로그램 시작점
  config.yaml         # 핀 번호, 임계값, MQTT 주소
  devices/
    motor.py          # 모터 드라이버 제어
    sensors.py        # 센서 읽기
  services/
    mqtt_client.py    # 서버 통신
    logger.py         # 로그 저장
  models/
    detector.onnx     # AI 모델 파일

상태 머신

대기, 측정, 판단, 동작, 오류 같은 상태를 명시하면 예외 상황에서 로봇이 멈추는 규칙을 만들기 쉽습니다.

설정 파일

핀 번호와 임계값을 코드 안에 박아두지 말고 YAML/JSON으로 분리하면 현장 튜닝이 쉽습니다.

오류 복구

Wi-Fi 재연결, 센서 읽기 실패, 디스크 가득 참 같은 상황을 정상 흐름 안에 넣어야 장치가 오래 동작합니다.

9. 회로 안전 체크리스트

극성 반대 연결, 5V 신호의 3.3V 핀 직결, 모터 전원의 역기전력, 배터리 단락은 보드를 즉시 손상시킬 수 있습니다. 전원을 넣기 전에 멀티미터로 전압과 극성을 확인하세요.

10. 프로젝트 로드맵

  1. 1단계: 입력 확인 센서값을 시리얼 모니터나 터미널에 안정적으로 출력합니다.
  2. 2단계: 출력 확인 모터, 서보, LED를 단독으로 테스트하고 최대 전류를 측정합니다.
  3. 3단계: 전원 검증 모든 부하를 동시에 켰을 때 전압 강하와 발열을 확인합니다.
  4. 4단계: 판단 로직 임계값 또는 상태 머신으로 안전한 기본 동작을 만듭니다.
  5. 5단계: 통신 연결 MQTT, HTTP, BLE 중 프로젝트에 맞는 방식을 붙이고 연결 실패를 처리합니다.
  6. 6단계: AI 적용 먼저 PC에서 모델을 검증한 뒤, 보드에서 추론 속도와 발열을 측정합니다.
  7. 7단계: 현장 테스트 조명, 거리, 배터리 잔량, 네트워크 끊김처럼 실제 환경 변수를 바꾸며 로그를 남깁니다.