Skip to Content

Tutorial de Resistor Sensível à Força (FSR) com Arduino

Tutorial de Resistor Sensível à Força (FSR) com Arduino

Os FSRs são sensores de pressão super robustos usados em vários setores. Encontrarás estes sensores em baterias eletrónicas, telemóveis, dispositivos de jogos portáteis e muitos outros eletrónicos portáteis. São fáceis de usar e ótimos para detetar pressão.

Neste tutorial vais aprender como funciona um FSR e como usá-lo com Arduino. Incluí 3 exemplos com diagramas de ligação e código para começares a experimentar com o teu sensor.

Primeiro vou mostrar-te o funcionamento básico do sensor. Depois, veremos como usar este sensor como um interruptor toggle. Por fim, vou mostrar-te como usar LEDs para indicar a quantidade de pressão aplicada ao sensor.

Materiais necessários

Componentes de hardware

fsr-402-round Sensor FSR 402 (redondo) × 1 Amazon
fsr-406-square Sensor FSR 406 (quadrado) × 1 Amazon
Arduino Uno Rev 3 Arduino Uno Rev3 × 1 Amazon
Breadboard × 1 Amazon
Fios jumper ~ 10 Amazon
resistor Caixa de resistores sortidos (ver wiring para valores) × 1 Amazon
red-led LEDs ~ 10 Amazon
Cabo USB tipo A/B × 1 Amazon

Ferramentas

multimeter Multímetro 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.

Como funciona um FSR?

A resistência de um FSR depende da pressão aplicada na área sensora. Quanto mais pressão aplicares, menor a resistência. O intervalo de resistência é bastante amplo: > 10 MΩ (sem pressão) até ~ 200 Ω (pressão máxima). A maioria dos FSRs deteta forças entre 100 g e 10 kg.

Construção básica

Um FSR é composto por duas membranas e um adesivo espaçador. As membranas condutoras são separadas por uma fina camada de ar quando não há pressão. Uma das membranas tem dois traços que vão da cauda até à área sensora (a parte redonda). Estes traços estão entrelaçados, mas não se tocam. A outra membrana é revestida com tinta condutora. Ao pressionar o sensor, a tinta faz curto entre os dois traços com uma resistência que depende da pressão aplicada.

FSR Construction
Construção do FSR

Como ler um FSR?

O gráfico abaixo mostra a curva resistência vs força para o sensor FSR 402. Note que os dados estão em escala logarítmica. A resposta não é linear! Como vês, há uma grande queda na resistência com uma pequena pressão. Depois disso, a resistência é inversamente proporcional à força aplicada. Por volta dos 10 kg (não mostrado no gráfico), o sensor satura e um aumento da força quase não diminui a resistência.

FSR 402 Resistance vs Force curve
Curva Resistência vs Força para FSR 402

Circuito divisor de tensão

Para medir a força aplicada com um Arduino, precisas de montar um circuito divisor de tensão com o FSR e um resistor pull-down. Este circuito cria uma saída de tensão variável que pode ser lida pela entrada ADC (conversor analógico para digital) do microcontrolador.

Voltage divider circuit Interlink FSR 402
Circuito divisor de tensão e curvas Vout vs Força para diferentes valores de R. Dados representam saída para o FSR Interlink 402 com V+ igual a 5 V. Referência: guia de integração Interlink.

Escolher o resistor adequado para o teu sensor pode ser complicado e depende do intervalo de força que queres medir.

O gráfico acima mostra as curvas Vout vs Força para diferentes valores de R (resistor pull-down). Um  resistor de 10 kΩ funciona bem se quiseres usar o sensor em todo o seu intervalo de força (100 g a 10 kg).

Exemplo de cálculo

A tensão de saída (Vout) que medimos com o Arduino é descrita pela seguinte equação:

Vout = Vcc x R / (R + Rfsr)

Assim, a tensão é inversamente proporcional à resistência do FSR. Nota que a tensão medida é a queda de tensão no resistor pull-down, não no FSR.

Quando não há força aplicada, a resistência do FSR é muito alta, por exemplo 10 MΩ. Usei um resistor pull-down de 10 kΩ e Vcc de 5 V para este tutorial, o que resulta na seguinte saída sem força aplicada:

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

Quase 0 V. Se pressionares forte no FSR, a resistência baixa para cerca de 200 Ω. Isso resulta na seguinte tensão de saída:

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

Como vês, deves conseguir medir uma tensão de saída entre 0 e 4.9 V dependendo da força aplicada ao sensor.

Especificações do FSR

A tecnologia usada nos FSRs é patenteada pela Interlink Electronics, em operação desde 1985. Os tipos mais comuns de FSR que encontrarás são os Interlink FSR 402  e FSR 406.

Estas são as especificações do sensor redondo 402 que usei neste tutorial.

Especificações do FSR 402

Força de atuação ~0.1N mínimo
Intervalo de sensibilidade à força ~0.1N – 100N
Intervalo de resistência >10 MΩ (circuito aberto) – ~200Ω
Resolução da força Contínua (analógica)
Repetibilidade da força ± 6%
Área ativa Ø 12.7 mm
Espessura nominal 0.55 mm
Deslocamento do interruptor 0.15 mm
Vida útil > 10 milhões de atuações
Alimentação Qualquer uma! Usa menos de 1mA de corrente, dependendo do resistor usado no divisor de tensão.
Custo Check price

Para mais informações, podes consultar a folha de dados aqui. Inclui também dados para outros sensores da Série 400.

Ligação a um FSR

Podes ligar facilmente um FSR usando uma breadboard.

A forma mais fácil de ligar um FSR é usar uma breadboard. Funciona muito bem para prototipagem e testes. Se precisares de uma solução mais permanente, recomendo vivamente o  Amphenol FCI Conector Clincher. Podes simplesmente prender estes conectores nos traços prateados do sensor e ligar facilmente fios jumper ou Dupont.

Amphenol clincher connector
Conector Clincher Amphenol FCI

Aviso

Não é recomendado soldar diretamente nos traços prateados expostos do sensor. O substrato derrete durante a soldagem e a junta não fica firme. Não dobre ou vinca a cauda do FSR ao curvá-lo; isso pode partir os traços prateados impressos. A Interlink sugere um raio mínimo de curvatura de 2.5 mm.

Testar um FSR

A forma mais fácil de verificar se o teu FSR funciona corretamente é ligá-lo a um multímetro. Usei cabos de teste com jacaré para ligar o multímetro aos terminais expostos do sensor. Coloca o sensor no modo de medição de resistência (Ω) e deverás ver o valor da resistência mudar ao pressionar o sensor.

Testing an FSR Force Sensitive Resistor
Medir a variação da resistência ao aplicar carga.

Como o intervalo de resistência é muito grande (200 kΩ a 200 Ω), é melhor usar um multímetro com função autorange. Se não tiveres, experimenta ajustar as faixas manualmente. 200 kΩ deve permitir ver a maior parte do intervalo.

Ligação – Ligar um Force Sensing Resistor (FSR) ao Arduino UNO

Agora que sabes que o sensor funciona corretamente, é hora de ligá-lo ao Arduino. Usaremos uma breadboard e fios jumper, pois é a forma mais fácil de prototipar um circuito.

Como mencionado na introdução, precisas de criar um circuito com um resistor pull-down de 10 kΩ.

O diagrama de ligação abaixo mostra como ligar o sensor FSR ao Arduino. Note que um FSR não é polarizado, tal como resistores normais. Não há lado positivo ou negativo, liga-o na orientação que quiseres.

FSR with Arduino wiring diagram
Diagrama de ligação do FSR com Arduino UNO

Liga um dos terminais do FSR à alimentação (5 V, mas 3.3 V também funciona) e o outro terminal à entrada analógica do Arduino (A0). O resistor pull-down de 10 kΩ liga-se entre GND e A0.

Example 1 Connecting an FSR to Arduino UNO
Sensor de força na Breadboard

1. Código de exemplo para FSR com Arduino – Leitura de tensão analógica

Agora que ligaste o sensor, podes carregar o seguinte código de exemplo usando o Arduino IDE.

Este sketch lê os dados do sensor na entrada analógica do Arduino e mostra a saída no monitor serial.

Como mencionado antes, a tensão de saída do sensor varia entre 0 V (sem pressão) e cerca de 5 V (pressão máxima). As placas Arduino têm um conversor analógico para digital de 10 bits e múltiplos canais. Isso significa que mapeia a tensão de entrada entre 0 e 5 V para valores inteiros entre 0 e 1023. Assim, deverás ver um valor entre 0 e 1023 no monitor serial, dependendo da força aplicada ao sensor.

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

Deverás ver a seguinte saída no monitor serial:

FSR serial monitor
Saída do monitor serial

Certifica-te que o monitor serial está configurado para uma taxa de 9600 baud.

2. Usar um Force Sensing Resistor (FSR) como interruptor toggle

Neste exemplo vais usar o sensor FSR como um interruptor toggle. Podes usar este programa para controlar várias funções, neste caso para ligar e desligar um LED.

Terás de adicionar um LED com um resistor ao circuito, como mostrado no diagrama abaixo.

Force sensitive resistor (FSR) with Arduino and LED wiring diagram
Diagrama de ligação do FSR com Arduino e LED

O terminal negativo do LED (o mais curto) liga-se ao GND através de um resistor e o terminal positivo ao pino digital 2. O valor do resistor depende da cor do LED que usas. Podes usar os seguintes valores como guia:

  • Azul, Verde, Branco ou UV: 68 Ω
  • Vermelho, Amarelo ou Amarelo-Verde: 150 Ω

Se não tiveres estes valores de resistor, tenta encontrar um próximo. Também podes colocar vários resistores em série para obter o valor correto.

O sketch abaixo alterna o LED ligado e desligado quando pressionas o FSR. Ele verifica o valor da entrada analógica e muda o estado do LED quando o valor ultrapassa 500. Isso significa que uma pressão muito leve não será detetada.

Este exemplo também faz debounce da entrada e baseia-se no  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. Controlar múltiplos LEDs com um FSR como sensor de pressão

O exemplo abaixo facilita ver quanta pressão aplicas ao FSR. Quanto mais pressão, mais LEDs acendem.

Podes ligar os LEDs da mesma forma que antes, vê o diagrama de ligação abaixo. Os LEDs ligam-se aos pinos digitais 2 a 7. O FSR também está ligado da mesma forma que antes.

FSR-with-many-LEDS-and-Arduino-wiring-diagram-schematic-pinout
Diagrama de ligação do FSR com múltiplos LEDs e Arduino

Como a tensão de saída do FSR não é linear, configurei um intervalo personalizado para cada LED acender. Podes precisar de ajustar isto ligeiramente para o teu sensor.

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

Ficheiros CAD

Abaixo encontras todos os ficheiros CAD para sensores da Série 400 da Interlink.

Conclusão

Neste artigo mostrei-te como funciona um FSR e como o podes usar com Arduino.

Se tiveres dúvidas, sugestões ou achares que falta algo neste tutorial, deixa um comentário abaixo.