Hardware | 압력 센서를 가지고 놀아보자

|

1. FSR


FSR 은 Force Sensitive Resistor 의 약자입니다.

당장에야 어디에 붙여서 사용할 필요는 없지만, 미리 경험해 본다 샘 치고 구입해 봅니다.

한개만 해도 되는데, 실제 무게 대비 어떤식으로 반응하는지 궁금하여,
각각 스케일이 다른 센서가 한 set 인 제품을 구매합니다.

선호되는 제품이 아닌지라 약 1만원 정도로 비싼 축에 속합니다.


* WALFRONT 5pcs/Lot Thin Film Pressure Sensor DF9-40 High Precise Force Sensing Resistor Resistance-type Flexible Pressure Sensor

https://www.aliexpress.com/item/WALFRONT-5pcs-Lot-Thin-Film-Pressure-Sensor-DF9-40-High-Precise-Force-Sensing-Resistor-Resistance-type/32847434125.html




특징은 다음과 같다고 합니다.


Features:


This flexible pressure sensor is based on new nanometer pressure-sensitive materials supplemented by ultra-thin film substrate.

Highly sensitive flexible nanometer materials can realize highly sensitive detection of pressure.

It has pressure sensitive function as well as water-resistant function.

When sensor detects outside pressure, the resistance of sensor will change.

Pressure signal can be converted into a corresponding electrical signal output using simple circuit.

Specifications:


Measuring Range: 0-500g, 0-2kg, 0-5kg, 0-10kg, 0-20kg

Thickness: <0.25mm

Precision: ±2.5%(85% measuring range)

Repeatability: <±5.8(50% load)

Lifespan: >1million times

Initial Resistance: >10MΩ(no load)

Response Time: <1ms

Restore Time: <15ms

Test Voltage: DC 3.3V (typical)

EMI: Not generate

EDS: Not sensitive


Sensing Area Outer Diameter: 9mm

Sensing Area Inner Diameter: 7.5mm

Pin Spacing: 2.54mm


Range 는 500g / 2kg / 5kg / 10kg / 20kg 각각 다른 5개의 FSR 이 한 set 입니다.




2. 도착


얇은 막 같은 형태인지라 납짝한 포장지로 왔습니다.



봉지에 각 FSR 의 range 값이 적혀 있을 뿐, 센서 자체에는 없어서 어디서 꺼냈는지 잘 외워 둬야 합니다.



어떤것은 앞뒤가 검은색, 흰색으로 되어 있고...



또 어떤것은 회로선으로 구성되어 있고, 제각각입니다.





3. LED 연동


일단 간단하게 LED 를 연결하여 누르는 힘의 세기에 따라 밝기 조절이 되는 회로를 구성해 봅니다.

아래 website 를 참고하였습니다.


* Using an FSR

https://learn.adafruit.com/force-sensitive-resistor-fsr/using-an-fsr


회로 구성은 다음과 같습니다.


주의할 점은, 저항이 꼭 필요하다는 것.

FSR 출력값은 저항과 같이 연결된 부분에서 A0 에 연결하면 됩니다.



이쁘게 연결 되었습니다.



저항은 꼭 연결되어야 합니다.

/* FSR testing sketch.

Connect one end of FSR to 5V, the other end to Analog 0.
Then connect one end of a 10K resistor from Analog 0 to ground
Connect LED from pin 11 through a resistor to ground

For more information see www.ladyada.net/learn/sensors/fsr.html */

int fsrAnalogPin = 0;  // FSR is connected to analog 0
int LEDpin = 11;  // connect Red LED to pin 11 (PWM pin)
int fsrReading;  // the analog reading from the FSR resistor divider
int LEDbrightness;
 
void setup(void) {
	Serial.begin(9600); // We'll send debugging information via the Serial monitor
	pinMode(LEDpin, OUTPUT);
}
 
void loop(void) {
	fsrReading = analogRead(fsrAnalogPin);
	Serial.print("Analog reading = ");
	Serial.println(fsrReading);
	
	// we'll need to change the range from the analog reading (0-1023) down to the range
	// used by analogWrite (0-255) with map!
	LEDbrightness = map(fsrReading, 0, 1023, 0, 255);
	// LED gets brighter the harder you press
	analogWrite(LEDpin, LEDbrightness);
	
	delay(100);
}


sketch 는 위와 같습니다.

열결된 FSR 을 통해 analog 값을 읽어들이고, LED 밝기 범위 안으로 mapping 시키는 방법 입니다.



어때요, 잘 동작하쥬?




4. FSR 에 걸리는 voltage / resistance 도출


아래 sketch는 실제 값을 측정해 보는 소스 입니다.

사용된 법칙은 아래 두가지 입니다.


The voltage = Vcc * R / (R + FSR) where R = 10K and Vcc = 5V

FSR = ((Vcc - V) * R) / V

/* FSR testing sketch. 
 
Connect one end of FSR to power, the other end to Analog 0.
Then connect one end of a 10K resistor from Analog 0 to ground 
 
For more information see www.ladyada.net/learn/sensors/fsr.html */
 
int fsrPin = 0;     // the FSR and 10K pulldown are connected to a0
int fsrReading;     // the analog reading from the FSR resistor divider
int fsrVoltage;     // the analog reading converted to voltage
unsigned long fsrResistance;  // The voltage converted to resistance, can be very big so make "long"
unsigned long fsrConductance; 
long fsrForce;       // Finally, the resistance converted to force
 
void setup(void) {
//  Serial.begin(9600);   // We'll send debugging information via the Serial monitor
  Serial.begin(19200);   // We'll send debugging information via the Serial monitor
}
 
void loop(void) {
  fsrReading = analogRead(fsrPin);  
  Serial.print("Analog reading = ");
  Serial.println(fsrReading);
 
  // analog voltage reading ranges from about 0 to 1023 which maps to 0V to 5V (= 5000mV)
  fsrVoltage = map(fsrReading, 0, 1023, 0, 5000);
  Serial.print("Voltage reading in mV = ");
  Serial.println(fsrVoltage);  
 
  if (fsrVoltage == 0) {
    Serial.println("No pressure");  
  } else {
    // The voltage = Vcc * R / (R + FSR) where R = 10K and Vcc = 5V
    // so FSR = ((Vcc - V) * R) / V        yay math!
    fsrResistance = 5000 - fsrVoltage;     // fsrVoltage is in millivolts so 5V = 5000mV
    fsrResistance *= 10000;                // 10K resistor
    fsrResistance /= fsrVoltage;
    Serial.print("FSR resistance in ohms = ");
    Serial.println(fsrResistance);
 
    fsrConductance = 1000000;           // we measure in micromhos so 
    fsrConductance /= fsrResistance;
    Serial.print("Conductance in microMhos: ");
    Serial.println(fsrConductance);
 
    // Use the two FSR guide graphs to approximate the force
    if (fsrConductance <= 1000) {
      fsrForce = fsrConductance / 80;
      Serial.print("Force in Newtons: ");
      Serial.println(fsrForce);      
    } else {
      fsrForce = fsrConductance - 1000;
      fsrForce /= 30;
      Serial.print("Force in Newtons: ");
      Serial.println(fsrForce);            
    }
  }
  Serial.println("--------------------");
  delay(600);
}


회로는 LED만 빼면 같고 소스만 다릅니다.

그 결과는 다음과 같습니다.



각 소자마다 아마 값이 달라지겠지만,

누르는 힘에 따라 저항값이 바뀌며, 세게 누르면 저항값이 낮아져 전류가 많이 흐르는 것을 보여주고 있습니다.





5. 각 소자별 반응 차이 측정


그럼 위의 소스를 살짝 수정하여,

각 소자의 특성을 확인해 보기로 합니다.


이 값이 있어야, 특정 목적에 사용시 적절한 소자를 선택할 수 있겠죠?



그냥 각 소자를 추가하고, 저항을 각각 연결하여 값을 입력받는 방식입니다.


사진은 찍지 못했지만, 저기 소자들을 한대 모아서 같은 손가락으로 누르면서 측정하였습니다.

사진 찍을 여유가 없네요.


소스는 다음과 같습니다.

바로 위의 소스를 조금 수정했고, 소자에 흐르는 voltage 와 resistance 값만을 한줄에 출력하도록 했습니다.


/* FSR testing sketch. 

Connect one end of FSR to power, the other end to Analog 0.
Then connect one end of a 10K resistor from Analog 0 to ground

For more information see www.ladyada.net/learn/sensors/fsr.html */
 
int fsrVoltage_00;  // the analog reading converted to voltage
int fsrVoltage_01;
int fsrVoltage_02;
int fsrVoltage_03;
unsigned long fsrResistance_00;  // The voltage converted to resistance, can be very big so make "long"
unsigned long fsrResistance_01;
unsigned long fsrResistance_02;
unsigned long fsrResistance_03;

void setup(void) {
	Serial.begin(19200);  // We'll send debugging information via the Serial monitor
	
	pinMode(A0,INPUT);
	pinMode(A1,INPUT);
	pinMode(A2,INPUT);
	pinMode(A3,INPUT);
	
	Serial.println("500g        2Kg       5Kg      10Kg");
	Serial.println("------------------------------------------");
}
 
void loop(void) {
	// analog voltage reading ranges from about 0 to 1023 which maps to 0V to 5V (= 5000mV)
	fsrVoltage_00 = map(analogRead(A0), 0, 1023, 0, 5000);
	Serial.print(fsrVoltage_00);
	Serial.print("   ");
	
	fsrVoltage_01 = map(analogRead(A1), 0, 1023, 0, 5000);
	Serial.print(fsrVoltage_01);
	Serial.print("   ");
	
	fsrVoltage_02 = map(analogRead(A2), 0, 1023, 0, 5000);
	Serial.print(fsrVoltage_02);
	Serial.print("   ");
	
	fsrVoltage_03 = map(analogRead(A3), 0, 1023, 0, 5000);
	Serial.print(fsrVoltage_03);
	Serial.print("   ");
	
	
	// The voltage = Vcc * R / (R + FSR) where R = 10K and Vcc = 5V
	// so FSR = ((Vcc - V) * R) / V        yay math!
	fsrResistance_00 = ((5000 - fsrVoltage_00)*10000)/fsrVoltage_00;  // fsrVoltage is in millivolts so 5V = 5000mV
	Serial.print(fsrResistance_00);
	Serial.print("   ");
	
	fsrResistance_01 = ((5000 - fsrVoltage_01)*10000)/fsrVoltage_01;
	Serial.print(fsrResistance_01);
	Serial.print("   ");
	
	fsrResistance_02 = ((5000 - fsrVoltage_02)*10000)/fsrVoltage_02;
	Serial.print(fsrResistance_02);
	Serial.print("   ");
	
	fsrResistance_03 = ((5000 - fsrVoltage_03)*10000)/fsrVoltage_03;
	Serial.print(fsrResistance_03);
	Serial.println();
	
	delay(600);
}


Serial Monitor 에 나타나는 모양은 다음과 같습니다.



각 값을 보면 정말 linear 하게 값이 움직이는지 알 수 없으나,

그래프화 시켜보면 다음과 같습니다.


각 센서마다 반응하는 range 가 다른 것을 알 수 있습니다.



한가지 문제는 5kg 센서가 너무 반응을 잘 한다는 거죠.

제가 봉투에서 꺼내면서 다른 센서와 바꿔버렸는지, 아니면 처음부터 잘못 들어가 있는지... 확신이 없습니다.


이걸 토대로, 실제 사용시는 기준 실측값을 가지고 사용해야겠습니다.




FIN


슬슬 뭔가 실생활에 도움되는 것을 만들어야 하는데,

센서 종류만 탐구하고 앉아 있네요.



And