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

Arduino Uno 로 조이스틱 쉴드(Joystick Shield)를 장착해서 Nokia5110 84X48 LCD 사용해 보기

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

Arduino Uno 로 조이스틱 쉴드(Joystick Shield)를 장착해서 Nokia5110 84X48 LCD를 출력시키고
조이스틱 모듈의 기능 테스트를 해보는 프로젝트 입니다


아두이노 조이스틱 쉴드 (Joystick Shield) 는 조이스틱 모듈을 쉴드 타입으로 만든 제품으로
아두이노 우노에 장착해서 사용할수 있으며 2축 조이스틱과 4개 라운드 버튼, 2개의 Tact 스위치로 구성되어 있습니다
Nokia 5110 LCD 및 nRF24L01 모듈 인터페이스를 지원하여 디스플레이 연결 및 블루투스 무선통신이 가능하게 제작되었습니다

참고: Nokia 5110 LCD 는 표준 아두이노 보드에서는 3.3V 전원에서 전류가 50mA 미만이 공급되기 때문에
백라이트 사용이 불가능합니다
Nokia 5110 LCD 를 사용하고 백라이트를 동작시키기 원하는 경우 3.3V 핀에서 50mA 이상 공급가능한 아두이노 우노 보드를 사용해야 합니다




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

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





사용된 부품

Arduino Uno R3 (Italy)
아두이노 조이스틱 쉴드
Nokia5110 84X48 그래픽 LCD

점퍼케이블
미니 브래드 보드

구성 배선도

사용된 예제소스

Joystick Shield_Nokia5110.txt

사용된 라이브러리

Adafruit-GFX-Library-master.zip

Adafruit_PCD8544.zip

SPI.zip


Adafruit 라이브러리 등을 첨부하였습니다
라이브러리 추가 방법은 Arduino IDE 설치하기 포스팅을 참조해 주세요

주의사항
Adafruit 라이브러리 2개만 추가해 주고 SPI 라이브러리는 설치 하지 않되, 만약 아두이노 IDE 버전에 따라서
SPI.h 컴파일 에러가 날 경우에만 추가해서 해결해 주도록 합니다

#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
#include <Wire.h>
#include <SPI.h>
위와 같은 4개의 라이브러리를 사용합니다, SPI.h 와 Wire.h 라이브러리는
아두이노 IDE 설치하면 기본적으로 설치되어 있는 라이브러리 입니다


#define RST 12
#define CE  13
#define DC  11
#define DIN  10
#define CLK  9
Nokia5110 LCD와 조이스틱 쉴드의 핀 설정을 확인 할 수 있습니다

원래는 조이스틱 쉴드와 Nokia5110 레드 PCB 버전  핀맵이 맞아서 쉴드에 Nokia5110 LCD를 장착해서 사용할 수 있는데,

가격도 비싸고, 블루 PCB 버전이 재고가 있는 관계로 블루 PCB 버전을 사용해서 테스트 하였습니다

때문에 브래드 보드와 점퍼선을 이용해 배선하는 번거로움이 있습니다
편하게 쉴드에 바로 꼽아서 테스트 하고 싶다면 Nokia5110 레드 PCB 버전 을 사용하면 됩니다

// Arduino digital pins associated with buttons
const byte PIN_BUTTON_A = 2;
const byte PIN_BUTTON_B = 3;
const byte PIN_BUTTON_C = 4;
const byte PIN_BUTTON_D = 5;
const byte PIN_BUTTON_E = 6;
const byte PIN_BUTTON_F = 7;

// Arduino analog pins associated with joystick
const byte PIN_ANALOG_X = 0;
const byte PIN_ANALOG_Y = 1;

동작전압과 백라이트는 3.3V 로 사용하면 되는데, 동영상에서는 편의상 쉴드의 출력 전압을 

5V 로 세팅하면 출력값이 어떻게 변하는지 확인하기 위해서 5V로도 테스트 하였습니다_5V는 참고만 해주세요
(주의! Nokia5110 백라이트가 3.3V 이기 때문에 동작전압과 백라이트 3.3V 로 테스트 합시다)
하단 프로젝트 동영상을 보면 알 수 있듯이 쉴드를 출력전압을 5V 로 변경하면 LCD 의 X 축과 Y축이 3.3V 일때 와는 다르게
0~1024 까지 변경 되는것을 확인 할 수 있습니다 (아두이노 아날로그 출력값은 0~1024 입니다)
3.3V 동작전압과 3,3V 로 백라이트 전원을 공급해 주면 됩니다 (포스팅 상단부에서도 설명했듯이 전류가 부족하면
Nokia5110 LCD의 백라이트가 정상적으로 나오지
않을 수 있습니다) 

프로젝트 동영상

버튼 6개를 눌렀을때 LCD로 A~F 로 출력값이 표시되며, 조이스틱 X축 과 Y축 을 변경해서 출력값(5V 일때 0~1024) 변화 확인할 수 있습니다
 

이어서 Arduino Uno 로 조이스틱 쉴드(Joystick Shield)를 장착해서 Nokia5110 84X48 LCD 사용해 간단한 게임을 만들어 보는

프로젝트를 진행해 보겠습니다


사용된 예제소스

Joystick_Nokia5110 Game.txt


사용된 라이브러리

LCD5110_Graph.zip


LCD5110_Graphic 라이브러리 등을 첨부하였습니다
라이브러리 추가 방법은 Arduino IDE 설치하기 포스팅을 참조해 주세요


주의사항
배선은 상단 포스팅 첫번째 프로젝트의 구성 배선도를 참조해서 동일하게 배선하면 됩니다

#include <LCD5110_Graph.h>
#include <avr/pgmspace.h>

위 처럼 LCD5110_Graph.h 라이브러리를 사용하는것을 알 수 있습니다
avr/pgmspace.h 는 변수 선언입니다

PROGMEM 키워드는 데이터를 SRAM 대신 Flash(Program) 메모리에 생성하는 키워드입니다
ROGMEM 은 변수 앞에 사용할 수 있는 키워드로 pgmspace.h 파일에 선언된 데이터 타입에만 적용할 수 있습니다. 이 키워드를 사용한다는 것은 컴파일러에게 "이 변수를 일반적으로 사용하는 SRAM 대신 Flash 메모리에 저장하라"고 지시하는 것과 유사합니다
PROGMEM 키워드는 pgmspace.h 라이브러리의 일부이기 때문에 사용하기 전에, 스케치 최 상단에 아래와 같은 선언문을 넣어줘야 합니다. (최신 아두이노 IDE 에서는 이 과정이 없어도 사용할 수 있습니다. 오히려 사용할 경우 일부 라이브러리와 충돌을 일으킬 수도 있는듯 합니다.)

이와 관련된 자세한 내용은 hardcopy 주인장님께서 잘 설명해 놓으셨습니다 (참조 하도록 합시다)
http://www.hardcopyworld.com/gnuboard5/bbs/board.php?bo_table=lecture_pract&wr_id=13

#define RST 12    // RESET
#define CE  13    // CS
#define DC  11    // Data/Command
#define DIN  10   // MOSI
#define CLK  9    // SCK
Nokia5110 LCD와 조이스틱 쉴드의 핀 설정을 확인 할 수 있습니다

switch(j)
       {
         case 2: Serial.println("--------> Button A");
                 delaytime = 50;
                 myGLCD.invert(true);
                 break;
         case 3: Serial.println("--------> Button B");
                 delaytime = 50;
                 myGLCD.invert(false);
                 break;
         default: break;
       }

버튼 'A' 와 'B' 를 눌러서 화면 반전을 설정할 수 있습니다

프로젝트 동영상


LCD5110_Graph.zip
0.37MB
Joystick Shield_Nokia5110.txt
0.0MB
Joystick_Nokia5110 Game.txt
0.0MB
Adafruit-GFX-Library-master.zip
0.26MB
Adafruit_PCD8544.zip
0.01MB
SPI.zip
0.01MB
반응형

댓글