WiDC: Wi-Fi FPV 로봇 – 실시간 영상 원격 제어
부품 및 소모품
부품 수량
Arduino UNO 1
Espressif ESP8266 ESP-01 1
Arduino Proto Shield 1
DC 기어 모터 (바퀴 포함) 2
H-브리지 모터 드라이버 1
앱 및 온라인 서비스
Autodesk Fusion 360 (3D 설계)
Arduino IDE (코드 업로드)
프로젝트 개요
이 튜토리얼은 Wi-Fi 네트워크를 통해 원격 제어되는 2륜 FPV(First Person View) 로봇을 제작하는 방법을 안내합니다. 아두이노 우노와 ESP8266 모듈을 사용하여 웹 브라우저 기반 인터페이스로 로봇을 제어하며, 안드로이드 스마트폰으로 실시간 영상과 오디오를 스트리밍합니다.
기존 이전 튜토리얼 을 개선하여 더 빠른 로봇을 제작하며, 3D 프린터나 레이저 커터 없이 일반 공구만으로 저비용 아크릴 프레임을 제작하는 방법도 다룹니다.
참고: 이 프로젝트는 Joy Robot 프로젝트에서 파생되었으며, 컴포넌트 선택은 접근성과 단순성을 고려했습니다. NodeMCU나 라즈베리 파이 등으로 최적화 가능합니다.
1단계: 필요한 도구
아크릴 절단용 톱
드라이버 (볼트/너트 조립)
자 (치수 측정)
커터 칼 (구멍 뚫기, 재단)
드릴 머신 (아크릴 천공)
사포 (모서리 다듬기)
납땜 인두 (모터 단자 납땜)
컴퓨터 (아두이노 코드 컴파일/업로드)
기계 구조 제작, 로봇 조립, 전자 부품 연결에 사용됩니다. 기성 키트를 구매하면 일부 도구는 불필요합니다.
2단계: 기계 구조 및 재료
기계 재료:
2mm 아크릴 시트
DC 기어 모터 + 바퀴 (2개)
30mm 캐스터 휠 (1개)
M2×10mm 나사 (5개), M2×1.5mm 너트 (5개)
M3×10mm 나사 (9개), M3×40mm 나사 (4개), M3×1.5mm 너트 (12개)
5/32"×1" 나사 (4개), 5/32" 너트 (12개)
범용 스마트폰 거치대
강철 L자 브라켓 30×30mm (4개)
3단계: 전자 부품
Arduino Uno
ESP8266 (ESP-01)
Proto Shield 또는 브레드보드
1kΩ 저항 (2개), 10kΩ 저항 (1개)
H-브리지 모듈
점퍼 와이어
5V USB 파워뱅크
모든 부품은 온라인에서 쉽게 구할 수 있습니다. 컴포넌트 선택은 다른 프로젝트에서 파생되었으며, 다른 마이크로컨트롤러로 최적화 가능합니다.
4단계: 구조 설계
Fusion 360으로 3D 모델링하여 메인 부품(아두이노, 기어 모터, H-브리지, 파워뱅크, 스마트폰 거치대)의 배치를 결정했습니다. GrabCAD 라이브러리에서 3D 모델을 다운로드해 활용했습니다.
전자 부품을 평면에 배치해 풋프린트를 정하고, 모터와 바퀴 위치를 정해 안정적인 구조를 설계했습니다. 메인 구조는 베이스 플레이트, 사이드 플레이트 2개, 브라켓으로 연결된 3판 구조입니다.
도면 파일: base.pdf, base.svg
5단계: 구조 제작 및 조립
아크릴 베이스 재단: 2D 도면 치수대로 아크릴 시트를 자릅니다. 레이저 커터가 없으면 일반 도구로 가능합니다. 도면을 접착지에 출력해 아크릴에 붙이고, 커터 칼과 자로 선을 그어 절단합니다. 사포로 모서리를 다듬습니다.
구멍 뚫기: 도면 표시 위치에 드릴 머신으로 구멍을 뚫습니다. 아크릴은 드릴이 잘 들어가며, 드릴이 없으면 커터 칼로 수작업 가능합니다.
부품 장착: 3D 도면과 영상 참고해 나사와 너트로 부품을 고정합니다. M3는 브라켓과 DC 모터, M2는 전자 부품, 5/32"는 전륜과 스마트폰 클립에 사용합니다.
6단계: 전자 회로 조립
아두이노 우노가 메인 컨트롤러이며, ESP8266과 시리얼 통신으로 Wi-Fi를 담당합니다. H-브리지로 2개의 DC 모터를 양방향 제어합니다. 파워뱅크를 아두이노 USB 포트에 연결해 전원 공급합니다(편리한 충전, 안전한 5V).
회로도(wiDC_Esquem_C3_A1tico.pdf, wiDC.fzz, wiDC_bb.pdf)대로 점퍼 와이어로 연결합니다. ESP-01은 브레드보드 비호환이므로 점퍼 와이어로만 연결하고 구조물에 고정하지 않습니다.
7단계: 아두이노 코드
최신 Arduino IDE 설치 후 라이브러리 없이 SoftwareSerial만으로 ESP8266과 통신합니다. ESP8266 보드레이트를 코드에 맞게 설정하세요(기본 115200bps → 9600bps로 변경 권장).
WiDC.ino 다운로드 후 XXXXX를 공유기 SSID, YYYYY를 비밀번호로 변경하고 업로드하세요.
코드 핵심 설명
// 소프트웨어 시리얼: 핀 3(RX), 2(TX)
SoftwareSerial esp8266(3, 2);
void setup() {
// 모터 핀 설정
pinMode(5, OUTPUT); pinMode(6, OUTPUT);
pinMode(9, OUTPUT); pinMode(10, OUTPUT);
// 시리얼 시작
Serial.begin(9600); esp8266.begin(9600);
// ESP8266 초기화 및 Wi-Fi 연결
sendData("AT+RST\r\n", 2000, DEBUG);
sendData("AT+CWMODE=1\r\n", 1000, DEBUG);
sendData("AT+CWJAP=\"XXXXX\",\"YYYYY\"\r\n", 2000, DEBUG);
delay(5000);
sendData("AT+CIFSR\r\n", 1000, DEBUG); // IP 확인
sendData("AT+CIPMUX=1\r\n", 1000, DEBUG);
sendData("AT+CIPSERVER=1,80\r\n", 1000, DEBUG); // 포트 80 웹서버
}
void loop() {
if (esp8266.available()) {
if (esp8266.find("+IPD,")) {
esp8266.find("?");
String msg = esp8266.readStringUntil(' ');
String cmd = msg.substring(0, 3); // cm1~cm5
// 상태 변경: 1=전진, 2=후진, 3=우회전, 4=좌회전, 5=정지
}
}
// 상태에 따른 모터 PWM 제어
}
AT 명령어로 ESP8266을 설정하고, 웹서버를 띄워 HTTP GET 요청으로 제어 명령(cm1~cm5)을 수신합니다. 모터 속도는 PWM(motorSpeed 기본 150)으로 조절합니다.
8단계: 웹 기반 제어 인터페이스
interface.rar 압축 해제 후 index.html을 파이어폭스에서 엽니다. 두 영역으로 구성됩니다:
영상/오디오: 안드로이드 IP Webcam 앱의 IP/포트(기본 192.168.0.5:8080) 입력 후 로드
제어: 아두이노(ESP8266) IP 입력, 키보드 방향키로 로봇 제어(누르면 전송, 떼면 정지)
자바스크립트(myscript.js)로 키 이벤트 감지 후 $.get()으로 아두이노에 명령 전송. 래치 변수로 중복 전송 방지.
9단계: 사용 방법
아두이노 재시작 → 시리얼 모니터로 Wi-Fi 연결 확인 및 ESP8266 할당 IP 확인
HTML 파일을 브라우저에서 열고 아두이노 IP 입력
아두이노를 컴퓨터에서 분리해 파워뱅크 연결 → 재연결 대기
로봇의 스마트폰에서 IP Webcam 앱 실행 → 제어 인터페이스에 영상 IP 입력 후 연결
영상 해상도를 낮춰 지연 최소화
키보드 방향키 누르고 있어 로봇 제어
주의: 오픈루프 제어라 미세한 모터 차이로 직진 유지가 어렵습니다. 명령 손실 시 로봇이 계속 움직일 수 있으니 명령 처리 로직 개선 권장.
코드 및 자료
아두이노 코드: WiDC.ino (위 전문 참조)
웹 인터페이스: interface.rar (다운로드 필요)
3D 도면: base_7JLgOpcox6.svg
회로도: wiDC_Esquem_C3_A1tico.pdf, wiDC.fzz, wiDC_bb.pdf