산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

레고 월-E 로봇 아두이노 나노로 만들기: 단계별 완벽 가이드

부품 및 소모품

부품 수량 비고
레고 월-E (21303, 단종으로 중고 구매 필요) 1
아두이노 나노 R3 1
DC 모터 (범용) 2
L298N 듀얼 모터 드라이버 1
바이컬러 LED (3핀, 적/녹) 1
적외선 장애물 센서 1 거리 조절 나사 있음
부저 (멜로디 재생 가능) 1
9V 건전지 1
저항 330Ω 3 LED, 부저용
점퍼 와이어 20개

필요 도구

앱 및 온라인 서비스

프로젝트 소개

영화 <월-E>의 노란 주인공이 지구를 청소하는 모습을 모두 아실 겁니다. 이 프로젝트에서는 레고 월-E에 장애물 회피 기능을 심어줬습니다. 제 첫 전자공학 프로젝트이자 훌륭한 학습 경험이었습니다.

1단계: 코드 설계

소프트웨어 개발자 출신이라 원하는 동작을 먼저 코드로 구상했습니다.

모터 정지 시 역기전압 스파이크로 부품 손상 우려가 있어, 리셋 후 2초 대기 후 동작 개시하도록 했습니다. 부팅 멜로디(C-E-G-C5) 재생 후 시작합니다.

적외선 센서는 뒷면 나사로 감지 거리 조절 가능해 별도 거리 계산 로직 불필요. 초음파 센서를 처음 고려했으나 눈 부분에 안 들어가 적외선으로 대체했습니다.

전체 스케치 (Wall_e_control.ino)

#define INFRA_RED 9
#define GREEN_LED 7
#define RED_LED 8
#define BUZZER 10       // PWM 핀 필수

#define MR_1 A1         // 오른쪽 모터 방향 1
#define MR_2 A2         // 오른쪽 모터 방향 2
#define MR_ENABLE 5     // 오른쪽 모터 속도 (PWM)
#define ML_1 A3         // 왼쪽 모터 방향 1
#define ML_2 A4         // 왼쪽 모터 방향 2
#define ML_ENABLE 6     // 왼쪽 모터 속도 (PWM)

const int NORMAL_SPEED = 255;

void setup() {
  delay(2000); // 전압 스파이크 방지용 대기
  pinMode(GREEN_LED, OUTPUT);
  pinMode(RED_LED, OUTPUT);
  digitalWrite(RED_LED, LOW);
  digitalWrite(GREEN_LED, HIGH);
  
  pinMode(MR_ENABLE, OUTPUT); pinMode(MR_1, OUTPUT); pinMode(MR_2, OUTPUT);
  pinMode(ML_ENABLE, OUTPUT); pinMode(ML_1, OUTPUT); pinMode(ML_2, OUTPUT);
  
  pinMode(INFRA_RED, INPUT);
  randomSeed(analogRead(0));
  playHello();
}

void loop() {
  driveForwards(NORMAL_SPEED);
  digitalWrite(RED_LED, LOW); digitalWrite(GREEN_LED, HIGH);
  
  if (digitalRead(INFRA_RED) == LOW) { // 장애물 감지 (LOW=감지)
    digitalWrite(GREEN_LED, LOW); digitalWrite(RED_LED, HIGH);
    stopDriving(); playUhOh();
    
    // 좌측 확인
    turnLeft(500);
    boolean obstacleLeft = (digitalRead(INFRA_RED) == LOW);
    delay(100); turnRight(500); delay(500);
    
    // 우측 확인
    turnRight(500);
    boolean obstacleRight = (digitalRead(INFRA_RED) == LOW);
    delay(100); turnLeft(500);
    
    // 탈출 로직
    if (obstacleLeft && obstacleRight) {
      driveBackwards(NORMAL_SPEED/3);
      for(int i=0;i<5;i++){ tone(BUZZER,1000,500); delay(1000); }
      randomTurn(800,1600);
    } else if (obstacleLeft) turnRight(1000);
    else if (obstacleRight) turnLeft(1000);
    else randomTurn(1000,1800);
  }
  
  // 랜덤 상호작용
  if (random(100) == 0) randomTurn(200,2000);
}

// --- 모터 제어 함수들 ---
void driveForwards(int s) { digitalWrite(MR_1,LOW); digitalWrite(MR_2,HIGH); digitalWrite(ML_1,HIGH); digitalWrite(ML_2,LOW); setSpeed(s); }
void driveBackwards(int s){ digitalWrite(MR_1,HIGH); digitalWrite(MR_2,LOW); digitalWrite(ML_1,LOW); digitalWrite(ML_2,HIGH); setSpeed(s); }
void turnLeft(int d) { digitalWrite(MR_1,HIGH); digitalWrite(MR_2,LOW); digitalWrite(ML_1,HIGH); digitalWrite(ML_2,LOW); setSpeed(NORMAL_SPEED/2); delay(d); stopDriving(); }
void turnRight(int d){ digitalWrite(MR_1,LOW); digitalWrite(MR_2,HIGH); digitalWrite(ML_1,LOW); digitalWrite(ML_2,HIGH); setSpeed(NORMAL_SPEED/2); delay(d); stopDriving(); }
void stopDriving(){ digitalWrite(MR_1,LOW); digitalWrite(MR_2,LOW); digitalWrite(ML_1,LOW); digitalWrite(ML_2,LOW); digitalWrite(MR_ENABLE,LOW); digitalWrite(ML_ENABLE,LOW); }
void setSpeed(int s){ s=constrain(s,0,255); analogWrite(MR_ENABLE,s); analogWrite(ML_ENABLE,s); }
void randomTurn(int mn,int mx){ int d=random(mn,mx); if(millis()%2) turnRight(d); else turnLeft(d); }
void playHello(){ tone(BUZZER,262,250); delay(300); tone(BUZZER,330,250); delay(300); tone(BUZZER,392,250); delay(300); tone(BUZZER,523,500); delay(550); }
void playUhOh(){ tone(BUZZER,523,250); delay(300); tone(BUZZER,415,500); delay(600); }

2단계: 배선 및 조립

눈(적외선 센서) 장착

센서 분해 → 레고 핀을 센서에 순간접착제로 고정 (눈 위아래 움직임 가능) → 블루택(Blu-Tack)으로 레고 부품 재조립해 센서 감싸기

레고 월-E 로봇 아두이노 나노로 만들기: 단계별 완벽 가이드

모터 및 휠 연결

모터에 납땜으로 와이어 연장 → 레고 테크닉 핀 대량 구매 → 모터 샤프트에 석고 붕대(플라스터 테이프) 감아 핀에 끼움 → 마찰로 풀리면 슈퍼글루로 보강

레고 월-E 로봇 아두이노 나노로 만들기: 단계별 완벽 가이드

전자장치 수납

가슴 일부 개방해 LED 장착 → 모든 부품 배선 연결 → 모터 실드(L298N)가 배(복부)에 아슬아슬하게 수납됨

레고 월-E 로봇 아두이노 나노로 만들기: 단계별 완벽 가이드

레고 월-E 로봇 아두이노 나노로 만들기: 단계별 완벽 가이드

배선 다이어그램 (색상 코드)

레고 월-E 로봇 아두이노 나노로 만들기: 단계별 완벽 가이드

전원 회로 설계 노하우

모터 실드에서 모터에 직접 전원 공급(최대 토크 확보)하면서 아두이노와 센서에도 5V 공급 필요 → 모터 실드의 5V 출력 핀을 아두이노 5V 핀에 입력으로 연결 (일반적으론 권장 안 하나, 이 실드는 정전압 5V 출력이라 안전). Vin 핀은 강압 레귤레이터가 있어 3.8V 정도로 떨어져 아두이노 구동 불충분. 대신 Vin으로 적외선 센서에 5V 공급.

3단계: 월-E 작동 영상

장애물 회피, 코너 탈출 테스트 영상 확인 (원문 링크 참조).

향후 개선 계획

그렇게 월-E는 영원히 행복하게 살았습니다. 끝.

회로도 (프리칭 파일)

wall-e2_3P6X71BCnP.fzz

제조공정

  1. K30 CO2 센서: 실시간 실내 공기질 모니터링
  2. 1Sheeld와 아두이노로 시각/청각 장애인 간 소통 돕기
  3. 스마트 저금통 만들기: 아두이노 나노로 동전 인식기 제어하기
  4. 아두이노 우노로 만드는 자동 레고 스타워즈 슈터
  5. 서보 모터 구동 장애물 회피 로봇: 아두이노 & HC-SR04로 제작하기
  6. 아두이노 블루투스로 LED 제어하기 - HC-05 & MIT App Inventor 입문 가이드
  7. DFRobot 정전식 지문 인식 센서 아두이노/ESP8266 연동 가이드
  8. 아두이노 우노로 자율 주행 라인 트레이서 로봇 만들기
  9. 아두이노 메가와 센서를 활용한 인터랙티브 넥시온 HMI 프로젝트
  10. 아두이노 메가 기반 닌텐도 눙크 컨트롤 6자유도 로봇 암 키트