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를 모두 아날로그 핀에 연결한다. |
조이스틱의 자세한 내용은 아래 블로그 링크를 참조한다.
※ 조이스틱은 사실 포텐셔미터(Potentiometer)라고 말할 수 있다.
입력된 전압 값을 기계적인 스틱의 위치 변화(저항값)로 인해 조절하여 출력해 주기 때문이다.
그래서, 아두이노에서는 아날로그 포트(A0~A6)를 통해서 입력받아야 조이스틱으로서의 기능적인 부분들을 처리할 수 있다. 왜냐하면, 조이스틱의 경우 상하좌우 끝점의 값(디지털 1, 0)만 사용이 되는 것이 아니라, 조이스틱이 움직이는 중간 값들이 존재하고, 또 그 값들이 필요하기 때문이다. 아래 교육 영상을 보면 무슨 말인지 잘 이해될 것이다.
아날로그 출력 값은 조이스틱에 입력된 전압값(5V)을 기준으로 최솟값(0V)~최댓값(5V)이 출력되는데,
조이스틱을 움직이지 않은 상태에서는 정 가운데 위치하기 때문에 VRx와 VRy 출력 값이 약 2.5V가 출력된다. (스틱의 기계적이 부분이 있어, 약간의 오차가 있을 수 있다)
- 핀맵은 위쪽부터 GND, VCC, X축, Y축, Z 축(스위치)이다.
- X, Y축은 아날로그 신호이다.
-Z 축(스위치)은 디지털 신호이다.(모듈에 별도의 저항이 없기 때문에 아두이노에 내부풀업을 적용해야 한다.)
회로도 : 아날로그
[ 회로 1 - SW를 아날로그 단자에 연결 -영상과 같은 회로]
스위치 눌림에 따라 값이 입력되도록 하였으며, 따라서 눌림의 정도가 일정하지 않음.
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
반응형
'Arduino > [2] Arduino Module' 카테고리의 다른 글
[Arduino Module] #23. 센서모듈(MPU6050) (0) | 2024.04.01 |
---|---|
[Arduino Module] #22. 레이저 발광 (0) | 2024.04.01 |
[Arduino Module] #20. 적외선 발광/수광 모듈 (1) | 2024.03.26 |
[Arduino Module] #19. 디지털 온도센서 모듈 (1) | 2024.03.26 |
[Arduino Module] #18. 아날로그 온도센서 모듈 (1) | 2024.03.25 |