This completely open source project breaks down into four main parts.

1) Part 1 -Seismic sensor

From Wikipedia, the free encyclopedia -

"In geology and other related disciplines, seismic noise is a generic name for a relatively persistent vibration of the ground, due to a multitude of causes, that is a non-interpretable or unwanted component of signals recorded by seismometers."

The role of the hacker here might be to challenge that bit of conventional wisdom. Let's see where it goes if we put the magnifying glass on seismic noise instead of intentionally ignoring it.

The new idea behind this project was that if we really study the statistics of seismic noise and  get to know the usual spatial characteristics of noise in seismically active locations, we will be able to tell the difference between that noise and  telltale rock movements - "snaps, crackles and pops" - that might happen locally right before a geological fault line lets loose.

Basically, I am reporting a new kind of design for an ultra, ultra sensitive seismic device for the purpose of responding to the low frequency ( <1.5 Hz ) baseline noise movements of the earth's crust. It outputs information on the vector magnitude, apparent 3D origin (i.e. depth, direction and axis) and actual statistics of each data point. The statistics determine the  probability of having a measurement of that particular strength, direction and depth. The current version of the device (August 2020) records all of this information 4 times per second.

Seismic noise is present everywhere on earth. Some of it is local and some of it arrives from far away. Ocean waves are a one cause of distant noise. Much of it is unexplained.

A little bit of background on the design of this device-

Most useful sensitive seismometers utilize a mechanical moving element with a fixed resonant frequency. Because noise by definition is a composite of a wide range of frequencies, for our purposes this device must not have any significant frequency biases. It must be relatively neutral to all the frequencies in its band. Mechanical designs therefore can't be used for this purpose. Piezoelectic seismic accelerometers are practically frequency independent for seismic purposes and these "geophones" are commercially available, but they are usually very insensitive and they are best used for strong man-made signals in geological exploration. However, piezoelectric pressure sensors still have the theoretical potential for extremely high sensitivity. They have no moving parts or resonant frequencies in the seismic range, they have minimal frequency biases and are widely avaialble in the form of extremely inexpensive but high quality microphone elements. Because of the need for frequency independent noise floor analysis, I needed to design an ultrasensitive inertial piezo instument that pushes its seismic sensitivity to the very limit of what is possible. The other goal is to extract 3D directional information - in other words, to be able to ask "where is the noise (mostly) coming from?" in addition to "How loud is it?" in real time. This has not been done before.

The design is fixed to a wooden base on rubber feet. A stainless steel or mineral sphere is supported by 3 hard insulating plastic beads resting directly on 3  piezoelectric buzzer elements. These elements are themselves symmetrically arranged 120 degrees apart and precisely tilted at a 45 degree angle around the center ball. The buzzer elements are mounted on adjustable supports, like magnetic doorstops available in hardware stores or inexpensive camera tripod heads. Each piezo element provides equal support to the central ball. Movement of the base in any vertical or horizontal direction accelerates the mass and changes the compression force of the ball against its sensors. One of the sensors is aligned to true north as a direction reference. The precise geometry of the device allows for the mathematical calculation of the vector magnitude and spatial origin of the seismic noise in real time.

The base of the device is leveled with a bubble inclinometer or with an iPhone. An enclosure provides protection against short term temperature changes and air currents. The device can be placed under a glass bell jar and withini an airtight styrofoam cooler box, for example. The electronics are either housed in a closed box or within the styrofoam cooler box. To be useful, the devices need a very sturdy foundation. The devices either rest on a thick concrete slab of a two car garage or an outdoor poured concrete slab sheltered by a fiberglass utility box. The original  test site is in a forested suburban location in an occasionally seismically active region of Eastern Tennessee near Knoxville.. Another site has since been established in the Madison Valley of Montana, about 20 miles south of Cameron, Mt and about 30 miles from West Yellowstone, Mt.

2) Part 2 - Integrating electronic charge amplifier

As the base of the device moves, the ball's mass is accelerated by a point contact to the piezo elements themselves; the sensors then pump a charge (electrons) into or out of the first stage of the amplifier chip via twisted pair wires. An ultra-sensitive Texas Instruments LMC662CN/NOPB-ND femtoampere op amplifier (sensitive to changes of less than 100 electrons/second ! ) integrates, low pass filters and translates this discrete charge to an output voltage. An Arduino Yun microcontroller digitally processes. the output from the amplifier board. This inexpensive integrated circuit op amp chip is available from Digikey for $1.56 per unit. There is an identical charge amplifier channel for each of the sensors. Because of their ultra-high internal resistance, piezo sensors can be considered to be only sources of electrical charge. They cannot be part of a complete circuit, therefore they are not sources of sustainable voltage or current. The amplifier's equally ultra-high impedance first stage integrates and converts charge to an output voltage that can be further amplified and filtered. A second stage buffers and filters the signal again. It is then digitized and processed by the Yun microcontroller.

The piezo sensor's charge output is a function of acceleration. The integral of acceleration is velocity (momentum) of the ball and this (in millivolts) is the primary measurement output of the first stage of the instrument. In other words, with a high impedance integrating amplifier the data's magnitude value is an average of how fast the center ball of the device is moving as it vibrates, over the time interval that it is being averaged by the first stage. A second stage frequency cutoff amplifier was added to allow sensitive response to frequencies below a cutoff that corresponds to the very low frequencies of seismic signals. The cutoff frequency selected by our choice of components was 1.54 Hz. Tests show the amplifier to be quite useful from that point down to the range of 0.1 Hz. The sensitivity of each sensor channel is independently adjustable, to allow for the calibration of minor differences between the sensors. After prototyping, a circuit board was designed. Its CAD file was then sent for professional but inexpensive custom manufacture in a circuit board shop (Pad2Pad).

Several breadboard prototype circuits were functional, but the custom circuit board was found to be necessary to provide the necessary amplifier linearity and electronic noise immunity. The electronic noise of this amplifier system is easily measured - simply remove the center mass and look at the output of the device. The electronic noise itself is thus shown to be less than 5% of the noise which is measured with the center mass in place. The power and ground for the circuit are derived from the Arduino board itself to insure the absence of ground conflicts. An external commercial regulated power unit supplies power to the microcontroller board's own voltage regulator to doubly minimize the effect of line voltage fluctuations.

3) Part 3 - Data processing

Data acquisition and processing was first provided by an Arduino Mega, but has now been ported to an Arduino Yun. The Yun is an ideal hybrid device, with an independent wireless or wired networking Linux processor and a separate microcontroller for data acquisition. The Arduino uses 10 bit analog to digital converters.  When the program starts up it makes assumptions about the actual sensor readings, then averages 20000 actual low-range sensor data readings over 8.3 minutes  to  calibrate itself to the "zero signal" output of each sensor.It then collects another 10000 data points to match the sensitivities of the 3 sensors to one another. It collects another 20000 datapoints to match the vertical movement of the center ball to the horizontal movements of the sensors.  It does not report the data during the start-up phase. It then begins the collection of statistical data for the next 500,000 data points (see below).

Piezo sensors show small temperature induced drifts. The program thereafter self corrects the sensor baselines for instrument drift every thousand low-range data points. It ignores high amplitude readings for this re-zeroing process; it assumes that higher readings are a non-noise seismic signal instead of low-level noise.

The program calculates average integrated vector velocity magnitude (millivoltage units) and phase (this corresponds to direction of the velocity on the compass, in radians from -pi("south") to +pi("south" again, where zero = "north")) . It also calculates direction i in the vertical direction (pi/2 to -pi/2) relative to the horizontal plane where zero = horizontal. It the calculates the compass vibrational axis for each data point.

Each data point can be  averaged from the vector calculations for an arbitrary number of A/D sensor readings (this number is set by a software variable) and the actual sensor readings are usually set at 1 msec or more apart. The software first removes, adjusts for the acceleration of gravity and stores the vertical component from the individual sensor outputs so that only the horizontal components are left. It does this by subtracting the average of all sensor readings from each sensor's own reading. This is done because the 3 sensor readings due to horizontal movement must average to zero with this device geometry. This assumes that all 3 sensors are calibrated to be equally sensitive and equally amplified. Trigonometric calculations are used to get the X and Y cartesian coordinate values for the vector.

Horizontal and vertical vector angles in radians are then calculated. These polar coordinate angles are internally called "phase" (horizontal direction angle, referenced to true north) and "phase 3d" (vertical elevation angle relative to horizontal). The vector noise amplitude can be thought of as the "loudness" of the seismic noise in the device's frequency passband (it is technically proportional to the average velocity or momentum of the device's center mass, however) and the directional angles as "where it seems to be coming from" in 3 dimensions.

The data is recorded to a comma delimited text file on the Yun SD card. The data on the card is accessible by wireless network. As of December 2019, a seismic noise machine is located in the Madison Valley of Montana,  about 70 miles Northwest of  the Yellowstone volcano caldera. It is remotely accessible by internet through its wireless connection to a router which has an assigned static internet address.  

Averaged data points are recorded. The rate limiting process for data acquisition is the write time to the SD card using the SD library that is available for the Arduino. The program is stable as long as no power interruptions occur, in which case the program simply starts again. The data file name is changed each hour and stored in a folder that is renamed to the new date at midnight every day. The program also marks off each time point with time stamp.

The library modules math.h (to do arctan and other trigonometry calculations) is required. Matlab on an external PC is used to plot interesting data derived over a wireless network from the SD card, but the Yun device itself requires no external connection to a computer to collect its data for months or years at a time. If connected however, its clock can be updated and corrected on a regular basis. Internet connections allow the devices to be polled remotely.

The program keeps track of the noise magnitude vectors and vector locations by assigning them to and counting each data vector in one of 75 "bins" that collectively make up a 2D probability matrix of the 3D noise vectors. The number of bins is limited by the memory of the Yun device. More resolution would be possible with a more capable processor. 500,000 consecutive data events are are assigned to bins - from that point forward the accumulated value in each bin is a probability based on 500,000 time points. Prior to 500,000 data points, the probabilities are based on the number of vectors that actually have been recorded to that point. The probabilities for that time point (the probability of the vector magnitude being found in that bin and the probability of distance in radians from the 3D average location being found in that bin) are then stored as part of the time point's data. The product of the two probabilities and its vector magnitudeis also recorded. The program can be easily configured (by uncommenting lines in the program) to record other elements of the calculations as well.