Hướng dẫn sử dụng cảm biến uốn cong Flex Sensor với Arduino
Cảm biến uốn cong (Flex Sensor) là một cảm biến quan trọng trong các dự án Arduino liên quan đến đo uốn cong, đo góc. Với tính linh hoạt và độ chính xác cao, cảm biến uốn cong đã trở thành một công cụ hữu ích cho nhiều ứng dụng khác nhau.
Trong hướng dẫn này, các bạn sẽ tìm hiểu cách kết nối và sử dụng cảm biến uốn cong Flex Sensor với Arduino. Thông qua bài viết sẽ hướng dẫn cho các bạn tạo một mạch đơn giản để đọc giá trị uốn cong từ cảm biến và hiển thị nó trên màn hình.
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 uốn cong Plex Sensor | 1 | Shopee | Cytron |
Dây cắm | 10-20 | Shopee | Cytron |
Breadboard | 1 | Shopee | Cytron |
Tổng quan về Flex Sensor
Cảm biến uốn cong (flex sensor) thực chất là một biến trở có khả năng thay đổi điện trở khi được uốn cong. Vì điện trở biến thiên tỷ lệ thuận trực tiếp với độ uốn cong, nên nó thường được gọi là Potentiometer Uốn Cong.
Cảm biến uốn cong thường có hai kích thước phổ biến: 2.2 inch (5.588cm) và 4.5 inch (11.43cm).
Cấu tạo của cảm biến uốn cong
Hướng dẫn sử dụng Flex Sensor
Cảm biến uốn cong chỉ được thiết kế để uốn cong theo một hướng duy nhất, như được hiển thị trong hình ảnh dưới đây. Nếu bạn uốn cong cảm biến theo hướng ngược lại, bạn sẽ không nhận được dữ liệu chính xác và có thể gây hỏng cảm biến.
Ngoài ra, tránh uốn cong cảm biến quá gần (nơi chân cắm được ép), vì điều này có thể gây gập và hỏng cảm biến.
Nguyên lý hoạt động của Flex Sensor
Mực dẫn trên cảm biến chính là một loại trở kháng. Khi cảm biến thẳng, trở kháng này khoảng 25k.
Khi cảm biến được uốn cong, lớp mực dẫn bị căng, dẫn đến giảm diện tích tiết diện (hãy tưởng tượng như việc căng một sợi dây cao su) và tăng trở kháng. Ở góc uốn cong 90°, trở kháng này khoảng 100K.
Khi cảm biến được thẳng lại, trở kháng trở về giá trị ban đầu. Bằng cách đo trở kháng, bạn có thể xác định được mức độ uốn cong của cảm biến.
Reading a Flex Sensor
Cách đơn giản nhất để đọc cảm biến uốn cong (Flex Sensor) là kết hợp với một trở kháng tĩnh để tạo thành một bộ chia điện áp, từ đó tạo ra một điện áp biến đổi có thể đọc được bởi bộ chuyển đổi tương tự sang số của vi điều khiển.
Lưu ý rằng điện áp đầu ra mà bạn đo là mức giảm điện áp qua trở kháng kéo xuống, không phải là giảm điện áp qua cảm biến uốn cong (Flex Sensor).
Chúng ta có thể sử dụng công thức sau để tính toán điện áp đầu ra (Vo).
Trong trường hợp này, điện áp đầu ra giảm khi bán kính uốn cong tăng lên.
Ví dụ, với nguồn cấp 5V và một trở kháng kéo xuống 47K, khi cảm biến thẳng (0°), trở kháng tương đối thấp (khoảng 25k). Điều này tạo ra điện áp đầu ra như sau:
Khi uốn cong đến giới hạn (90°), trở kháng tăng lên khoảng 100K. Kết quả là, điện áp đầu ra trở thành:
Sơ đồ đấu nối cảm biến uốn cong Flex Sensor với Arduino
Đấu nối một cảm biến uốn cong (Flex Sensor) với Arduino rất đơn giản.
Bạn cần đấu một trở kháng kéo xuống 47kΩ nối tiếp với Flex Sensor để tạo thành mạch chia áp. Đầu vào ADC A0 của Arduino được nối ở điểm giao của điện trở và cảm biến uốn cong.
Code cảm biến uốn cong Flex Sensor
Đoạn code trên có chức năng đọc giá trị từ cảm biến uốn cong (flex sensor), tính toán giá trị điện áp và trở kháng tương ứng, sau đó ước tính góc uốn của cảm biến và hiển thị kết quả trên Serial Monitor.
const int flexPin = A0; // Pin connected to voltage divider output // Change these constants according to your project's design const float VCC = 5; // voltage at Ardunio 5V line const float R_DIV = 47000.0; // resistor used to create a voltage divider const float flatResistance = 25000.0; // resistance when flat const float bendResistance = 100000.0; // resistance at 90 deg void setup() { Serial.begin(9600); pinMode(flexPin, INPUT); } void loop() { // Read the ADC, and calculate voltage and resistance from it int ADCflex = analogRead(flexPin); float Vflex = ADCflex * VCC / 1023.0; float Rflex = R_DIV * (VCC / Vflex - 1.0); Serial.println("Resistance: " + String(Rflex) + " ohms"); // Use the calculated resistance to estimate the sensor's bend angle: float angle = map(Rflex, flatResistance, bendResistance, 0, 90.0); Serial.println("Bend: " + String(angle) + " degrees"); Serial.println(); delay(500); }
Giải thích Code
Bắt đầu chương trình, khai báo chân Arduino mà cảm biến uốn cong (Plex Sensor) được kết nối.
const int flexPin = A0;
Sau đó, một số hằng số được định nghĩa, bao gồm điện áp hoạt động (VCC
), trở kháng được sử dụng để tạo mạch phân áp (R_DIV
), và trở kháng của Plex Sensor ở trạng thái phẳng và uốn cong (tương ứng các hằng số flatResistance
và bendResistance
).
const float VCC = 5; const float R_DIV = 47000.0; const float flatResistance = 25000.0; const float bendResistance = 100000.0;
Trong phần setup(), các bạn thiết lập giao tiếp Serial và cấu hình chân flexPin
là INPUT.
void setup() { Serial.begin(9600); pinMode(flexPin, INPUT); }
Trong vòng lặp (loop), chúng ta bắt đầu bằng việc đọc giá trị ADC.
int ADCflex = analogRead(flexPin);
Khi Arduino chuyển đổi điện áp đầu ra Analog của cảm biến thành giá trị số, nó sẽchuyển đổi thành một số 10 bit trong khoảng từ 0 đến 1023. Do đó, để tính toán điện áp đầu ra thực tế, các bạn sử dụng công thức sau:
float Vflex = ADCflex * VCC / 1023.0;
Sau đó, trở kháng của Flex Sensor được tính toán bằng công thức dựa trên công thức của mạch phân áp và được hiển thị trên serial monitor.
float Rflex = R_DIV * (VCC / Vflex - 1.0); Serial.println("Resistance: " + String(Rflex) + " ohms");
Tiếp theo, các bạn sử dụng trở kháng đã tính toán để ước tính góc uốn cong của cảm biến. Để làm điều này, chúng ta sử dụng hàm map()
tích hợp trong IDE.
Hàm map()
chuyển đổi giá trị trở kháng của cảm biến thành góc uốn tương ứng. Khi chúng ta gọi map(Rflex, flatResistance, bendResistance, 0, 90.0)
, giá trị của flatResistance được chuyển đổi thành 0°, giá trị của bendResistance được chuyển đổi thành 90°, và các giá trị nằm giữa được chuyển đổi thành các giá trị tương ứng.
float angle = map(Rflex, flatResistance, bendResistance, 0, 90.0); Serial.println("Bend: " + String(angle) + " degrees"); Serial.println();