Làm thế nào để giao tiếp Loadcell với Arduino? Làm thế nào để chế tạo cân điện tử dùng Arduino cho riêng bạn? Hôm nay, trong bài viết này, dientuviet.com sẽ giúp bạn tìm hiểu cách giao tiếp giữa Loadcell với Arduino và cuối cùng là tạo ra một cân điện tử để cân trọng lượng của một vật và hiển thị lên màn hình LCD. Cân điện tử được thiết kế trong bài hướng dẫn này có thể cân được trọng lượng lên đến 50kg (tùy thuộc vào cảm biến lực sử dụng) một cách chính xác và hiệu quả.
Linh kiện cần thiết cho cân điện tử
Số thứ tự | Tên linh kiện | Số lượng |
1 | Arduino Uno | 1 |
2 | Màn hình LCD 16×2 | 1 |
3 | Load cell | 1 |
4 | Module HX711 | 1 |
5 | Biến trở 10kΩ | 1 |
6 | Nút nhấn | 1 |
7 | Dây nối |
Loadcell là gì?
Loadcell còn được gọi là cảm biến tải trọng hay cảm biến lực là một bộ chuyển đổi được sử dụng để tạo ra một tín hiệu điện có độ lớn tỷ lệ thuận với lực hoặc trọng lượng được đo.
Cảm biến này sử dụng phương pháp cơ bản để đo độ giãn dài hoặc độ dịch chuyển. Phương pháp này sử dụng một máy đo biến dạng cung cấp sự thay đổi về điện trở tương ứng với độ giãn dài hoặc độ dịch chuyển của thước đo. Cảm biến lực này là máy đo biến dạng kiểu điện trở. Cảm biến lực hiện có trên thị trường được làm từ hợp kim nhôm vì nó có nhiều ưu điểm khác nhau như trọng lượng nhẹ, chính xác hơn, chống gỉ …. Cảm biến lực là máy đo biến dạng và hoạt động như cầu Wheatstone.
Phép đo biến dạng bằng cảm biến lực giúp duy trì tính toàn vẹn của thiết bị chịu áp lực, bảo vệ người và thiết bị gần đó.
Xem thêm: Giới thiệu cảm biến tải trọng Loadcell
Module HX711
Tín hiệu điện ở đầu ra của cảm biến lực là tín hiệu tương tự có giá trị rất nhỏ, khoảng vài mV. Vì vậy, chúng ta cần sử dụng module khuếch đại HX711 lấy tín hiệu vào từ cảm biến lực, khuếch đại và chuyển đổi tín hiệu này thành dạng tín hiệu số.
Module cảm biến cân nặng HX711 là mạch đọc giá trị cảm biến loadcell với độ phân giải 24bit và sử dụng giao thức 2 dây (SCK -Clock và DT – Data) để gửi dữ liệu cho vi điều khiển hoặc arduino.
Module HX711 có hai kênh đầu vào riêng biệt, đó là kênh A và kênh B. Kênh A là bộ khuếch đại độ lợi lập trình được có độ lợi 128 hoặc 64 trong đó kênh B là bộ khuếch đại độ lợi cố định là 32.
Cảm biến tải trọng được kết nối với module cảm biến tải trọng HX711 bằng bốn dây. Bốn dây này có màu Đỏ, Đen, Trắng và Xanh lá/Xanh dương. Màu sắc của các dây này có thể khác nhau tùy theo loại module. Hình bên dưới cho thấy kết nối giữa module HX711 với loadcell.
- Dây Đỏ được kết nối với E +
- Dây Đen được kết nối với E-
- Dây Trắng được kết nối với A-
- Dây Xanh dương được kết nối với A +
Sơ đồ mạch cân điện tử dùng Arduino và module HX711
Sơ đồ nguyên lý mạch cân điện tử dùng Arduino được thể hiện ở hình bên dưới. Như đã nói trước đó, board Arduino UNO là trái tim của mạch. Ngoài ra, mạch còn có các linh kiện khác như Loadcell, module cảm biến trọng lượng HX711, màn hình LCD 16 × 2 và một vài điện trở.
Việc kết nối mạch này khá dễ dàng và sơ đồ kết nối như hình bên trên. Các chân RS, EN, D4, D5, D6 và D7 của LCD 16×2 được kết nối với các chân số 7, 6, 5, 4, 3 và 2 của Arduino tương ứng. Các chân DT và SCK của module HX711 được kết nối trực tiếp với các chân A0 và A1 của Arduino. Kết nối giữa cảm biến lực loadcell với module HX711 đã được giải thích trước đó và cũng được cho thấy trong sơ đồ mạch bên trên.
Giải thích hoạt động của mạch cân điện tử dùng Arduino
Nguyên lý hoạt động của mạch này rất đơn giản. Đầu tiên, chúng ta phải hiệu chỉnh hệ thống này để đo trọng lượng chính xác. Khi người dùng bật nguồn, hệ thống sẽ tự động bắt đầu hiệu chỉnh. Và nếu người dùng muốn hiệu chỉnh bằng tay thì hãy nhấn nút nhấn. Khi viết chương trình chúng ta tạo một hàm void calibrate () cho mục đích hiệu chuẩn, hãy kiểm tra chương trình bên dưới.
Để hiệu chuẩn, hãy đợi hiển thị của màn hình LCD để đưa 100 gam lên cảm biến lực. Khi màn hình LCD hiển thị “Đặt 100g” thì bạn hãy đặt vật nặng 100g lên cảm biến lực và đợi trong giây lát. Sau vài giây, quá trình hiệu chuẩn sẽ kết thúc. Sau khi hiệu chuẩn, người dùng có thể đặt bất kỳ trọng lượng nào (tối đa 40kg) lên cảm biến lực và có thể thấy giá trị trên màn hình LCD tính bằng gam.
Trong mạch cân điện tử này, chúng ta đã sử dụng Arduino để điều khiển toàn bộ hoạt động. Cảm biến lực cảm nhận trọng lượng và cung cấp điện áp tương tự cho module HX711 để khuếch đại và chuyển đổi tín hiệu điện tương tự này sang tín hiệu số. Giá trị điện áp sau khi được khuếch đại được cấp cho Arduino. Bây giờ, Arduino tính toán đầu ra của HX711 và chuyển đổi đó thành giá trị trọng lượng tính bằng gam và hiển thị trên màn hình LCD. Một nút nhấn được sử dụng để hiệu chỉnh hệ thống.
Chương trình
Phần lập trình cho hệ thống này hơi phức tạp đối với người mới bắt đầu. Trong chương trình này, chúng ta không sử dụng bất kỳ thư viện nào để giao tiếp module cảm biến tải trọng HX711 với Arduino.
Trước hết, chúng ta sẽ khai báo file header cho LCD bằng lệnh #include <LiquidCrystal.h> và định nghĩa các chân cho LCD. Và đối với nút nhấn cũng vậy. Sau đó khai báo một số biến cho mục đích tính toán.
#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
#define DT A0
#define SCK A1
#define sw 9
long sample = 0;
float val = 0;
long count = 0;
Hàm bên dưới để đọc dữ liệu từ module HX711 và trả về giá trị ở đầu ra.
unsigned long readCount(void)
{
unsigned long Count;
unsigned char i;
pinMode(DT, OUTPUT);
digitalWrite(DT, HIGH);
digitalWrite(SCK, LOW);
Count = 0;
pinMode(DT, INPUT);
while (digitalRead(DT));
for (i = 0; i < 24; i++)
{
digitalWrite(SCK, HIGH);
Count = Count << 1;
digitalWrite(SCK, LOW);
if (digitalRead(DT))
Count++;
}
digitalWrite(SCK, HIGH);
Count = Count ^ 0x800000;
digitalWrite(SCK, LOW);
return (Count);
}
Sau đó, chúng ta sẽ khởi tạo LCD và đưa ra hướng dẫn đến các chân input và output trong void setup ().
void setup()
{
pinMode(SCK, OUTPUT);
pinMode(sw, INPUT_PULLUP);
lcd.begin(16, 2);
lcd.print(” Can dien tu “);
lcd.setCursor(0, 1);
lcd.print(” Dien tu viet “);
delay(1000);
lcd.clear();
calibrate();
}
Tiếp theo trong hàm void loop(), chúng ta sẽ đọc dữ liệu từ module HX711 và chuyển đổi dữ liệu này thành trọng lượng (gam) và gửi nó đến màn hình LCD.
void loop()
{
count = readCount();
int w = (((count – sample) / val) – 2 * ((count – sample) / val));
lcd.setCursor(0, 0);
lcd.print(“Trong luong do duoc”);
lcd.setCursor(0, 1);
lcd.print(w);
lcd.print(“g “);
if (digitalRead(sw) == 0)
{
val = 0;
sample = 0;
w = 0;
count = 0;
calibrate();
}
}
Chúng ta tạo một hàm để hiệu chuẩn cho cân điện tử bằng cách đặt vật nặng 100gm lên trên cảm biến lực.
{
lcd.clear();
lcd.print(“Dang hieu chuan…”);
lcd.setCursor(0, 1);
lcd.print(“Vui long doi…”);
for (int i = 0; i < 100; i++)
{
count = readCount();
sample += count;
}
sample /= 100;
lcd.clear();
lcd.print(“Dat 100g & doi”);
count = 0;
while (count < 1000)
{
count = readCount();
count = sample – count;
}
lcd.clear();
lcd.print(“Vui long doi….”);
delay(2000);
for (int i = 0; i < 100; i++)
{
count = readCount();
val += sample – count;
}
val = val / 100.0;
val = val / 100.0; // đặt trọng lượng hiệu chuẩn
lcd.clear();
}
Lời kết
Như vậy qua bài viết này, các bạn đã học về giao tiếp cơ bản giữa cảm biến lực Loadcell và module cảm biến trọng lượng HX711 với Arduino để đo trọng lượng của một vật. Chúc các bạn học hỏi thêm được nhiều kiến thức mới và tạo ra những sản phẩm có ích dựa trên bài hướng dẫn cơ bản này.