Personal Accident Android

Personal Accident Android © MIT

This project is used to determine the occurrence of vehicle accidents by determining the fastest route to the victim.

  • 134 views
  • 0 comments
  • 2 respects

Components and supplies

Apps and online services

About this project

This project is to create a module that is installed on the vehicle so that when an accident occurs it will send the location of the vehicle accident to the android application that has been installed on the smartphone very quickly with the fastest map route shown on the application.

This module is simulated with replicas so that when simulated on a highway it will get very accurate data with the calculation of the sensors installed.

Code

Code Modul Vihacle AndroidC/C++
// Cabling for i2c,
//using Sparkfun breakout with an Arduino Uno / Duemilanove:
// Arduino <-> Breakout board
// Gnd      -  GND
// 3.3v     -  VCC
// 3.3v     -  CS
// Analog 4 -  SDA
// Analog 5 -  SLC

// Cabling for i2c using Sparkfun breakout with an Arduino Mega / Mega ADK:
// Arduino <-> Breakout board
// Gnd      -  GND
// 3.3v     -  VCC
// 3.3v     -  CS
// 20       -  SDA
// 21       -  SLC

#include <Wire.h>
#include <SoftwareSerial.h>

#include <TinyGPS.h>

#define DEVICE (0x53) // Device address as specified in data sheet 


TinyGPS gps;
SoftwareSerial ss(10, 11);

static void smartdelay(unsigned long ms);
static void print_float(float val, float invalid, int len, int prec);
static void print_int(unsigned long val, unsigned long invalid, int len);
static void print_date(TinyGPS &gps);
static void print_str(const char *str, int len);
char inchar;

byte _buff[6];

char POWER_CTL = 0x2D;  //Power Control Register
char DATA_FORMAT = 0x31;
char DATAX0 = 0x32; //X-Axis Data 0
char DATAX1 = 0x33; //X-Axis Data 1
char DATAY0 = 0x34; //Y-Axis Data 0
char DATAY1 = 0x35; //Y-Axis Data 1
char DATAZ0 = 0x36; //Z-Axis Data 0
char DATAZ1 = 0x37; //Z-Axis Data 1
int xmax = 0;
int ymax = 0;
int zmax = 0;
int xmax2 = 0;
int ymax2 = 0;
int zmax2 = 0;

const int xMin = 100; // (-1 G)
const int xMax = 596; // (+1 G)

const int yMin = 100; // (-1 G)
const int yMax = 597; // (+1 G)

const int zMin = 100; // (-1 G)
const int zMax = 612; // (+1 G)

int xVal = 0;
int yVal = 0;
int zVal = 0;


float flat, flon;
unsigned long age, date, time, chars = 0;
unsigned short sentences = 0, failed = 0;
static const double MALANG_LAT = 51.508131, MALANG_LON = -0.128002;



void setup()
{
  pinMode(4, OUTPUT);
  Wire.begin();        // join i2c bus (address optional for master)
  Serial.begin(9600);  // start serial for output. Make sure you set your Serial Monitor to the same!
  Serial.print("init");

  //Put the ADXL345 into +/- 4G range by writing the value 0x01 to the DATA_FORMAT register.
  writeTo(DATA_FORMAT, 0x01);
  //Put the ADXL345 into Measurement Mode by writing 0x08 to the POWER_CTL register.
  writeTo(POWER_CTL, 0x08);
  digitalWrite(4, 1);
  ss.begin(9600);
}


void loop()
{
  readAccel(); // read the x/y/z tilt
  
}

void readAccel() {

  xVal = analogRead(0);
  yVal = analogRead(1);
  zVal = analogRead(2);

  long xScaled = map(xVal, xMin, xMax, -1000, 1000);
  long yScaled = map(yVal, yMin, yMax, -1000, 1000);
  long zScaled = map(zVal, zMin, zMax, -1000, 1000);


  uint8_t howManyBytesToRead = 6;
  readFrom( DATAX0, howManyBytesToRead, _buff); //read the acceleration data from the ADXL345

  // each axis reading comes in 10 bit resolution, ie 2 bytes.  Least Significat Byte first!!
  // thus we are converting both bytes in to one int
  int x = (((int)_buff[1]) << 8) | _buff[0];
  int y = (((int)_buff[3]) << 8) | _buff[2];
  int z = (((int)_buff[5]) << 8) | _buff[4];
  
  if (x > xmax)
  {
    xmax = x;
  }
  if (y > ymax)
  {
    ymax = y;
  }
  if (z > zmax)
  {
    zmax = z;
  }

  if (xScaled > xmax2)
  {
    xmax2 = xScaled;
  }
  if (yScaled > ymax2)
  {
    ymax2 = yScaled;
  }
  if (zScaled > zmax2)
  {
    zmax2 = zScaled;
  }

  if ((xmax >= 150) && (ymax >= 150) && (zmax >= 150))
  {

    if ((xmax2 >= 150) && (ymax2 >= 150) && (zmax2 >= 150))
    {
    digitalWrite(4, 0);
    gps.f_get_position(&flat, &flon, &age);
    smartdelay(1000);
    gps.f_get_position(&flat, &flon, &age);
    smartdelay(1000);

    Serial.println("AT");
    delay(1000);
    Serial.println("AT+CMGF=1");
    delay(1000);
    Serial.println("AT+CMGS=\"mobile phone"\r");
    delay(1000);
    Serial.print(flat, 6);
    Serial.print(",");
    Serial.println(flon, 6);
    delay(1000);
    Serial.println((char)26);
    delay(1000);
     Serial.println("AT+CMGS=\"mobile phone"\r");
    delay(1000);
    Serial.print(flat, 6);
    Serial.print(",");
    Serial.println(flon, 6);
    delay(1000);
    Serial.println((char)26);
    delay(2000);
     Serial.println("AT+CMGS=\"mobile phone\"\r");
    delay(1000);
    Serial.print(flat, 6);
    Serial.print(",");
    Serial.println(flon, 6);
    delay(1000);
    Serial.println((char)26);
    delay(1000);
     Serial.println("AT+CMGS=\"mobile phone"\r");
    delay(1000);
    Serial.print(flat, 6);
    Serial.print(",");
    Serial.println(flon, 6);
    delay(1000);
    Serial.println((char)26);
    delay(3000);
     Serial.println("AT+CMGS=\"mobile phone"\r");
    delay(1000);
    Serial.print(flat, 6);
    Serial.print(",");
    Serial.println(flon, 6);
    delay(1000);
    Serial.println((char)26);
    delay(4000);
     Serial.println("AT+CMGS=\"mobile phone"\r");
    delay(1000);
    Serial.print(flat, 6);
    Serial.print(",");
    Serial.println(flon, 6);
    delay(1000);
    Serial.println((char)26);
    delay(5000);
     Serial.println("AT+CMGS=\"mobile phone"\r");
    delay(1000);
    Serial.print(flat, 6);
    Serial.print(",");
    Serial.println(flon, 6);
    delay(1000);
    Serial.println((char)26);
    delay(6000);
  

    boolean in = false;
    do
    {
      if (Serial.available() > 0)
      {
        inchar = Serial.read ();
        Serial.print ((char)inchar);
        if (inchar == 'e')
        {
          delay (10);
          inchar = Serial.read();
          Serial.print ((char)inchar);
          if (inchar == 'c')
          {
            delay (10);
            inchar = Serial.read();
            Serial.print ((char)inchar);
            if (inchar == '0')
            {
              in = true;
              digitalWrite(4, 0);
              delay (10);
              digitalWrite(4, 1);
              goto sini;
            }
          }
        }
      }
    } while (in == false);
sini:
    in = false;
    xmax = 0;
    ymax = 0;
    zmax = 0;
    digitalWrite(4, 1);
  }
  }
}

void writeTo(byte address, byte val) 
{
  Wire.beginTransmission(DEVICE); // start transmission to device
  Wire.write(address);             // send register address
  Wire.write(val);                 // send value to write
  Wire.endTransmission();         // end transmission
}

// Reads num bytes starting from address register on device in to _buff array
void readFrom(byte address, int num, byte _buff[]) 
{
  Wire.beginTransmission(DEVICE); // start transmission to device
  Wire.write(address);             // sends address to read from
  Wire.endTransmission();         // end transmission

  Wire.beginTransmission(DEVICE); // start transmission to device
  Wire.requestFrom(DEVICE, num);    // request 6 bytes from device

  int i = 0;
  while (Wire.available())        // device may send less than requested (abnormal)
  {
    _buff[i] = Wire.read();    // receive a byte
    i++;
  }
  Wire.endTransmission();         // end transmission
}
static void smartdelay(unsigned long ms)
{
  unsigned long start = millis();
  do
  {
    while (ss.available())
      gps.encode(ss.read());
  } while (millis() - start < ms);
}

static void print_float(float val, float invalid, int len, int prec)
{
  if (val == invalid)
  {
    while (len-- > 1)
      Serial.print('*');
    Serial.print(' ');
  }
  else
  {
    Serial.print(val, prec);
    int vi = abs((int)val);
    int flen = prec + (val < 0.0 ? 2 : 1); // . and -
    flen += vi >= 1000 ? 4 : vi >= 100 ? 3 : vi >= 10 ? 2 : 1;
    for (int i = flen; i < len; ++i)
      Serial.print(' ');
  }
}

Custom parts and enclosures

Comments

Similar projects you might like

Line Follower Robot - PID Control - Android Setup

Project tutorial by MJRoBot

  • 29,049 views
  • 9 comments
  • 38 respects

Android App-Based Home Automation System Using IOT

Project tutorial by Team Autoshack

  • 27,565 views
  • 18 comments
  • 87 respects

Hacking A RC Car To Control It Using An Android Device

Project tutorial by MJRoBot

  • 21,489 views
  • 0 comments
  • 41 respects

Android Guided Vehicle

Project in progress by bharath.s

  • 2,685 views
  • 0 comments
  • 7 respects

Android Arduino RC Car

Project tutorial by RAFI RASHEED T C

  • 15,811 views
  • 2 comments
  • 38 respects
Add projectSign up / Login