2016년 5월 11일 수요일

Arduino GPS, Altimeter (고도, 기압계) 로 놀기 - 1편 (사용해 보고 뭐할지 고민하기)

아두이노의 장점이자 단점은 저렴한 가격이다.
왜 단점인가 하면, 싸다는 생각에 계속해서 인터넷 쇼핑을 하게 된다. (중독 수준으로..ㅋㅋ)

굳이 당장 필요 없는 센서와 모듈들을 하나씩 추가해서 장바구니에 넣어 두었다가 나도 모르는 사이에 택배가 온다. 애초에 아두이노를 시작한 이유가 레고 마인드스톰 보다 많이 저렴한 가격 때문이었는데, 그동안 사모은 아두이노와 센서를 합치면 이제 얼추 비슷해 진것 같다.

이것도 그렇게 내손에 들어온 물건 중에 하나이다.
NEO-6M GPS Module
library 는 TinyGPS 를 다운로드해서 사용하면 된다. 입력 전압이 3.3V 임을 주의하고 맑은 날 하늘이 보이는 곳에서 값을 읽어야 빠른 시간안에 위/경도 값이 들어온다. (창문 근처에서 하면 5분이 넘어도 값을 못 읽어서 고장난 것이 아닌가 의심하는 비극이 초래한다) 아! 기억에 남는 주의 사항이 하나 더 있다. library 의 baudrate 가 4800 으로 되어 있는데, 실제 제품의 초기 baudrate 는 9600 이다. 꼭 고쳐줘야 한다.

GPS 는 SmartHome 과 직접적인 관계도 없지만, 언젠가는 필요할지도 모른다는 핑계로 구입했었는데 아래 기압계(라고 쓰고 고도계라 읽는다) 와 같이 오랫동안 서랍 한구석에 방치되어 있던 놈이다.
BMP-180 Barometric Pressure / Temperature / Altitude
library 는 이놈을 다운로드 해서 사용했다.

고도를 구하는 방법은 GPS 에서 들어오는 값을 사용하는 것과 대기압으로 계산해서 알아내는 방법이 있다고 한다. GPS 는 고도 오차가 X, Y 보다 상대적으로 크고 값이 들쭉 날쭉해서 실사용에는 어렵고, 기압계를 사용한 고도값은 GPS 보다는 오차가 작고 편차도 크지 않아 쓸만? 하지만, 한 장소의 기압이 항상 같은 것이 아니기 때문에 최초 사용시 보정을 해 주지 않으면 절대 고도값을 얻을 수 없다는 단점이 있다.
 개인 사용자가 추가 장비 없이 고도값을 얻는 가장 손쉬운 방법은 기압계를 사용한 고도값을 구글맵과 같은 고도맵으로 보정하는 것일거다.

Screenshot 처럼 google map api 를 사용하면 elevation 값으로 해발고도를 얻을 수 있다.
만약 같은 위치에서 기압계 고도가 70m 였다면 '39m' 만큼을 빼줘서 보정을 할 수 있을 것이다.
바람이 심하게 불거나 차를타고 빨리 이동한다면, 주기적으로 보정을 해 줘야 할것이다.

[추가 2016/05/14]
고도 보정에 대해서 윗글 처럼 생각을 했었는데 arduino 코드를 좀 자세히 보니 잘못 이해 했다는 것을 알았다.

    /* Then convert the atmospheric pressure, and SLP to altitude         */
    /* Update this next line with the current SLP for better results      */
    float seaLevelPressure = SENSORS_PRESSURE_SEALEVELHPA;
    Serial.print("Altitude:    ");
    Serial.print(bmp.pressureToAltitude(seaLevelPressure,
                                        event.pressure));
    Serial.println(" m");

sketch 코드의 주석을 보면 SLP 를 update 하라고 나오는데, SLP 는 Sea Level Pressure (해면기압) 이고 날씨 정보를 제공하는 사이트에서 조회 할 수 있다. 우리 나라는 기상청에서 이 정보를 제공하고 있으며 아래와 같이 내가 있는 수원의 현재 '해면기압' 1024.0 을 seaLevelPressure 로 변경해 주니 보정된 56m 정도로 보정되어 측정이 된다. 날씨가 쨍 할때 SLP 를 보정해 주지 않으면 고도값이 마이너스로 나올 수도 있다.
그렇다면, booting 시 blutooth 나 wifi 를 사용해서 SLP 정보를 기상청에서 받아와서 보정해 주는 과정이 추가 되어야 할 것 같다.
[추가 끝]

BMP-180 은  당연히 기압값을 얻을 수 있고 추가로 온도도 얻을 수 있다.

GPS 와 Altimeter 를 모두 사용해 봤는데, 그럼 이것으로 뭘 할 수 있을까?
요즘은 스마트폰에 GPS 와 고도계가 기본으로 들어가 있기 때문에 굳이 아두이노로 할일이 별로 없다. 그렇다고 해서 이것들을 놀릴 수는 없지 않은가! 뭔가 쌈빡한 아이디어로 노는 센서가 없도록 해야 할텐데... 당장 떠오르는 것이 없으니까 일단 무슨 값을 사용할 수 있는지와 무엇과 연동할 지부터 고민해야 겠다.

1. GPS 와 Altimeter 로 무슨 값을 얻을 수 있지?

 - 위도 (latitude)
 - 경도 (longitude)
 - 고도 (altitude)
 - 대기압 (barometric pressure)
 - 온도 (temperature)
 - 시간 (time)
 - 방향 (heading)
 - 속도 (speed)

2. 어디서 사용할 수 있을까?

 - GPS 는 실외에서만, Altimeter 는 실내/외 모두 가능, 고로 실외에서 사용할 것을 고민해야 함

3. 무엇과 연동할까?

 - youtube 에 gps 와 altimeter 를 찾아보면, 죄다 LCD display 에 값을 표시하는 것 뿐이다.
 - logging 은 기본 (sd 카드 달 거 아니니까 remote 장치에 저장 해야 겠다).
 - 내가 갖고 있는 모듈 중 사용 가능한 연결하는 방법은 Wifi, Bluetooth, Serial, RF 433 mhz.
 - 배터리를 사용해야 하니까 Blueooth BLE 로 당첨.
 - Bluetooth BLE 연결 가능한 remote 장치는 휴대폰, google glass, 아두이노.
 - 휴대성으로 따지지만 google glass 를 따라올 것이 없으니 당첨.
 - 지도와 연동해야 하는데 google map 은 사용 횟수에 한도가 있으니 open street map 도 병행 해야 겠다.
 - google map 은 한국에서 길찾기가 제공되지 않고 open street map 은 길찾기가 되지만 map 이 너무 허술하다.

4. 이걸로 뭐하지?

 - 왠만한 건 모두 휴대폰이나 차량용 Navigation 으로 커버 가능하기 때문에 색다르지만 실용적인 무언가를 생각해 봐야 할 것 같다.
 - 3차원 지도 만들기? 같은 것은 한 10년 전 쯤에 했다면 '오~' 했겠지만, 지금은 그닥. 그리고 이것을 하기에 고도값이 너무 들쭉 날쭉 한다.
 - 아두이노와 센서들은 주머니나 가방에 넣고 google glass 만 쓰고 다니면서 할 수 있는 것들. 주로 걸어 다니는 상황에 포커스를 맞춰야 겠다.

음... 이런.... 뭘 할지 떠오르지가 않는다. 이렇게 GPS 가 생활에 밀접하게 들어오고 친숙해 졌을 줄이야. 지금까지는 '뭘 할지'를 정하고 '어떻게' 해야 되는 것에 맞춰서 문제를 해결해 왔는데, 거꾸로 '어떻게' 를 정해 놓고 '뭘 할지'를 찾으려고 하니 쉽지가 않다.

떠오르지 않을 때 고민해 봤자 시간만 낭비겠지. 일단 '어떻게' 는 정해 졌으니 다음에는 '어떻게' 를 다 만들어서 실제 사용해 보고 다시 '뭘 할지' 를 고민해야 겠다.

다시 '어떻게' 를 정리해 보면,
google glass 와 arduino (GPS, Altimeter) 를 BLE 로 연결하고 걸어다니면서 '위/경/고도, 대기압, 온도, 시간, 방향, 속도' 정보를 google glass 에 표시한다.

일단 고민 끝! google glass app 하나 만들어야 겠다!

댓글 없음: