Hướng dẫn sử dụng cảm biến lực FSR với Arduino

Hướng dẫn sử dụng cảm biến lực FSR với Arduino

Cảm biến lực FSR có thể tìm thấy ở các ứng dụng như: nút nhấn, điều khiển đèn LED, robot… Thông qua bài viết này, các bạn sẽ tìm hiểu rõ hơn về cấu trúc, nguyên lý hoạt động và lợi ích của cảm biến FSR mang lại. Cuối cùng để tạo động lực cho mình ra nhiều bài viết hay hơn, thì đừng ngần ngại ủng hộ cho mình bằng cách nhấn vào Donate ở link ở phía trên nhé.

Tổng quan về cảm biến FSR

Cảm biến lực FSR (Force Sensing Resistor) là một loại cảm biến điện trở được sử dụng để đo lực tác động. Nó có khả năng phản ứng đến áp lực và tạo ra một thay đổi tương ứng trong điện trở. FSR Arduino được sử dụng rộng rãi trong các ứng dụng như robot, thiết bị y tế, xe hơi, điện tử tiêu dùng và nhiều lĩnh vực khác.

Cấu tạo của cảm biến lực

Cấu trúc cơ bản của cảm biến FSR bao gồm một vật liệu cảm biến đặc biệt có tính nhạy áp suất. Khi có lực tác động lên cảm biến, vật liệu cảm biến bị nén lại và gây ra sự thay đổi về điện trở. Thay đổi điện trở này được sử dụng để đo lượng lực đang tác động lên cảm biến.

Hình dáng và kích thước

Cảm biến lực FSR có thể có nhiều kích thước và hình dạng khác nhau, tùy thuộc vào yêu cầu ứng dụng cụ thể. Nó có thể được tích hợp vào các bề mặt phẳng hoặc các kết cấu khác nhau để đo lực tác động theo nhiều hướng khác nhau.

Phần lớn các FSR có vùng cảm biến hình tròn hoặc hình chữ nhật. FSR hình chữ nhật lý tưởng cho cảm biến diện rộng, trong khi cảm biến hình tròn nhỏ có thể mang lại độ chính xác cao hơn.

Cảm biến lực FSR hoạt động như thế nào?

Cảm biến lực FSR (Force Sensing Resistor) hoạt động dựa trên nguyên lý thay đổi điện trở khi có lực tác động lên nó. Dưới tác động của lực, vật liệu cảm biến bên trong cảm biến bị nén lại, làm thay đổi kích thước và diện tích tiếp xúc của các hạt dẫn điện trong vật liệu.

Khi không có lực tác động, vật liệu cảm biến có điện trở cao. Tuy nhiên, khi có lực tác động lên cảm biến, vật liệu bị nén lại, làm cho các hạt dẫn điện trong vật liệu tiếp xúc mật độ hơn và tạo ra đường dẫn dẫn điện tốt hơn. Do đó, điện trở của cảm biến giảm.

Điện trở của cảm biến lực FSR có thể được đọc bằng cách kết nối nó với một mạch đo điện tử. Mạch đo sẽ áp dụng một dòng điện qua cảm biến và đo điện áp hoặc dòng điện chênh lệch để xác định giá trị điện trở. Giá trị điện trở này có thể được chuyển đổi thành đơn vị lực tương ứng sử dụng các phép đo và quy ước đã được xác định trước.

Cảm biến FSR arduino có thể được sử dụng để đo lực tác động trong một phạm vi rộng, từ lực nhẹ đến lực mạnh. Độ nhạy của cảm biến có thể được điều chỉnh bằng cách thay đổi thiết kế và chất liệu của vật liệu cảm biến.

Hướng dẫn đọc điện áp trên cảm biến lực FSR

Cách đơn giản để đọc giá trị từ cảm biến FSR là sử dụng một điện trở để tạo thành một bộ chia điện áp, giống như hình bên dưới.

Lưu ý: Điện áp đầu ra được đo là điện áp rơi trên điện trở kéo xuống mát, chứ không phải điện áp rơi trên FSR.

Các bạn có thể sử dụng công thức này để tính điện áp đầu ra (Vo).

Ví dụ: Với nguồn cấp là 5V và điện trở kéo xuống 10K, khi không có lực tác động lên cảm biến, điện trở FSR sẽ rất cao (khoảng 10M). Nên điện áp đầu ra sẽ như sau:

Nếu các bạn tác động lên cảm biến lực FSR, điện trở sẽ giảm xuống khoảng 250Ω. Kết quả điện áp đầu ra:

Các bạn có thể thấy, điện áp đầu ra thay đổi điện áp từ 0 đến 5V tùy thuộc vào lượng lực tác động lên cảm biến.

Dưới đây là bảng thông số đưa ra các mức điện áp đầu ra khác nhau, tương ứng với các mức điện trở khi tác động lên cảm biến.

Các linh kiện cần thiết cho dự án

TÊN LINH KIỆN SỐ LƯỢNG NƠI BÁN
Arduino Uno R3 1 Shopee | Cytron
Cảm biến lực FSR 1 Shopee | Cytron
Dây cắm 1 Shopee | Cytron
Breadboard 1 Shopee | Cytron
Điện trở 10k 1 Shopee | Cytron

Đấu nối cảm biến lực với Arduino

Sơ đồ đấu nối khá đơn giản, các bạn mắc một điện trở kéo xuống 10kΩ nối tiếp với cảm biến FSR để tạo thành một mạch chia điện áp. Tiếp theo, đầu vào chân A0 của Arduino nối với điểm nối của điện trở kéo xuống và cảm biến FSR.

Code 1: Cảm biến FSR Arduino

Đây là một ví dụ đơn giản về việc đọc giá trị analog từ cảm biến lực FSR và hiển thị kết quả đọc trên Serial Monitor.

int fsrPin = 0;     // the FSR and 10K pulldown are connected to a0
int fsrReading;     // the analog reading from the FSR resistor divider
 
void setup(void) {
  Serial.begin(9600);   
}
 
void loop(void) {
  fsrReading = analogRead(fsrPin);  
 
  Serial.print("Analog reading = ");
  Serial.print(fsrReading);     // print the raw analog reading
 
  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(1000);
}

Dưới đây là kết quả các giá trị nhận được khi có lực tác động lên cảm biến FSR và xuất ra các thông báo tương ứng với từng giá trị.

Giải thích code

int fsrPin = 0;     // the FSR and 10K pulldown are connected to a0
int fsrReading;     // the analog reading from the FSR resistor divider

int fsrPin = 0; khai báo chân kết nối của cảm biến lực FSR, ở đây mình khai báo chân A0 trên Arduino.
int fsrReading; khai báo biến để lưu trữ giá trị analog đọc được từ cảm biến.

void setup(void) {
  Serial.begin(9600);   
}

Trong hàm setup(), Serial Monitor được khởi tạo để giao tiếp với máy tính với baud rate 9600.

void loop(void) {
  fsrReading = analogRead(fsrPin);  
 
  Serial.print("Analog reading = ");
  Serial.print(fsrReading);     // print the raw analog reading
}

Trong hàm loop(), giá trị analog từ cảm biến lực FSR được đọc bằng câu lệnh analogRead(fsrPin), sau đó được lưu vào biến fsrReading.
Giá trị analog đọc được được hiển thị trên Serial Monitor bằng câu lệnh Serial.print(fsrReading).

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(1000);

Dựa vào giá trị đọc analog, một loạt các điều kiện if-else được sử dụng để phân loại mức lực tác động lên cảm biến FSR. Tùy thuộc vào giá trị đọc, một thông báo tương ứng với mức lực sẽ được in ra màn hình Serial.

Code 2: Cảm biến FSR Arduino

Đoạn code này sẽ nâng cao hơn khi sử dụng giá trị đọc Analog từ cảm biến FSR và các công thức chuyển đổi để xác định giá trị lực áp dụng lên cảm biến.

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
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
}
 
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(1000);
}

Đây là kết quả và được in ra các giá trị trên monitor serial.

Bài viết liên quan

Subscribe
Notify of
guest

0 Comments
Inline Feedbacks
View all comments