Vous êtes sur la page 1sur 15

//#include <SoftwareSerial.

h>

#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 16, 2);

//SoftwareSerial mygps(10, 11); // RX, TX

#define trigPin A2 // Trigger Pin

#define echoPin A3 // Echo Pin

int maximumRange = 100; // Maximum range needed

int minimumRange = 0; // Minimum range needed

long duration, distance; // Duration used to calculate distance

void sendsmsalchol();

void sendsmsaccident();

void buzzeralert();

#define alchol A0

#define accident A1

#define buzzerp 8

#define buzzern 9

#define seatbelt 13

#include<Wire.h>

#define Addr 0x53

void adxl345();

int xAccl, yAccl, zAccl;

#define enA 5

#define enB 6

#define in1 2

#define in2 3

#define in3 4
#define in4 7

int veh_state = 1;

int Gpsdata; // for incoming serial data

unsigned int finish =0; // indicate end of message

unsigned int pos_cnt=0; // position counter

unsigned int lat_cnt=0; // latitude data counter

unsigned int log_cnt=0; // longitude data counter

unsigned int flg =0; // GPS flag

unsigned int com_cnt=0; // comma counter

char lat[20]; // latitude array

char lg[20]; // longitude array

void Receive_GPS_Data();

void setup()

Serial.begin(9600);

lcd.begin();

lcd.print("Accident Prevention");

lcd.setCursor(40,0);

lcd.print("vehicle & alert system");

delay(2000);

lcd.setCursor(0, 0);

lcd.print("Network searching ");

delay(500);

delay(3000); // give time for GSM module to register on network.

Serial.println("AT+CMGF=1"); // set SMS mode to text


delay(200);

Serial.println("AT+CNMI=2,2,0,0,0"); // set module to send SMS data to serial out upon receipt

delay(200);

Serial.println("AT+CMGD=1,4");

Wire.begin();

Serial.begin(9600);

//mygps.begin(9600);

Wire.beginTransmission(Addr);

Wire.write(0x2C);

Wire.write(0x0A);

Wire.endTransmission();

Wire.beginTransmission(Addr);

Wire.write(0x2D);

Wire.write(0x08);

Wire.endTransmission();

Wire.beginTransmission(Addr);

Wire.write(0x31);

Wire.write(0x08);

Wire.endTransmission();

delay(300);

pinMode(enA, OUTPUT);

pinMode(enB, OUTPUT);

pinMode(in1, OUTPUT);

pinMode(in2, OUTPUT);

pinMode(in3, OUTPUT);

pinMode(in4, OUTPUT);
pinMode(trigPin, OUTPUT);

pinMode(echoPin, INPUT);

pinMode(buzzerp, OUTPUT);

pinMode(buzzern, OUTPUT);

pinMode(accident, INPUT_PULLUP);

pinMode(seatbelt, INPUT_PULLUP);

pinMode(alchol, INPUT);

lcd.begin();

lcd.print("speed:");

lcd.setCursor(10,0);

lcd.print("100KMPH");

delay(1000);

analogWrite(enA, 255);

analogWrite(enB, 255);

digitalWrite(in1, HIGH);

digitalWrite(in2, LOW);

digitalWrite(in3, HIGH);

digitalWrite(in4, LOW);

void loop()

//*****************************************************

if(digitalRead(accident) == LOW )

lcd.setCursor(0, 0);

lcd.print("Accident Detected");

lcd.setCursor(0, 1);

lcd.print("Vehicle Stopped");
buzzeralert();

analogWrite(enA, 0);

analogWrite(enB, 0);

digitalWrite(in1, LOW);

digitalWrite(in2, LOW);

digitalWrite(in3, LOW);

digitalWrite(in4, LOW);

delay(500);

sendsmsalchol();

veh_state = 0;

//*******************************************************

if(digitalRead(seatbelt) == HIGH )

lcd.setCursor(0, 0);

lcd.print("wear seat belt");

lcd.setCursor(0, 1);

lcd.print("Vehicle Stopped");

buzzeralert();

analogWrite(enA, 0);

analogWrite(enB, 0);

digitalWrite(in1, LOW);

digitalWrite(in2, LOW);

digitalWrite(in3, LOW);

digitalWrite(in4, LOW);

delay(500);

veh_state = 0;

}
//*******************************************************

if(digitalRead(alchol) == LOW )

lcd.setCursor(0, 0);

lcd.print("Alchol Detected");

lcd.setCursor(0, 1);

lcd.print("Vehicle Stopped");

buzzeralert();

analogWrite(enA, 0);

analogWrite(enB, 0);

digitalWrite(in1, LOW);

digitalWrite(in2, LOW);

digitalWrite(in3, LOW);

digitalWrite(in4, LOW);

delay(500);

sendsmsaccident();

veh_state = 0;

//*****************************************************

adxl345();

// Output data to serial monitor

Serial.print("Acceleration in X-Axis is : ");

Serial.println(xAccl);

Serial.print("Acceleration in Y-Axis is : ");

Serial.println(yAccl);

Serial.print("Acceleration in Z-Axis is : ");

Serial.println(zAccl);

delay(300);

if(xAccl <= -100 || xAccl >= 100)


{

lcd.setCursor(0, 0);

lcd.print("X Fall Detected");

lcd.setCursor(0, 1);

lcd.print("Vehicle Stopped");

buzzeralert();

analogWrite(enA, 0);

analogWrite(enB, 0);

digitalWrite(in1, LOW);

digitalWrite(in2, LOW);

digitalWrite(in3, LOW);

digitalWrite(in4, LOW);

digitalWrite(buzzerp, HIGH);

veh_state = 0;

delay(500);

digitalWrite(buzzerp, LOW);

if(yAccl <= -100 || yAccl >= 100)

lcd.setCursor(0, 0);

lcd.print("Y Fall Detected");

lcd.setCursor(0, 1);

lcd.print("Vehicle Stopped");

buzzeralert();

analogWrite(enA, 0);

analogWrite(enB, 0);

digitalWrite(in1, LOW);

digitalWrite(in2, LOW);

digitalWrite(in3, LOW);
digitalWrite(in4, LOW);

veh_state = 0;

digitalWrite(buzzerp, HIGH);

delay(500);

digitalWrite(buzzerp, LOW);

//**********************************************************

digitalWrite(trigPin, LOW);

delayMicroseconds(2);

digitalWrite(trigPin, HIGH);

delayMicroseconds(10);

digitalWrite(trigPin, LOW);

duration = pulseIn(echoPin, HIGH);

distance = duration/58.2;

if(distance > 100)

distance = 100;

lcd.begin();

lcd.setCursor(0, 0);

lcd.print("Distance:");

lcd.setCursor(11, 0);

lcd.print(distance);

delay(500);

if(veh_state == 1)

if (distance < 20)

lcd.setCursor(0, 0);
lcd.print("Vehicle Stops: 0KMPH");

analogWrite(enA, 0);

analogWrite(enB, 0);

digitalWrite(in1, LOW);

digitalWrite(in2, LOW);

digitalWrite(in3, LOW);

digitalWrite(in4, LOW);

delay(1000);

if (distance >=20 && distance < 40)

lcd.setCursor(0, 0);

lcd.print("reduced Speed: 50KMPH");

analogWrite(enA, 150);

analogWrite(enB, 150);

digitalWrite(in1, HIGH);

digitalWrite(in2, LOW);

digitalWrite(in3, HIGH);

digitalWrite(in4, LOW);

delay(1000);

if (distance >=40)

lcd.setCursor(0, 0);

lcd.print("Normal Speed: 100KMPH");

analogWrite(enA, 255);

analogWrite(enB, 255);

digitalWrite(in1, HIGH);

digitalWrite(in2, LOW);
digitalWrite(in3, HIGH);

digitalWrite(in4, LOW);

delay(1000);

//*******************************************************

veh_state = 1;

//********************************************************************

//********************************************************************

void sendsmsalchol()

{ lcd.setCursor(0, 0);

lcd.print("Reading GPS...... ");

Receive_GPS_Data();

delay(1000);

lcd.setCursor(0, 1);

lcd.print("sending sms......");

Serial.println("AT+CMGF=1");

delay(200);

Serial.println("AT+CMGS=\"8919793633\"");//Change the receiver phone number

delay(200);

Serial.println("Driver in your vehicle was in drunken so vehicle stopped and track location of
your vehicle with these details below\n");

Serial.print("Latitude : ");

Serial.println(lat);

delay(200);

Serial.print("Longitude : "); //the message you want to send

Serial.println(lg);

delay(200);
Serial.write(26);

lcd.setCursor(0, 1);

lcd.print(" SMS Sent...! ");

Serial.print("SMS Sent...!");

//********************************************************************

void buzzeralert()

digitalWrite(buzzerp, HIGH);

digitalWrite(buzzern, LOW);

delay(500);

digitalWrite(buzzerp, LOW);

digitalWrite(buzzern, LOW);

//********************************************************************

void sendsmsaccident()

lcd.setCursor(0, 0);

lcd.print("Reading GPS...... ");

Receive_GPS_Data();

delay(1000);

lcd.setCursor(0, 1);

lcd.print("sending sms......");

Serial.println("AT+CMGF=1");

delay(300);

Serial.println("AT+CMGS=\"9346173159\"");//Change the receiver phone number

delay(300);

Serial.print("your vechile met with an accident so vehicle stopped and track location of your
vehicle with these details below\n"); //the message you want to send
delay(300);

Serial.print("Latitude : ");

Serial.println(lat);

delay(300);

Serial.print("Longitude : "); //the message you want to send

Serial.println(lg);

delay(300);

Serial.write(26);

lcd.setCursor(0, 1);

lcd.print(" SMS Sent...! ");

delay(500);

Serial.print("SMS Sent to Registered Mobile\n");

//*********************************************************************

void adxl345()

unsigned int data[6];

for(int i = 0; i < 6; i++)

Wire.beginTransmission(Addr);

Wire.write((50 + i));

Wire.endTransmission();

Wire.requestFrom(Addr, 1);

if(Wire.available() == 1)

data[i] = Wire.read();

xAccl = (((data[1] & 0x03) * 256) + data[0]);


if(xAccl > 511)

xAccl -= 1024;

yAccl = (((data[3] & 0x03) * 256) + data[2]);

if(yAccl > 511)

yAccl -= 1024;

zAccl = (((data[5] & 0x03) * 256) + data[4]);

if(zAccl > 511)

zAccl -= 1024;

//*****************************************************************

void Receive_GPS_Data()

while(finish==0){

while(Serial.available()>0)

Gpsdata = Serial.read();

flg = 1;

if( Gpsdata=='$' && pos_cnt == 0) // finding GPRMC header

pos_cnt=1;

if( Gpsdata=='G' && pos_cnt == 1)

pos_cnt=2;

if( Gpsdata=='P' && pos_cnt == 2)

pos_cnt=3;
if( Gpsdata=='R' && pos_cnt == 3)

pos_cnt=4;

if( Gpsdata=='M' && pos_cnt == 4)

pos_cnt=5;

if( Gpsdata=='C' && pos_cnt==5 )

pos_cnt=6;

if(pos_cnt==6 && Gpsdata ==',')

{ // count commas in message

com_cnt++;

flg=0;

if(com_cnt==3 && flg==1)

lat[lat_cnt++] = Gpsdata; // latitude

flg=0;

if(com_cnt==5 && flg==1)

lg[log_cnt++] = Gpsdata; // Longitude

flg=0;

if( Gpsdata == '*' && com_cnt >= 5)

com_cnt = 0; // end of GPRMC message

lat_cnt = 0;

log_cnt = 0;
flg = 0;

finish = 1;

lcd.begin();

lcd.print("Lat: ");

lcd.print(lat);

delay(500);

lcd.setCursor(0,1);

lcd.print("Lng: "); //the message you want to send

lcd.print(lg);

delay(500);

//*****************************************************************************

Vous aimerez peut-être aussi