본문 바로가기

Arduino/[2] Arduino Module

[Arduino Module] #22. 조이스틱 모듈

728x90
반응형

조이스틱 모듈

아두이노 조이스틱

움직임에 따라 저항값이 변하는 가변저항이 달려있어서 그 값을 이용해 움직임이나 방향등 표현에 활용할 수 있는 모듈이다.

90도 각도로 가변저항이 달려있고, Z 축에 택트스위치가 달려있어 2축+1 온/오프 제어가 가능한 모듈이다.

 

사물을 이동시키는 입력장치로 사용 가능하며, 축(X, Y, Z)이 필요하며, 조이스틱 모듈에는 VCC, GND, VRX, VRY, SW 총 5개의 핀이 존재한다.

 

1. 두 개의 축만 사용할 때는 VRX, VRY를 아날로그 핀에 연결하고 SW를 디지털 핀에 연결해 스위치로 사용한다.
2. X, Y, Z 세 개의 축을 모두 사용할 때는 VRX, VRY, SW를 모두 아날로그 핀에 연결한다.

 

조이스틱의 자세한 내용은 아래 블로그 링크를 참조한다.

 

【 아두이노모듈#14】 Joystick #1(Keyes SJoys) 조이스틱! 사용해보기

【 아두이노모듈#14】 Joystick #1(Keyes SJoys) 조이스틱! 사용해보기 조이스틱은 직관적인 인터페이스 덕분에 활용성이 높으면서도 복잡않아 여러가지 응용 작품을 만들때 자주 사용된다. 주로 움직

rasino.tistory.com

 

  조이스틱은 사실 포텐셔미터(Potentiometer)라고 말할 수 있다.

입력된 전압 값을 기계적인 스틱의 위치 변화(저항값)로 인해 조절하여 출력해 주기 때문이다. 
그래서, 아두이노에서는 아날로그 포트(A0~A6)를 통해서 입력받아야 조이스틱으로서의 기능적인 부분들을 처리할 수 있다.  왜냐하면, 조이스틱의 경우 상하좌우 끝점의 값(디지털 1, 0)만 사용이 되는 것이 아니라, 조이스틱이 움직이는 중간 값들이 존재하고, 또 그 값들이 필요하기 때문이다.  아래 교육 영상을 보면 무슨 말인지 잘 이해될 것이다. 
아날로그 출력 값은 조이스틱에 입력된 전압값(5V)을 기준으로 최솟값(0V)~최댓값(5V)이 출력되는데, 
조이스틱을 움직이지 않은 상태에서는 정 가운데 위치하기 때문에 VRx와 VRy 출력 값이 약 2.5V가 출력된다. (스틱의 기계적이 부분이 있어, 약간의 오차가 있을 수 있다)  

 

핀 설명

- 핀맵은 위쪽부터 GND, VCC, X축, Y축, Z 축(스위치)이다.

- X, Y축은 아날로그 신호이다.

-Z 축(스위치)은 디지털 신호이다.(모듈에 별도의 저항이 없기 때문에 아두이노에 내부풀업을 적용해야 한다.)

회로도 : 아날로그

[ 회로 1 - SW를 아날로그 단자에 연결 -영상과 같은 회로]
스위치 눌림에 따라 값이 입력되도록 하였으며,  따라서 눌림의 정도가 일정하지 않음.

출처: https://rasino.tistory.com/m/entry/%E3%80%90-%EC%95%84%EB%91%90%EC%9D%B4%EB%85%B8%EB%AA%A8%EB%93%8814%E3%80%91-Joystick-1Keyes-SJoys-%EC%A1%B0%EC%9D%B4%EC%8A%A4%ED%8B%B1-%EC%82%AC%EC%9A%A9%ED%95%B4%EB%B3%B4%EA%B8%B0

VCC 5V
GND GND
VRX A0
VRY A1
SW A13

코드 : 아날로그

void setup() {
  Serial.begin(9600);  
  pinMode(SW,INPUT);
}
void loop() {
  // 입력 값을 -100~ 100 사이의 값으로 맵핑(치환)한다
  int Jox = map(analogRead(A0), 0, 1023, -100, 100);
  int Joy = map(analogRead(A1), 0, 1023, -100, 100);
  Serial.print(" Joy X : ");
  Serial.print(Jox);
  Serial.print("    Joy y : ");
  Serial.println(Joy);
  // 조이스틱 SW에서는 눌렀을때 0 ,  떼었을 때 1 이 출력되나,
  // 반대가 되도록 '!'로 반전을 시켰음
  Serial.println(!digitalRead(SW)); //  
  delay(300);
}

회로도 : 디지털

스위치를 디지털 단자에 연결하여 입력의 HIGH / LOW 신호값 구분을 확실하게 하였음,  단, 1㏀~10㏀ 사이의 풀업저항 연결이 필요함.  

VCC 5V
GND GND
VRX A1
VRY A0
SW 디지털 2번 PIN

코드 : 디지털

void setup() {
  Serial.begin(9600);  
  pinMode(SW,INPUT);
}
void loop() {
  // 입력 값을 -100~ 100 사이의 값으로 맵핑(치환)한다
  int Jox = map(analogRead(A0), 0, 1023, -100, 100);
  int Joy = map(analogRead(A1), 0, 1023, -100, 100);
  Serial.print(" Joy X : ");
  Serial.print(Jox);
  Serial.print("    Joy y : ");
  Serial.println(Joy);
  // 조이스틱 SW에서는 눌렀을때 0 ,  떼었을 때 1 이 출력되나,
  // 반대가 되도록 '!'로 반전을 시켰음
  Serial.println(!digitalRead(SW)); //  
  delay(300);
}
728x90
반응형
댓글