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

사람 머리를 로봇 머리로 변신: 아두이노 구동 DIY 프로젝트

부품 및 소모품

Arduino UNO 1개
서보 모터 3개
Android 기기 1개
정전압 전원 보드 (12V, 5V, 3.3V) 1개

필요한 도구 및 장비

앱 및 온라인 서비스

프로젝트 개요

비용 적게 들면서 뭔가 새로운 거 해보고 싶었습니다. 로봇공학 정말 좋아하는데 서보 등 부품 필요해서 망설였죠. 근데 4개 서보 모터가 단 13달러! 이미 LinkIt ONE 보드와 아두이노 보드도 있습니다.

그래서 우리 머리처럼 3축으로 움직이되 저렴한 로봇 머리 만들기로 했습니다. 다양한 센서와 방법 연구하다 결국 손에 있는 것들로 해결. 이 프로젝트하면서 배운 게 많습니다. 배운 점을 굵은 글씨로 표시했습니다.

스마트폰 기울기 센서로 머리 제어하기

1단계: 필요 재료

사람 머리를 로봇 머리로 변신: 아두이노 구동 DIY 프로젝트
사람 머리를 로봇 머리로 변신: 아두이노 구동 DIY 프로젝트
사람 머리를 로봇 머리로 변신: 아두이노 구동 DIY 프로젝트
사람 머리를 로봇 머리로 변신: 아두이노 구동 DIY 프로젝트
사람 머리를 로봇 머리로 변신: 아두이노 구동 DIY 프로젝트
사람 머리를 로봇 머리로 변신: 아두이노 구동 DIY 프로젝트
사람 머리를 로봇 머리로 변신: 아두이노 구동 DIY 프로젝트

사용한 재료

  1. Arduino Uno
  2. LinkIt ONE 보드
  3. 서보 모터 3개
  4. SensoDuino 무료 안드로이드 앱 (여기서 다운로드)
  5. 정전압 전원 보드 (12V, 5V, 3.3V)
  6. 일반 PCB
  7. PCB 수 커넥터
  8. 버려진 알루미늄 급식판 조각
  9. 글루건
  10. 12V, 5V 어댑터
  11. 꾸미기용 기타 물품

왜 LinkIt ONE과 Arduino Uno 둘 다?

LinkIt ONE 보드와 3V 서보 있으면 Arduino UNO 필요 없음. 내 5V 서보가 LinkIt ONE에서 잘 안 돌아감.

Arduino Uno와 블루투스 실드 있으면 LinkIt ONE 필요 없음.

블루투스 실드 없어서 LinkIt ONE + Arduino Uno 조합으로 진행.

2단계: 자체 서보 실드 제작

사람 머리를 로봇 머리로 변신: 아두이노 구동 DIY 프로젝트
사람 머리를 로봇 머리로 변신: 아두이노 구동 DIY 프로젝트
사람 머리를 로봇 머리로 변신: 아두이노 구동 DIY 프로젝트
  1. 아두이노용 서보 모터 실드 제작 (3V 서보 써도 LinkIt ONE은 PWM 핀 2개뿐이니 주의).
  2. 서보 모터용 PCB 실드 형태로 제작.
  3. 이 보드로 아두이노 디지털 핀(3,5,6,9,10,11)에서 서보 6개 제어 가능.
  4. 3선식 서보 사용, 전원은 외부 5V 정전압 전원 보드에서 공급.
  5. 서보 제어 시 아두이노에 어댑터 전원 공급 필수. PC USB 전원은 진동 유발 → 서보 과열 및 손상. (내 서보 하나 고장남)

3단계: LinkIt ONE 연결

사람 머리를 로봇 머리로 변신: 아두이노 구동 DIY 프로젝트
  1. LinkIt ONE이 아두이노와 통신해 서보 제어.
  2. LinkIt ONE Tx → 아두이노 Rx, 양쪽 GND 연결.
  3. 데이터 수신 시 아두이노로 전송.
  4. 참고: 아두이노 블루투스 실드 있으면 한 보드로 전체 제어 가능.

4단계: 서보 위치 설정

사람 머리를 로봇 머리로 변신: 아두이노 구동 DIY 프로젝트
사람 머리를 로봇 머리로 변신: 아두이노 구동 DIY 프로젝트
  1. 모든 서보 모터를 90도로 설정. 위 프로그램(아래 Servoposition.ino) 아두이노에 업로드.
  2. 서보 전원과 아두이노 전원을 정전압 전원 보드 5V, 12V 핀에 연결.
  3. 서보 암 커넥터를 우리가 만든 PCB의 아두이노 디지털 핀 3,5,6 수 커넥터에 연결.
  4. 12V 어댑터를 정전압 전원 보드에 연결.
  5. 어댑터 켜기.
  6. 프로그램대로 모든 모터가 90도 회전.
  7. 로터 건드리지 말고 모터 분리해 조립 준비.
  8. 아두이노 IDE 코드는 Servoposition.ino로 제공

5단계: 설계 계획

사람 머리를 로봇 머리로 변신: 아두이노 구동 DIY 프로젝트
사람 머리를 로봇 머리로 변신: 아두이노 구동 DIY 프로젝트
사람 머리를 로봇 머리로 변신: 아두이노 구동 DIY 프로젝트
  1. 머리가 X, Y, Z 3축 회전.
  2. 회전 종류:
    • Yaw(요) – 좌우 회전
    • Pitch(피치) – 상하 회전
    • Roll(롤) – 좌우 기울이기
  3. 양면테이프로 서보 배치 계획.
  4. 알루미늄 파티션 조각을 L자형으로 잘라 위 서보를 아래 서보에 고정.
  5. 서보 혼(horn)을 계획대로 또는 사진처럼 연결.
  6. 모든 서보 중심이 90도일 때 일직선 되게.
  7. 양면테이프로 서보와 알루미늄 L자 고정, 다른 서보 방해 안 되는지 움직임 확인.

6단계: 본조립

사람 머리를 로봇 머리로 변신: 아두이노 구동 DIY 프로젝트
사람 머리를 로봇 머리로 변신: 아두이노 구동 DIY 프로젝트
사람 머리를 로봇 머리로 변신: 아두이노 구동 DIY 프로젝트
사람 머리를 로봇 머리로 변신: 아두이노 구동 DIY 프로젝트
사람 머리를 로봇 머리로 변신: 아두이노 구동 DIY 프로젝트
  1. 이제 영구 고정.
  2. 양면테이프 하나씩 떼며 글루건으로 영구 고정.
  3. 서보 손상 안 되게 조심.
  4. 서보 커넥터 다시 아두이노에 연결하고 전원 켜기.
  5. 마지막 이미지처럼 모두 일직선 서 있는지 확인.

7단계: 안드로이드 앱 세부사항

사람 머리를 로봇 머리로 변신: 아두이노 구동 DIY 프로젝트
사람 머리를 로봇 머리로 변신: 아두이노 구동 DIY 프로젝트
사람 머리를 로봇 머리로 변신: 아두이노 구동 DIY 프로젝트
사람 머리를 로봇 머리로 변신: 아두이노 구동 DIY 프로젝트
사람 머리를 로봇 머리로 변신: 아두이노 구동 DIY 프로젝트
사람 머리를 로봇 머리로 변신: 아두이노 구동 DIY 프로젝트
  1. 안드로이드 폰에서 SensoDuino 실행. 모든 모바일 센서 읽기 표시 및 블루투스로 전송 가능.
  2. 최신 센서들 나열, 폰에 있는 센서만 선택 가능.
  3. 메뉴 → 블루투스 연결 선택.
  4. 사용 가능한 블루투스 기기 목록 표시.
  5. LinkIt ONE 블루투스 선택.
  6. 우리 프로젝트는 방향 센서(Orientation) 사용. 첫 번째 체크박스 켜고(활성화), 두 번째 체크박스 켜기(블루투스로 데이터 전송).
  7. 메뉴의 성능 옵션에서 각 센서 성능 설정. 읽기 간격 시간 변경.

8단계: 코딩

  1. 코드 2개: LinkIt ONE용, 아두이노용.
  2. LinkIt ONE: 블루투스로 모바일 데이터 수신 → 시리얼 포트로 아두이노 전송.
  3. 아두이노: 시리얼 포트 데이터 수신 → 문자열 연결 → indexOf와 substring으로 전체 데이터 세트 분리 → 다시 indexOf/substring으로 각 위치 추출 → 아두이노 map 함수로 0~180도 서보 제어. 블루투스 실드 쓰면 요구사항 맞게 프로그램 수정.

프로그램 작동 원리

  1. 방향 센서로 로봇 머리를 우리처럼 회전.
  2. a) Yaw: 자북 기준 0~360도. 90~270도 사용, 180도가 서보 90도에 해당. 모자 쓸 때 180도 정면 향하도록.
  3. b) Pitch: 전면 상하. 센서 -180~+180. -90~+90 사용.
  4. c) Roll: 좌우 기울이기. 0→90→0→-90→0. -90~90 사용.

LinkIt ONE 코드는 Linkitonehead.ino로 제공

아두이노 코드는 Arduinohead.ino로 제공

9단계: 보드 적층

사람 머리를 로봇 머리로 변신: 아두이노 구동 DIY 프로젝트
사람 머리를 로봇 머리로 변신: 아두이노 구동 DIY 프로젝트
사람 머리를 로봇 머리로 변신: 아두이노 구동 DIY 프로젝트
  1. 두 실드 보드를 각 마이크로컨트롤러 위에 적층.
  2. 양면테이프로 전부 겹쳐 붙이기.
  3. 단자 쇼트 안 나게 주의.

10단계: 손으로 테스트

모든 전원 켜고 폰을 손에 든 채 테스트. Yaw 180도(정면) 향하게 앉아 폰으로 세 서보 모두 제어.

11단계: 얼굴 부착

사람 머리를 로봇 머리로 변신: 아두이노 구동 DIY 프로젝트
사람 머리를 로봇 머리로 변신: 아두이노 구동 DIY 프로젝트
  1. 크리스마스 시즌이라 산타클로스 인형 많음.
  2. 인형 하나 사서 머리 부분을 양면테이프로 위쪽 서보 암에 고정.

12단계: 제어용 모자 제작

사람 머리를 로봇 머리로 변신: 아두이노 구동 DIY 프로젝트
사람 머리를 로봇 머리로 변신: 아두이노 구동 DIY 프로젝트
사람 머리를 로봇 머리로 변신: 아두이노 구동 DIY 프로젝트
사람 머리를 로봇 머리로 변신: 아두이노 구동 DIY 프로젝트
사람 머리를 로봇 머리로 변신: 아두이노 구동 DIY 프로젝트
사람 머리를 로봇 머리로 변신: 아두이노 구동 DIY 프로젝트
  1. 일반 모자 준비.
  2. 모자 앞부분에 양면테이프 붙이기(사진 참조).
  3. 휴대폰을 양면테이프 위에 부착.

13단계: 테스트 비디오 (저성능)

센서 리프레시 레이트 250밀리초마다일 때

14단계: 최종 비디오 (고성능)

센서 읽기 레이트 100밀리초마다일 때 액션 확인

코드

Servoposition.ino (Arduino)

#include <Servo.h>
Servo leftright;
Servo updown;
Servo shake;

void setup() {
  Serial.begin(9600);
  leftright.attach(3);
  updown.attach(5);
  shake.attach(6);
  leftright.write(90);
  updown.write(90);
  shake.write(90);
}

void loop() { }

Linkitonehead.ino (Arduino)

#include <LBT.h>
#include <LBTServer.h>
int readval;
String inputString = "";
String outputString = "";
int firstpoint=0;
int secondpoint=0;

void setup() {
  if(!LBTServer.begin((uint8_t*)"Sivam_LIO")) return;
  Serial1.begin(9600);
}

void loop() {
  uint8_t buf[64];
  int bytesRead;
  if(LBTServer.connected()) {
    while(true) {
      bytesRead = LBTServer.readBytes(buf, 32);
      if(!bytesRead) break;
      inputString="";
      for(int j=0;j<32;j++) {
        char inChar = char(buf[j]);
        inputString += inChar;
      }
      Serial1.println(inputString);
    }
    delay(100);
  } else {
    LBTServer.accept(5);
  }
}

Arduinohead.ino (Arduino)

#include <Servo.h>
Servo leftright;
Servo updown;
Servo shake;
String inputString = "";
boolean stringComplete = false;
String teststr2, sensorid, sensorrecid, sensorval1, sensorval2, sensorval3;
int S1, S2, S3, startchr=0, endchr=0, rot1, rot2, rot3;

void setup() {
  Serial.begin(9600);
  leftright.attach(3);
  updown.attach(5);
  shake.attach(6);
}

void loop() { }

void serialEvent() {
  while (Serial.available()) {
    char inChar = (char)Serial.read();
    if (inChar != '\n') inputString += inChar;
  }
  startchr = inputString.indexOf('>');
  if (startchr>=0) {
    endchr = inputString.indexOf('>',startchr+1);
    if (endchr>0) {
      teststr2=inputString.substring(startchr,endchr);
      inputString=inputString.substring(endchr);
      startchr = teststr2.indexOf(',');
      sensorid = teststr2.substring(1,startchr);
      endchr = teststr2.indexOf(',',startchr+1);
      sensorrecid=teststr2.substring(startchr+1,endchr);
      startchr=endchr;
      endchr = teststr2.indexOf(',',startchr+1);
      sensorval1=teststr2.substring(startchr+1,endchr);
      startchr=endchr;
      endchr = teststr2.indexOf(',',startchr+1);
      sensorval2=teststr2.substring(startchr+1,endchr);
      startchr=endchr;
      sensorval3=teststr2.substring(startchr+1);
      S1=sensorval1.toInt(); S2=sensorval2.toInt(); S3=sensorval3.toInt();
      rot1=map(S1, 90, 270, 180, 0); if (rot1<0) rot1=0; else if (rot1>180) rot1=180;
      rot2=map(S2, -90, 90, 0, 180); if (rot2<0) rot2=0; else if (rot2>180) rot2=180;
      rot3=map(S3, 90, -90, 0, 180); if (rot3<0) rot3=0; else if (rot3>180) rot3=180;
      if (rot1!=0 && rot1!=180) leftright.write(rot1);
      if (rot1!=0 && rot1!=180) updown.write(rot2);
      if (rot1!=0 && rot1!=180) shake.write(rot3);
      delay(15);
    }
  }
}

제조공정

  1. DIY 월-E 영감 라즈베리 파이 CD-박스 로봇
  2. 구르는 알람 로봇: 라즈베리 파이와 구글 캘린더 연동 스마트 모바일 기상 시스템
  3. RasPiRobot Board V2: 라즈베리 파이를 강력한 로봇 컨트롤러로 확장하기
  4. 아두이노로 만드는 모터 구동 마인크래프트 크리퍼 로봇
  5. 아르키메데스: 감정 감지 AI 로봇 올빼미
  6. 윈도우 10 IoT 코어로 음성·컴퓨터 비전 로봇 만들기
  7. ROS 로봇: 라즈베리파이 터미널 제어 내비게이션
  8. 마이크로소프트 키넥트와 라즈베리파이 연동: 손비 로봇 실시간 인간 감지
  9. 심플 파이 로봇 – 라즈베리파이로 2WD 자율 로버 만들기
  10. 진정한 자산: 리테일 운영에서 인적 자본의 가치