와이파이 제어 FPV 로버 로봇: 아두이노 & ESP8266 DIY 가이드
부품 및 소모품
부품 수량
아두이노 UNO 1
아두이노 프로토 실드 1
Espressif ESP8266 ESP-01 1
28BYJ 스테퍼 모터 2
ULN2003 스테퍼 드라이버 1
안드로이드 기기 1
저항 1kΩ 1
저항 100kΩ 2
파워 뱅크 1
42x19mm 고무 트레드 휠 2
49x20x32mm 스틸 볼 옴니 휠 1
M2 x 10mm 볼트 12
M2 x 1.5mm 너트 12
M3 x 10mm 볼트 8
M3 x 1.5mm 너트 8
5/32" x 1" 볼트 3
5/32" 너트 6
핸드헬드 셀카봉 클립 1
3x3cm 알루미늄 브래킷 2
2mm 아크릴 시트 1
필요한 도구 및 장비
앱 및 온라인 서비스
IP Webcam
Autodesk Fusion 360
Draftsight
아두이노 IDE
Notepad++
프로젝트 소개
이 튜토리얼에서는 아두이노 UNO와 ESP8266 와이파이 모듈, 두 개의 스테퍼 모터를 연결하여 와이파이 네트워크를 통해 원격 제어되는 2륜 로봇 로버를 설계하는 방법을 보여줍니다. 로봇은 HTML로 설계된 인터페이스를 사용하여 일반 인터넷 브라우저에서 제어할 수 있습니다. 안드로이드 스마트폰을 사용하여 로봇의 비디오와 오디오를 운영자의 제어 인터페이스로 브로드캐스트합니다.
온라인에서 다양한 모양, 크기, 가격의 로봇 키트를 구할 수 있습니다. 하지만 용도에 따라 어느 것도 맞지 않을 수 있고, 실험용으로는 너무 비쌀 수 있습니다. 아니면 완제품을 사는 대신 직접 기계 구조를 만들고 싶을 수도 있습니다. 이 튜토리얼에서는 3D 프린터나 레이저 커터 같은 비싼 장비 없이 일반 도구만으로 저렴한 아크릴 프레임을 설계하고 제작하는 방법도 보여줍니다. 간단한 로봇 플랫폼을 제시합니다.
이 가이드는 모양이나 제어 인터페이스를 변경하도록 적용할 수 있습니다. 제 다른 로봇 프로젝트("Robô da Alegria")에도 적용되었습니다. 아래 링크에서 확인하세요:
[경고: 일부 사진은 디자인이 개선되어 구버전입니다. 하지만 여기에 제시된 아이디어는 여전히 유효합니다.]
1단계: 도구
이 프로토타입 제작에 필요한 도구:
핸드 쏘 (아크릴 시트 초기 절단용)
드라이버 (볼트 및 너트 체결용)
자 (치수 측정용)
유틸리티 나이프 (아크릴 시트 절단용)
드릴링 머신 (볼트 구멍 뚫기용)
사포 (거친 가장자리 다듬기용)
2단계: 기계 구조 및 재료
커스텀 로봇을 만들려면 먼저 기계 구조를 설계해야 합니다. 용도에 따라 간단할 수도, 세부 사항과 제약이 많을 수도 있습니다. 3D CAD 소프트웨어로 설계하거나 복잡도에 따라 2D로 그려도 됩니다.
직접 기계 구조를 만들고 싶지 않다면 온라인에서 완제품 구조를 구매할 수도 있습니다. 이 경우 6단계로 건너뛰세요.
이 튜토리얼에서는 모터와 기타 부품 장착을 위한 저렴한 아크릴 프레임을 설계했습니다. 이 구조는 123D Design CAD 소프트웨어로 3D 설계되었고, 각 파트는 Draftsight 소프트웨어로 2D로 변환되었습니다.
사용된 재료:
2mm 아크릴 시트
42x19mm 고무 트레드 휠 (x2)
49x20x32mm 스틸 볼 옴니 휠 (x1)
M2 x 10mm 볼트 (x12)
M2 x 1.5mm 너트 (x12)
M3 x 10mm 볼트 (x8)
M3 x 1.5mm 너트 (x8)
5/32" x 1" 볼트 (x3)
5/32" 너트 (x6)
핸드헬드 셀카봉 클립
3x3cm 알루미늄 브래킷 (x4)
베이스 구조 제작 단계:
2D 도면 치수에 맞춰 아크릴 베이스 절단
2D 도면에 표시된 위치에 구멍 뚫기
3D 도면에 따라 볼트와 너트로 부품 장착
안타깝게도 스테퍼 모터 샤프트 직경이 휠 구멍보다 큽니다. 이 부품들을 결합하려면 접착제가 필요할 겁니다. 이 튜토리얼에서는 모터 샤프트와 휠 사이에 나무 커플링을 임시로 만들었습니다.
FMAR9JBITKJE83H.123dx F21RD24ITKJE8AJ.dwg FPTGSODITKJE8AN.pdf
3단계: 구조 절단
모델 치수를 아크릴 시트에 전송해야 합니다. 2D 도면을 일반 프린터로 접착지에 인쇄한 후 적절한 크기로 자르고 아크릴 표면에 마스크로 붙이세요.
핸드 쏘로 치수대로 아크릴을 자르거나 아래 설명된 브레이크 기법을 사용하세요.
유틸리티 나이프와 자/스케일로 직선으로 아크릴을 긋습니다. 끝까지 자를 필요 없이 나중에 부러뜨릴 트랙만 만드세요.
아크릴을 평평한 표면에 놓고 클램프로 고정한 후 압력을 가해 두 조각으로 부러뜨리세요. 모든 절단이 끝날 때까지 반복하고, 사포로 거친 가장자리를 다듬으세요.
4단계: 베이스 구멍 뚫기
2D 도면에 표시된 위치(마스크 표시)에 드릴링 머신으로 구멍을 뚫으세요.
아크릴은 비교적 뚫기 쉽습니다. 드릴링 머신이 없으면 유틸리티 나이프 같은 날카로운 도구로 수동으로 뚫거나 작은 구멍을 볼트 크기로 확대할 수 있습니다.
마스크를 제거하면 베이스가 준비됩니다.
5단계: 구조 조립
이미지에 따라 볼트와 너트로 부품을 장착하면 구조가 완성됩니다.
M3 볼트는 스테퍼 모터 설치용, 5/32" 볼트는 전면 휠과 스마트폰 클립 설치용입니다.
이제 잠시 쉬고 다음 단계에서 회로를 조립하세요...
6단계: 전자 회로
필요한 전자 부품:
아두이노 UNO
ESP8266
프로토실드 (더 컴팩트한 버전) 또는 일반 브레드보드
1kΩ 저항 (x2)
10kΩ 저항 (x1)
점퍼 와이어 몇 개
ULN2003 드라이버 포함 스테퍼 모터 (x2)
컴퓨터 (아두이노 코드 컴파일 및 업로드용)
파워 뱅크
USB 케이블
회로 조립에 특별한 도구는 필요 없습니다. 모든 부품은 즐겨 찾는 온라인 쇼핑몰에서 구할 수 있습니다. 회로는 아두이노 USB 포트에 연결된 파워 뱅크로 전원 공급됩니다.
회로도에 따라 모든 부품을 연결하세요. ESP-01 모듈과 스테퍼 모터 연결용 점퍼 와이어가 필요합니다. 프로토실드(더 컴팩트), 일반 브레드보드, 또는 직접 아두이노 실드 설계를 사용하세요. USB 케이블을 아두이노 UNO에 연결하고 다음 단계로 진행하세요.
7단계: 아두이노 코드
최신 아두이노 IDE를 설치하세요. 이 프로젝트에서는 스테퍼 모터 제어용 stepper.h 라이브러리를 사용했습니다. ESP-01 모듈 통신용 추가 라이브러리는 필요 없습니다. 본인의 ESP8266 보드레이트를 확인하고 코드에 제대로 설정하세요.
아두이노 코드(stepperRobot.ino)를 다운로드하고 XXXXX를 와이파이 공유기 SSID로, YYYYY를 공유기 비밀번호로 바꾸세요. 아두이노 보드를 컴퓨터 USB 포트에 연결하고 코드를 업로드하세요.
FG1K5KJITKJFW2R.ino
8단계: 안드로이드 IP 캠
안드로이드 스마트폰으로 로봇의 비디오와 오디오를 제어 인터페이스로 브로드캐스트합니다. 구글 플레이 스토어에서 앱을 찾으세요 (https://play.google.com/store/apps/details?id=com.pas.webcam ).
설치하고 다음 단계로 이동하세요.
9단계: 회로를 로봇에 장착
이미지와 같이 M1 볼트로 로봇 상단에 회로를 설치하세요.
그 후 파워 뱅크를 양면 테이프로 로봇 뒤쪽에 붙이고(나중에 쉽게 떼어내기 위해), 스마트폰을 클립에 장착하세요.
10단계: 웹 기반 제어 인터페이스
로봇 제어용 HTML 인터페이스를 설계했습니다.
interface.rar을 다운로드하고 모든 파일을 폴더에 압축 해제한 후 파이어폭스로 여세요.
텍스트박스 폼으로 ESP 모듈 IP 주소와 비디오/오디오 서버 IP 주소(안드로이드 IP Webcam 앱)를 입력합니다.
테스트 버튼이 있어 다른 명령이 수신될 때까지 로봇이 회전합니다. 키보드 방향키로 로봇을 전진/후진, 좌/우 회전시킵니다.
FQTAWF5ITKJFW4O.rar
11단계: 사용법
아두이노를 재시작하면 자동으로 와이파이 네트워크에 연결을 시도합니다. 시리얼 모니터로 연결 성공 여부를 확인하고 공유기가 ESP-01에 할당한 IP를 확인하세요. 인터넷 브라우저(파이어폭스)에서 HTML 파일을 열고 이 IP 주소를 텍스트박스에 입력하세요.
기타 방법으로도 공유기가 기기에 할당한 IP 주소를 확인할 수 있습니다.
아두이노 UNO를 컴퓨터에서 분리하고 파워 뱅크에 연결하세요. 다시 연결될 때까지 기다리세요.
로봇에 부착된 스마트폰에서 IP Webcam 앱을 실행하세요. 제어 인터페이스에 비디오/오디오 IP를 입력하고 서버에 연결하면 준비 완료. 앱에서 비디오 해상도를 낮춰 전송 지연을 줄일 수 있습니다.
키보드 방향키를 누르고 있으면 로봇이 회전하거나 전진/후진합니다. 즐겁게 주변을 탐험하세요!
코드
아두이노 코드
// 라이브러리 포함
#include <SoftwareSerial.h>
#include <Stepper.h>
SoftwareSerial esp8266(3, 2); // RX=3, TX=2
// 변수 정의
#define DEBUG true // ESP8266과 아두이노 간 메시지를 시리얼 포트에 표시
const int stepsPerRevolution = 500;
int state = 5;
Stepper rightStepper(stepsPerRevolution, 8,10,9,11);
Stepper leftStepper(stepsPerRevolution, 4,6,5,7);
// 설정
void setup() {
Serial.begin(9600);
esp8266.begin(19200);
sendData("AT+RST\r\n", 2000, DEBUG); // 모듈 리셋
sendData("AT+CWMODE=1\r\n", 1000, DEBUG); // 스테이션 모드 설정
sendData("AT+CWJAP=\"XXXXX\",\"YYYYY\"\r\n", 2000, DEBUG); // 와이파이 연결
while(!esp8266.find("OK")) { } // 연결 대기
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에서 웹 서버 시작
rightStepper.setSpeed(60);
leftStepper.setSpeed(60);
}
void loop() {
if (esp8266.available()) {
if (esp8266.find("+IPD,")) {
String msg;
esp8266.find("?");
msg = esp8266.readStringUntil(' ');
String command = msg.substring(0, 3);
String valueStr = msg.substring(4);
int value = valueStr.toInt();
if (DEBUG) { Serial.println(command); Serial.println(value); }
// 전진
if(command == "cm1") { state = 1; }
// 후진
if(command == "cm2") { state = 2; }
// 우회전
if(command == "cm3") { state = 3; }
// 좌회전
if(command == "cm4") { state = 4; }
// 정지
if(command == "cm5") { state = 5; }
}
}
// 전진
if (state == 1) { rightStepper.step(1); leftStepper.step(-1); }
// 후진
if (state == 2) { rightStepper.step(-1); leftStepper.step(1); }
// 우회전
if (state == 3) { rightStepper.step(1); leftStepper.step(1); }
// 좌회전
if (state == 4) { rightStepper.step(-1); leftStepper.step(-1); }
// 정지
if (state == 5) { }
}
// 보조 함수
String sendData(String command, const int timeout, boolean debug) {
String response = "";
esp8266.print(command);
long int time = millis();
while ((time + timeout) > millis()) {
while (esp8266.available()) {
char c = esp8266.read();
response += c;
}
}
if (debug) { Serial.print(response); }
return response;
}
HTML 제어 인터페이스
미리보기 불가 (다운로드만 가능)
커스텀 파트 및 인클로저
123D 디자인 파일.
robot.123dx
베이스 2D 설계.
base.dwg
회로도
회로 회로도, 브레드보드 연결, 프리칭 파일
wistepper%20-%20rev1.fzz