Đo trọng lượng Arduino sử dụng cảm biến lực và mô-đun HX711

Đo trọng lượng Arduino sử dụng cảm biến lực và mô-đun HX711

Hôm nay chúng ta sẽ xây dựng một máy cân Arduino bằng cách kết nối cảm biến lực và cảm biến trọng lượng HX711 với Arduino.

Hôm nay chúng ta sẽ xây dựng một máy cân Arduino, bằng cách kết nối Load Cell và Cảm biến trọng lượng HX711 với Arduino. Chúng ta đã thấy máy cân ở nhiều cửa hàng, nơi máy hiển thị trọng lượng chỉ bằng cách đặt một vật phẩm lên bệ cân. Vì vậy, ở đây chúng ta đang xây dựng cùng một Máy cân bằng cách sử dụng Arduino và Cảm biến lực, có khả năng đo lên đến 40kg. Giới hạn này có thể được tăng thêm bằng cách sử dụng Cảm biến lực có công suất cao hơn.

Thành phần chính cần thiết để chế tạo cân Arduino này là một cảm biến có thể chuyển đổi trọng lượng thành tín hiệu điện tương đương. Cảm biến này được gọi là cảm biến lực, vì vậy trong dự án này, chúng ta sẽ sử dụng cảm biến lực này làm cảm biến trọng lượng Arduino của mình.

Các thành phần cần thiết để chế tạo Cân Arduino:

  • Arduino Uno
  • Cảm biến lực (40kg)
  • Mô-đun khuếch đại cảm biến lực HX711
  • Màn hình LCD 16x2
  • Dây kết nối
  • Cáp USB
  • Bảng mạch
  • Bu lông đai ốc, Khung và đế

Cảm biến lực và Mô-đun cảm biến trọng lượng HX711:

Cảm biến lực là một bộ chuyển đổi biến đổi lực hoặc áp suất thành đầu ra điện. Độ lớn của đầu ra điện này tỷ lệ thuận với lực được tác dụng. Cảm biến lực có một đồng hồ đo ứng suất, biến dạng khi có áp suất tác dụng vào. Sau đó, đồng hồ đo ứng suất tạo ra tín hiệu điện khi biến dạng vì điện trở hiệu dụng của nó thay đổi khi biến dạng. Một cảm biến lực thường bao gồm bốn cảm biến ứng suất trong cấu hình cầu Wheatstone. Cảm biến lực có nhiều loại khác nhau như 5kg, 10kg, 100kg và hơn thế nữa, ở đây chúng tôi sử dụng cảm biến lực, có thể nặng tới 40kg.

Bây giờ các tín hiệu điện được tạo ra bởi Load cell có giá trị vài milivôn, vì vậy chúng cần được khuếch đại thêm bởi một số bộ khuếch đại và do đó Cảm biến cân HX711 xuất hiện. Mô-đun cảm biến cân HX711 có chip HX711, là bộ chuyển đổi A/D có độ chính xác cao 24. HX711 có hai kênh đầu vào tín hiệu tương tự và chúng ta có thể đạt được độ khuếch đại lên tới 128 bằng cách lập trình các kênh này. Vì vậy, mô-đun HX711 khuếch đại đầu ra điện thấp của Load cell và sau đó tín hiệu được khuếch đại và chuyển đổi tín hiệu số này được đưa vào Arduino để tính trọng lượng.

Cảm biến lực được kết nối với Bộ khuếch đại cảm biến lực HX711 bằng bốn dây. Bốn dây này là Đỏ, Đen, Trắng và Xanh lục/Xanh lam. Có thể có một chút khác biệt về màu sắc của dây từ mô-đun này sang mô-đun khác. Dưới đây là chi tiết kết nối và sơ đồ:

  • 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 LÁ được kết nối với A+

Cố định cảm biến lực với bệ và đế:

Bước này là tùy chọn và bạn có thể trực tiếp đặt các quả cân lên Cảm biến lực mà không cần Nền tảng và có thể chỉ cần kẹp nó mà không cần cố định bằng bất kỳ đế nào, nhưng tốt hơn là gắn một nền tảng để đặt những thứ lớn lên đó và cố định nó trên một Đế để nó đứng yên. Vì vậy, ở đây chúng ta cần tạo một khung hoặc nền tảng để đặt những thứ để đo trọng lượng . Một đế cũng cần thiết để cố định cảm biến lực lên trên nó bằng cách sử dụng đai ốc và bu lông. Ở đây chúng ta đã sử dụng các tông cứng làm khung để đặt các thứ lên trên nó và một tấm ván gỗ làm Đế. Bây giờ hãy thực hiện các kết nối như trong sơ đồ mạch và bạn đã sẵn sàng.

Giải thích về mạch điện:

Kết nối cho dự án này rất dễ dàng và sơ đồ được đưa ra bên dưới. Các chân LCD 16x2 RS, EN, d4, d5, d6 và d7 được kết nối với các chân số 8, 9, 10, 11, 12 và 13 của Arduino tương ứng. Các chân DT và SCK của Mô-đun HX711 được kết nối trực tiếp với các chân A0 và A1 của Arduino. Các kết nối cảm biến lực với mô-đun HX711 đã được giải thích trước đó và cũng được hiển thị trong sơ đồ mạch bên dưới.

Giải thích làm việc:

Nguyên lý hoạt động của dự án Đo trọng lượng Arduino này rất dễ. Trước khi đi vào chi tiết, trước tiên, chúng ta phải hiệu chuẩn 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 chuẩn. Và nếu người dùng muốn hiệu chuẩn thủ công thì hãy nhấn nút nhấn. Chúng tôi đã tạo một hàm void calibrate() cho mục đích hiệu chuẩn, hãy kiểm tra mã bên dưới.

Để hiệu chuẩn , hãy đợi màn hình LCD chỉ báo đặt 100 gram lên cảm biến lực như trong hình bên dưới. Khi màn hình LCD hiển thị “put 100g” thì đặt quả cân 100g lên cảm biến lực và đợi. Sau vài giây, quá trình hiệu chuẩn sẽ hoàn tất. Sau khi hiệu chuẩn, người dùng có thể đặt bất kỳ quả cân nào (tối đa 40kg) lên cảm biến lực và có thể nhận được giá trị trên màn hình LCD tính bằng gram.

Trong dự án này, chúng tôi đã sử dụng Arduino để điều khiển toàn bộ quá trình. Cảm biến tải trọng cảm nhận trọng lượng và cung cấp điện áp tương tự điện cho Mô-đun khuếch đại tải HX711 . HX711 là ADC 24 bit, khuếch đại và chuyển đổi kỹ thuật số đầu ra của cảm biến tải trọng. Sau đó, giá trị khuếch đại này được đưa vào 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 LCD. Một nút nhấn được sử dụng để hiệu chuẩn hệ thống. Chúng tôi đã viết một chương trình Arduino cho toàn bộ quá trình, hãy kiểm tra Mã và Video demo ở cuối hướng dẫn này.

Mã cân Arduino:

Phần lập trình của dự án này hơi phức tạp đối với người mới bắt đầu. Trong dự án này, chúng tôi không sử dụng bất kỳ thư viện nào để giao tiếp cảm biến tải HX711 với Arduino . Chúng tôi chỉ làm theo bảng dữ liệu của HX711 và ghi chú ứng dụng. Mặc dù có một số thư viện hiện có cho mục đích này, nhưng bạn chỉ cần đưa thư viện đó vào và bạn có thể lấy trọng lượng bằng một dòng mã.

Trước hết, chúng tôi đã bao gồm một tệp tiêu đề cho LCD và xác định các chân cho tệp đó. Và cho cả nút nhấn nữa. Sau đó khai báo một số biến cho mục đích tính toán.

#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 10, 11, 12, 13);

#define DT A0
#define SCK A1
#define sw 2

long sample=0;
float val=0;
long count=0;

Sau đó, chúng tôi đã tạo hàm bên dưới để đọc dữ liệu từ mô-đun HX711 và trả về đầu ra của nó.

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 đã khởi tạo LCD và đưa ra hướng dẫn cho các chân vào và ra trong void setup().

void setup()
{
  Serial.begin(9600);
  pinMode(SCK, OUTPUT);
  pinMode(sw, INPUT_PULLUP);
  lcd.begin(16, 2);
  lcd.print("    Weight ");
  lcd.setCursor(0,1);
  lcd.print(" Measurement ");
  delay(1000);
  lcd.clear();
  calibrate();
}

Tiếp theo trong hàm void loop() , chúng ta đọ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 LCD.

void loop()
{
  count= readCount();
  int w=(((count-sample)/val)-2*((count-sample)/val));
  Serial.print("weight:");
  Serial.print((int)w);
  Serial.println("g");
  lcd.setCursor(0,0);
  lcd.print("Weight            ");
  lcd.setCursor(0,1);
  lcd.print(w);
  lcd.print("g             ");

  if(digitalRead(sw)==0)
  {
    val=0;
    sample=0;
    w=0;
    count=0;
    calibrate();
  }
}

Trước đó, chúng tôi đã tạo ra một chức năng hiệu chuẩn trong đó chúng tôi hiệu chuẩn hệ thống bằng cách đặt quả cân 100gm lên cảm biến lực.

void calibrate()
{
    lcd.clear();
  lcd.print("Calibrating...");
  lcd.setCursor(0,1);
  lcd.print("Please Wait...");
  for(int i=0;i<100;i++)
  {
    count=readCount();
    sample+=count;
    Serial.println(count);
  }
  ..... ....
  ..... .....

Vì vậy, ở đây chúng ta đã học về Giao diện cơ bản của Cảm biến lực và Cảm biến trọng lượng HX11 với Arduino để đo trọng lượng.

Mã dự án hoàn chỉnh

#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 10, 11, 12, 13);
#define DT A0
#define SCK A1
#define sw 2
long sample=0;
float val=0;
long count=0;
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);
}
void setup()
{
  Serial.begin(9600);
  pinMode(SCK, OUTPUT);
  pinMode(sw, INPUT_PULLUP);
  lcd.begin(16, 2);
  lcd.print("    Weight ");
  lcd.setCursor(0,1);
  lcd.print(" Measurement ");
  delay(1000);
  lcd.clear();
  calibrate();
}
void loop()
{
  count= readCount();
  int w=(((count-sample)/val)-2*((count-sample)/val));
  Serial.print("weight:");
  Serial.print((int)w);
  Serial.println("g");
  lcd.setCursor(0,0);
  lcd.print("Weight            ");
  lcd.setCursor(0,1);
  lcd.print(w);
  lcd.print("g             ");
  if(digitalRead(sw)==0)
  {
    val=0;
    sample=0;
    w=0;
    count=0;
    calibrate();
  }
}
void calibrate()
{
    lcd.clear();
  lcd.print("Calibrating...");
  lcd.setCursor(0,1);
  lcd.print("Please Wait...");
  for(int i=0;i<100;i++)
  {
    count=readCount();
    sample+=count;
    Serial.println(count);
  }
  sample/=100;
  Serial.print("Avg:");
  Serial.println(sample);
  lcd.clear();
  lcd.print("Put 100g & wait");
  count=0;
  while(count<1000)
  {
    count=readCount();
    count=sample-count;
    Serial.println(count);
  }
  lcd.clear();
  lcd.print("Please Wait....");
  delay(2000);
  for(int i=0;i<100;i++)
  {
    count=readCount();
    val+=sample-count;
    Serial.println(sample-count);
  }
  val=val/100.0;
  val=val/100.0;        // put here your calibrating weight
  lcd.clear();
}

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.

Win a Raspberry Pi!

Answer 5 questions for your chance to win!
Question 1

What color is the sky?

Tìm kiếm bằng danh mục

Chọn danh mục