본문 바로가기
Arduino(아두이노) 활용 강좌

Arduino Uno 로 Nokia5110 84X48 그래픽 LCD 모듈과 Joystick 모듈을 사용해서 레이싱게임 만들어 보기

by 오마이엔지니어 2019. 6. 7.
반응형

Arduino Uno 로 Nokia5110 84X48 그래픽 LCD 모듈과 Joystick 모듈을 사용해서
간단한 미니 레이싱게임을 만들어 보는 프로젝트 입니다


Nokia5110 84X48 LCD는 Nokia3310 LCD와 같은 저전력의 CMOS LCD 제어용 드라이버인
PCD8544 마이크로컨트롤러를 사용한 (84열 48행) 의 그래픽 LCD 입니다
PCD8544 인터페이스는 serial bus interface 를 통해 마이크로컨트롤러로 연결 됩니다
아두이노와 호환 가능하며 다양한 문자나 그래픽 출력이 가능하여 손쉽게 테스트 해볼수 있습니다

<Nokia5110 84X48 그래픽 LCD 모듈 상세설명>


조이스틱 모듈은 작고 간단하지만 Arduino 또는 AVR, STM 등 다른 마이크로컨트롤러 보드와 연결해 입력장치 (Input Device)
로 다양한 프로젝트에 응용할수 있습니다
X, Y 축의 움직임은 2개의 5K 전위차계를 통해서 아날로그 신호로 출력되며 Z축은 스위치 처럼 눌러서 디지털 신호로 출력 가능합니다



<조이스틱 모듈 이미지>



사용된 부품

Arduino Uno R3 (Italy)

브래드 보드
Nokia5110 84X48 그래픽 LCD 모듈(클릭)
조이스틱 모듈 (Joystick Module) 클릭

점퍼케이블



구성 배선도

  

사용된 예제소스  

example code.txt


사용된 라이브러리

Adafruit-GFX-Library-master.zip

Adafruit_PCD8544.zip


Adafruit 라이브러리를 첨부하였습니다

라이브러리 추가 방법은 Arduino IDE 설치하기 포스팅을 참조해 주세요


주의사항
Adafruit 라이브러리를 사용하였습니다
위 두가지 첨부 된 Adafruit 라이브러리 추가후 테스트를 진행하여야 하며
자신이 기존의 Adafruit_PCD8544 라이브러리를 설치하고 있는 상황이라면 라이브러리 안에 SPI.h 와 SPI.cpp
파일이 들어있지 않은지 꼭 확인해야 합니다

본 테스트 예제의 경우 컴파일 중에 SPI.h 라이브러리 중복 체크를 하게 됩니다
아두이노 IDE 설치시 기본적으로 SPI.h 라이브러리가 설치 되므로 Adafruit_PCD8544 라이브러리 안에 SPI.h 파일이 포함되어 있으면
컴파일 시 중복 에러가 발생하게 됩니다
(SPI.h 라이브러리 중복에 꼭 주의 합시다! 위 첨부된 Adafruit_PCD8544 라이브러리는

SPI.h 와 SPI.cpp 를 삭제하고 수정해서 올려 놓았음을 알려드립니다)

예제코드를 살펴보면
#include <SPI.h> //SPI librarey for Communication
#include <Adafruit_GFX.h> //Graphics lib for LCD
#include <Adafruit_PCD8544.h> //Nokia 5110 LCD librarey

위 세개의 라이브러리를 사용하는것을 알 수 있습니다

Adafruit_PCD8544 display = Adafruit_PCD8544(8, 9, 10, 11, 12); //Specifiy the pins to which the LCD is connected
Nokia5110 LCD와 연결되는 핀맵 8, 9, 10, 11, 12 입니다


int enemy_0_pos, enemy_1_pos, enemy_phase;
int Joy_X;
int game_speed = 0;
int score = 0;
char POS=2;
boolean enemy_dead = true;
boolean control = true;
조이스틱 모듈 X축으로 제어합니다

void setup()   {
  Serial.begin(9600); //Serial Monitor for Debugging

  display.begin(); //Begin the LCD communication
  display.setContrast(30); //Set the contrast of the display
  display.clearDisplay();   // clears the screen and start new
}
시리얼 통신속도 9600, 콘트라스트는 30으로 설정되어 있습니다
만약 배선도 이상없고 컴파일 에러도 없이 무사히 스케치 업로드를 끝냈는데 LCD가 백라이트만 들어오고 화면 출력이 되지 않는다면
노트북이나 PC의 전원의 전류(A)가 약하지 않은지 확인해 보고 또는 LCD의 공급 전원을 5V로 변경해 보면서 해결합니다  

  //Get input from user 
  Joy_X = analogRead(A0); //Read the X vaue from Joystick
  if (Joy_X < 312 && POS!=1 && control==true) //If joy stick moves right
  { POS--; control = false;} //Decrement position of spaceship
  else if (Joy_X > 712 && POS!=3 && control==true) //If joy stick moves right
  { POS++; control = false;} //Increment position of spaceship
  else if (Joy_X >502 && Joy_X<522) //If joystick back to initial position
  control = true; //Preare it for next move
  //Input from user received
X축은 A0 핀에 연결되는것을 알 수 있으며, X축의 출력값 변화에 따른 true 와 false 의 설정을 확인 할 수 있습니다

프로젝트 동영상

동영상을 보면 확인 할 수 있듯이 조이스틱 X축을 좌우로 움직여서 장애물을 피하며 레이싱을 할 수 있습니다
스코어가 처음엔 0 이지만 장애물을 피하며 레이싱이 진행 될 수록 스코어가 올라가며 장애물이 나타나는 속도가 빨라지며
레이싱 난이도가 올라갑니다

이렇게 Arduino Uno 와 Nokia5110 84X48 그래픽 LCD 모듈과 Joystick 모듈을 사용해서 간단하게 레이싱게임을 만들어 볼 수 있습니다

Google 이나 Github 를 통해서 다양한 미니 게임 레퍼런스들이 공유되고 있습니다 

참고포스팅
Arduino Uno 로 Nokia5110 84X48 그래픽 LCD 모듈과 Joystick 모듈을 사용해서 LCD에 출력된 메뉴 선택해 보기



Adafruit_PCD8544.zip
0.01MB
Adafruit-GFX-Library-master.zip
0.26MB
example code.txt
0.01MB
반응형

댓글