Skip to Content

Kraftsensor (FSR) mit Arduino Tutorial

Kraftsensor (FSR) mit Arduino Tutorial

FSRs sind super robuste Drucksensoren, die in allen möglichen Branchen eingesetzt werden. Du findest sie in elektronischen Schlagzeugen, Mobiltelefonen, Handheld-Gaming-Geräten und vielen weiteren tragbaren Elektronikgeräten. Diese Sensoren sind einfach zu verwenden und ideal zum Erfassen von Druck.

In diesem Tutorial lernst du, wie ein FSR funktioniert und wie du ihn mit Arduino verwendest. Ich habe 3 Beispiele mit Schaltplan und Code beigefügt, damit du direkt mit deinem Sensor experimentieren kannst.

Zuerst zeige ich dir die Grundfunktion des Sensors. Danach schauen wir uns an, wie man den Sensor als Kippschalter verwendet. Zum Schluss zeige ich dir, wie du LEDs nutzen kannst, um die auf den Sensor ausgeübte Druckstärke anzuzeigen.

Materialien

Hardware-Komponenten

fsr-402-roundFSR 402 Sensor (rund)× 1Amazon
fsr-406-squareFSR 406 Sensor (quadratisch)× 1Amazon
Arduino Uno Rev 3Arduino Uno Rev3× 1Amazon
Breadboard× 1Amazon
Jumper-Kabel~ 10Amazon
resistorWiderstands-Sortimentsbox (siehe wiring für Werte)× 1Amazon
red-ledLEDs~ 10Amazon
USB-Kabel Typ A/B× 1Amazon

Werkzeuge

multimeterMultimeterAmazon

Software

Arduino IDEArduino IDE

Makerguides is a participant in affiliate advertising programs designed to provide a means for sites to earn advertising fees by linking to Amazon, AliExpress, Elecrow, and other sites. As an Affiliate we may earn from qualifying purchases.

Wie funktioniert ein FSR?

Der Widerstand eines FSR hängt vom Druck ab, der auf die Messfläche ausgeübt wird. Je mehr Druck du anwendest, desto niedriger ist der Widerstand. Der Widerstandsbereich ist tatsächlich ziemlich groß: > 10 MΩ (kein Druck) bis ~ 200 Ω (maximaler Druck). Die meisten FSRs können Kräfte im Bereich von 100 g bis 10 kg erfassen.

Grundaufbau

Ein FSR besteht aus zwei Membranen und einem Abstandshalter-Kleber. Die leitfähigen Membranen sind durch einen dünnen Luftspalt getrennt, wenn kein Druck anliegt. Eine der Membranen enthält zwei Leiterbahnen, die vom Anschluss bis zur Messfläche (dem runden Teil) verlaufen. Diese Leiterbahnen sind verflochten, berühren sich aber nicht. Die andere Membran ist mit leitfähiger Tinte beschichtet. Wenn du auf den Sensor drückst, verbindet die Tinte die beiden Leiterbahnen mit einem Widerstand, der vom Druck abhängt.

FSR Construction
FSR Aufbau

Wie liest man einen FSR aus?

Das folgende Diagramm zeigt die Widerstands-Kraft-Kurve für den FSR 402 Sensor. Beachte, dass die Daten logarithmisch dargestellt sind. Die Reaktion ist nicht linear! Wie du siehst, fällt der Widerstand stark ab, wenn ein kleiner Druck ausgeübt wird. Danach ist der Widerstand umgekehrt proportional zur aufgebrachten Kraft. Bei etwa 10 kg (nicht im Diagramm gezeigt) ist der Sensor gesättigt, und eine weitere Kraftsteigerung führt zu kaum noch sinkendem Widerstand.

FSR 402 Resistance vs Force curve
Widerstands-Kraft-Kurve für FSR 402

Spannungsteiler-Schaltung

Um die aufgebrachte Kraft mit einem Arduino zu messen, musst du eine Spannungsteiler-Schaltung mit dem FSR und einem Pull-Down-Widerstand aufbauen. Diese Schaltung erzeugt eine variable Ausgangsspannung, die vom ADC (Analog-Digital-Wandler) des Mikrocontrollers gelesen werden kann.

Voltage divider circuit Interlink FSR 402
Spannungsteiler-Schaltung und Vout vs Kraft-Kurven für verschiedene R-Werte. Die Daten stammen vom Interlink 402 FSR bei V+ = 5 V. Referenz: Interlink Integrationsanleitung.

Den passenden Widerstand für deinen Sensor auszuwählen, kann etwas knifflig sein und hängt vom Kraftbereich ab, den du messen möchtest.

Das obige Diagramm zeigt die Vout vs Kraft-Kurven für verschiedene Werte von R (dem Pull-Down-Widerstand). Ein 10 kΩ Widerstandfunktioniert gut, wenn du den Sensor über seinen gesamten Kraftbereich (100 g bis 10 kg) verwenden möchtest.

Berechnungsbeispiel

Die Ausgangsspannung (Vout), die wir mit dem Arduino messen, wird durch folgende Gleichung beschrieben:

Vout = Vcc x R / (R + Rfsr)

Die Spannung ist also umgekehrt proportional zum FSR-Widerstand. Beachte, dass die gemessene Ausgangsspannung der Spannungsabfall über dem Pull-Down-Widerstand ist, nicht über dem FSR.

Wenn keine Kraft anliegt, ist der FSR-Widerstand sehr hoch, nehmen wir 10 MΩ als Beispiel. Ich habe für dieses Tutorial einen 10 kΩ Pull-Down-Widerstand und eine Vcc von 5 V verwendet, was zu folgendem Ausgang führt, wenn keine Kraft anliegt:

Vout = 5 V x 10 kΩ / (10 kΩ + 10 MΩ) = 0,005 V

Also fast 0 V. Wenn du sehr fest auf den FSR drückst, sinkt der Widerstand auf etwa 200 Ω. Das ergibt folgende Ausgangsspannung:

Vout = 5 V x 10 kΩ / (10 kΩ + 200 Ω) = 4,9 V

Wie du siehst, solltest du eine Ausgangsspannung zwischen 0 und 4,9 V messen können, abhängig davon, wie stark du auf den Sensor drückst.

FSR Spezifikationen

Die in FSRs verwendete Technologie ist patentiert von Interlink Electronics, das seit 1985 tätig ist. Die gebräuchlichsten FSR-Typen, die du findest, sind die Interlink FSR 402 und FSR 406.

Dies sind die Spezifikationen des runden 402 Sensors, den ich in diesem Tutorial verwendet habe.

FSR 402 Spezifikationen

Betätigungskraft~0,1 N Minimum
Kraft-Sensitivitätsbereich~0,1 N – 100 N
Widerstandsbereich>10 MΩ (Leerlauf) – ~200 Ω
KraftauflösungKontinuierlich (analog)
Kraft-Wiederholgenauigkeit± 6 %
Aktive FlächeØ 12,7 mm
Nennstärke0,55 mm
Schaltweg0,15 mm
Lebensdauer> 10 Millionen Betätigungen
StromversorgungBeliebig! Verbraucht weniger als 1 mA Strom, abhängig vom Widerstand im Spannungsteiler.
KostenCheck price

Für weitere Informationen kannst du das Datenblatt hier einsehen. Es enthält auch Daten für die anderen Sensoren der 400er Serie.

Anschluss eines FSR

Du kannst einen FSR ganz einfach mit einem Breadboard anschließen.

Der einfachste Weg, einen FSR anzuschließen, ist die Verwendung eines Breadboards. Das eignet sich hervorragend zum Prototyping und Testen. Wenn du eine dauerhaftere Lösung brauchst, empfehle ich dringend den Amphenol FCI Clincher Connector. Du kannst diese Stecker einfach um die silbernen Leiterbahnen des Sensors klemmen und problemlos Jumper- oder Dupont-Kabel anschließen.

Amphenol clincher connector
Amphenol FCI Clincher Connector

Warnung

Es wird NICHT empfohlen, direkt auf die freiliegenden silbernen Leiterbahnen des Sensors zu löten. Das Substrat schmilzt beim Löten und die Lötstelle hält nicht. Knicke oder Falten im FSR-Anschluss können zu Brüchen in den gedruckten Silberbahnen führen. Interlink empfiehlt einen Mindestbiegeradius von 2,5 mm.

FSR testen

Der einfachste Weg, um zu prüfen, ob dein FSR richtig funktioniert, ist der Anschluss an ein Multimeter. Ich habe Krokodilklemmen verwendet, um das Multimeter an die freiliegenden Anschlüsse des Sensors zu verbinden. Stelle das Multimeter auf Widerstand (Ω) und du solltest sehen, wie sich der Widerstandswert ändert, wenn du auf den Sensor drückst.

Testing an FSR Force Sensitive Resistor
Widerstandsänderung beim Aufbringen einer Last messen.

Da der Widerstandsbereich so groß ist (200 kΩ bis 200 Ω), ist es am besten, ein Multimeter mit Autorange-Funktion zu verwenden. Falls du keines hast, probiere einfach verschiedene Bereichseinstellungen aus. 200 kΩ sollte den größten Teil des Bereichs abdecken.

Verdrahtung – Anschluss eines Force Sensing Resistors (FSR) an Arduino UNO

Jetzt, wo du weißt, dass der Sensor funktioniert, ist es Zeit, ihn an den Arduino anzuschließen. Wir verwenden ein Breadboard und Jumper-Kabel, da dies der einfachste Weg ist, eine Schaltung zu prototypen.

Wie in der Einführung erwähnt, musst du eine Schaltung mit einem 10 kΩ Pull-Down-Widerstand erstellen.

Das folgende Schaltbild zeigt dir, wie du den FSR-Sensor mit dem Arduino verbindest. Beachte, dass ein FSR unpolarisiert ist, genau wie normale Widerstände. Es gibt keine positive oder negative Seite, du kannst ihn in beliebiger Ausrichtung anschließen.

FSR with Arduino wiring diagram
FSR mit Arduino UNO Schaltplan

Verbinde einen Anschluss des FSR mit der Stromversorgung (5 V, aber 3,3 V funktioniert auch gut) und den anderen Anschluss mit dem analogen Eingang des Arduino (A0). Der 10 kΩ Pull-Down-Widerstand wird zwischen GND und A0 angeschlossen.

Example 1 Connecting an FSR to Arduino UNO
Drucksensor auf Breadboard

1. FSR mit Arduino Beispielcode – Analoge Spannung auslesen

Nachdem du den Sensor verdrahtet hast, kannst du den folgenden Beispielcode mit der Arduino IDE hochladen.

Dieses Sketch liest die Sensordaten vom analogen Eingang des Arduino aus und zeigt die Ausgabe im seriellen Monitor an.

Wie bereits erwähnt, liegt die Ausgangsspannung des Sensors zwischen 0 V (kein Druck) und etwa 5 V (maximaler Druck). Die Arduino-Boards verfügen über einen 10-Bit-Analog-Digital-Wandler mit mehreren Kanälen. Das bedeutet, dass die Eingangsspannung zwischen 0 und 5 V in Ganzzahlen zwischen 0 und 1023 umgerechnet wird. Du solltest also einen Wert zwischen 0 und 1023 im seriellen Monitor sehen, abhängig davon, wie stark du den Sensor drückst.

/* Simple example code for Force Sensitive Resistor (FSR) 
  with Arduino. More info: https://www.makerguides.com */

// Define FSR pin:
#define fsrpin A0

//Define variable to store sensor readings:
int fsrreading; //Variable to store FSR value

void setup() {
  // Begin serial communication at a baud rate of 9600:
  Serial.begin(9600);
}

void loop() {
  // Read the FSR pin and store the output as fsrreading:
  fsrreading = analogRead(fsrpin);

  // Print the fsrreading in the serial monitor:
  // Print the string "Analog reading = ".
  Serial.print("Analog reading = ");
  // Print the fsrreading:
  Serial.print(fsrreading);

  // We can set some threshholds to display how much pressure is roughly applied:
  if (fsrreading < 10) {
    Serial.println(" - No pressure");
  } else if (fsrreading < 200) {
    Serial.println(" - Light touch");
  } else if (fsrreading < 500) {
    Serial.println(" - Light squeeze");
  } else if (fsrreading < 800) {
    Serial.println(" - Medium squeeze");
  } else {
    Serial.println(" - Big squeeze");
  }

  delay(500); //Delay 500 ms.
}

Du solltest folgende Ausgabe im seriellen Monitor sehen:

FSR serial monitor
Ausgabe im seriellen Monitor

Stelle sicher, dass der serielle Monitor ebenfalls auf eine Baudrate von 9600 eingestellt ist.

2. Verwendung eines Force Sensing Resistors (FSR) als Kippschalter

In diesem Beispiel verwendest du den FSR als Kippschalter. Du kannst dieses Programm nutzen, um alle möglichen anderen Funktionen zu steuern, in diesem Fall zum Ein- und Ausschalten einer LED.

Du musst dem Schaltkreis eine LED mit einem Widerstand hinzufügen, wie im folgenden Diagramm gezeigt.

Force sensitive resistor (FSR) with Arduino and LED wiring diagram
FSR mit Arduino und LED Schaltplan

Der negative Anschluss der LED (der kurze Anschluss) wird über einen Widerstand mit GND verbunden, der positive Anschluss mit dem digitalen Pin 2. Der Wert des Widerstands hängt von der Farbe der LED ab. Du kannst folgende Werte als Richtlinie verwenden:

  • Blau, Grün, Weiß oder UV: 68 Ω
  • Rot, Gelb oder Gelb-Grün: 150 Ω

Wenn du keinen dieser Widerstandswerte hast, versuche einen ähnlichen Wert zu finden. Du kannst auch mehrere Widerstände in Reihe schalten, um den richtigen Wert zu erhalten.

Das folgende Sketch schaltet die LED ein und aus, wenn du auf den FSR drückst. Es überwacht den Wert des analogen Eingangs und ändert den Zustand der LED, wenn der Wert 500 überschreitet. Das bedeutet, dass ein sehr leichter Druck nicht erkannt wird.

Dieses Beispiel entprellt auch den Eingang und basiert auf dem Arduino Switch Tutorial.

/* Example code to use Force Sensitive Resistor (FSR) 
   as toggle switch to control LED. 
   More info: https://www.makerguides.com */

// Define pins:
#define fsrpin A0
#define ledpin 2

// Define variables:
int fsrreading; // The current reading from the FSR
int state = HIGH; // The current state of the output pin
int previous = 0; // The previous reading from the FSR
// The follow variables are long's because the time, 
// measured in miliseconds, will quickly become a 
// bigger number than can be stored in an int
long time = 0;  // The last time the output pin was toggled
long debounce = 40; // The debounce time, increase if the output flickers

void setup() {
  // Begin serial communication at a baud rate of 9600:
  Serial.begin(9600);
  // Set ledpin as output:
  pinMode(ledpin, OUTPUT);
}

void loop() {
  // Read the FSR pin and store the output as fsrreading:
  fsrreading = analogRead(fsrpin);

  // Print the fsrreading in the serial monitor:
  Serial.println(fsrreading);

  // If the input just went from below 500 to above 500 
  // and we've waited long enough to ignore any noise on the circuit, 
  // toggle the output pin and remember the time:
  if (fsrreading > 500 && previous < 500 && millis() - time > debounce) {
    if (state == HIGH)
      state = LOW;
    else
      state = HIGH;
    time = millis();
  }

  digitalWrite(ledpin, state);

  previous = fsrreading;
}

3. Steuerung mehrerer LEDs mit einem FSR als Drucksensor

Das folgende Beispiel macht es einfach zu sehen, wie viel Druck du auf den FSR ausübst. Je mehr Druck, desto mehr LEDs leuchten auf.

Du kannst die LEDs genauso anschließen wie zuvor, siehe Schaltplan unten. Die LEDs sind an die digitalen Pins 2 bis 7 angeschlossen. Der FSR ist ebenfalls wie zuvor verbunden.

FSR-with-many-LEDS-and-Arduino-wiring-diagram-schematic-pinout
FSR mit mehreren LEDs und Arduino Schaltplan

Da die Ausgangsspannung des FSR nicht linear ist, habe ich für jede LED einen eigenen Schaltbereich definiert. Du musst das eventuell für deinen eigenen Sensor etwas anpassen.

/* Arduino example code to control multiple LEDs with a 
   Force Sensitive Resistor (FSR) as pressure sensor. 
   More info: https://www.makerguides.com */

// Define pins:
#define fsrpin A0
#define led1 2
#define led2 3
#define led3 4
#define led4 5
#define led5 6
#define led6 7

// Define variables:
int fsrreading;

void setup() {
  // Begin serial communication at a baud rate of 9600:
  Serial.begin(9600);
  // Set LED pins as output:
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
  pinMode(led4, OUTPUT);
  pinMode(led5, OUTPUT);
  pinMode(led6, OUTPUT);
}

void loop() {
  // Read the FSR pin and store the output as fsrreading:
  fsrreading = analogRead(fsrpin);

  // Print the fsrreading in the serial monitor:
  Serial.println(fsrreading);

  // Control the LEDs:
  if (fsrreading > 200) {
    digitalWrite(led1, HIGH);
  }
  else digitalWrite(led1, LOW);
  if (fsrreading > 450) {
    digitalWrite(led2, HIGH);
  }
  else digitalWrite(led2, LOW);
  if (fsrreading > 550) {
    digitalWrite(led3, HIGH);
  }
  else digitalWrite(led3, LOW);
  if (fsrreading > 650) {
    digitalWrite(led4, HIGH);
  }
  else digitalWrite(led4, LOW);
  if (fsrreading > 800) {
    digitalWrite(led5, HIGH);
  }
  else digitalWrite(led5, LOW);
  if (fsrreading > 900) {
    digitalWrite(led6, HIGH);
  }
  else digitalWrite(led6, LOW);
}

CAD-Dateien

Unten findest du alle CAD-Dateien für Sensoren der Interlink 400 Serie.

Fazit

In diesem Artikel habe ich dir gezeigt, wie ein FSR funktioniert und wie du ihn mit Arduino verwenden kannst. Wenn du mehr über andere Sensoren lernen möchtest, schau dir die folgenden Artikel an:

Wenn du Fragen, Vorschläge hast oder denkst, dass in diesem Tutorial etwas fehlt, hinterlasse bitte einen Kommentar unten.