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
| Sensor FSR 402 (redondo) | × 1 | Amazon | |
| Sensor FSR 406 (quadrado) | × 1 | Amazon | |
| Arduino Uno Rev3 | × 1 | Amazon | |
| Breadboard | × 1 | Amazon | |
| Fios jumper | ~ 10 | Amazon | |
| Caixa de resistores sortidos (ver wiring para valores) | × 1 | Amazon | |
| LEDs | ~ 10 | Amazon | |
| Cabo USB tipo A/B | × 1 | Amazon |
Ferramentas
| Multímetro | Amazon |
Software
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.

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.

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.

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

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.

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.

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.

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.

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:

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.

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.

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.

