본문 바로가기
카테고리 없음

아두이노(Arduino) 아날로그 입력과 출력(Part 4. 조이스틱(Joystick) 모듈과 LED)

by 드린이 2023. 2. 23.

안녕하세요!! 드린이입니다 ::))

 

지난 포스팅을 통해서 아두이노(Arduino)의 아날로그 출력을 이용하여 Step 모터와 초음파 센서를 이용한 자동문 기능을 구현해 보았습니다. 오늘은 조이스틱(Joystick) 모듈과 LED를 결합한 예제를 만들어 보도록 하겠습니다.


조이스틱(Joystick) 모듈

게이밍 조이스틱(Joystick) 모듈

조이스틱(Joystick) 모듈은 방향키를 대신하는 것으로, 커서의 방향을 쉽게 움직이기 위한 포인팅 장치의 하나입니다. 조이스틱(Joystick) 모듈은 5핀으로 구성되어 있으며, 각 핀은 VCC, GND, VRX, VRY, SW입니다.


핀의 용도

조이스틱(Joystick) 모듈 핀의 용도


VCC 핀과 GND 핀은 조이스틱(Joystick) 모듈의 전원을 공급하는 핀입니다. VRX 핀은 X 축의 이동을 감지하며, VRY 핀은 Y 축의 이동을 감지하는 핀입니다. SW 핀은 스위치 작용을 하는 핀입니다.

 

조이스틱(Joystick) 모듈

조이스틱(Joystick) 모듈 핀 연결

조이스틱(Joystick) 모듈의 핀 연결은 크게 3축을 사용할 때와 2축을 사용할 때로 구분되는데, 3축을 사용할 때는 VRX, VRY, SW 모두 A0~A5번의 아날로그 핀에 연결하여야 합니다. 또 2축을 사용할 경우는 VRX, VRY은 아날로그 핀에, SW는 디지털 핀에 연결하여야 합니다. 이때, SW는 0과 1로 동작합니다.

 

조이스틱(Joystick) 모듈 예제1

조이스틱(Joystick) 모듈의 기능을 확인하기 위하여 아래의 그림과 같이 조이스틱(Joystick) 모듈과 아두이노(Arduino) UNO 보드를 연결하고 코드를 입력합니다.

조이스틱(Joystick) 모듈 연결도

int joystick_x = A0;
int joystick_y = A1;
int joystick_z = 0;

void setup() {
  pinMode(joystick_z,INPUT);
  Serial.begin(9600);
}

void loop() {
  int x = analogRead(joystick_x);
  int y = analogRead(joystick_y);
  int z = digitalRead(joystick_z);

  Serial.print("X: ");
  Serial.print(x);
  Serial.print("\tY: ");
  Serial.print(y);
  Serial.print("\tZ: ");
  Serial.println(z);

  delay(1000);
}

 

코드 입력을 완료하고 아두이노(Arduino) UNO 보드에 업로드하면, 조이스틱(Joystick) 모듈의 움직임에 따라 해당하는 값이 시리얼 모니터에 표시되는 모습을 확인할 수 있습니다.

 

조이스틱(Joystick) 모듈 예제 2

조이스틱(Joystick) 모듈의 움직임을 조금 더 직관적으로 보기 위하여 LED와 결합하여 회로를 추가해 보겠습니다. 조이스틱(Joystick) 모듈의 움직임에 따라서 해당하는 LED가 ON 되도록 해보겠습니다. 아래의 그림과 같이 조이스틱(Joystick) 모듈과 LED 그리고 아두이노(Arduino) UNO 보드를 연결하고 코드를 입력합니다.

조이스틱(Joystick) 모듈 연결도

int joystick_x = A0;
int joystick_y = A1;
int joystick_z = 0;

void setup() {
  pinMode(joystick_z,INPUT);
  Serial.begin(9600);

  pinMode(4,OUTPUT);
  pinMode(5,OUTPUT);
  pinMode(6,OUTPUT);
  pinMode(7,OUTPUT);

}

void loop() {
  int x = analogRead(joystick_x);
  int y = analogRead(joystick_y);
  int z = digitalRead(joystick_z);

  Serial.print("X: ");
  Serial.print(x);
  Serial.print("\tY: ");
  Serial.print(y);
  Serial.print("\tZ: ");
  Serial.println(z);

  if(x<300){
    digitalWrite(4,HIGH);
  }
  else if(x>700){
    digitalWrite(5,HIGH);
  }
  else{
    digitalWrite(4,LOW);
    digitalWrite(5,LOW);
  }

  if(y<300){
    digitalWrite(6,HIGH);
  }
  else if(y>700){
    digitalWrite(7,HIGH);
  }  
  else{
    digitalWrite(6,LOW);
    digitalWrite(7,LOW);
  }

  if(z==0){
    digitalWrite(4,HIGH);
    digitalWrite(5,HIGH);
    digitalWrite(6,HIGH);
    digitalWrite(7,HIGH);
  }
  delay(1000);
}

코드 입력을 완료하고 아두이노(Arduino) UNO 보드에 업로드하면, 조이스틱(Joystick) 모듈의 움직임에 따라서 해당 방향 LED의 불빛이 켜지는 모습을 확인할 수 있습니다. 물론 시리얼 모니터를 통해서도 그 값을 확인할 수 있습니다. X축과 Y축의 입력 범위는 0~1023으로 IF 문에서 원하는 값의 조정으로 민감도를 조절할 수도 있습니다.

조이스틱(Joystick) 모듈의 입력 범위

 

오늘은 아두이노(Arduino)의 조이스틱(Joystick) 모듈과 LED를 이용한 예제에 대해서 알아보았습니다. 다음 포스팅에서는 더 쉽고 간단한 예제를 가지고 돌아오도록 하겠습니다.
감사합니다::))