Version [92582]
Dies ist eine alte Version von ArduinoBeispielKraftsensorenTisch erstellt von ManuelLiebaug am 2018-12-13 18:22:47.
Mikroprozessor-Beispielanwendung
Es soll mithilfe von 3 Kraftsensoren und einem Arduino die Position eines Testobjekts bestimmt werden, welches sich auf einem 3-beinigen Tisch befindet. Die 3
Kraftsensoren werden unter den 3 Beinen des Tischs angebracht. Durch die Verteilung des Gewichts auf die 3 Sensoren kann man darauf schließen, wo auf dem Tisch
sich das Objekt befindet.
Die Sensoren haben jeweils 2 Pins, einer wird an 5 Volt angeschlossen und der andere an einen analogen Eingang des Arduino. Der Sensor wirkt dabei wie ein
Widerstand; je nachdem wie stark die Kraft ist, die auf ihn drückt, verändert sich sein Widerstand. Zusätzlich werden noch die analogen Eingänge, an denen die
Sensoren angeschlossen sind, durch jeweils einen 220 Ohm Widerstand mit GND verbunden. Dieser wirkt dadurch als Pull-Down Widerstand
(https://rn-wissen.de/wiki/index.php?title=Pullup_Pulldown_Widerstand), das bedeutet wenn keine Kraft auf die Sensoren drückt, wird am analogen Eingang auch
tatsächlich der Wert 0 gemessen.
Zuerst wird der Tisch ohne Testobjekt auf die 3 Sensoren gestellt um seine Eigenmasse zu bestimmen. Durch das Drücken eines Buttons wird dann eine Funktion
aufgerufen, die die 3 Messwerte der Sensoren in den Variablen tischgewicht_1 bis 3 speichert. Danach wird das Objekt auf den Tisch gelegt und die 3 Messwerte
werden ständig von den Sensoren abgefragt. Dabei wird das Tischgewicht vom jeweiligen Messwert subtrahiert. Die Messwerte werden dann auf dem seriellen Monitor
ausgegeben.
int sensor_1; int sensor_2; int sensor_3; int tischgewicht_1 = 0; int tischgewicht_2 = 0; int tischgewicht_3 = 0; int buttonPin = 12; boolean buttonPress; void setup() { pinMode(buttonPin, INPUT_PULLUP); Serial.begin(9600); } void loop() { buttonPress = digitalRead(buttonPin); if(buttonPress == 0) { tischgewicht(); } sensor_1 = analogRead(A0) - tischgewicht_1; sensor_2 = analogRead(A1) - tischgewicht_2; sensor_3 = analogRead(A2) - tischgewicht_3; Serial.print("("); Serial.print(sensor_1); Serial.print("|"); Serial.print(sensor_2); Serial.print("|"); Serial.print(sensor_3); Serial.println(")"); } void tischgewicht () { tischgewicht_1 = analogRead(A0); tischgewicht_2 = analogRead(A1); tischgewicht_3 = analogRead(A2); }
Vor dem Drücken des Buttons wird das Eigengewicht des Tischs ausgegeben (die ungleichmäßige Verteilung, vor allem bei Sensor 1, kann daran liegen dass das
Tischbein nicht perfekt mittig auf dem Sensor steht oder der Sensor weniger gut funktioniert als die anderen beiden).
Nach dem Drücken des Buttons wird das Eigengewicht des Tischs von den Messwerten abgezogen (das Testobjekt befindet sich noch nicht auf dem Tisch)
Das Objekt befindet sich in der Mitte des Tisch (zum Testen wurde eine volle 1,5L Flasche verwendet, also eine Masse von ca 1,5kg)
Das Objekt befindet sich über Tischbein 1
Erweiterung: Bestimmung der Koordinaten des Kraftschwerpunktes
Bis jetzt wurde die Position des Objekts einfach anhand der 3 Messwerte geschätzt. Man kann aber auch die Koordinaten des Kraftschwerpunktes in einem
2-dimensionalem Koordinatensystem berechnen. Die 3 Messwerte werden durch die Vektoren a, b und c dargestellt, wie man in der Skizze sehen kann.
Der Winkel zwischen 2 Vektoren beträgt jeweils 120° (3 * 120° = 360°). Wenn man annimmt, dass die 3 Vektoren alle die Länge bzw. den Betrag 1 haben
(Einheitsvektoren), dann erhält man folgende Vektoren: a = (0 | 1), b = (0,866 | -0,5), c = (-0,866 | -0,5).
Aus diesen 3 Einheitsvektoren kann man dann mithilfe einer Linearkombination einen Vektor bestimmen, der die Position des Kraftschwerpunktes angibt. Wenn man z.B.
von den Kraftsensoren die 3 Messwerte (59|10|12) erhält, dann berechnet man 59*a + 10*b + 12*c und erhält den Vektor (-1,732 | 48).
Diese Seite wurde noch nicht kommentiert.