adxl335 - Problem mit Werten

Hallo Forum,

Ich habe mir einen Datalogger aufgebaut und teste diesen nun fleißig. Ich lese meine Analogdaten aus und rechne dann wie folgt weiter: a=(analogwert-512)/100
Soweit sogut, damit sehe ich wenn der Sensor auf dem Tisch liegt x=0, y=0, z=1.
Mein Verständnisproblem ist nun folgendes:
Ich lasse auf einem Schwingtisch eine Rauschprüfung in z-Richtung durchführen, welche mit 1g gefahren wird.
Allerdings erhalte ich wesentlich höhere Werte.
Kurzer Auszug meiner max Z-Werte (ich speichere alle X-Sekunden Max- und Min-Wert ab):
-1,02
2,48
-0,87
-0,78
0,96
2,34
-0,04
1,49
-0,61
-1,16
1,11
2,48

Ich hätte jetzt erwartet, dass diese Werte im Bereich von 0 - 2g liegen. Dies tun sie nicht.
Ich vermute, dass mein Datalogger (bestehend aus Arduino Uno, ADXL335, MircoSD shield) nicht wirklich fest in der Box war und immer kurz abhob. Beim Aufkommen und an das Füllmaterial “schlagen” werde ich dann wohl höhere Werte bekommen. So zumindest meine Theorie oder hat jemand noch eine andere Idee warum meine Werte aus dem Ruder laufen?

Anbei noch mein Programmcode:

#include <SD.h>

//einlesen der verschiedenen Analogpins und der Pin zum Schreiben auf SD-Karte
const int chipSelect = 8; //SD Karte
int pinX = A0;     // X-Achse
int pinY = A1;     // Y-Achse
int pinZ = A2;     // Z-Achse
int pinT = A3;     //Temperatursensor
int x;

void setup()
{
  Serial.begin(9600);
   while (!Serial) {
    ; 
  }

  Serial.print("Initializing SD card...");
  // make sure that the default chip select pin is set to
  // output, even if you don't use it:
  pinMode(10, OUTPUT);
  
  // überprüfen ob eine SD-Karte vorhanden ist
  if (!SD.begin(chipSelect)) {
    Serial.println("Card failed, or not present"); //es wird nichts weiter unternehmen
    return;
  }
  Serial.println("card initialized.");
}

void loop()
{
  int maxX = 0;
  int maxY = 0;
  int maxZ = 0;
  int minX = 512;
  int minY = 512;
  int minZ = 612;
  
  for(x=0; x<=10; x++) //Berechnung der Zeit: x*delay=Zeit in ms. Bsp: x<=10, delay(200) bedeutet 2000ms = 2s
  {
    delay(200);
    if (analogRead(pinX) > maxX, analogRead(pinY) > maxY, analogRead(pinZ) > maxZ)
    {
      maxX = analogRead(pinX);
      maxY = analogRead(pinY);
      maxZ = analogRead(pinZ);
    }
     if (analogRead(pinX) < minX, analogRead(pinY) < minY, analogRead(pinZ) < minZ)
         {
      minX = analogRead(pinX);
      minY = analogRead(pinY);
      minZ = analogRead(pinZ);
    }
     
  }

char Werte[50];

  sprintf(Werte, "%d,%d,%d,%d,%d,%d,%d", maxX,maxY,maxZ,minX,minY,minZ,analogRead(pinT)); 

  // open the file. note that only one file can be open at a time,
  // so you have to close this one before opening another.
  File dataFile = SD.open("datalog.txt", FILE_WRITE);

  // if the file is available, write to it:
  if (dataFile) {
    dataFile.println(Werte);
    dataFile.close();
    // print to the serial port too:
    Serial.println(Werte);
  }  
  // if the file isn't open, pop up an error:
  else {
    Serial.println("error opening datalog.txt");
  } 
}

Hallo, so recht kenne ich mich nicht aus. Ein Schwingtisch ist doch so etwas wie ein Rütteltisch? Du mist in "Z", d.h. von oben nach unten, oder umgekehrt. Dein Tisch steht z.B. bei 100mm und fährt in einer bestimmten Zeit gegen 0 mm nach unten. Die Beschleunigungskräfte möchtest Du nun messen?

Was mich in Deinem Sketch stört, ist das "delay()" In dieser Zeit macht der Arduino "NICHTS" Das würde ich mit millis() machen.

Das zweite, was mich stört: Du mist analog, d.h. Du wirst wahrscheinlich kein stabiles Signal vom "Pin" bekommen. Ich meine dieses "analoge Werte gezappel". Ich würde mir da in einer bestimmten Zeit- nur einen Wert holen.

Das der Aufbau fest und stabil sein muss versteht sich doch von selbst. Machen wir es mal leicht. Dein MessArduino befindet sich in einem 2kg schweren Paket. Wenn Du das Paket jetzt fallen läßt, dann hebt der Arduino doch vom Boden des Paket ab? Das Paket knallt auf den Boden, und der Arduino kommt hinterher- dann mißt Du doch die Beschleunigung des Arduino? Wie gesagt, keine Ahnung- aber die beiden Dinge im Sketch würde ich ändern. Gruß und Spaß Andreas

Hallo Andreas,

du hast bei allem Recht ;)

Der Beschleunigungssensor muss richtig fest gemacht werden am Tisch, sonst habe ich eine Resonanz welches auf mein Signal oben drauf kommt. Ich hatte zwar Schaumstoff in meiner Box reingemacht, welches verhindern sollte, dass der Sensor sich bewegt, aber der Schuss ging in Ofen. :blush: Bisschen peinlich, dass so zu machen, aber gut, war mein erster Versuch in dieser Richtung ;) Jetzt weiß ich es besser.

Vielen Dank auch für deine Tipps bzgl meines Sketches, werde das mal in Angriff nehmen.

Danke :)