Go Down

Topic: Lehman Seismograph (Read 8000 times) previous topic - next topic


This project turned out to be very simple compared with my last project(Ultrasonic
Anemometer). There is plenty of detailed information on the web.

I was very interested in:


However I decided to keep it simple and go with:


I followed the mechanical design very closely:

I used the basic LED LDR circuit described at the above site.
His project uses a PC as a continuous logger of the data.
I did not want to allocate a PC for this job.
I used a Arduino 2009 with a SD card as the logger.

I use my library function SDCARDFILES.
This creates text files and appends data to an open file 512 bytes at a time.


#include <SDCARDFILES.h>

unsigned long now = 0; //the timekeeper
unsigned char buffer[512] ;  // this 512 bytes read from or written to sd card
unsigned int bp = 0; //bufferpointer
unsigned long filesectors = 0; //record of number of sectors in file
const unsigned long maxsectors = 4236; //maximun number of sectors per file(12hrs)

void setup()
  pinMode(2, OUTPUT); //error indicator
  digitalWrite(2, LOW);    // set the LED off
  pinMode(3, OUTPUT); //busy indicator
  digitalWrite(3, LOW);    // set the LED off
  int error = SDCARDFILES.createfile();
  if (error !=0)
  digitalWrite(2, HIGH);   // set the LED on for error   
}//end of setup

void loop()
  while (millis() - now < 100)
  ; //do nothing until 125 ms has passed
  now += 100;  //update time keeper
  unsigned int sensor = analogRead(A0);
  buffer[bp++] = ((sensor)/1000)%10 + 48; //msb to ascii
  buffer[bp++] = ((sensor)/100)%10 + 48; //next to ascii
  buffer[bp++] = ((sensor)/10)%10 + 48; //next to ascii
  buffer[bp++] = (sensor)%10 + 48; //lsb to ascii
  buffer[bp++] = 32;  //followed by a space
  if(bp == 510)
   digitalWrite(3, HIGH);   // set the LED on for busy   
   buffer[bp++] = 13;  //followed by a CR
   buffer[bp] = 10;  //followed by a LF
   int error = SDCARDFILES.fileappend();  //append one sector to created file
   if (error !=0)
   digitalWrite(2, HIGH);   // set the LED on for error      
  bp = 0;  //reset buffer
  if(++filesectors >= maxsectors)  //have we filled up one file
   int error = SDCARDFILES.createfile();  //move on to the next file
   if (error !=0)
   digitalWrite(2, HIGH);   // set the LED on for error   
   filesectors = 0;  //reset the sector counter
  }//end of we have filled up one file 
  }//end of used buffer 102 samples
  digitalWrite(3, LOW);   // set the LED on for not busy   
}//end of loop

The time that the arduino is reset is noted and used as the time reference.
When the SD card is removed the files are copied to a folder "seismic" on a PC.
This is accessed by a VB program which displays the data:

Simulated plot of an earthquake by a gentle puff of air from 2 meters.
The times are all relative to the start time.

For all the construction details download seismograph_project.zip from:


Big Oil

Very cool. 
How sensitive is it?  Can it also detect trains, cars, or people?


Yes it is very sensitive to extraneous noise.

Also it will have to be in an enclosed box as any air movement will set it off.

I did not have it running during the recent big one in Japan.

I now have it logging data and I expect that it will detect magnitude 6 and above any where in the world
on the line I have set.

I'm on the east coast of Australia and the detector is most sensitive on a line China to New Zealand.

To get full world coverage it is necessary to have two detectors at right angles.


On our news this morning a magnitude 6.8 on the Burma Thailand border at 8 pm their time.

I checked my data and found:

The onset of the quake sent the detector to full scale.

I checked:


I found the quake:

M7.0 Myanmar.

UTC time: 24 March 13:55

They have not published their seismograph data yet.

Its nice to see that this design works as advertised.



Thanks novice.

I was really pleased to see a bunch of wood,bolts and nuts(it looks quite odd to me) actually detect an eartquake.

Go Up