“아빠 어디야”앱 아두이노 소스 판올림. Ver.180911

  • 충격이 수준이상이면 스팸으로 처리될 정도로 끊임없이 메시지보내는 부분 수정
  • 0.1초 간격으로 재 측정하도록 하면서
  • 감도를 50으로 나누어 영역화
  • 기존 값을 저장해서 기존 영역과 다를 경우에 앱으로 보내도록 수정함.
#include <SoftwareSerial.h>
#include <TinyGPS.h>

TinyGPS gps;
SoftwareSerial GPSSerial(4, 3);
SoftwareSerial BTSerial(0,1);

void GetGPSdata(TinyGPS &gps);
float latitude, longitude;
int year;
byte month, day, hour, minute, second, hundredths;

int PORT_SHOCK_ANALOG = A0;
int NowShockAnalogValue = 0;
int PreShockAnalogValue = 0;

void setup(){
pinMode(PORT_SHOCK_ANALOG, INPUT);

BTSerial.begin(9600);
Serial.begin(9600);
GPSSerial.begin(9600);

Serial.println(“GPS 위치 수신중..”);
Serial.println(“충격감지센서 조정중..”);
Serial.println(“”);
}

void loop(){
while(GPSSerial.available()) {
int data = GPSSerial.read();
if(gps.encode(data)){
gps.f_get_position(&latitude, &longitude);
gps.crack_datetime(&year,&month,&day,&hour,&minute,&second,&hundredths);
delay(100);
}

NowShockAnalogValue = 1024 - analogRead(PORT_SHOCK_ANALOG);
if(NowShockAnalogValue >= 100 and (int(NowShockAnalogValue/50) != int(PreShockAnlaogValue/50))){
//if(latitude > 0) {
Serial.println(NowShockAnalogValue);//Serial.print(“충격감도: “);
Serial.println(latitude,5);//Serial.print(“위도: “);
Serial.println(longitude,5);//Serial.print(“경도: “);

//Serial.print(“현재시각: “);
//Serial.print(hour, DEC); Serial.print(“:”);
//Serial.print(minute, DEC); Serial.print(“:”);
//Serial.print(second, DEC); Serial.print(“.”);
//Serial.println(hundredths, DEC);

BTSerial.println(NowShockAnlaogValue);
BTSerial.println(latitude);
BTSerial.println(longitude);

PreShockAnalogValue = NowShockAnlaogValue;
delay(100);
//}

}
delay(100);
}
}

“아빠 어디야” 앱 아두이노 소스 판올림

  • GPS 쉴드를 연결하여 현 위치 파악가능하게 수정함.
  • 3번, 4번 핀으로 GPS와 연결하고, 현 위치 상시 파악하며 충격이 500 이상 감지되면 데이터 나타나도록 함.
  • GPS신호를 못 잡으면 데이터 전송하지 않도록 함.
  • 블루투스 전송시 데이터를 받는 앱에 어떻게 전달해야 구분이 편할지는 조금 더 고민해야 함
  • 시리얼모니터의 결과는 다음과 같이 나옴

#include <SoftwareSerial.h>
#include <TinyGPS.h>
#define SHOCK_A_IN_PIN 0

TinyGPS gps;
SoftwareSerial GPSSerial(4, 3);
SoftwareSerial BTSerial(0,1);

void GetGPSdata(TinyGPS &gps);
int iShockValue = 0;
float latitude, longitude;
int year;
byte month, day, hour, minute, second, hundredths;

void setup(){
BTSerial.begin(9600);
Serial.begin(9600);
GPSSerial.begin(9600);

Serial.println(“GPS 위치 수신중..”);
Serial.println(“충격감지센서 조정중..”);
Serial.println(“”);
}

void loop(){
while(GPSSerial.available()) {
int data = GPSSerial.read();
if(gps.encode(data)){
gps.f_get_position(&latitude, &longitude);
gps.crack_datetime(&year,&month,&day,&hour,&minute,&second,&hundredths);
delay(100);
}

iShockValue = 1024- analogRead(SHOCK_A_IN_PIN);
if (iShockValue >= 500){
if(latitude > 0) {
//Serial.print(“충격감도: “);
Serial.println(iShockValue);
//Serial.print(“위도: “);
Serial.println(latitude,5);
//Serial.print(“경도: “);
Serial.println(longitude,5);

//Serial.print(“현재시각: “); Serial.print(hour, DEC); Serial.print(“:”);
//Serial.print(minute, DEC); Serial.print(“:”); Serial.print(second, DEC);
//Serial.print(“.”); Serial.println(hundredths, DEC);

BTSerial.println(iShockValue);
BTSerial.println(latitude);
BTSerial.println(longitude);
delay(100);
}
}
}
}

‘아빠 어디야’ 개발일지 – 180904

아두이노 IDE

  • 아두이노 키트에서 스마트 폰 앱으로 블루투스를 이용하여 데이터 전송하는 파트로충격이 감지되면 데이터를 전송한다.
  • 충격감지는 A0핀을 이용하여 0.1초 간격으로 측정하여, 충격감도가 500이상이면 블루투스로 데이터를 보낸다.

앱 인벤터

  • 블루투스로 연결된 키트에서 전송하는 데이터를 받아 응급상황임이 감지되면 응급지정 스마트 폰으로 응급구조메시지를 전송한다.
  • 앱 인벤터에서 블루투스로 데이터가 들어오면 지정 폰으로 메시지를 보내게 했더니 블루투스 연결할 때, 연결되었을때도 메시지를 전송하여

– 들어오는 메시지가 숫자인지 확인하여,   “숫자가 아니면” toast  메시지로 보여주고,  “숫자라면” 텍스트 박스에 쓰고 구조 메시지를 보내도록 함

 

 

‘아빠 어디야’ 앱 아두이노 소스

#include <SoftwareSerial.h>
#define SHOCK_A_IN_PIN 0

SoftwareSerial BTSerial(0,1);
byte buffer[1024];
int bufferPosition;

int iShockValue = 0;

void setup() {
BTSerial.begin(9600);
Serial.begin(9600);
bufferPosition=0;
}

void loop() {
iShockValue = 1024- analogRead(SHOCK_A_IN_PIN);
if (iShockValue >= 500){
Serial.println(iShockValue);
BTSerial.println(iShockValue);
}
delay(100);
}