중급 예제

약간은 익숙하시거나 익숙해지셨나요? 그렇다면 조금더 깊이 다뤄볼까요?

조이스틱센서쉴드 사용하기

2014-10-14 14:28:22

개요

조이스틱 쉴드를 사용해 보자.




조이스틱 쉴드에는 조이스틱 한개와 키6개가 달려있는데 흡사 모습이 80년대생 사람이라면 알만한 추억의 패미컴 게임패드와 비슷하다.


조이스틱 쉴드로도 충분히 이런 패드의 역할을 대신할 수 있으며, 사용방법도 간단하기 때문에 쉽게 코딩도 가능하다.
조이스틱은 x축 y축으로 아날로그의 값을 출력하기 때문에 다양한 경우의 수를 만들어 낼 수 있으며, 6개의 버튼은 디지털 값을 출력하여 눌렀을 경우, 안눌렀을 경우를 구분할 수 있다.

이번 튜토리얼에서는 조이스틱 쉴드를 사용하여 팬틸트서보모터를 제어해 보자.

동영상

 

부품 목록

NO 부품명 수량 상세설명
1 아두이노 1 오렌지 보드
2 브레드 보드 1  
3 조이스틱 쉴드 1  
4 팬틸트 서보모터 1 미니
5 점퍼케이블 8  

 

부품명 아두이노 브레드 보드 조이스틱 쉴드 팬틸트 서보모터 점퍼케이블
부품
사진

 

하드웨어 making

브레드보드

 

 

전자회로도
 

 

 

소프트웨어 coding

#include <Servo.h> 

//서보모터 객체 2개 생성
Servo pan;
Servo tilt;

//디지털 2번부터 8번까지 버튼으로 사용, 아날로그 0번과 1번은 조이스틱으로 사용
int up_button = 2;
int right_button = 3;
int down_button = 4;
int left_button = 5;
int start_button = 6;
int select_button = 7;
int analog_button = 8;
int x_axis = A0;
int y_axis = A1;

//서보모터의 기본 각도를 90으로 설정
int panAngle = 90;
int tiltAngle = 90;

void setup() 
{ 
   //핀번호 설정 및 시리얼통신 초기화
   pan.attach(9);  
   tilt.attach(10);  
   pinMode (up_button, INPUT);
   pinMode (down_button, INPUT);
   pinMode (left_button, INPUT);
   pinMode (right_button, INPUT);
   pinMode (select_button, INPUT);
   pinMode (start_button, INPUT);
   pinMode (analog_button, INPUT);
   digitalWrite (up_button, HIGH);
   digitalWrite (down_button, HIGH);
   digitalWrite (left_button, HIGH);
   digitalWrite (right_button, HIGH);
   digitalWrite (select_button, HIGH);
   digitalWrite (start_button, HIGH);
   digitalWrite (analog_button, HIGH);
   Serial.begin(9600);
   delay(10);
 }
void loop() 
{ 
  //조이스틱 움직임에 따라 팬틸트서보모터의 각도가 1도씩 변하게 한다.
  if(analogRead(x_axis) > 1000)
    panAngle -= 1;
  else if(analogRead(x_axis) == 0)
    panAngle += 1;
  if(analogRead(y_axis) > 1000)
    tiltAngle -= 1;
  else if(analogRead(y_axis) == 0)
    tiltAngle += 1;

  //버튼을 누르면 버튼의 위치방향으로 최대각도로 꺽인다.
  if(!digitalRead(up_button))
    tiltAngle = 180;
  if(!digitalRead(down_button))
    tiltAngle = 0;
  if(!digitalRead(right_button))
    panAngle = 180;
  if(!digitalRead(left_button))
    panAngle = 0;

   pan.write(panAngle);
   tilt.write(tiltAngle);

   delay(10);
}

조이스틱쉴드를 사용하여 서보모터2개를 제어한다. 서보모터의 기본값은 90도로 시작하며 조이스틱의 움직임에 따라 각각의 서보모터의 각도는 ±1도씩 증감하게 된다.
조이스틱을 위 아래로 움직일 경우에는 Tilt 서보모터를 제어하고, 조이스틱을 양옆으로 움직일 경우에는 pan 서보모터를 제어한다.

버튼으로는 그 방향으로 각도를 최대로 꺽는다. up,down,right,left 4개만을 사용하며 Up버튼을 눌렀을 경우 tilt 서보모터가 위로 최대로 움직이게 되며, right버튼을 눌렀을 경우 pan 서보모터가 오른쪽으로 최대로 움직이게 된다.
 

kocoafabeditor

항상 진취적이고, 새로운 것을 추구하는 코코아팹 에디터입니다!

조이스틱쉴드, 아두이노, 오렌지보드