Load cell bar with HX711 module and OLED weight readout on a kitchen counter

ผู้เริ่มต้น

สร้างเครื่องชั่งน้ำหนักอาหารดิจิทัล

เซ็นเซอร์จอแสดงผล

โปรเจกต์โหลดเซลล์คลาสสิกสำหรับผู้เริ่มต้น: ชั่งน้ำหนักของจริงแล้วดูตัวเลขที่แน่นอนบนหน้าจอ ซึ่งเป็นเทคโนโลยีการตรวจจับแบบเดียวกับที่อยู่เบื้องหลังเครื่องชั่งน้ำหนักในครัวแบบดิจิทัลจริง

รวมชิ้นส่วนจริง 3 รายการ

ราคารวมชุดนี้: 1,485.00 ฿

ยังไม่รวมส่วนลดคำสั่งซื้อที่คุณอาจได้รับตอนชำระเงิน

สิ่งที่คุณต้องใช้

เป้าหมายของโครงการ

โครงการนี้สร้างเครื่องชั่งดิจิทัลจริง: วางสิ่งของบนโหลดเซลล์และดูค่าการอ่านน้ำหนักจริงปรากฏบนหน้าจอเป็นกรัม ซึ่งจะอัปเดตแบบเรียลไทม์ เป็นโปรเจ็กต์เริ่มต้นที่มีประโยชน์อย่างแท้จริง ไม่ใช่แค่การสาธิต

ตัวควบคุมทำอะไร

ตัวควบคุมจะอ่านเอาต์พุตดิจิทัลของเครื่องขยายเสียงอย่างต่อเนื่อง แปลงค่าดิบนั้นให้เป็นน้ำหนักจริงโดยใช้ปัจจัยการปรับเทียบที่ตั้งค่าไว้ครั้งเดียวระหว่างการตั้งค่า และอัปเดตการแสดงผลด้วยค่าที่อ่านได้ปัจจุบัน

โหลดเซลล์ทำอะไร

โหลดเซลล์เป็นคานโลหะขนาดเล็กที่โค้งงอเพียงเล็กน้อยมาก ซึ่งปกติไม่สามารถวัดได้ภายใต้ภาระ ซึ่งจะเปลี่ยนความต้านทานไฟฟ้าเล็กน้อยเมื่อโค้งงอ สัญญาณนั้นเล็กเกินไปและมีสัญญาณรบกวนมากเกินไปสำหรับตัวควบคุมที่จะอ่านโดยตรง

เครื่องขยายเสียง HX711 ทำอะไร

นี่คือส่วนที่ทำให้โหลดเซลล์ใช้งานได้จริง: มันจะขยายสัญญาณเล็กๆ นั้นและแปลงเป็นค่าดิจิทัลที่สะอาดตาที่ตัวควบคุมสามารถอ่านได้ผ่านอินเทอร์เฟซแบบ 2 สายที่เรียบง่าย ซึ่งเป็นงานอนาล็อกที่มีความแม่นยำที่ทำได้ยากมากหากทำตั้งแต่เริ่มต้น

หน้าจอแสดงผลทำอะไร

แสดงค่าการอ่านน้ำหนักปัจจุบันแบบเรียลไทม์ อัปเดตอย่างต่อเนื่องเมื่อมีการเพิ่มหรือนำสิ่งของออกจากเครื่องชั่ง

การปรับเทียบ

โหลดเซลล์แต่ละตัวจำเป็นต้องมีการปรับเทียบเพียงครั้งเดียว: อ่านค่าเอาต์พุตดิบโดยไม่มีสิ่งของใดๆ บนเครื่องชั่งเพื่อหาค่าศูนย์ จากนั้นวางน้ำหนักที่ทราบ ซึ่งเป็นวัตถุที่คุณสามารถตรวจสอบได้บนเครื่องชั่งอื่น และบันทึกค่าที่อ่านได้ดิบ อัตราส่วนระหว่างตัวเลขสองตัวนั้นจะกลายเป็นปัจจัยการปรับเทียบที่ใช้สำหรับการอ่านในอนาคตทุกครั้ง ขั้นตอนนี้สำคัญ การข้ามขั้นตอนนี้หมายความว่าเครื่องชั่งจะแสดงตัวเลข แต่ไม่ใช่ตัวเลขที่ถูกต้อง

การทดสอบและการแก้ไขปัญหา

  • ค่าที่อ่านได้จะเปลี่ยนแปลงไปตามกาลเวลาโดยไม่มีอะไรอยู่บนเครื่องชั่ง ปล่อยให้โหลดเซลล์อุ่นเครื่องและปรับตัวเป็นเวลาหนึ่งนาทีหลังจากเปิดเครื่องก่อนที่จะทำการปรับเทียบ และรีเซ็ตค่าศูนย์เป็นครั้งคราว
  • ค่าการอ่านน้ำหนักสอดคล้องกันแต่ผิดพลาดอย่างเห็นได้ชัดด้วยอัตราส่วนคงที่ ซึ่งเกือบจะเป็นปัญหาของปัจจัยการปรับเทียบเสมอ ให้ทำขั้นตอนน้ำหนักที่ทราบซ้ำอย่างระมัดระวัง
  • ไม่มีค่าที่อ่านได้เลย ให้ตรวจสอบการเดินสายไปยังบอร์ด HX711 โดยเฉพาะ และยืนยันว่าสายไฟสี่เส้นของโหลดเซลล์เชื่อมต่ออยู่ในลำดับที่ถูกต้อง ซึ่งเป็นคู่ที่สลับกันบ่อยในโมดูลเหล่านี้

การอัปเกรดเสริม

เพิ่มปุ่ม tare โดยใช้ปุ่มสำรองใดๆ ที่มีอยู่แล้วในกล่องอะไหล่ เพื่อให้เครื่องชั่งสามารถตั้งค่าศูนย์เองได้โดยมีภาชนะอยู่บนนั้น เหมือนกับเครื่องชั่งในครัวจริง

การเดินสาย

  • HX711 VCC → ESP32-C3 3.3V
  • HX711 GND → ESP32-C3 GND
  • HX711 DT → ESP32-C3 GPIO3
  • HX711 SCK → ESP32-C3 GPIO4
  • โหลดเซลล์ 4 สาย (E+/E-/A+/A-) → ช่องเสียบสกรูของโมดูล HX711 — โหลดเซลล์เชื่อมต่อกับโมดูล HX711 ไม่ได้เชื่อมต่อโดยตรงกับ ESP32
  • ปุ่ม Tare → ESP32-C3 GPIO5 และ GND (INPUT_PULLUP)
  • OLED VCC → ESP32-C3 3.3V
  • OLED GND → ESP32-C3 GND
  • OLED SDA → ESP32-C3 GPIO8 (I2C เริ่มต้น)
  • OLED SCL → ESP32-C3 GPIO9 (I2C เริ่มต้น)

ไม่มีปัจจัยการปรับเทียบที่เป็นสากล — โหลดเซลล์ + HX711 แต่ละคู่นั้นแตกต่างกัน กำหนดค่าของคุณโดยการตั้งค่า tare โดยไม่มีอะไรอยู่บนเครื่องชั่ง วางน้ำหนักที่ทราบ และหารค่าที่อ่านได้ดิบด้วยน้ำหนักที่ทราบนั้นเป็นกรัม ค่าตัวยึดตำแหน่งในโค้ดเป็นเพียงจุดเริ่มต้นที่จะแทนที่ ตรวจสอบให้แน่ใจว่าเครื่องชั่งว่างเปล่าเมื่อเปิดเครื่อง เนื่องจาก `tare()` ทำงานใน `setup()`

แผนภาพการต่อสาย

VCC → 3.3V GND DT → GPIO3 SCK → GPIO4 GND VCC → 3.3V GND SDA → GPIO8 SCL → GPIO9 ESP32-C3 HX711 Tare button OLED Load cell 4-wire HX711 module's screw term…

โค้ดเริ่มต้น

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <HX711.h>

// --- Pin definitions: adjust to match your ESP32-C3 SuperMini board if different ---
#define HX711_DT   3
#define HX711_SCK  4
#define TARE_BTN   5   // optional push button to GND, uses INPUT_PULLUP
#define OLED_SDA   8   // ESP32-C3 default I2C SDA
#define OLED_SCL   9   // ESP32-C3 default I2C SCL

#define SCREEN_WIDTH  128
#define SCREEN_HEIGHT 64
#define OLED_ADDR     0x3C

// --- Calibration ---
// You must derive this yourself: upload with tare() only, confirm ~0 with
// nothing on the scale, then place a known weight (e.g. a 100g reference
// weight) and note the raw get_units() reading.
// CALIBRATION_FACTOR = (raw reading with known weight) / (known weight in grams).
// There is no universal value - every load cell + HX711 pair is different.
float CALIBRATION_FACTOR = 420.0; // placeholder - replace with YOUR derived value

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
HX711 scale;

void setup() {
  Serial.begin(115200);
  pinMode(TARE_BTN, INPUT_PULLUP);

  Wire.begin(OLED_SDA, OLED_SCL);
  if (!display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR)) {
    Serial.println("OLED init failed");
    while (true) delay(1000);
  }

  scale.begin(HX711_DT, HX711_SCK);
  scale.set_scale(CALIBRATION_FACTOR);
  scale.tare(); // zero the scale on boot - make sure it's empty when powering on

  display.clearDisplay();
  display.setTextColor(SSD1306_WHITE);
  display.setTextSize(1);
  display.setCursor(0, 0);
  display.print("Scale ready");
  display.display();
}

void loop() {
  if (digitalRead(TARE_BTN) == LOW) {
    scale.tare();
    delay(300); // simple debounce
  }

  if (scale.is_ready()) {
    float weight = scale.get_units(5); // average of 5 readings
    if (weight < 0.5 && weight > -0.5) weight = 0; // clean up noise near zero

    display.clearDisplay();
    display.setTextSize(2);
    display.setCursor(0, 20);
    display.print(weight, 1);
    display.print(" g");
    display.display();
  } else {
    Serial.println("HX711 not found - check wiring");
  }

  delay(200);
}

ไม่แน่ใจขั้นตอนไหน? ถามเรา