프로젝트

나도 메이커! 메이커스 여러분들의 작품/프로젝트를 공유하는 공간입니다.

스마트 폰 거치대 컨트롤러 [PART 1]

2015-07-13 12:05:21

안녕하세요 Sabo 입니다.

요즘 아이디어가 샘솟아 프로젝트 위주로 콘텐츠를 작성하고 있는데요, 그동안 제 콘텐츠에 대한 피드백으로

실용성이 없거나 너무 따라하기 어렵다는 얘기를 많이 들었습니다...ㅠ_ㅠ 그래서 오늘은 대중적으로?! 누구나

한 번쯤 생각해 보았을 법한 주제를 가지고 왔습니다.

 

 

 

 

 

<개요>

 

저는 개인적으로 악기연주를 취미로 하고 있는데요, 자세교정 및 모니터링을 위해 스마트 폰으로 연주 영상을

촬영하는 일이 종종 있습니다. 하지만 혼자 있을 때 스마트폰을 세워두고 각도를 맞추는 등의 작업이 생각보다

까다롭고 힘들었습니다. '편하게 각도를 제어할 수 있는 거치대가 있으면 어떨 까?" 하는 생각에  이 프로젝트를

진행하게 되었습니다.

 

 

이미 시판되고있는 거치대 제품들은 다양한 종류와 독특한 기능들이 있지만, 제 경험상 전자적으로 각도를 제어하는

거치대는 본 적이 없었습니다. 따라서 이번에 만들어 볼 거치대는 기존의 스마트 폰 거치대를 개조?!하여 조이스틱으로

각도를 제어 할 수 있도록 하겠습니다.

 

 

 

 

<필요한 사전 지식>

 

아주 간단한 원리로 만들지만 초보자 분들은 해당 튜토리얼을 꼭! 참고해 주시기 바랍니다.

- 서보모터 제어하기

- 조이스틱 사용하기

 

 

 

<필요한 부품>

 
NO PART QTY ETC
1 Orange Board 1  
2 Servo Motor 2  
3 Joy Stick 1  
4 Bread Board 1  
5 Smartphone cradle 1  

 

 

Orange Board Servo Motor Joy Stick Bread Board Smartphone Cradle

 

 

 

<동영상 미리보기>

 

 

 

<프로젝트 사진>

 

 

 

기구부 외형입니다. 외형이라고 해도 단지 서보모터와 스마트폰 거치대를 각각 수직으로 붙이면 완성입니다.

하단의 서보모터는 (상단의 서보모터와 거치대)를 수평 방향으로 회전 시켜주고, 상단의 서보모터는 (거치대)의

기울기를 조절해 줍니다. 다만 별도의 기구가 없이 서보모터를 붙였기 때문에 스마트 폰을 올려두게 되면 무게로 인해

기울거나 떨어져 나갈 수 있습니다. 강하게 접착시켜주셔야 합니다!

 

 

전자파트 부분입니다. 조이스틱 한가지만 사용되기 때문에 단순한 회로로 연결이 완성됩니다.

(사진에 나타난 다른 모듈과 점퍼 케이블은 무시하셔도 됩니다.)

 

<하드웨어 메이킹>

 

 

 

 

말씀 드린대로 아주 단순한 구조의 회로 입니다. 다만 서보모터에 외부전원을 넣지 않고 사용하기 위해서는

오렌지보드에 USB 전원이 아닌 어댑터 전원을 인가해 주어야 정상적으로 동작합니다.

 

 

<아두이노 코드>

 

#include <servo.h>

Servo Motor_H;     // 하단 서보모터 정의
Servo Motor_V;     // 상단 서보모터 정의

int H = 0;
int V = 0;
int posx = 90;     // 하단 서보모터 각도 초기값
int posy = 90;     // 상단 서보모터 각도 초기값

void setup() 
{
  Serial.begin(9600);
  Motor_H.attach(5);   // 하단 서보모터 5번핀 연결
  Motor_V.attach(6);   // 상단 서보모터 6번핀 연결
  Motor_H.write(90);   // 하단 서보모터 최초 각도 90도
  Motor_V.write(90);   // 상단 서보모터 최초 각도 90도
}

void loop() 
{
  int x, y, sumx, sumy;
  int i, j;

  sumx = 0;
  sumy = 0;

  for(i=0;i<20;i++)       // 조이스틱의 아날로그 값을 20번 추출하여 평균값을 내어줍니다(오차 감소)
  {
    x = analogRead(A0);   // x 변수에 조이스틱 x축 값 저장
    y = analogRead(A1);   // y 변수에 조이스틱 y축 값 저장
    sumx += x;            // sumx에 x 값 누적
    sumy += y;            // sumy에 y 값 누적
  }
  x = sumx / 20;          // sumx를 20으로 나눈 값(평균값)을 x 변수에 저장
  y = sumy / 20;          // sumy를 20으로 나눈 값(평균값)을 y 변수에 저장
  
  if(x <410)              // 조이스틱이 x축 오른쪽으로 움직일 때  
  {
    if(posx<180){posx++;} // x축 각도 오른쪽으로 증가
    else if(posx == 180){}// 서보모터 각도가 180일 경우 동작 안함(최대 각도 180도)
  }
  else if(x > 500)        // 조이스틱이 x축 왼쪽으로 움직일 때
  { 
   if(posx>0){posx--;}    // x축 각도 왼쪽으로 증가
   else if(posx = 0){}    // 서보모터 각도가 0도일 경우 동작 안함(최소 각도 0도)
  }
  if(y < 470)             // 조이스틱이 y축 위쪽으로 움직일 때
  {
    if(posy<180){posy++;} // y축 각도 위쪽으로 증가
    else if(posy==180){}  // 서보모터 각도가 180일 경우 동작 안함
  }
  else if(y > 540)        // 조이스틱이 y축 아래쪽으로 움직일 때
  {
    if(posy>0){posy--;}   // y축 각도 아래쪽으로 증가
    else if(posy==0){}    // 서보모터 각도가 0일 경우 동작 안함
  }

  // 위 에서 계산된 각도 값을 각 상단, 하단 서보모터에 입력  
  Motor_H.write(posx);    
  Motor_V.write(posy);

  // 모니터링 목적의 씨리얼 출력함수
  Serial.print(x);
  Serial.print(" ");
  Serial.println(y);
  delay(10);
}

 

SaBo

서보모터, 조이스틱, 카메라, 각도제어
profile

홍길 2015-07-17 22:54:13

저 잘 모르겠는 부분이 있는데 서보모터를 외부전원 없이 사용하려면 오렌지보드의 USB전원을 어댑터전원으로 인가해주어야 한다는게 무슨 뜻인가요?

profile

이기덕 2015-07-28 11:50:27

오렌지보드에는 보드를 구동시키는 전원 공급단자가 USB단자와 아답터 단자 두가지가 있는데, 서보모터는 전력 소모가 크기때문에 USB 단자를 사용하여 전원을 공급하지말고 어댑터 단자를 이용해서 7~12V 정도의 전력을 공급해줘야 서보모터가 구동을 할 수 있다는것 같습니다.

profile

이혜원 2015-08-08 18:28:54

5번써버는 움직이면 제자리로 다시오는대 외그런는건가요..?
SW 포트는 연결안해도 되나요..?

profile

이세영 2015-10-19 18:40:53

모터 제어 하는게 간단하지 않다는 걸 아두이노 하면서 처음 알았습니다.
어릴때는 배터리만 연결해 주면 돌아가는게 dc모터였는데....

profile

모모 2016-02-01 22:47:41

신기하네요...

profile

우리나라 2016-03-22 13:39:09

안녕하세요..^^; 문의 하고 싶은게 있는데 이걸 이용해서 블루투스를 이용해서 작동시키게 해보려고 하는데
도움좀 받을수 있을까요...
jjangpkk@naver.com 입니당 ㅠ

profile

김수정 2016-04-26 16:56:01

안녕하세요~ 궁금한게 있으면 어디로 연락드리나요? 답변을 빨리 받고싶어서요!!

profile

chaniborg 2018-01-14 17:28:37

스마트폰 거치대는 호환이 되는 모델이 따로 있는건가요?아니면 모든 스마트폰 거치대가 호환이 되는건가요?