?>

Hard Copy World

HCW

Q&A

Home > Forum >

Q&A

질문 | HM-10 블루투스 모듈과 NEO-6M gps 모듈을 같이 쓸수 있나요?

페이지 정보

작성자 강창기 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일17-04-21 12:51 조회1,107회 댓글1건

본문

안녕하세요 전자쪽은 정말 하나도 모르는 컴공생인데 요번 프로젝트 주제로 미아방지 손목밴드를 만들어보고자 합니다. 

시중에 나와있는 HM-10 블루투스 BLE 4.0 모듈이 다른 버전보다 더 전력 소모가 적고 거리도 멀리까지 연결이 된다는 것을 파악했고, 대중적으로 NEO-6M gps 모듈로 gps값을 받아들인다는것을 확인했습니다.

 

그래서 현재 저희 구상방안은 아두이노 우노 보드에 gps 모듈과 bluetooth 모듈을 연결, 실시간으로 gps값을 받아들인 후 bluetooth를 통해 휴대폰으로 그 값을 보내주고, bluetooth자체에서 휴대폰과 특정 거리 이상으로 벌어지게 되면 추가적으로 경고를 띄울 수 있게 하고 싶습니다.

아두이노 프로젝트가 현재 처음이라 이게 실현가능한 것인지 잘 모르겠습니다.

 

 

~4월 24일자로 수정합니다.

#include <SoftwareSerial.h>
#include <TinyGPS.h>
#include "U8glib.h"
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE);

SoftwareSerial gpsSerial(2,3); // RX(<-TX of GPS module), TX(<-RX of GPS module)
SoftwareSerial BTSerial(4,5); // RX(<-TX of Bluetooth module), TX(<-RX of Bluetooth module)
TinyGPS gps;

void gpsdump(TinyGPS &gps);
void printFloat(double f, int digits = 2);

void setup()  
{
  Serial.begin(9600);
  Serial.println("Hello!");
  // set the data rate for the SerialPort(use SoftwareSerial port on Arduino UNO)
  gpsSerial.begin(9600);
  BTSerial.begin(9600);
  
  delay(1000);
  Serial.print("uBlox Neo 6M / TinyGPS testing - ");
  Serial.println(TinyGPS::library_version());

  u8g.setFont(u8g_font_unifont);
  u8g.drawFrame(2,2,126,62);
  u8g.firstPage();  
  do {
    u8g.setPrintPos(6,20);
    u8g.print("GPS Ready"); 
  } while( u8g.nextPage() );
}

void draw(float lat, float lon, unsigned long l_date, unsigned long l_time, float f_alt, float f_speed) {
  u8g.setFont(u8g_font_unifont);
  
  u8g.firstPage();
  do {
      u8g.setPrintPos(1,10);
      u8g.print("A:"); 
      u8g.print(lat);  // latitude
      u8g.setPrintPos(1,20);
      u8g.print("O:"); 
      u8g.print(lon); // longitude
      u8g.setPrintPos(1,30);
      u8g.print("D:"); 
      u8g.print(l_date); // date(ddmmyy, UTC 0)
      u8g.setPrintPos(1,40);
      u8g.print("T:"); 
      u8g.print(l_time); // time(hhmmsscc, UTC 0)
      u8g.setPrintPos(1,50);
      u8g.print("A:"); 
      u8g.print(f_alt); // altitude(cm)
      u8g.print("/S:"); 
      u8g.print(f_speed); // speed(km per hour)
  } while( u8g.nextPage() );
}

void loop() // run over and over
{
  // GPS 
  gpsSerial.listen();
  bool newdata = false;
  unsigned long start = millis();
  float flat, flon, falt, fspeed;
  unsigned long date, time, age; 
  
  // Every 2 seconds we print an update
  while (millis() - start < 5000) {
    if (gpsSerial.available() && gps.encode(gpsSerial.read())) {
        newdata = true;
        // break;  // uncomment to print new data immediately!
    }
  }
  
  if (newdata) {
    gps.f_get_position(&flat, &flon, &age);
    gps.get_datetime(&date, &time, &age);
    fspeed = gps.f_speed_kmph();
    falt = gps.f_altitude();
    draw(flat, flon, date, time, falt,fspeed);
  }

  // BLUETOOTH
  BTSerial.listen();
  
  while (BTSerial.available()){ // if BT sends something
    byte data = BTSerial.read();
    Serial.write(data); // write it to serial(serial monitor)
  }
  
  while (Serial.available()){ // if Serial has input(from serial monitor)
    byte data = Serial.read();

    BTSerial.write(data); // write it to BT
  }
  
}  

 

구글링하며 소스를 얻어와 구현해 보려 하는데 다음과같이 소스를 컴파일하면 gps값은 계속적으로 바뀌지만 휴대폰과 bluetooth모듈을 통한 송수신은 이뤄지지 않습니다. 문제점을 찾고싶습니다.

댓글목록