코코아팹은 누구나 창의적 아이디어를 현실로 만들어 낼 수 있도록
만들고, 공유하고, 배울 수 있는 터전이
되고자 합니다.
아이디와 비밀번호를 잊으셨나요?아이디 / 비밀번호 찾기
코코아팹 회원이 아니신가요? 회원가입
2016-01-08 13:53:05
이 컨텐츠에서는 엔트리를 이용해 조이스틱의 상하좌우 뱡항에 따라 4가지 색상(빨강, 노랑, 초록, 파랑)의 LED를 제어하는 실습을 해보도록 하겠습니다.
아래의 그림과 같이 생긴 조이스틱 모듈의 경우
커버를 벗겨보면
이러한 형태 구성되어 있음을 볼 수 있습니다.
X,Y축으로 회전할수 있는 막대부분과 푸시 버튼으로 이루어져 있네요!
가장 먼저 조이스틱의 연결 방법에 대해 알아보도록 하겠습니다.
위에서 본 바와 같이 조이스틱은 X축, Y축, 전원, Ground, 그리고 푸시버튼으로 이루어져있습니다.
조이스틱은 위 그림과 같이 연결해주며 X축과 Y축은 아날로그 값으로 연결해주면 됩니다.
이 컨텐츠에서는 푸쉬 버튼은 필요하지 않으므로 따로 연결하지 않도록 하겠습니다.
이제 조이스틱 연결 방법에 대해 알아보았으니 다음으로는
조이스틱을 사용하기 먼저 각 값들이 갖는 크기에 대해 알아 보도록 하겠습니다.
가장 먼저 첫번째로 값을 테스트 하기 위해 아두이노를 이용해
조이스틱을 움직이지 않고 그에 따른 값들을 시리얼모니터로 출력해 보았습니다.
X의 초기값은 507, Y의 초기값은 515인 것을 알 수 있네요
다음은 각각의 위치에 대한 값들을 확인해 본 결과 입니다.
X축과 Y 축 모두 최소는 0, 최대는 1023으로 같으며 중앙값만 다른 것으로 확인 됩니다.
조이스틱이 북쪽으로 이동함에 따라 빨간색 LED에 불이 들어 옵니다.
조이스틱이 동쪽으로 이동함에 따라 노란색 LED에 불이 들어 옵니다.
조이스틱이 남쪽으로 이동함에 따라 초록색 LED에 불이 들어 옵니다.
조이스틱이 서쪽으로 이동함에 따라 파란색 LED에 불이 들어 옵니다.
조이스틱이 북동쪽으로 이동함에 따라 빨간색과 노란색 LED에 불이 들어 옵니다.
조이스틱이 남동쪽으로 이동함에 따라 노란색과 초록색 LED에 불이 들어 옵니다.
조이스틱이 남서쪽으로 이동함에 따라 초록색과 파란색 LED에 불이 들어 옵니다.
조이스틱이 북서쪽으로 이동함에 따라 빨간색과 파란색 LED에 불이 들어 옵니다.
NO |
부품명 |
수량 |
상세설명 |
1 |
오렌지보드 |
1 |
아두이노 우노 |
2 |
조이스틱 모듈 |
1 |
조이스틱 모듈 |
3 |
브레드보드 |
1 |
브레드보드 |
4 |
LED |
Green 1 Red 1 Yellow 1 Blue 1 |
LED(RED) LED(GREEN) LED(YELLOW) LED(BLUE) |
5 |
10KΩ 저항 |
4 |
10KΩ 저항 |
6 |
점퍼케이블 |
14 |
점퍼케이블 |
부품명 | 아두이노 우노 | 10㏀ 저항 | 브레드보드 | 점퍼케이블 | LED | 조이스틱 모듈 |
파트 | x1 |
x4 | x1 | x14 |
Red x1, Yellow x1, Green x1, Blue x1 |
x1 |
1. 오렌지보드의 GND 핀을 브레드보드의 - 버스에 연결합니다.
2. 오렌지보드의 5V 핀을 브레드보드의 + 버스에 연결합니다.
3. 조이스틱의 Vcc를 +가 연결된 브레드보드의 단자에 연결합니다.
4. 조이스틱의 GND를 -가 연결된 브레드보드의 단자에 연결합니다.
5. 조이스틱의 VRx를 A0에 연결합니다.
6. 조이스틱의 VRy를 A1에 연결합니다.
7. RED LED를 애노드(긴 단자)가 아래쪽으로 향하게하여 꽂습니다.
8. RED LED의 애노드가 연결된 행에 10kΩ 저항을 연결합니다.
9. 짧은 단자쪽을 그림처럼 GND가 연결된 브레드 보드에 연결합니다.
10. RED LED의 저항 양 끝 중 RED LED와 연결되지 않은 곳과 브레드보드의 3번에 연결합니다.
11. YELLOW LED, GREEN LED, BLUE LED를 같은 형태로 연결하고 각각의 저항 끝은 6번과 3번에 그리고 11번에 연결합니다.
int RED_LED = 3; // 빨간색의 입력은 3번 핀입니다. Y의 값이 800 이상 1023 이하인 경우에 불이 켜집니다.
int YELLOW_LED = 6; // 노란색의 입력은 6번 핀입니다. X의 값이 800 이상 1023 이하인 경우에 불이 켜집니다.
int GREEN_LED = 9; // 초록색의 입력은 9번 핀입니다. Y의 값이 0 이상 300 이하인 경우에 불이 켜집니다.
int BLUE_LED = 11; // 파란색의 입력은 11번 핀입니다. X의 값이 0 이상 300 이하인 경우에 불이 켜집니다.
void setup() {
Serial.begin(9600);
pinMode(RED_LED, OUTPUT);
pinMode(GREEN_LED, OUTPUT);
pinMode(YELLOW_LED, OUTPUT);
pinMode(BLUE_LED, OUTPUT);
}
void loop() {
int X = analogRead(A1); // X좌표를 나타내는 아날로그 1번의 입력 값
int Y = analogRead(A0); // Y좌표를 나타내는 아날로그 0번의 입력 값
// 보이지 않는 미세함에도 조이스틱이 반응함에 따라 확실한 결과 값을 나타내기 위해
// X와 Y의 값을 0부터 300, 800부터 1023으로 설정하였습니다.
if(Y>=0 && Y<=300)
{
digitalWrite(GREEN_LED, HIGH);
} // Y의 값이 0 이상, 300 이하일 경우 초록색 LED를 ON 합니다.
else
{
digitalWrite(GREEN_LED, LOW);
} // 이 이외의 값에서는 초록색 LED를 OFF 합니다.
if(Y>=800 && Y<=1023)
{
digitalWrite(RED_LED, HIGH);
} // Y의 값이 800 이상, 1023 이하일 경우 빨간색 LED를 ON 합니다.
else
{
digitalWrite(RED_LED, LOW);
} // 이 이외의 값에서는 빨간색 LED를 OFF 합니다.
if(X>=0 && X<=300)
{
digitalWrite(BLUE_LED, HIGH);
} // X의 값이 0 이상, 300 이하일 경우 파란색 LED를 ON 합니다.
else
{
digitalWrite(BLUE_LED, LOW);
} // 이 이외의 값에서는 파란색 LED를 OFF 합니다.
if(X>=800 && X<=1023)
{
digitalWrite(YELLOW_LED, HIGH);
} // X의 값이 800 이상, 1023 이하일 경우 노란색 LED를 ON 합니다.
else
{
digitalWrite(YELLOW_LED, LOW);
} // 이 이외의 값에서는 노란색 LED를 OFF 합니다.
Serial.print(X);
Serial.print("and") ;
Serial.print(Y);
Serial.print("\t"); // 조이스틱의 X 값과 Y 값을 확인하기 위해 시리얼 모니터로 출력합니다.
}
<아두이노 조이스틱 예제>
int X = analogRead(A1); // x좌표를 나타내는 아날로그 1번의 입력 값
int Y = analogRead(A0); // y좌표를 나타내는 아날로그 0번의 입력 값
조이스틱 모듈의 방향제어의 경우 아날로그 값으로 인식 됩니다.
따라서 X와 Y를 선언해 그 값을 읽어옵니다.
if(Y>=0 && Y<=300)
{
digitalWrite(GREEN_LED, HIGH);
} // Y의 값이 0 이상, 300 이하일 경우 초록색 LED를 ON 합니다.
else
{
digitalWrite(GREEN_LED, LOW);
} // 이 이외의 값에서는 초록색 LED를 OFF 합니다.
각각의 값에 대한 범위를 설정한 조건문 구간입니다.
초록색 LED의 경우에는 Y의 값이 0부터 300의 구간에서 점등 됩니다.
각각의 LED는 동일한 구조로 값과 변수에 따라 숫자만 변경해주면 됩니다.
kocoafabeditor
항상 진취적이고, 새로운 것을 추구하는 코코아팹 에디터입니다!