![]() |
![]() |
조이스틱 모듈은 아두이노나 라즈베리 파이와 같은 마이크로컨트롤러와 같이 단일 보드 컴퓨터에 사용하여 입력 장치로 활용할 수 있다. 일반적으로 조이스틱 모듈은 두 개의 아날로그 축(X, Y)과 하나의 디지털 버튼으로 구성되어 있다.
조이스틱 모듈 핀 기능 :
+ 5V | VCC (전원 5V) |
GND | GND (접지 -) |
VRx | X축 아날로그 출력 |
VRy | Y축 아날로그 출력 |
SW | 버튼 디지털 출력 |
실습 예제 :
조이스틱 모듈의 방향에 따라 LED 다이오드를 제어하는 방법을 설명하겠다.
예들 들어 조이스틱을 위로 움직일 때는 빨간색 LED가 켜지고, 아래로 움직일 때는 파란색 LED를, 왼쪽으로 움직일 때는 녹색 LED, 오른쪽으로 움직일 때는 노란색 LED를 켜지는 식으로 구현하였다. 그리고 조이스틱 버튼이 눌리었을 때는 4개의 LED가 전부 켜지도록 하였다.
필요한 부품 :
구성품으로는 아두이노 우노 R3, 조이스틱 모듈, LED 다이오드 4개 (빨간색, 파란색, 녹색, 노란색), 저항 4개(220Ω) 등이 쓰인다.
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
https://link.coupang.com/a/b2S1uP
아두이노 PS2 조이스틱 모듈 l Joystick Module - 액세서리 | 쿠팡
쿠팡에서 0.0 구매하고 더 많은 혜택을 받으세요! 지금 할인중인 다른 0 제품도 바로 쿠팡에서 확인할 수 있습니다.
www.coupang.com
https://link.coupang.com/a/b2vSOT
ATmega328P 마이크로 컨트롤러가 있는 아두이노 우노 R3 개발 보드 - 액세서리 | 쿠팡
쿠팡에서 0.0 구매하고 더 많은 혜택을 받으세요! 지금 할인중인 다른 0 제품도 바로 쿠팡에서 확인할 수 있습니다.
www.coupang.com
https://link.coupang.com/a/b2vTO0
아두이노 LCD1602 16x2 4핀 디스플레이 모듈/ Arduino LCD1602 Module - 액세서리 | 쿠팡
쿠팡에서 0.0 구매하고 더 많은 혜택을 받으세요! 지금 할인중인 다른 0 제품도 바로 쿠팡에서 확인할 수 있습니다.
www.coupang.com
![]() |
![]() |
![]() |
아두이노 우노 R3 | 조이스틱 모듈 | LED다이오드(Red, Bule, Green, Yellow) |
회로 연결 :
구성품이 준비되면 위의 회로도와 아래 표를 참고하여 회로를 연결한다.
아두이노 우노 | 조이스틱 모듈 | LCD1602 | Red다이오드 | Blue다이노드 | Green다이오드 | Yellow다이오드 |
+ 5V | +5V | VCC | ||||
GND | GND | GND | ||||
A0 | VRx | |||||
A1 | VRy | |||||
D8 | SW | |||||
A4 | SDA | |||||
A5 | SCL | |||||
D3 | +Pin | |||||
D4 | +Pin | |||||
D5 | +Pin | |||||
D6 | +Pin |
위와 같이 회로 연결이 전부 끝나면 아두이노 IDE에 다음과 같이 코드를 작성한다.
코드 설명 :
- VRx, VRy, SW, redLED, blueLED, greenLED, yellowLED 핀 번호를 설정한다
- setup() 함수에서 시리얼 통신을 시작하고, 버튼 핀과 LED 핀을 설정한다.
- loop() 함수에서 주기적으로 X축, Y축, 버튼 값을 읽는다.
- 버튼 상태를 확인하여 버튼이 눌렸을 때 모든 LED를 켠다.
- 버튼이 눌리지 않았을 때는 조이스틱의 방향에 따라 해당 LED를 켜고 끈다.
먼저 아두이노 IDE에 LCD1602 라이브러리를 설치한다. (LiquidCrystal_I2C)
다음 조이스틱 모듈 핀설정을 진행한다.
const int VRx = A0; // X축 아날로그 핀
const int VRy = A1; // Y축 아날로그 핀
const int SW = 8; // 버튼 디지털 핀
LED 다이오드 핀을 정의한다.
const int redLED = 3; // 빨간 LED 핀
const int blueLED = 4; // 파란 LED 핀
const int greenLED = 5; // 녹색 LED 핀
const int yellowLED = 6; // 노란 LED 핀
1. LCD1602를 초기화하고 백라이트를 켜지게 설정한다.
2. 시리얼 통신은 9600으로 설정
3. 조이스틱 버튼은 입력으로 설정하고, LED 핀을 출력으로 설정한다.
void setup() {
lcd.init(); // LCD 초기화
lcd.backlight(); // LCD 백라이트 켬
Serial.begin(9600); // 시리얼 통신 시작
pinMode(SW, INPUT_PULLUP); // 버튼 핀을 풀업 저항과 함께 입력으로 설정
pinMode(redLED, OUTPUT); // LED 핀을 출력으로 설정
pinMode(blueLED, OUTPUT);
pinMode(greenLED, OUTPUT);
pinMode(yellowLED, OUTPUT);
}
x축 함수 : xValue, y축 함수 : yValue, 버튼함수 : buttonState 로 정의한다.
int xValue = analogRead(VRx); // X축 값 읽기
int yValue = analogRead(VRy); // Y축 값 읽기
int buttonState = digitalRead(SW); // 버튼 상태 읽기
조이스틱 모듈의 버튼이 눌리었을 때는 4개의 LED가 전부 켜지고, 버튼이 눌리지 않았을 때는 조이스틱 방향에 따라 LED 다이오드가 켜진다.
if (buttonState == HIGH) { // 버튼이 눌렸을 때
digitalWrite(redLED, HIGH);
digitalWrite(blueLED, HIGH);
digitalWrite(greenLED, HIGH);
digitalWrite(yellowLED, HIGH);
lcd.setCursor(0,1); // LCD 1행 2열에 출력
lcd.print("ALL LED ON");
} else {
// 버튼이 눌리지 않았을 때 조이스틱 방향에 따라 LED 제어
if (xValue < 400) { // 왼쪽
digitalWrite(greenLED, HIGH);
lcd.setCursor(0,1); // LCD 1행 1열에 출력
lcd.print("Left_Green");
} else {
digitalWrite(greenLED, LOW);
}
if (xValue > 600) { // 오른쪽
digitalWrite(yellowLED, HIGH);
lcd.setCursor(0,1); // LCD 1행 2열에 출력
lcd.print("Right_Yellow");
} else {
digitalWrite(yellowLED, LOW);
}
if (yValue < 400) { // 위쪽
digitalWrite(redLED, HIGH);
lcd.setCursor(0,1); // LCD 1행 2열에 출력
lcd.print("Up_Red");
} else {
digitalWrite(redLED, LOW);
}
if (yValue > 600) { // 아래쪽
digitalWrite(blueLED, HIGH);
lcd.setCursor(0,1); // LCD 1행 2열에 출력
lcd.print("Down_Blue");
} else {
digitalWrite(blueLED, LOW);
}
}
전체 코드 :
#include <LiquidCrystal_I2C.h>
const int VRx = A0; // X축 아날로그 핀
const int VRy = A1; // Y축 아날로그 핀
const int SW = 8; // 버튼 디지털 핀
const int redLED = 3; // 빨간 LED 핀
const int blueLED = 4; // 파란 LED 핀
const int greenLED = 5; // 녹색 LED 핀
const int yellowLED = 6; // 노란 LED 핀
LiquidCrystal_I2C lcd (0x27,16,2); // LCD1602 hexa값, 2행 16열 설정
void setup() {
lcd.init(); // LCD 초기화
lcd.backlight(); // LCD 백라이트 켬
Serial.begin(9600); // 시리얼 통신 시작
pinMode(SW, INPUT_PULLUP); // 버튼 핀을 풀업 저항과 함께 입력으로 설정
pinMode(redLED, OUTPUT); // LED 핀을 출력으로 설정
pinMode(blueLED, OUTPUT);
pinMode(greenLED, OUTPUT);
pinMode(yellowLED, OUTPUT);
}
void loop() {
int xValue = analogRead(VRx); // X축 값 읽기
int yValue = analogRead(VRy); // Y축 값 읽기
int buttonState = digitalRead(SW); // 버튼 상태 읽기
lcd.setCursor(0,0); // LCD 1행 2열에 출력
lcd.print("JOYSTIC_CONTROL");
if (buttonState == HIGH) { // 버튼이 눌렸을 때
digitalWrite(redLED, HIGH);
digitalWrite(blueLED, HIGH);
digitalWrite(greenLED, HIGH);
digitalWrite(yellowLED, HIGH);
lcd.setCursor(0,1); // LCD 1행 2열에 출력
lcd.print("ALL LED ON");
} else {
// 버튼이 눌리지 않았을 때 조이스틱 방향에 따라 LED 제어
if (xValue < 400) { // 왼쪽
digitalWrite(greenLED, HIGH);
lcd.setCursor(0,1); // LCD 1행 1열에 출력
lcd.print("Left_Green");
} else {
digitalWrite(greenLED, LOW);
}
if (xValue > 600) { // 오른쪽
digitalWrite(yellowLED, HIGH);
lcd.setCursor(0,1); // LCD 1행 2열에 출력
lcd.print("Right_Yellow");
} else {
digitalWrite(yellowLED, LOW);
}
if (yValue < 400) { // 위쪽
digitalWrite(redLED, HIGH);
lcd.setCursor(0,1); // LCD 1행 2열에 출력
lcd.print("Up_Red");
} else {
digitalWrite(redLED, LOW);
}
if (yValue > 600) { // 아래쪽
digitalWrite(blueLED, HIGH);
lcd.setCursor(0,1); // LCD 1행 2열에 출력
lcd.print("Down_Blue");
} else {
digitalWrite(blueLED, LOW);
}
}
delay(100); // 100ms 지연
lcd.clear(); // LCD 클리어
}
코드 작성이 전부 끝나면 아두이노에 컴파일하여 업로드 하여준다.
사용법 :
- 아두이노 IDE를 열고, 위의 코드를 복사하여 붙여 넣는다.
- 아두이노 보드를 컴퓨터에 연결하고, 보드와 포트를 선택한 후 코드를 업로드 한다.
- 조이스틱을 움직여 각 방향에 따라 LED가 켜지고, 버튼을 누르면 모든 LED가 켜지는 것을 확인한다.
출력 결과 :
https://www.youtube.com/watch?v=SDMUSQWB1_I
위의 영상에서 본것과 같이 조이스틱 모듈의 버튼을 눌렀을 때 모든 LED가 켜지고, 버튼을 누르지 않았을 때는 조이스틱 방향에 따라 LED가 켜지는 동작에 대해 알아 보았다.
'아두이노 센서 모듈 활용' 카테고리의 다른 글
LDR 감광저항 센서 사용법 (0) | 2024.07.26 |
---|---|
HC-SR501 인체감지 센서 모듈 사용법 (0) | 2024.06.29 |
MQ-135 센서를 사용한 "아두이노 가스감지 측정기" (0) | 2024.06.19 |
HW-072 아두이노 화염감지 측정기 (0) | 2024.06.12 |
YX5300 모듈을 사용한 아두이노 MP3 플레이어 (0) | 2024.05.29 |