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 y...

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 -

Teacher Notes

Teachers! Did you use this instructable in your classroom?
Add a Teacher Note to share how you incorporated it into your lesson.

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(" ");







Be the First to Share


    • Made with Math Contest

      Made with Math Contest
    • Multi-Discipline Contest

      Multi-Discipline Contest
    • Robotics Contest

      Robotics Contest

    7 Discussions


    2 years ago

    Hey, Steve, I wonder if it was okay to connect the vibration sensor directly to the Arduino like that? Did it not cause any trouble? I say this because the data sheet for the piezo vibration sensor tells me the output could be as large s +/- 90V. and the arduino pins are desingned to handle a max of nearly 5.5V. Please let me know if you faced any troubles. :)


    3 years ago

    Hey Steve i hope you're still active :) i just wa'nna ask you if there is an alternative vibration sensor, since there is no stock for the sparksfun piezo vibration sensor. Thanks :D

    4 replies

    Reply 3 years ago

    Here you go -


    Reply 3 years ago

    hey spence thanks for the reply. Can you make a video on how to input the codes and the library on the arduino application? thanks :D


    Reply 3 years ago

    hey spence thanks for the reply. Can you make a video on how to input the codes and the library on the arduino application? thanks :D


    Reply 3 years ago

    I just picked one of these (the mass-less version of the one shown in the article photo) up two weeks ago for another project. You can add your own mass to create resonant frequencies as desired. Got it here