1. FSR
FSR 은 Force Sensitive Resistor 의 약자입니다.
* WALFRONT 5pcs/Lot Thin Film Pressure Sensor DF9-40 High Precise Force Sensing Resistor Resistance-type Flexible Pressure Sensor
특징은 다음과 같다고 합니다.
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
슬슬 뭔가 실생활에 도움되는 것을 만들어야 하는데,
센서 종류만 탐구하고 앉아 있네요.
'Hardware' 카테고리의 다른 글
Hardware | MAX31855 + K-type 온도센서 조합 (2) | 2018.07.31 |
---|---|
Hardware | SSD1306 에 로고를 세겨보자 (0) | 2018.07.24 |
Hardware | 재생토너 chip 교환기 - 1 (0) | 2018.06.29 |
Hardware | Amazon Kindle Paperwhite 구매기 (0) | 2018.05.29 |
Hardware | 전자저울 구매하기 (0) | 2018.05.20 |