자 이번에는 아두이노와 GPS 수신기, 그리고 LCD를 이용해서 휴대용 GPS 위치 표시기를 만들어볼까 해요.
우선 준비물
아두이노 우노 -- 1EA
GPS -- 1EA (U-blox 6010)
LCD -- 1EA (Dfrobot LCD Keypad shield)
배선 작업이 귀찮아서 실험실에 있던 LCD 쉴드를 약간 개조해서 사용했어요.
쉴드는 아두이노 보드 위에 땜질 없이 핀만 맞추어서 끼우도록 제작된 제품이랍니다.
우선 스케치는 다음과 같아요.
조금 길어서 두 부분으로 나누었어요. 길다해도 반은 변수 지정이라... 실제 주요 부분은 간단합니다.
아래 그림의 #include<TinyGPS.h> 는 TinyGPS.h라는 라이브러리를 불러오는 명령이에요.
물론 저 라이브러리 부분을 스케치에 다 기술할 수도 있지만 자주 사용하는 것들은 라이브러리처럼 모듈화 해두면 나중에 쓰기가 참 편하겠죠.
그리고 많은 사람들이 친절하게도 저런 라이브러리들을 무료로 배포하고 있답니다.
필요한 사람은 가져다 쓰기만 하면 되겠죠.
여기서는 TinyGPS와 LiquidCrystal 라이브러리를 가져왔어요.
LiquidCrystal은 LCD구동용 라이브러리랍니다.
그 다음 줄은 int, long, unsigned long, unsigned short 뭐 이런 것들이 나오는데 이것들은 "변수형" 이라고 하는 것들이에요.
아두이노 변수의 종료와 범위는 다음 표를 참조하세요.
나중에 따로 설명할 일이 있을테니 우선은 그런게 있다는 정도로 알면 되겠어요.
그 아래에는 LAT이라는 함수가 오고 그 내용은 Latitude의 좌료를 도 분으로 계산해주는 내용을 담고 있어요.
그 다음은 LCD화면에 출력하는 lcd.print가 나오고
lcd.setCursor함수는 출력하고자하는 내용이 LCD화면의 어디에서 시작하는지를 지정합니다.
함수에 대한 설명은 아두이노 홈페이지 arduino.cc 에 자세하게 나오니 확인하시기 바랍니다.
다음은 이제 주 스케치 부분이 되겠어요.
셋업 함수에서는 시리얼 통신과 LCD화면 시작점 지정 및 초기 문구 출력을 하네요.
Serial.begin(38400); 의 의미는 시리얼통신을 38400bps로 시작한다는 의미에요.
시리얼 통신은 두 개의 기기간 정보를 주고 받는 통신 방법 중 한 가지 방법이에요.
GPS test라는 문구를 LCD의 0,0 좌표에서 시작한다는 내용이고 2초간 표시합니다.
그 다음은 Loop 함수가 나오고
GPS의 data를 읽어서 윗 부분의 스케치에서 나왔던 LAT, LON 함수에 읽은 정보를 보내면 LAT, LON 함수에서 지정하는 방법으로 GPS로 부터 받아온 정보를 LCD에 표시하게 됩니다.
다소 스케치가 어렵게 느껴질 수도 있는데 그럴 수 있어요.
항상 프로그래밍을 배우면서 처음 하는게 Hello World 이런거만 하다 보니까 재미도 없고 진도도 안나가는데.. 조금 난이도 있는 걸 잘 모르더라도 따라서 해보면 뭔가 되는 것 같고 하면 좀 의욕이 생기지 않나요?
그래서 거꾸로 한 번 해보고 그것을 구성하는 내용들을 차근 차근 공부해 가면 왜 그게 필요한지 알기 때문에 의지가 더 생기는 것 같아요.
아무튼 연결하고 스케치를 업로드 하면 다음과 같이 표시되죠.. 숫자는 물론 GPS를 연결하지 않아서 저렇게 나오는 거구요. 아래사진은 스케치를 업로드하고 LCD쉴드만 연결한 생태에요.
GPS에서 나오는 선은 4가닥으로 5V, GND, 시리얼통신(RX,TX)로 구성되어 있어요.
GPS의 RX는 아두이노의 TX, GPS의 TX는 아두이노의 RX에 연결하고 전원선은 아두이노에서 나오는 5V전원을 연결해주면 하드웨어 세팅은 끝.
아래 사진의 너저분한 선들이 GPS와 연결되는 선들이고 아래쪽은 전원 윗쪽은 시리얼 통신 선이 되겠습니다.
잘 알겠지만 GPS는 실내에서는 위성신호를 받을 수가 없어 먹통이 되서 위 사진처럼 9자만 나올 수도 있어요.
밖에 나와서 전원을 넣고 잠시 기다리면... 아래 사진과 같이 위, 경도가 LCD화면에 표시된답니다.
다음 포스팅에서는 오늘 내용의 구성 부분인 LCD에 대해서 알아보도록 하죠.
'아두이노' 카테고리의 다른 글
아두이노 스케치 (0) | 2015.04.03 |
---|---|
아두이노 LED 구동 (0) | 2015.03.06 |