Piezoelemente kommen zum Beispiel in kleinen Lautsprechern zum Einsatz. Legt man eine Spannung an, so verändern sie ihre geometrische Form (sog. Elektrostriktion). Handelt es sich um eine periodische Spannung, so schwingt auch der Piezo periodisch mit dieser Frequenz und kann dadurch Schallwellen erzeugen.
Deformiert man hingegen umgekehrt einen Piezokristall, so erzeugt er eine Spannung (sog. Piezospannung). Diese Eigenschaft nutze ich bei diesem Seismographen. Den Piezo-Schallwandler verlöte ich mit einer Gewindestange. An deren Ende befindet sich noch ein zusätzliches Gewicht, damit die Gewindestange bei einem Erdbeben noch stärker zu schwingen beginnt. Diese Schwingungen verformen den Piezo und erzeugen eine elektrische Spannung an seinem Ausgang. Ein Operationsverstärker addiert zu dieser Spannung 2.5V, damit auch die ursprünglich ins negative gehenden Spannungen vom Arduino erfasst werden können. Dessen analoge Eingänge können ja nur Spannungen im Bereich [0,5]V messen.
Der Arduino sendet die eingelesenen Spannungen mittels Befehl Serial.println(map(analogRead(sensor),0,1023,0,4095)) über die serielle Schnittstelle weiter an den PC.
Die am PC installierte Software Amaseis (http://bingweb.binghamton.edu/~ajones/AmaSeis.html) stellt dann die Spannungen graphisch dar, wobei Verstärkung (engl. gain) und offset eingestellt werden können. Durch den offset wird sichergestellt, dass die Erdbebenpulse symmetrich um die Zeitachse dargestellt werden bzw. die Nulllinie auch wirklich auf der Zeitachse liegt.
Arduino-Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
/* Seismograph-Programm */ int sensor = A2; // Input-Pin für den analogen Spannungswert unsigned long SampleDelay = 166; unsigned long LastSample = 0; // ======================== // ==== SETUP === // ======================== void setup() { // initialize the serial communications: Serial.begin(2400); } // ======================= // ==== LOOP === // ======================= void loop() { if ((millis() - SampleDelay) >= LastSample) { LastSample = millis(); Serial.println(map(analogRead(sensor),0,1023,0,4095)); } } |