Introduction: Earthquake / Vibration Sensor

About: Professionally, I'm an IT Engineer (Executive Level) and Electronics Tech. I'm a Amateur Radio Operator (KK4HFJ). I lived off grid, with Solar (PV), Wind, and veggie oil fueled diesel generator power for 6 yea…

We needed a method of detecting vibration in equipment, so I whipped up a simple vibration detector. One day, when the equipment was off, I saw that the detector was registering quite a bit of movement, even though I could not feel anything. I heard later that there had been an earthquake a few hundred miles away. That's when I had the "a ha" moment and decided to make a Seismic detector. Original article at


Vibration Sensor -

Arduino -

16x2 LCD -

1 M Ohm Resistor -

Step 1: Connections


The vibration sensor connections are simple. Connect the + leg to A0, and the - leg to Arduino Gnd. Insert a 1 M Ohm resistor between the A0 and Gnd as well.


If you are using a I2C LCD, so there are 4 connections:

VCC - Arduino +5

SDA - Arduino A4

SCL - Arduino A5

Gnd - Arduino Gnd

There is special code and libraries required, see

If you are using a 16 pin parallel LCD;

The line in code:

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

resolves to the connections below:

The circuit:
* LCD RS pin to digital pin 12

* LCD Enable pin to digital pin 11

* LCD D4 pin to digital pin 5

* LCD D5 pin to digital pin 4

* LCD D6 pin to digital pin 3

* LCD D7 pin to digital pin 2

* LCD R/W pin to ground

* LCD VSS pin to ground

* LCD VCC pin to 5V

* 10K potentiometer:

1. ends to +5V and ground

2. wiper to LCD VO pin (pin 3)

Step 2: Code

I'm including the code here for the parallel LCD. Contact me if you want the I2C code. It requires special libraries, but only uses two data pins instead of 6.

//sensitivity variables

int minimum = 200;

int maximum= 1023;

int maxdelay = 400;

// include the library code:


// initialize the library with the numbers of the interface pins

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

// Custom Character

byte seismic[8] = { B11111, B11111, B11111, B11111, B11111, B11111, B11111, B11111, };

//defines the pin connections

int sensePin= 0;

void setup() {


lcd.begin (16,2); // or (20,4)

lcd.createChar(0, seismic);

lcd.begin(16, 2);


void loop() {

int reading= analogRead(sensePin);


reading = constrain(reading, minimum, maximum);


reading = map(reading, minimum, maximum, 0, 15);

Serial.println(reading); lcd.clear();

for (int i=0; i <= reading; i++){



if (4<=reading && 8>reading){

lcd.setCursor(0, 1);

lcd.print(" ");

lcd.print("Seismic Activity");



if (8<=reading){

lcd.setCursor(0, 1);

lcd.print(" ");