อยากรู้จังว่าอุปกรณ์อิเล็กทรอนิกส์พวกนี้มันหนักเท่าไหร่ เลยตัดสินใจทำเครื่องชั่งของตัวเองซะเลย :)
ก่อนจะเริ่ม ต้องลงไลบรารี่พวกนี้ก่อนนะน้อง
LiquidCrystal_PCF8574
Wire
HX711
Micro-Voltage Physics: เครื่องชั่งอิเล็กทรอนิกส์
ถ้าน้องเอาโลหะชิ้นนึงไปจิ้มที่พิน Analog ของ Arduino มันจะไม่มีอะไรเกิดขึ้นเลย แต่พอน้องวางน้ำหนัก 1 ปอนด์ลงบนแท่งอลูมิเนียม ตัวโลหะมันจะโก่งงอไปนิดเดียวแบบที่ตาเปล่ามองไม่เห็น โปรเจค เครื่องชั่งอิเล็กทรอนิกส์ นี้ใช้ สเตรนเกจ (Strain-gauges) ในการวัดการยืดหดของอะตอมระดับจิ๋วพวกนั้นเลย! เพราะว่าแรงดันไฟฟ้าที่เปลี่ยนมันน้อยมากๆ แค่ 0.0001 โวลต์ มันเลยต้องพึ่งพระเอกอย่าง HX711 24-Bit ADC มาดึงค่าพวกนั้นขึ้นมาให้เราเห็นในโลกดิจิทัล!
The HX711 24-Bit Amplifier Engine
ADC 10-bit ในตัว Arduino น่ะใช้กับงานนี้ไม่ได้เลย (มันเห็นแค่ 1024 สเตป) แต่เจ้า HX711 นี่เห็นถึง 16 ล้านสเตป!
- โหลดเซลล์ (Load Cell) ใช้สาย 4 เส้น (ส่วนใหญ่คือ สีแดง, ดำ, ขาว, เขียว) ซึ่งประกอบกันเป็นวงจรวีตสโตนบริดจ์ทางกายภาพ
- Arduino จะต่อกับ HX711 ผ่านพิน 2 ขา:
DT (Data)และSCK (Clock) - ไลบรารี่
<HX711.h>จะช่วยจัดการเรื่องการสื่อสารแบบซิงโครนัสที่โคตรจะวุ่นวายให้เรา
scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN);
scale.set_scale(2280.f); // ค่าคาลิเบรชันทางคณิตศาสตร์ที่ต้องหาให้ได้!
scale.tare(); // ลบค่าน้ำหนักตั้งต้นเป็นศูนย์!
float currentWeight = scale.get_units(10); // อ่านค่า 10 ครั้งแล้วเอามาเฉลี่ย!
ต่ออุปกรณ์ทั้งหมดตามแผนภาพวงจรเลยน้อง
Metrology Base Components
- Arduino Uno/Nano (สถาปัตยกรรมมาตรฐาน)
- HX711 Load Cell Amplifier Board (ห้ามสลับขา Data นะ โปรโตคอลมันเข้มงวดมาก)
- Aluminum Bar Load Cell (มีแบบ 1kg, 5kg, หรือ 20kg ต้องยึดมันให้แน่นระหว่างแผ่นไม้แข็งๆสองแผ่นในรูปทรง 'Z' ไม่งั้นมันไม่โก่ง ค่าที่อ่านได้จะเป็นศูนย์ตลอด!)
- I2C 16x2 LCD สำหรับแสดงผลน้ำหนักเป็นกรัมแบบละเอียดยิบ!
ส่วนโปรแกรมมิ่งนี่สำคัญมาก
1. การคาลิเบรท
Calibrating the Aluminum Physics
โหลดเซลล์ใหม่ๆ มันไม่ส่งค่าเป็น "กรัม" ออกมานะ มันส่งค่าตัวเลขดิบมั่วๆ ออกมาแบบ -845601
- ขั้นตอนการคาลิเบรท:
- น้องต้องเขียน "สเก็ตช์สำหรับคาลิเบรท" ก่อน วางน้ำหนักมาตรฐานที่รู้ค่าแน่นอน เช่น
100 กรัมลงบนเซนเซอร์ - Serial Monitor จะอ่านค่าได้ประมาณ
500000น้องก็เอา500000 / 100 = 5000 - เลข
5000นี่แหละที่จะกลายเป็นcalibration_factorค่าคงที่ทางคณิตศาสตร์ของเครื่องชั่งน้อง! ถ้าไม่มีค่านี้เป๊ะๆ เครื่องชั่งน้องจะกลายเป็นเครื่องสร้างตัวเลขสุ่ม!
ตอนคาลิเบรท ให้อัพโหลดสเก็ตช์คาลิเบรทโดยที่ยังไม่มีอะไรวางบนถาดชั่ง จากนั้นค่อยวางน้ำหนักมาตรฐานที่รู้ค่า แล้วเปิด Serial Port ขึ้นมา ปรับค่า calibration factor ขึ้นลงจนกว่าค่าที่แสดงจะตรงกับน้ำหนักที่วาง
ตัวอย่างเช่น ถ้าน้องวางน้ำหนัก 250 กรัม ตอนแรกมันอาจจะแสดงเป็น 400 กรัม หรือ 1kg ก่อนคาลิเบรท.. น้องก็ใช้ปุ่ม a, s, d, f หรือ z, x, c, v ปรับค่า calibration ไปเรื่อยๆ จนกว่ามันจะแสดง 250 กรัม จาก 400 กรัม หรือ 1kg ที่เป็นอยู่ พอได้แล้วก็จดค่า calibration factor ไว้
2. สเก็ตช์จริง
เอา calibrated value xxxxxxx ที่ได้มาใส่ในบรรทัดนี้แล้วอัพโหลดไปเลย จบ...
scale.set_scale(xxxxxxx);
3. เวลาจะรีเซ็ตค่า Tare (ชั่งน้ำหนักตั้งต้น) พี่ใช้ปุ่มกดหนึ่งปุ่ม