Cách dùng ESP32 Load Cell và HX711 module làm cân kỹ thuật số

Trong bài hướng dẫn chủ đề ESP32 Load Cell này, chúng ta sẽ cùng tìm hiểu cách tạo một chiếc cân điện tử thông qua ESP32, HX711 và Load Cell. IoTZone sẽ hướng dẫn bạn chi tiết cách kết nối, lập trình cân điện tử và sau đó hiệu chỉnh cân, cùng với thực hành một ví dụ đơn giản để đo trọng lượng của vật thể. Bạn cũng sẽ tìm hiểu cách hiển thị giá trị cân được lên màn hình LCD và dùng nút nhấn để cân.

Giới thiệu Load Cells

Load Cell có thể chuyển đổi lực thành tín hiệu điện có thể đo được. Tín hiệu điện này tỷ lệ thuận với lực tác dụng lên cảm biến. Hiện nay, có khá nhiều loại Load Cell khác nhau như cảm biến đo thủy lực, cảm biến đo độ biến dạng và cảm biến đo khí nén. Trong hướng dẫn này, chúng ta sẽ dùng Load Cell đo độ biến dạng.

Giới thiệu ESP32 Load Cell

Load Cell này gồm 1 thanh kim loại, trên đó có các cảm biến để đo lực tác động hoặc sự biến dạng của một vật thể. Điện trở của máy đo biến dạng sẽ thay đổi khi có một lực tác động lên vật, dẫn đến sự biến dạng của vật (lúc này là thanh kim loại). Lực tác dụng xuất hiện làm điện trở thay đổi, chúng ta có thể dựa vào đó để tính cân nặng của vật tác động.

Các dây dẫn của cảm biến Load Cell:

  • Dây đỏ: VCC (E+)
  • Dây đen: GND (E-)
  • Dây trắng: Đầu ra – (A-)
  • Dây xanh lá: Đầu ra + (A+)

Giới thiệu mạch khuếch đại HX711

Bộ khuếch đại HX711 là bảng mạch cho phép bạn dễ dàng đọc các giá trị từ Load Cell để đo trọng lượng. Bạn chỉ cần nối dây module HX711 với Load Cell, HX711 giao tiếp với vi điều khiển bằng giao diện hai dây (Đồng hồ và Dữ liệu).

Bạn cần hàn các chân GND, SCK, DT và VCC để kết nối HX711 với ESP32:

Cách dùng ESP32 Load Cell với HX711

Kết nối ESP32 Load Cell và HX711

Để làm dự án ESP32 Load Cell, bạn hãy kết nối như sau:

  • Chân DT của HX711 với GPIO 16
  • Chân CLK của HX711 với GPIO 4

Dưới đây là bảng thông tin chi tiết:

Load cellHX711HX711ESP32
Màu đỏ(E+)E+GNDGND
Đen(VÀ-)E-DTGPIO 16
Trắng(MỘT-)A-SCKGPIO 4
Màu xanh lá(A+)A+VCC3,3V
Sơ đồ kết nối ESP32 Load Cell với HX711
Sơ đồ kết nối ESP32 Load Cell với HX711

Cài đặt thư viện EPS32 HX711

Để sử dụng Load Cell ESP32, chúng ta cần dùng thư viện hỗ trợ để lấy số đo từ Load Cell bằng mạch khuếch đại HX711. Có nhiều thư viện khác nhau, trong bài này IoTZone hướng dẫn bạn dùng thư viện HX711 library by bodge.

Bạn hãy mở Arduino IDE, mở Sketch >> Include Library >> Manage Libraries >> Tìm kiếm tên “HX711 Arduino Library” và cài đặt thư viện do Bogdan Necula phát triển. Sau đó, khởi động lại Arduino IDE.

Hiệu chỉnh cân ESP32 Load Cell

Bây giờ, chúng ta đã kết nối ESP32 Load Cell và HX711. Bạn nên thiết lập cân của mình (2 tấm nối 2 đầu đối diện nhau trên Load Cell).

Trước khi đo trọng lượng vật thể, bạn cần hiệu chỉnh cảm biến Load Cell của mình bằng cách lấy hệ số tiêu chuẩn. Vì hệ số tiêu chuẩn mỗi người mỗi khác, nên bạn cần thực hiện theo hướng dẫn bên dưới.

Bước 1: Chuẩn bị một vật có cân nặng mà bạn đã biết, ví dụ như 1 cốc nước nặng 300 gram.

Bước 2: Upload đoạn code sau vào ESP32 của bạn:

#include <Arduino.h>
#include "soc/rtc.h"
#include "HX711.h"

// HX711 circuit wiring
const int LOADCELL_DOUT_PIN = 16;
const int LOADCELL_SCK_PIN = 4;

HX711 scale;

void setup() {
  Serial.begin(115200);
  rtc_clk_cpu_freq_set(RTC_CPU_FREQ_80M);
  scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN);
}

void loop() {

  if (scale.is_ready()) {
    scale.set_scale();    
    Serial.println("Tare... remove any weights from the scale.");
    delay(5000);
    scale.tare();
    Serial.println("Tare done...");
    Serial.print("Place a known weight on the scale...");
    delay(5000);
    long reading = scale.get_units(10);
    Serial.print("Result: ");
    Serial.println(reading);
  } 
  else {
    Serial.println("HX711 not found.");
  }
  delay(1000);
}

Bước 3: Mở màn hình Serial ở tốc độ 115200 và khởi động lại ESP32.

Bước 4: Thực hiện theo hướng dẫn trên Serial: Bỏ vật nặng ra khỏi cân. Sau đó, đặt một vật có khối lượng đã biết lên và chờ đợi giá trị xuất hiện.

Bước 5: Tính hệ số hiệu chuẩn bằng công thức sau:

Hệ số hiệu chuẩn = (giá trị xuất hiện ở bước 4) / cân nặng đã biết

Hiệu chỉnh ESP32 Load Cell theo màn hình Serial
Hiệu chỉnh ESP32 Load Cell theo màn hình Serial

Như màn hình trên, giá trị IoTZone nhận được là -141449 => Hệ số hiệu chỉnh trong trường hợp này là -141449/300 = -471,497.

Làm cân điện tử với Load Cell ESP32

Khi đã biết hệ số hiệu chuẩn, bạn có thể dùng cân điện tử ESP32 Load Cell để cân các vật thể. Để đảm bảo chính xác, bạn có thể bắt đầu với các vật đã biết trọng lượng và lặp đi lặp lại, cho đến khi có được hệ số hiệu chuẩn chính xác nhất.

Dưới đây là code làm cân điện tử với ESP32 Load Cell, và lưu ý là bạn hãy chèn hệ số hiệu chỉnh vào trước khi nạp code lên ESP32 nhé! Đây là code mẫu có sẵn đi kèm với thư viện mà bạn đã cài ở bước trên:

#include <Arduino.h>
#include "HX711.h"
#include "soc/rtc.h"

// HX711 circuit wiring
const int LOADCELL_DOUT_PIN = 16;
const int LOADCELL_SCK_PIN = 4;

HX711 scale;

void setup() {
  Serial.begin(115200);
  rtc_clk_cpu_freq_set(RTC_CPU_FREQ_80M);
  Serial.println("HX711 Demo");

  Serial.println("Initializing the scale");

  scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN);

  Serial.println("Before setting up the scale:");
  Serial.print("read: \t\t");
  Serial.println(scale.read());      // print a raw reading from the ADC

  Serial.print("read average: \t\t");
  Serial.println(scale.read_average(20));   // print the average of 20 readings from the ADC

  Serial.print("get value: \t\t");
  Serial.println(scale.get_value(5));   // print the average of 5 readings from the ADC minus the tare weight (not set yet)

  Serial.print("get units: \t\t");
  Serial.println(scale.get_units(5), 1);  // print the average of 5 readings from the ADC minus tare weight (not set) divided
            // by the SCALE parameter (not set yet)
            
  scale.set_scale(INSERT YOUR CALIBRATION FACTOR);
  //scale.set_scale(-471.497);                      // this value is obtained by calibrating the scale with known weights; see the README for details
  scale.tare();               // reset the scale to 0

  Serial.println("After setting up the scale:");

  Serial.print("read: \t\t");
  Serial.println(scale.read());                 // print a raw reading from the ADC

  Serial.print("read average: \t\t");
  Serial.println(scale.read_average(20));       // print the average of 20 readings from the ADC

  Serial.print("get value: \t\t");
  Serial.println(scale.get_value(5));   // print the average of 5 readings from the ADC minus the tare weight, set with tare()

  Serial.print("get units: \t\t");
  Serial.println(scale.get_units(5), 1);        // print the average of 5 readings from the ADC minus tare weight, divided
            // by the SCALE parameter set with set_scale

  Serial.println("Readings:");
}

void loop() {
  Serial.print("one reading:\t");
  Serial.print(scale.get_units(), 1);
  Serial.print("\t| average:\t");
  Serial.println(scale.get_units(10), 5);

  scale.power_down();             // put the ADC in sleep mode
  delay(5000);
  scale.power_up();
}

Lời kết

Trên đây là hướng dẫn tại cân điện tử với ESP32 Load Cell đơn giản. Về phần hiển thị trên màn hình LCD và dùng thêm nút nhấn, mình sẽ bổ sung ở bài viết phần 2 nhé! Hẹn gặp lại các bạn.

Ngoài ra, mình đã hướng dẫn ESP32 với khá nhiều cảm biến khác, bạn có thể xem qua tại Blog hướng dẫn ESP32.

IoTZone – Chuyên cung cấp thiết bị điện tử & tài liệu cho Makers

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *