ผู้เริ่มต้น
สร้างเครื่องชั่งน้ำหนักอาหารดิจิทัล
เซ็นเซอร์จอแสดงผล
โปรเจกต์โหลดเซลล์คลาสสิกสำหรับผู้เริ่มต้น: ชั่งน้ำหนักของจริงแล้วดูตัวเลขที่แน่นอนบนหน้าจอ ซึ่งเป็นเทคโนโลยีการตรวจจับแบบเดียวกับที่อยู่เบื้องหลังเครื่องชั่งน้ำหนักในครัวแบบดิจิทัลจริง
รวมชิ้นส่วนจริง 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()`
แผนภาพการต่อสาย
โค้ดเริ่มต้น
#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);
}
ไม่แน่ใจขั้นตอนไหน?
ถามเรา