You are on page 1of 2

// Code for Pothole Detection using Piezoelectric and Accelerometer Sensor

#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_ADXL345_U.h>

// Create the ADXL345 object


Adafruit_ADXL345_Unified accel = Adafruit_ADXL345_Unified(12345);

// Global Variables
float x, y, z;
float min_x, max_x, min_y, max_y, min_z, max_z;
float threshold = 2.0;

// Piezoelectric Sensor Pins


int piezoPin1 = 0;
int piezoPin2 = 0;

// GPS Module Pins


int gpsPin1 = 0;
int gpsPin2 = 0;

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

// Initialize Piezoelectric Sensor Pins


pinMode(piezoPin1, INPUT);
pinMode(piezoPin2, INPUT);

// Initialize GPS Module Pins


pinMode(gpsPin1, INPUT);
pinMode(gpsPin2, INPUT);

// Initialize Accelerometer
if(!accel.begin()) {
Serial.println("Ooops, no ADXL345 detected ... Check your wiring!");
while(1);
}

// Set Range
accel.setRange(ADXL345_RANGE_2_G);

// Set Data Rate


accel.setDataRate(ADXL345_DATARATE_100_HZ);

// Get initial min and max readings from accelerometer


min_x = accel.readX();
min_y = accel.readY();
min_z = accel.readZ();
max_x = accel.readX();
max_y = accel.readY();
max_z = accel.readZ();
}

void loop() {
// Get acceleration measurements from the accelerometer
sensors_event_t event;
accel.getEvent(&event);
// Check if acceleration measurements are within threshold
if (abs(event.acceleration.x - min_x) > threshold ||
abs(event.acceleration.y - min_y) > threshold ||
abs(event.acceleration.z - min_z) > threshold) {

// Check if Piezoelectric Sensor is triggered


int piezo_reading1 = digitalRead(piezoPin1);
int piezo_reading2 = digitalRead(piezoPin2);
if (piezo_reading1 == HIGH || piezo_reading2 == HIGH) {
// Get GPS Coordinates
int gps_reading1 = digitalRead(gpsPin1);
int gps_reading2 = digitalRead(gpsPin2);
float lat = gps_reading1 * 0.00001;
float lon = gps_reading2 * 0.00001;

// Print Pothole Detected message with coordinates


Serial.println("Pothole Detected at Latitude: " + String(

You might also like