Chế tạo cân điện tử bằng cảm biến trọng lượng (Loadcell) với Arduino

Chế tạo cân điện tử bằng cảm biến trọng lượng (Loadcell) với Arduino

Bạn đang có một ý tưởng chế tạo cân điện tử sử dụng cảm biến trọng lượng (Loadcell) và Arduino. Thì bài hướng dẫn này dành cho bạn, với việc kết hợp giữa cảm biến Loadcell và module chuyển đổi ADC HX711, các bạn có thể đo chính xác trọng lượng của các đồ vật. Qua đó để trực quan hơn, mình sẽ sử dụng một màn hình LCD 16×2 I2C để hiển thị các thông số đo được.

Để tạo động lực cho Team Arduino KIT ra nhiều bài viết chất lượng hơn, các bạn có thể ủng hộ mình bằng cách Donate qua MoMo, Ngân hàng, Paypal…Nhấn vào link bên dưới nhé.

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

TÊN LINH KIỆN SỐ LƯỢNG NƠI BÁN
Arduino Nano 1 Shopee | Cytron
Cảm biến trọng lượng Loadcell 5kg 1 Shopee | Cytron
Mạch chuyển đổi ADC 24-bit LoadCell HX711 1 Shopee | Cytron
Màn hình LCD 16×2 1 Shopee | Cytron
Module I2C Arduino 1 Shopee | Cytron
Dây cắm 10-20 Shopee | Cytron
Breadboard 1 Shopee | Cytron

Tổng quan về cảm biến trọng lượng

Cảm biến LoadCell

Cảm biến trọng lượng, hay còn gọi là LoadCell, là cảm biến được sử dụng để đo lực tác động lên một đối tượng. Nó thường được sử dụng để đo lường trọng lượng hoặc lực kéo, và được áp dụng trong nhiều lĩnh vực khác nhau như cân điện tử, thiết bị y tế, tự động hóa công nghiệp, và nghiên cứu khoa học.

Mạch Chuyển Đổi ADC 24bit Loadcell HX711

Mạch chuyển đổi ADC 24-bit LoadCell HX711 là một module được sử dụng để kết nối và đọc giá trị từ các cảm biến trọng lượng (LoadCell) thông qua giao tiếp truyền thông. HX711 là một IC chuyển đổi analog-to-digital có độ phân giải cao, được thiết kế đặc biệt để đọc giá trị trọng lượng từ LoadCell một cách chính xác và ổn định.

Mạch HX711 có khả năng chuyển đổi tín hiệu analog từ LoadCell thành tín hiệu kỹ thuật số dễ dàng xử lý bằng vi điều khiển hoặc các vi mạch logic khác. Nó sử dụng phương pháp chia mức áp dựa trên nguyên tắc cầu Wheatstone để đo giá trị trọng lượng. Tín hiệu đọc được từ HX711 có độ phân giải cao lên đến 24-bit, cho phép đo lường chính xác và chi tiết của trọng lượng.

Sơ đồ đấu nối cảm biến trọng lượng với Arduino

Sơ đồ đấu nối Arduino Nano với LoadCell HX711:

Arduino LoadCell HX711
5V VCC
GND GND
D4 DT
D5 SCK

Sơ đồ đấu nối Arduino Nano với màn hình LCD 16×2 I2C:

Arduino Màn hình LCD 16×2 I2C
5V VCC
GND GND
A4/SDA SDA
A5/SCL SCL

Code cảm biến trọng lượng

Đoạn code bên dưới cho phép Arduino đọc giá trị trọng lượng từ cảm biến LoadCell thông qua module HX711 và hiển thị kết quả lên màn hình LCD 16×2 I2C. Nó cũng có tích hợp chức năng cân bù (tare) và kiểm tra giới hạn trọng lượng.

//Arduino Digital Weight Scale HX711 Load Cell Module
#include <HX711_ADC.h> // https://github.com/olkal/HX711_ADC
#include <Wire.h>
#include <LiquidCrystal_I2C.h> // LiquidCrystal_I2C library
HX711_ADC LoadCell(4, 5); // dt pin, sck pin
LiquidCrystal_I2C lcd(0x27, 16, 2); // LCD HEX address 0x27
int taree = 6;
int a = 0;
float b = 0;

void setup() {
  pinMode (taree, INPUT_PULLUP);
  LoadCell.begin(); // start connection to HX711
  LoadCell.start(1000); // load cells gets 1000ms of time to stabilize

  /////////////////////////////////////
  LoadCell.setCalFactor(375); // Calibarate your LOAD CELL with 100g weight, and change the value according to readings
  /////////////////////////////////////
  
  lcd.begin(); // begins connection to the LCD module
  lcd.backlight(); // turns on the backlight
  lcd.setCursor(1, 0); // set cursor to first row
  lcd.print("Digital Scale "); // print out to LCD
  lcd.setCursor(0, 1); // set cursor to first row
  lcd.print(" 5KG MAX LOAD "); // print out to LCD
delay(3000);
lcd.clear();
}
void loop() { 
  lcd.setCursor(1, 0); // set cursor to first row
  lcd.print("Digital Scale "); // print out to LCD 
  LoadCell.update(); // retrieves data from the load cell
  float i = LoadCell.getData(); // get output value
 if (i<0)
 {
  i = i * (-1);
  lcd.setCursor(0, 1);
  lcd.print("-");
   lcd.setCursor(8, 1);
  lcd.print("-");
 }
 else
 {
   lcd.setCursor(0, 1);
  lcd.print(" ");
   lcd.setCursor(8, 1);
  lcd.print(" ");
 }
  
  lcd.setCursor(1, 1); // set cursor to secon row
  lcd.print(i, 1); // print out the retrieved value to the second row
  lcd.print("g ");
  float z = i/28.3495;
  lcd.setCursor(9, 1);
  lcd.print(z, 2);
  lcd.print("oz ");

  if (i>=5000)
  {
    i=0;
  lcd.setCursor(0, 0); // set cursor to secon row
  lcd.print("  Over Loaded   "); 
  delay(200);
  }
  if (digitalRead (taree) == LOW)
  {
    lcd.setCursor(0, 1); // set cursor to secon row
    lcd.print("   Taring...    ");
    LoadCell.start(1000);
    lcd.setCursor(0, 1);
    lcd.print("                ");
  }
}

Giải thích Code

//Arduino Digital Weight Scale HX711 Load Cell Module
#include <HX711_ADC.h> // https://github.com/olkal/HX711_ADC
#include <Wire.h>
#include <LiquidCrystal_I2C.h> // LiquidCrystal_I2C library

HX711_ADC.h: Thư viện để làm việc với module HX711.

Wire.h: Thư viện I2C cho việc giao tiếp với màn hình LCD 16×2.

LiquidCrystal_I2C.h: Thư viện để điều khiển màn hình LCD I2C.

HX711_ADC LoadCell(4, 5); // dt pin, sck pin
LiquidCrystal_I2C lcd(0x27, 16, 2); // LCD HEX address 0x27

HX711_ADC LoadCell(4, 5): Khởi tạo đối tượng LoadCell để tương tác với module HX711. Tham số 4 và 5 là các chân kết nối DT (data) và SCK (clock) của HX711.

LiquidCrystal_I2C lcd(0x27, 16, 2): Khởi tạo đối tượng lcd để điều khiển màn hình LCD I2C. Tham số 0x27 (hoặc 0x3F) là địa chỉ I2C của màn hình, 16 và 2 là số cột và số hàng của màn hình.

void setup() {
  pinMode (taree, INPUT_PULLUP);
  LoadCell.begin(); // start connection to HX711
  LoadCell.start(1000); // load cells gets 1000ms of time to stabilize

  /////////////////////////////////////
  LoadCell.setCalFactor(375); // Calibarate your LOAD CELL with 100g weight, and change the value according to readings
  /////////////////////////////////////
  
  lcd.begin(); // begins connection to the LCD module
  lcd.backlight(); // turns on the backlight
  lcd.setCursor(1, 0); // set cursor to first row
  lcd.print("Digital Scale "); // print out to LCD
  lcd.setCursor(0, 1); // set cursor to first row
  lcd.print(" 5KG MAX LOAD "); // print out to LCD
delay(3000);
lcd.clear();
}

Thiết lập chân taree (nút cân bù) là INPUT_PULLUP.

Bắt đầu kết nối với module HX711 (LoadCell.begin()) và đợi 1000ms để LoadCell ổn định (LoadCell.start(1000)).

Thiết lập hệ số hiệu chuẩn (LoadCell.setCalFactor(375)). Hệ số này phụ thuộc vào calibarate của LoadCell và có thể thay đổi tùy theo đọc giá trị.

Khởi tạo kết nối với màn hình LCD (lcd.begin()) và bật đèn nền (lcd.backlight()).

In ra màn hình LCD 16×2 thông báo về thiết bị và trọng lượng tối đa có thể đo.

Delay 3 giây và xóa màn hình LCD.

void loop() { 
  lcd.setCursor(1, 0); // set cursor to first row
  lcd.print("Digital Scale "); // print out to LCD 
  LoadCell.update(); // retrieves data from the load cell
  float i = LoadCell.getData(); // get output value
 if (i<0)
 {
  i = i * (-1);
  lcd.setCursor(0, 1);
  lcd.print("-");
   lcd.setCursor(8, 1);
  lcd.print("-");
 }
 else
 {
   lcd.setCursor(0, 1);
  lcd.print(" ");
   lcd.setCursor(8, 1);
  lcd.print(" ");
 }
  
  lcd.setCursor(1, 1); // set cursor to secon row
  lcd.print(i, 1); // print out the retrieved value to the second row
  lcd.print("g ");
  float z = i/28.3495;
  lcd.setCursor(9, 1);
  lcd.print(z, 2);
  lcd.print("oz ");

  if (i>=5000)
  {
    i=0;
  lcd.setCursor(0, 0); // set cursor to secon row
  lcd.print("  Over Loaded   "); 
  delay(200);
  }
  if (digitalRead (taree) == LOW)
  {
    lcd.setCursor(0, 1); // set cursor to secon row
    lcd.print("   Taring...    ");
    LoadCell.start(1000);
    lcd.setCursor(0, 1);
    lcd.print("                ");
  }
}

In ra màn hình LCD thông tin về thiết bị.

Cập nhật giá trị từ LoadCell (LoadCell.update()) và lưu giá trị trong biến i.

Kiểm tra và xử lý nếu giá trị là số âm, in dấu âm trên LCD 16×2.

In giá trị đọc được từ LoadCell lên màn hình LCD I2C.

Tính toán giá trị z (đơn vị ounce) từ giá trị i (đơn vị gram) và hiển thị lên màn hình LCD.

Kiểm tra nếu giá trị i vượt quá giới hạn 5000g, đặt i về 0 và hiển thị thông báo “Over Loaded” lên màn hình LCD.

Kiểm tra nút taree (nút cân bù), nếu được nhấn, hiển thị thông báo “Taring…” lên màn hình LCD, thực hiện lại quá trình taring và xóa thông báo sau khi hoàn thành.

Thư viện HX711 ADC

Khung in 3D cân điện tử

Khung của cân điện tử này các bạn có thể tải các File in 3D ở đây:

Bài viết liên quan

Subscribe
Notify of
guest

0 Comments
Inline Feedbacks
View all comments