/Macros/
#define samples 50
#define maxVal 10 // max change limit
#define minVal -10 // min change limit
#define buzTime 5000 // buzzer on time
void setup()
{
lcd.begin (); //Defining 16 columns and 2 rows of lcd display
lcd.backlight();//To Power ON the back light
//lcd.backlight();// To Power OFF the back light
lcd.setCursor(0, 0); //Defining positon to write from first row,first column .
delay(1000);
lcd.print(" EarthQuake ");
lcd.setCursor(0, 1);
lcd.print(" Detector ");
delay(2000);
lcd.clear();
lcd.print(" Calibrating..... ");
lcd.setCursor(0, 1);
lcd.print(" Please wait... ");
pinMode(buzzer, OUTPUT);
pinMode(led, OUTPUT);
buz = 0;
digitalWrite(buzzer, buz);
digitalWrite(led, buz);
for (int i = 0; i < samples; i++) // taking samples for calibration
{
xsample += analogRead(xpin);
ysample += analogRead(ypin);
zsample += analogRead(zpin);
}
xsample /= samples; // taking avg for x
ysample /= samples; // taking avg for y
zsample /= samples; // taking avg for z
delay(3000);
lcd.clear();
lcd.print(" Calibrated ");
delay(1000);
lcd.clear();
lcd.print(" Device Ready ");
delay(1000);
lcd.clear();
lcd.print(" X Y Z ");
}
void loop()
{
int value1 = analogRead(xpin); // reading x out
int value2 = analogRead(ypin); //reading y out
int value3 = analogRead(zpin); //reading z out
int xValue = xsample - value1; // finding change in x
int yValue = ysample - value2; // finding change in y
int zValue = zsample - value3; // finding change in z
/displaying change in x,y and z axis values over lcd/
lcd.setCursor(0, 1);
lcd.print(xValue);
lcd.setCursor(6, 1);
lcd.print(yValue);
lcd.setCursor(12, 1);
lcd.print(zValue);
delay(100);
/* comparing change with predefined limits*/
if (xValue < minVal || xValue > maxVal || yValue < minVal || yValue > maxVal || zValue < minVal || zValue > maxVal)
{
if (buz == 0)
start = millis(); // timer start
buz = 1; // buzzer / led flag activated
}
else if (buz == 1) // buzzer flag activated then alerting earthquake
{
lcd.setCursor(0, 0);
lcd.print("Earthquake Alert");
if (millis() >= start + buzTime)
buz = 0;
}
else
{
lcd.clear();
lcd.print(" X Y Z ");
}
digitalWrite(buzzer, buz); // buzzer on and off command
digitalWrite(led, buz); // led on and off command
/sending values to processing for plot over the graph/
Serial.print("x=");
Serial.println(xValue);
Serial.print("y=");
Serial.println(yValue);
Serial.print("z=");
Serial.println(zValue);
Serial.println("$");
}