Lehman Seismograph Construction Notes

{Work is in progress}

Because I occasionally get requests for information about the construction of the Lehman seismograph, I thought it might be helpful to add a page of notes with some of that information.

I should begin by saying that the purpose of this seismograph was for the pure enjoyment of observing earthquakes.  It is not calibrated in amplitude; I use a walk-up calibration described below.  The time calibration is somewhat more precise, but only within the timing accuracy of the internet time software that I use, the Windows Linux operating system, and the Amaseis recording software.  I have not analyzed any of the errors in the timing system.  Having said that the instrument has recorded a lot of earthquakes during the past nearly ten years of continuous operation and is capable of demonstrating a surprising range of seismic phenomena.

Dimensions and Construction Details

The basic layout is described in the Lehman Seismograph page.  The instrument is shown in the photo below.20140309-203828.jpg

The labels refer to the locations of various attachment points that have some importance in tuning the seismometer response and operation.

  • S is the upper pivot and suspension for the entire boom
  • O is the lower pivot formed by knife edge on the boom against a modified bolt.
  • P is the magnetic pick-up (sensor) location
  • B is the attachment point for the suspension wire on the boom
  • M is the location of the seismic mass, roughly five pounds of lead
  • D is the location of the damping vane

The rough dimensions are given below:

  • Vertical distance between the upper and lower pivot points, OS, is 44.5 cm
  • Distance along the boom from lower pivot to the sensor, OP, is 69 cm
  • Distance along the boom from lower pivot to the suspension attachment, OB, is 75 cm
  • Distance along the boom from lower pivot to the seismic mass, OM, is 83 cm
  • Distance along the boom from lower pivot to the damping vane, OD, is 92 cm

The upright support is provided by a frame constructed from two eighteen inch lengths of ½ inch pipe attached to the aluminum base with pipe flanges and connected at the top with two 90º els and a six inch nipple. A steel bar spans the two uprights with its center about 2 inches above the base. A hole is tapped in the center to accept a bolt for the lower pivot point (knife edge) to rest against. The head of the bolt was filed flat.  A very shallow groove was filed across it to accept the knife edge that was ground on the mating end of the boom, a 3/8 inch diameter steel rod.  The photo below shows a close-up of the lower pivot.


The photo below shows the upper pivot point and suspension for the pendulum.  The suspension wire is a 0.012 inch nickel-steel guitar string.  The small ball on the guitar string passes through a hole in the bracket on the left and the wire slips into a slot to a shallow countersunk hole to center the ball.  The wire passes over a shallow groove in the bolt head on the right and on to the boom.  The bolts at the wire suspension and the knife-edge provide adjustment to offset the top of the line between them very slightly toward the the pendulum.  This adjustment is used to tune the period of the undamped pendulum to between 12 and 16 seconds.


Tuning and Final Adjustments

At this point the seismometer should be placed in the position where it will operate.  Mine is placed directly on the concrete floor of our basement.  In its normal operation it is covered with a box made of 1/2 inch blue foam building insulation to reduce the effects of thermal changes and air currents on the soon to be very motion sensitive boom.  The boom is usually oriented to swing either in an East-West direction or a North-South direction.  Mine swings EW.  The base is then leveled use the three screws in the base until the boom centers to its operating position. The first real adjustment is to tune the undamped period of the pendulum to 12 to 16 seconds as described above.  This is best done using whatever utility software came with the analog to digital converter (ADC) you are using, WinDaq in the case of the Dataq device that I am using, and assumes that you have performed whatever ADC calibration that is necessary.  Gain and offset adjustments should then be made to your amplifier to center the trace and to provide a good signal without overloading the ADC.  For the Dataq ADC the input range is ±10 volts  so you want to remove any DC offset from the signal and adjust the gain to provide a signal level of ±10 volts when the boom is oscillating. Then you just give the boom a little nudge and let it swing.  As shown below I measured the time it took for six cycles and divided by six to get the period.  These period adjustments take some time to do but I don’t recall that it was difficult once you develop a feel for how sensitive your particular instrument is to the adjustments.  The image below shows a typical undamped response and the period estimate of 16.5 seconds.


At this point I continued to use the WinDaq utility software to adjust the damping as well but you can probably use the AmaSeis software as well.  If AmaSeis is used you must adjust the center offset (zero setting) to get correct results.  The Help screens will guide you through those better than I can.

I use a walk-up test to adjust the gain and damping.  In my experience and for my location, I have found that the instrument gives acceptable performance if it shows a full-scale deflection when I walk up next to it.  Because of the slow period one must proceed slowly through the procedure.  I walk up to the covered instrument fairly quickly and then stand still for 30 seconds or more.  Then I quickly walk away from it.  When properly adjusted this procedure will show two full excursion peaks on the seismogram, one when you walk up to the instrument and one 30 seconds (or more) when you walk away.  Each peak will show a very small overshoot on its return to center, perhaps 10% of the peak value.  This amount of damping is obtained by an aluminum vane with a slight bend in it attached to the boom and swimming in a small dish of 90 weight gear oil.  Because of the inertia of the seismic mass, it takes a surprising amount of oil and even a little twist in the aluminum vane to adequately damp the oscillation.   I will try to find or recreate a sample seismogram that demonstrates my preferred result.

Ok, this is not the preferred result (not enough gain or damping) but it is what I found in my archives and demonstrates what the “walk-up test” should look like when done in the WinDaq utility software.  The first peak, at -2.668 volts, is negative going as I walked up beside the instrument.  The overshoot shows 0.481 volts. The positive going peak is when I walked away from the instrument followed by a small overshoot. Ordinarily, the larger peaks would be in the ±8 volts or more and the smaller peaks would be about the same as shown giving a ratio of less than 10% instead of the 18% shown here.


The photograph below shows the end of the business end of the boom, starting from the left side: the red horseshoe magnet (with brass counter balance across the boom from it) interacting with the coil of magnet wire, then a small hole with a brass screw next to it where the suspension wire for the boom is attached, approximately five pounds of lead cast on a pipe nipple to provide the seismic mass, and ,finally, the damping vane and oil bath.


15 thoughts on “Lehman Seismograph Construction Notes

  1. Hi Mic! Thanks for encourage me for mounting my seismometer!! Is some funny move attention from sky (I am an amateur astronomer) to ground!!…Ok, I hope to learn more about gain and damping procedure that You use ¨waking up the seismometer¨ ..I hope please more details or maybe drawings before I destroy my Lehman!!! Thanks Mic for Your kindly help!!! Gonzalo

  2. Hello Mic,

    I discovered your website yesterday. I find your version of the Lehman to be exceptionally sensitive compared to most Lehman horizontals. I have a few questions I like to ask you.

    1) Is the coil of your Lehman seismometer really about 10,000 turns of #34 AWG magnet wire? I ask as I have an idea how much space that would require of a coil? What is the dimensions of your coil? I am asking as I currently using #34 AWG coil of 3200 turns that does not provide the output voltage your coil appears to, but I do not know if the output of a few volts is post the amp/filter circuit you are using.

    2) Are you currently using the Andy Loomis circuit for your Lehman seismometer? Are you using the one filter or two filter stage version of Andy Loomis’ filter circuit?

    3) How did you make the grove in the bolt that the steel boom pivot end mates with via the “V” end of the boom? I currently use a point with shallow drilled dimple for the boom pivot. I am not using a wire suspension, but a U Channel boom.

  3. Hello John,

    Thanks for visiting my website and for your comment. I wish I could send you a report with all of the technical details of my seismograph but such a thing doesn’t exist. I built the basic structure in the spring of 2004 and have been tinkering with it ever since. I had to remove it last summer to do some work in the basement. It had issues when I reassembled it. In the process of resolving those I spent a lot of time with the mechanical tuning of the pendulum. Its present configuration is more sensitive than it has ever been. On my instrument that tuning is critical and not easily done. I try to tune it to have a period close to 16 seconds. Then I add the damping oil. It is probably a little under-damped from what it should be making it appear more sensitive. I’ll try to answer your questions as best I can.

    1. I don’t really know how many turns there are on the coil. I didn’t count them. I did try to estimate it at the time but those notes are lost. It is wound on a 7/8 or1 inch diameter wooden dowel sandwiched between two plexiglass disks spaced about 15 mm apart. The outer diameter of the coil is in the range of 70 to 75 mm. One wire table I looked at showed 20408 wires per square inch for #34 magnet wire so you need about 1/2 square inch.

    2. Yes I am using the Andy Loomis amplifier.
    A.Loomis amplifier circuit

    I made a few changes based on his description of the circuit operation. I replaced the 10K input resistor with a 1K to increase the gain and the two 5.1M resistors with 2.2M to open up the cutoff filter a little. I did not put the offset adjust components in my circuit. I also power it with a +/- 15 volt supply because that’s what I had. It overdrives my ADC on big signals.

    3.For the bolt at the pivot end, I filed the top off to make it flatter and then filed a very shallow groove in it with a small triangular file. Just deep enough to keep it from wandering off or twisting.

    I hope that helps.

    ~ Mic.

  4. Hello Mic,

    Thank you for your reply. Most of the technical details I read and found on your website. I fully understand the tinkering and time involved in setting up the tinkered instrument. As you know as much as such an instrument looks simple, it takes alot of time to set up to work as one expects.

    It is great you improved the sensitivity of your instrument after the work you did in basement. I have some sense of how much time, thinking, efforts, and the cause/effect of the tinkers you have done to make your instrument more sensitive.

    1) asked about the coil as I tried to visually scale the coil to calculate the about 10,000 turns of #34 AWG. One of my design tinkers longer term is coil related, so I have very good sense and the math to know how many turns a coil can have with different magnet wire AWGs. Based on the coil dimensions you provided it would seem more like 40,000 turns based on the coil dimensions you provided. I understand you build the key elements of your Lehman seismometer in Spring 2004 and do not have what notes you made from then currently.

    2) The Andy Loomis circuit you show I am familiar with as well as the two stage filter version that uses another TL082. I tried both circuits many months ago and had no success. Like you I changes some values. I reduced the gain in my case for the Chopper OpAmp and I changed the filter roll off frequencies. I suspect the issues were due to breadboard issues caused by the small diameter of the resistors. It appears your change of the 5.1M to 2.2M for the low pass filter from was from 0.312Hz to 0.725Hz. In way I am glad I am not using the Andy Loomis filter nor any other filter and/or just gain based electronics. A few weeks back I finally was able to create some software based filters. This way I can filter the data any way I want to that allows me to look at the same data in different filtered ways. the code was not easy and still has some key functionality I want to add. It was amazing to see how much a filter eliminates so much signal noise that exists in the earth.

    3) I was assuming, but did not want to, that the likely way you made the grove for the boom pivot end was with file.

    3b) I “tinkered” again with my 12″ Lehman horizontal again yesterday. Several hours as I wanted to revert a boom pivot change claimed to be much better and fact was so bad it missed all the quakes of this past weekend such as Greece and Japan. This “tinker” was to revert the boom pivot to the point in drilled dimple of bolt so many say is really inferior type of pivot. Fact is prior to a much better base I built a few weekends ago the pine board base that had subtle issues was able to track the China M5.3 that rang for about 2 hours start of April 2020 (I believe) it was able to detect clearly with the point in dimple of bolt and the Utah quake of start of April 2020 I used a cross pivot like used for the BGS SEP Seismometer . I know the top and bottom pivots of the SEP work and work really well as I found a website that has been running a BGS SEP seismometer since 2008. I can tell you it appears the geometry for the BGS SEP is really challenging and/or my use of stainless steel may have been too slippery for the pivots i.e. “I had the bright idea to polish the rods to a mirror finish hoping to decrease any friction at the bearing. I used diamond pastes in a couple steps finally using a 1um paste to achieve the mirror finish. I mounted the rods in place and adjusted the seismometer to see what resonant period I could achieve. To my surprise, I could only achieve an 18 second resonant period before the system became unstable. A few minutes on the couch contemplating what had happened, I realized that the mirror finish on the rods provided a slippery surface for ceramic ball bearing. As the beam moved back and forth while optimizing resonant period, the ball was also moving in the opposite direction and thus making the system unstable as the period was increased. The polished rods were replaced with the centerless ground finish and a 27-28 second resonant period was achieved quickly.” With the stainless steel “T” boom pivot I could only reach a 7″ second period, but it was really a nightmare to achieve with net result of not detecting any local not distant seismic activity beyond my walking past it despite a few other “tinkers” over the past few weeks. So yesterday I reverted to the point in dimple of bolt and again the 10 second period was reached with relative ease as you know such instruments temperament can present in the many variables that the “simple” instrument has. This 12 inch Lehman still has a U channel boom as I find it ti me less challenging and more sensitive then a wire based suspension. The stainless steel “T” suspension pivot at upright is still being used and has been for months now despite how temperamental it is. In past 36 hours this “tinkered” version of the instrument is performing very very well and sees what your instrument sees often as well, whereas many Lehmans I know of do not see what yours or my instruments see.

    I am working out in my head for last few weeks the next tinker I hope will increase the instrument sensitivity even more. It may be a few more weeks for that tinker I have been working on in my head for few weeks now. I also have a simple tinker i like to try that actually does not mean any change to the instrument proper. For now I want to see how the present tinker performs over next few modest and major earthquakes.

    I have some software related questions I will leave for later.

  5. Hello Mic,

    There is no ability to ask the software question I had on the page that shows the “LIVE” Seismograph helicorder. I will ask here if it is OK to do so.

    Is the helicorder created with Earthworm? If not what software is used to create the “LIVE” Seismograph helicorder?

  6. I use jAmaSeis to collect the data from the seismometer. It saves the traces as *.sac files. Every five minutes I run a Python script which uses the Obspy tools to build the 24 hour data stream from the .sac files and draw the helicorder display.

  7. Hello Mic,

    Thanks for your reply. I really thought based on the alternating helicorder lines you were using Earthworm. Clearly i was incorrect in that assumption.

    Is the labels of seismic events that appear on your helicorder a feature of ObSpy you use or was it all code you wrote to effect from the USGS XML you use to determine what event labels will appear on the helicorder. If it is a feature of ObSpy you use just knowing the feature used would be helpful. In a few months I want to try to post a helicorder from the Lehman prototype I have.

    I have not decided if I will create a helicorder via gnuplot (a challenge) or use a seismic program like Earthworm, ObSpy, et al via FreeBSD or Linux. My data format is unique and some prior research suggest ObSpy may be an option as an existing input data format in ObSpy can be created by code to convert my unique data format to until I can figure out how to write an input module for ObSpy to accept my unique data format directly. I have code I have written to do software based filtering, but would be interesting to see how that code compares to filtering by ObSpy or Earthworm.

  8. Everything associated with the helicorder is done using the obspy tools. I fetch the quakeml feed, sort it for events I think might record on my instrument, plot the 24 hour stream, and label the sorted events. I also have an optional low pass software filter but I don’t use it. I also have the script list all of the events in the feed and calculate a list of arrival times for events that pass through the sort routine. The jAmaSeis software and the python script run on an older Raspberry Pi 2.

  9. Mic,

    I have been playing about with ObsPy.

    First question is I assume ObsPy is running on your RPi2? If so I assume you are using ObsPy 1.1.1 as that is the current version packaged for AMD64, I386, Arm, et al.

    You take the USGS feed and sort/select based on criteria you feel makes sense that then ObsPy labels based on your selection. My second question is do you create the “events=[ ………” statement that has the “time:”, “text:”, et al item(s) that then allows ObsPy to label helicorder with the quakes your code determines from USGS feed?

  10. I haven’t tried to include code in a comment. If it doesn’t work I’ll link to a text file. Well it doesn’t work too well but it won’t let my upload a txt file to link to so you’ll have to figure it out from this. The sorting part of the loop code won’t paste into the comment properly but you’ll get the idea. Hope it helps.

    Yes, I am running both jAmaseis and Obspy on a Raspberry Pi 2+ running Raspian Stretch.
    The Obspy version is 1.1.0.

    I read the event catalog:


    I make an empty list of dictionaries:


    Then I loop throught the catalog, calculating the distance to the earthquake, sorting on my criteria:

    for i in range(len(cat)):
        if distance = first_mag and distance = sec_mag and distance = third_mag:

    The dict_list is passed directly to the events parameter in the obspy plot function described here:


  11. Does the Pi2B you are using only run in command line mode and not with GUI? Are you using the Buster release? I am asking before I ask the question I want related to messages I receive with Pi (3B) set up as command line only mode that I do not when I run same scripts from my system. I am not looking for diagnostic help, just to see if you may have encountered same on Pi2B you have set up?

  12. The Pi2B is only a few feet from the sensor in the basement. I am running the GUI so I can look at the trace data right at the seismograph. I ssh into it from my study using the command line. I am still running stretch. I understand that there are some package dependency issues in OBSPY with buster so I have never upgraded to it.

  13. I assume you installed the 1.1.1.deb ObsPy package via pre-made packages via . If so the Debian Buster package installed and ran fine. I do not like the alternate conda ObsPy packaging to have latest stable release of 1.2.2. I built Debian packages for 1.2.2 on Buster and was just fine. A few small bumps in the build process, but able to work out without days, bug few hours, of effort. The ObsPy code still have much of what is needed to build a Debian package. Therefore i assume you are running ObsPy 1.1.1 and I know I am running 1.2.2 knowing 1.1.1 from the pre-made Debian packages link worked just fine. If you have another Pi I would suggest working it up with Buster and ObsPy 1.1.1 to start. Copy some files from your currently running Pi2B and run tests and I assume you can easily change or have option to not upload the helicorder from test Pi and have ability to transfer file from to your desktop system to see if the helicorders are OK for starters.

    The approach I am using with the Pi I am still working on various code (ADC, meta data big one taking months as much more design effort than expected) is just a CLI environment. Because your Pi2B has a GUI environment I would expect the issue I have discovered with the Pi CLI based system will not occur. I believe the errors I am encountering is a ObsPy bug. As best I can determine the bug is an annoyance bug, but a bug. As you know if you run the ObsPy commands for example for a helicorder in the command line environment without using the “outfile” parameter ObsPy will then display the helicorder. What is occurring in the CLI only system environment with no desktop GUI installed is:

    Unable to init server: Could not connect: Connection refused
    Unable to init server: Could not connect: Connection refused

    (.:21672): Gdk-CRITICAL **: 07:39:04.293: gdk_cursor_new_for_display: assertion ‘GDK_IS_DISPLAY (display)’ failed

    (.:21672): Gdk-CRITICAL **: 07:39:04.299: gdk_cursor_new_for_display: assertion ‘GDK_IS_DISPLAY (display)’ failed

    This I believe is due to ObsPy trying to open to xserver via GTK even when the first parameter is “outfile”. The error does not occur until one closes the plot command with the trailing “)”. At least does not affect the tagging from the “events” parameter.

  14. I sounds to me like you need to find an appropriate forum to help you out. I can say that when I run my helicorder script as a cron job I have to explicitly set the environmental variable DISPLAY in the crontab for it to run: env DISPLAY =: 0 /{path to script}/Dayplot.py . Other than that, I can’t offer any help.

  15. There is no need to reply to this post. I am fine and was fine prior to my posts 15/16 April 2021. All i was trying to do was determine if you might have same issue. I was not looking for technical help. I am not a person who asks for something indirectly. Simple example is I asked someone if they were enjoying what they were eating as it appear perhaps they were more so than I was observing based on what I knew of person. The person then tried to offer me some of what they ere eating assuming my question was about wanting to try some of what they were eating. That was not my question to them and I was not implying some other question in indirect manner. I have never been this way and never will be. Just like if I ask questions about a dog or cat with someone and that someone is a woman. I am not hitting those woman who ere implying I was hitting on them. The same types of questions I will ask of men with their dogs or cats. In all cases no matter the age of person.

    I was not looking for help with my posts. I was asking if you had similar, which I suspected you would not.

    Based on your last post it sounds like you encounter a variation of what I have encountered. I listed the error messages so you have a sense of what I believe you would not encounter. I was basing this on fact I did not mention where these errors do not occur on my workstation that the scripts were developed on. My workstation has a Desktop GUI installed. This means the issue I encountered is unique to a CLI only system. Given that the results of the plots are complete with events and the errors occur without using events including using “outfile” first as I noted previously it is clear this is an ObsPy bug. I am deducing from the error that ObsPy is assuming a need for a GUI when the ObsPy statements are not going to need a GUI for the parameters given to the ObsPy statement. In other words ObsPy is assuming before processesing the statements the need for GUI when statement will never need a GUI.

    Based on your last post it sounds like in sense you experience a variation of what I have encountered with the CLI only system as cron jobs. As you know cron jobs run with no default awareness of a Desktop GUI, not even search path.

    I was not asking for technical help with the issue I found and isolated. I asked my initial questions first and based on you answer concluded you would not have the issue I only see in a CLI system. I know no such issue exists in a Desktop GUI based on my experience. I had concluded a bug before I asked my initial questions based on my conclusion that if a Desktop GUI was installed on your RPi2B the or similar error would not occur.

    Your last reply suggests perhaps a variation as crons will not run a GUI program unless commands are added to cron job to make cron job aware. Two other systems I have running for years 24/7/365 weather and other types of environmental monitoring run many cron jobs. Some of the cron jobs invoke a program to display the gnuplot generated. Those cron jobs have the needed export to xserver to enable those cron jobs to display the gnuplot via the cron job running GUI application.

    You have indirectly confirmed that it appears ObsPy is requesting GUI based resources when run via cron with ObsPy options that clearly will not need GUI.

    gnuplot does not have these ObsPy issues even though gnuplot can display the results to GUI directly rather than save to file. gnuplot has not needed export commands in cron jobs to run correctly when gnuplot is only saving the plot image to a file no has gnuplot attempted to open any GUI resources when gnuplot is only saving plot to file.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.