Skip to Content

Tutorial sul Force Sensing Resistor (FSR) con Arduino

Tutorial sul Force Sensing Resistor (FSR) con Arduino

I FSR sono sensori di pressione super robusti utilizzati in molti settori industriali. Li troverai in batterie elettroniche, telefoni cellulari, dispositivi di gioco portatili e molti altri dispositivi elettronici portatili. Questi sensori sono facili da usare e ottimi per rilevare la pressione.

In questo tutorial imparerai come funziona un FSR e come usarlo con Arduino. Ho incluso 3 esempi con schema di collegamento e codice per permetterti di iniziare a sperimentare con il tuo sensore.

Prima ti mostrerò il funzionamento base del sensore. Poi vedremo come usare questo sensore come interruttore toggle. Infine, ti mostrerò come usare i LED per indicare la quantità di pressione applicata al sensore.

Materiali

Componenti hardware

fsr-402-round Sensore FSR 402 (rotondo) × 1 Amazon
fsr-406-square Sensore FSR 406 (quadrato) × 1 Amazon
Arduino Uno Rev 3 Arduino Uno Rev3 × 1 Amazon
Breadboard × 1 Amazon
Cavi jumper ~ 10 Amazon
resistor Scatola assortimento resistori (vedi wiring per i valori) × 1 Amazon
red-led LED ~ 10 Amazon
Cavo USB tipo A/B × 1 Amazon

Strumenti

multimeter Multimetro Amazon

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.

Come funziona un FSR?

La resistenza di un FSR dipende dalla pressione applicata sull’area sensibile. Più pressione applichi, più la resistenza diminuisce. L’intervallo di resistenza è piuttosto ampio: > 10 MΩ (nessuna pressione) fino a ~ 200 Ω (pressione massima). La maggior parte dei FSR può rilevare forze da 100 g a 10 kg.

Costruzione base

Un FSR è composto da due membrane e un adesivo distanziatore. Le membrane conduttive sono separate da un sottile strato d’aria quando non viene applicata pressione. Una delle membrane contiene due tracce che vanno dalla coda all’area sensibile (la parte rotonda). Queste tracce sono intrecciate ma non si toccano. L’altra membrana è rivestita con un inchiostro conduttivo. Quando premi sul sensore, l’inchiostro mette in corto le due tracce con una resistenza che dipende dalla pressione.

FSR Construction
Costruzione FSR

Come leggere un FSR?

Il grafico sotto mostra la curva resistenza vs forza per il sensore FSR 402. Nota che i dati sono rappresentati su scale logaritmiche. La risposta non è lineare! Come vedi, c’è un enorme calo di resistenza quando si applica una piccola pressione. Dopo di che, la resistenza è inversamente proporzionale alla forza applicata. Intorno a 10 kg (non mostrato nel grafico) il sensore si satura e un aumento della forza produce poca o nessuna diminuzione della resistenza.

FSR 402 Resistance vs Force curve
Curva resistenza vs forza per FSR 402

Circuito partitore di tensione

Per misurare la forza applicata con Arduino, devi costruire un circuito partitore di tensione con l’FSR e una resistenza di pull-down. Questo circuito crea un’uscita di tensione variabile che può essere letta dall’ingresso ADC (convertitore analogico-digitale) del microcontrollore.

Voltage divider circuit Interlink FSR 402
Circuito partitore di tensione e curve Vout vs forza per diversi valori di R. I dati rappresentano l’uscita per il FSR Interlink 402 con V+ pari a 5 V. Riferimento: Interlink integration guide.

Scegliere la resistenza giusta per il sensore può essere un po’ complicato e dipende dall’intervallo di forza che vuoi misurare.

Il grafico sopra mostra le curve Vout vs forza per diversi valori di R (la resistenza di pull-down). Un resistore da 10 kΩ funziona bene se vuoi usare il sensore su tutto il suo intervallo di forza (100 g a 10 kg).

Esempio di calcolo

La tensione di uscita (Vout) che misuriamo con Arduino è descritta dalla seguente equazione:

Vout = Vcc x R / (R + Rfsr)

Quindi la tensione è inversamente proporzionale alla resistenza dell’FSR. Nota che la tensione di uscita che misuri è la caduta di tensione sulla resistenza di pull-down, non sull’FSR.

Quando non viene applicata forza, la resistenza dell’FSR sarà molto alta, prendiamo 10 MΩ come esempio. Ho usato una resistenza di pull-down da 10 kΩ e una Vcc di 5 V per questo tutorial, che porta al seguente output quando non viene applicata forza:

Vout = 5 V x 10 kΩ / (10 kΩ + 10 MΩ) = 0.005 V

Quindi quasi 0 V. Se premi molto forte sull’FSR, la resistenza scenderà a circa 200 Ω. Questo porta alla seguente tensione di uscita:

Vout = 5 V x 10 kΩ / (10 kΩ + 200 Ω) = 4.9 V

Come vedi, dovresti essere in grado di misurare una tensione di uscita tra 0 e 4.9 V a seconda della forza applicata al sensore.

Specifiche FSR

La tecnologia usata negli FSR è brevettata da Interlink Electronics, attiva dal 1985. I tipi più comuni di FSR che troverai sono gli Interlink FSR 402  e FSR 406.

Queste sono le specifiche del sensore rotondo 402 che ho usato in questo tutorial.

Specifiche FSR 402

Forza di attuazione ~0.1N minimo
Intervallo di sensibilità alla forza ~0.1N – 100N
Intervallo di resistenza >10 MΩ (circuito aperto) – ~200Ω
Risoluzione della forza Continua (analogica)
Ripetibilità della forza ± 6%
Area attiva Ø 12.7 mm
Spessore nominale 0.55 mm
Corsa dell’interruttore 0.15 mm
Durata > 10 milioni di attuazioni
Alimentazione Qualsiasi! Consuma meno di 1mA di corrente, a seconda della resistenza usata nel partitore di tensione.
Costo Check price

Per maggiori informazioni, puoi consultare il datasheet qui. Include anche dati per gli altri sensori della Serie 400.

Collegamento a un FSR

Puoi collegarti facilmente a un FSR usando una breadboard.

Il modo più semplice per collegare un FSR è usare una breadboard. È ottimo per prototipazione e test. Se ti serve una soluzione più permanente, ti consiglio vivamente il Amphenol FCI Clincher Connector. Puoi semplicemente agganciare questi connettori intorno alle tracce argentate del connettore e collegare facilmente cavi jumper o Dupont.

Amphenol clincher connector
Connettore Amphenol FCI Clincher

Avvertenza

Non è consigliato saldare direttamente sulle tracce argentate esposte del sensore. Il substrato si scioglierà durante la saldatura e la giunzione non terrà. Non piegare o piegare la coda dell’FSR se la stai curvando; questo può causare rotture nelle tracce argentate stampate. Interlink suggerisce un raggio minimo di curvatura di 2.5 mm.

Testare un FSR

Il modo più semplice per verificare se il tuo FSR funziona correttamente è collegarlo a un multimetro. Ho usato cavi con pinze a coccodrillo per collegare il multimetro ai terminali esposti del sensore. Imposta il multimetro in modalità misurazione resistenza (Ω) e dovresti vedere il valore della resistenza cambiare quando premi sul sensore.

Testing an FSR Force Sensitive Resistor
Misurare la variazione di resistenza applicando un carico.

Poiché l’intervallo di resistenza è molto ampio (200 kΩ a 200 Ω), è meglio usare un multimetro con funzione autorange. Se non ne hai uno, prova a cambiare manualmente le impostazioni di range. 200 kΩ dovrebbe permetterti di vedere la maggior parte dell’intervallo.

Collegamenti – Collegare un Force Sensing Resistor (FSR) a Arduino UNO

Ora che sai che il sensore funziona correttamente, è il momento di collegarlo ad Arduino. Useremo una breadboard e cavi jumper, il modo più semplice per prototipare un circuito.

Come detto nell’introduzione, devi creare un circuito con una resistenza di pull-down da 10 kΩ.

Lo schema di collegamento sotto mostra come collegare il sensore FSR ad Arduino. Nota che un FSR non è polarizzato, proprio come le normali resistenze. Non c’è un lato positivo o negativo, collegalo semplicemente nell’orientamento che preferisci.

FSR with Arduino wiring diagram
Schema di collegamento FSR con Arduino UNO

Collega uno dei terminali dell’FSR all’alimentazione (5 V, ma anche 3.3 V va bene) e l’altro terminale all’ingresso analogico di Arduino (A0). La resistenza di pull-down da 10 kΩ va collegata tra GND e A0.

Example 1 Connecting an FSR to Arduino UNO
Sensore di forza su Breadboard

1. Esempio di codice Arduino con FSR – Lettura tensione analogica

Ora che hai collegato il sensore, puoi caricare il seguente esempio di codice usando l’IDE Arduino.

Questo sketch leggerà i dati del sensore dall’ingresso analogico di Arduino e mostrerà l’output nel monitor seriale.

Come detto prima, la tensione di uscita del sensore sarà tra 0 V (nessuna pressione) e circa 5 V (pressione massima). Le schede Arduino hanno un convertitore analogico-digitale a 10 bit multicanale. Questo significa che mapperà la tensione di ingresso tra 0 e 5 V in valori interi tra 0 e 1023. Quindi vedrai un valore tra 0 e 1023 nel monitor seriale, a seconda di quanto premi il sensore.

/* 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.
}

Dovresti vedere il seguente output nel monitor seriale:

FSR serial monitor
Output monitor seriale

Assicurati che il monitor seriale sia impostato anche a 9600 baud.

2. Usare un Force Sensing Resistor (FSR) come interruttore toggle

In questo esempio userai il sensore FSR come interruttore toggle. Puoi usare questo programma per controllare molte altre funzioni, in questo caso per accendere e spegnere un LED.

Dovrai aggiungere un LED con una resistenza al circuito, come mostrato nello schema sotto.

Force sensitive resistor (FSR) with Arduino and LED wiring diagram
Schema di collegamento FSR con Arduino e LED

Il terminale negativo del LED (il terminale corto) va collegato a GND tramite una resistenza e il terminale positivo al pin digitale 2. Il valore della resistenza dipende dal colore del LED che usi. Puoi usare i seguenti valori come guida:

  • Blu, Verde, Bianco o UV: 68 Ω
  • Rosso, Giallo o Giallo-Verde: 150 Ω

Se non hai questi valori di resistenza, prova a trovare uno simile. Puoi anche mettere più resistenze in serie per ottenere il valore corretto.

Lo sketch sotto farà toggle del LED acceso/spento quando premi sull’FSR. Controlla il valore del pin di ingresso analogico e cambia lo stato del LED quando il valore supera 500. Questo significa che una pressione molto leggera non verrà rilevata.

Questo esempio include anche il debounce dell’input ed è basato sul 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. Controllare più LED con un FSR come sensore di pressione

L’esempio sotto rende facile vedere quanta pressione applichi all’FSR. Più pressione applichi, più LED si accenderanno.

Puoi collegare i LED nello stesso modo di prima, vedi lo schema sotto. I LED sono collegati ai pin digitali da 2 a 7. L’FSR è collegato nello stesso modo di prima.

FSR-with-many-LEDS-and-Arduino-wiring-diagram-schematic-pinout
Schema di collegamento FSR con più LED e Arduino

Poiché la tensione di uscita dell’FSR non è lineare, ho impostato un intervallo personalizzato per accendere ogni LED. Potresti doverlo regolare leggermente per il tuo sensore.

/* 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);
}

File CAD

Qui sotto trovi tutti i file CAD per i sensori della Serie 400 di Interlink.

Conclusione

In questo articolo ti ho mostrato come funziona un FSR e come usarlo con Arduino.

Se hai domande, suggerimenti o pensi che manchi qualcosa in questo tutorial, lascia pure un commento qui sotto.