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");
}
}