วันนี้เราจะสร้างเครื่องชั่ง Arduino โดยเชื่อมต่อโหลดเซลล์และเซ็นเซอร์น้ำหนัก HX711 เข้ากับ Arduino
วันนี้เราจะมาสร้างเครื่องชั่งน้ำหนัก Arduino โดยการเชื่อมต่อโหลดเซลล์และเซ็นเซอร์น้ำหนัก HX711 เข้ากับ Arduino เราเคยเห็นเครื่องชั่งน้ำหนักในร้านค้าหลายแห่ง ซึ่งเครื่องจะแสดงน้ำหนักโดยเพียงแค่วางสิ่งของบนแท่นชั่งน้ำหนัก ดังนั้น เราจึงสร้างเครื่องชั่งน้ำหนักแบบเดียวกันนี้โดยใช้ Arduino และเซ็นเซอร์โหลด ซึ่งสามารถวัดน้ำหนักได้สูงสุด 40 กก. ขีดจำกัดนี้สามารถเพิ่มได้โดยใช้เซ็นเซอร์โหลดที่มีความจุสูงขึ้น
ส่วนประกอบหลักที่จำเป็นในการสร้างเครื่องชั่ง Arduino นี้คือเซ็นเซอร์ที่สามารถแปลงน้ำหนักเป็นสัญญาณไฟฟ้าที่เทียบเท่าได้ เซ็นเซอร์นี้เรียกว่าเซ็นเซอร์แรง ดังนั้นในโครงการนี้ เราจะใช้เซ็นเซอร์แรงนี้เป็นเซ็นเซอร์น้ำหนัก Arduino
เซ็นเซอร์แรงคือตัวแปลงสัญญาณที่แปลงแรงหรือแรงดันเป็นเอาต์พุตไฟฟ้า ขนาดของเอาต์พุตไฟฟ้านี้จะแปรผันตามแรงที่กระทำ เซ็นเซอร์แรงมีเกจวัดความเค้น ซึ่งจะเสียรูปเมื่อมีแรงกด เกจวัดความเค้นจะสร้างสัญญาณไฟฟ้าเมื่อเกจวัดความเค้นเสียรูป เนื่องจากความต้านทานที่มีประสิทธิภาพจะเปลี่ยนไปเมื่อเกจวัดความเค้นเสียรูป เซ็นเซอร์แรงโดยทั่วไปประกอบด้วยเซ็นเซอร์ความเค้น 4 ตัวในโครงร่างสะพานวีตสโตน เซ็นเซอร์แรงมีความจุที่แตกต่างกัน เช่น 5 กก. 10 กก. 100 กก. และอื่นๆ ในที่นี้เราใช้เซ็นเซอร์แรง ซึ่งสามารถมีน้ำหนักได้ถึง 40 กก.
ขณะนี้สัญญาณไฟฟ้าที่สร้างโดยเซลล์โหลดมีค่าไม่กี่มิลลิโวลต์ ดังนั้นจึงจำเป็นต้องขยายสัญญาณเพิ่มเติมด้วยเครื่องขยายสัญญาณบางเครื่อง ดังนั้นเซ็นเซอร์ชั่งน้ำหนัก HX711 จึงเข้ามาแทนที่ โมดูลเซ็นเซอร์ชั่งน้ำหนัก HX711 มีชิป HX711 ซึ่งเป็นตัวแปลงสัญญาณอนาล็อก 24 แชนเนลที่มีความแม่นยำสูง HX711 มีช่องสัญญาณอินพุตแอนะล็อกสองช่อง และเราสามารถขยายสัญญาณได้สูงสุดถึง 128 แชนเนลโดยการเขียนโปรแกรมช่องสัญญาณเหล่านี้ ดังนั้น โมดูล HX711 จึงขยายเอาต์พุตแรงดันไฟต่ำของเซลล์โหลด จากนั้นสัญญาณดิจิทัลที่ขยายและแปลงแล้วนี้จะถูกส่งไปยัง Arduino เพื่อคำนวณน้ำหนัก
เซ็นเซอร์แรงเชื่อมต่อกับเครื่องขยายเสียงเซ็นเซอร์แรง HX711 ด้วยสายไฟ 4 เส้น สายไฟทั้ง 4 เส้นนี้ ได้แก่ สีแดง สีดำ สีขาว และสีเขียว/น้ำเงิน สีของสายไฟอาจแตกต่างกันเล็กน้อยจากโมดูลหนึ่งไปยังอีกโมดูลหนึ่ง ด้านล่างนี้คือรายละเอียดการเชื่อมต่อและแผนผัง:
ขั้นตอนนี้เป็นทางเลือกและคุณสามารถวางน้ำหนักบนโหลดเซลล์ได้โดยตรงโดยไม่ต้องใช้แท่นรองรับใดๆ และสามารถยึดแท่นรองรับไว้ได้โดยไม่ต้องยึดด้วยฐานใดๆ แต่จะดีกว่าหากยึดแท่นรองรับเพื่อวางสิ่งของขนาดใหญ่ไว้บนแท่นรองรับและยึดไว้กับฐานเพื่อให้ตั้งได้นิ่ง ดังนั้น ในขั้นตอนนี้ เราจะต้องทำโครงหรือแท่นรองรับเพื่อวางสิ่งของเพื่อวัดน้ำหนัก นอกจากนี้ยังต้องมีฐานรองรับเพื่อยึดโหลดเซลล์ไว้โดยใช้สลักเกลียวและน็อต ในที่นี้ เราใช้กระดาษแข็งเป็นโครงสำหรับวางสิ่งของบนแท่นรองรับ และใช้แผ่นไม้เป็นฐานรองรับ จากนั้นทำการเชื่อมต่อตามที่แสดงในแผนผังวงจร เท่านี้ก็เรียบร้อย
การเชื่อมต่อสำหรับโครงการนี้ทำได้ง่ายมาก โดยมีแผนผังแสดงไว้ด้านล่าง พิน LCD 16x2 RS, EN, d4, d5, d6 และ d7 เชื่อมต่อกับพิน 8, 9, 10, 11, 12 และ 13 ของ Arduino ตามลำดับ พิน DT และ SCK ของโมดูล HX711 เชื่อมต่อโดยตรงกับพิน A0 และ A1 ของ Arduino การเชื่อมต่อเซ็นเซอร์แรงกับโมดูล HX711 ได้รับการอธิบายไว้ก่อนหน้านี้แล้ว และยังแสดงไว้ในแผนผังวงจรด้านล่างอีกด้วย
หลักการทำงานของโปรเจ็กต์การวัดน้ำหนัก Arduino นี้ง่ายมาก ก่อนที่จะลงรายละเอียด เราต้องปรับเทียบระบบนี้ก่อนเพื่อให้วัดน้ำหนักได้อย่างแม่นยำ เมื่อผู้ใช้เปิดเครื่อง ระบบจะเริ่มปรับเทียบโดยอัตโนมัติ และหากผู้ใช้ต้องการปรับเทียบด้วยตนเอง ให้กดปุ่ม เราได้สร้างฟังก์ชัน void calibrate() สำหรับวัตถุประสงค์ในการปรับเทียบ โปรดตรวจสอบโค้ดด้านล่าง
ในการสอบเทียบ ให้รอจนกว่าหน้าจอ LCD จะระบุว่าให้วางน้ำหนัก 100 กรัมบนเซ็นเซอร์แรงตามที่แสดงในรูปด้านล่าง เมื่อหน้าจอ LCD แสดง “ใส่น้ำหนัก 100 กรัม” ให้วางน้ำหนัก 100 กรัมบนเซ็นเซอร์แรงแล้วรอสักครู่ หลังจากนั้นไม่กี่วินาที การสอบเทียบจะเสร็จสมบูรณ์ หลังจากการสอบเทียบแล้ว ผู้ใช้สามารถวางน้ำหนักใดๆ ก็ได้ (สูงสุด 40 กิโลกรัม) บนเซ็นเซอร์แรง และสามารถรับค่าบนหน้าจอ LCD เป็นกรัมได้
ในโครงการนี้ เราใช้ Arduino เพื่อควบคุมกระบวนการทั้งหมด เซ็นเซอร์โหลดจะตรวจจับน้ำหนักและจ่ายแรงดันไฟฟ้าอนาล็อกให้กับโมดูลขยายโหลด HX711 HX711 เป็น ADC 24 บิต ซึ่งขยายและแปลงเอาต์พุตของเซ็นเซอร์โหลดเป็นดิจิทัล จากนั้นค่าที่ขยายนี้จะป้อนไปยัง Arduino ตอนนี้ Arduino จะคำนวณเอาต์พุตของ HX711 และแปลงเป็นค่าน้ำหนักเป็นกรัมและแสดงบนหน้าจอ LCD ปุ่มกดใช้เพื่อปรับเทียบระบบ เราได้เขียนโปรแกรม Arduino สำหรับกระบวนการทั้งหมดแล้ว โปรดดูโค้ดและวิดีโอสาธิตที่ส่วนท้ายของบทช่วยสอนนี้
ส่วนการเขียนโปรแกรมของโปรเจ็กต์นี้ค่อนข้างซับซ้อนสำหรับผู้เริ่มต้น ในโปรเจ็กต์นี้ เราจะไม่ใช้ไลบรารีใดๆ เพื่อเชื่อมต่อเซ็นเซอร์โหลด HX711 กับ Arduino เราเพียงแค่ทำตามแผ่นข้อมูลของ HX711 และหมายเหตุการใช้งาน แม้ว่าจะมีไลบรารีบางส่วนสำหรับจุดประสงค์นี้ แต่คุณเพียงแค่ต้องรวมไลบรารีนั้นเข้าไป และคุณก็จะได้น้ำหนักด้วยโค้ดเพียงบรรทัดเดียว
ก่อนอื่น เราได้รวมไฟล์ส่วนหัวสำหรับ LCD และกำหนดพินสำหรับไฟล์นั้น และสำหรับปุ่มกดด้วย จากนั้นเราได้ประกาศตัวแปรบางตัวสำหรับวัตถุประสงค์ในการคำนวณ
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 10, 11, 12, 13);
#define DT A0
#define SCK A1
#define sw 2
long sample=0;
float val=0;
long count=0;
จากนั้นเราได้สร้างฟังก์ชันด้านล่างเพื่ออ่านข้อมูลจากโมดูล HX711 และส่งคืนเอาต์พุต
unsigned long readCount(void)
{
unsigned long Count;
unsigned char i;
pinMode(DT, OUTPUT);
digitalWrite(DT,HIGH);
digitalWrite(SCK,LOW);
Count=0;
pinMode(DT, INPUT);
while(digitalRead(DT));
for (i=0;i<24;i++)
{
digitalWrite(SCK,HIGH);
Count=Count<<1;
digitalWrite(SCK,LOW);
if(digitalRead(DT))
Count++;
}
digitalWrite(SCK,HIGH);
Count=Count^0x800000;
digitalWrite(SCK,LOW);
return(Count);
}
จากนั้นเราจึงเริ่มต้นใช้งาน LCD และให้คำแนะนำกับพินอินพุตและเอาต์พุตใน void setup()
void setup()
{
Serial.begin(9600);
pinMode(SCK, OUTPUT);
pinMode(sw, INPUT_PULLUP);
lcd.begin(16, 2);
lcd.print(" Weight ");
lcd.setCursor(0,1);
lcd.print(" Measurement ");
delay(1000);
lcd.clear();
calibrate();
}
ขั้นตอนถัดไปในฟังก์ชัน void loop() เราจะอ่านข้อมูลจากโมดูล HX711 และแปลงข้อมูลดังกล่าวให้เป็นน้ำหนัก (กรัม) และส่งไปยัง LCD
void loop()
{
count= readCount();
int w=(((count-sample)/val)-2*((count-sample)/val));
Serial.print("weight:");
Serial.print((int)w);
Serial.println("g");
lcd.setCursor(0,0);
lcd.print("Weight ");
lcd.setCursor(0,1);
lcd.print(w);
lcd.print("g ");
if(digitalRead(sw)==0)
{
val=0;
sample=0;
w=0;
count=0;
calibrate();
}
}
ก่อนหน้านี้เราได้สร้างฟังก์ชันการสอบเทียบโดยที่เราปรับเทียบระบบโดยการวางน้ำหนัก 100 กรัมบนเซ็นเซอร์แรง
void calibrate()
{
lcd.clear();
lcd.print("Calibrating...");
lcd.setCursor(0,1);
lcd.print("Please Wait...");
for(int i=0;i<100;i++)
{
count=readCount();
sample+=count;
Serial.println(count);
}
..... ....
..... .....
ดังนั้นเราได้เรียนรู้เกี่ยวกับการเชื่อมต่อพื้นฐานของเซ็นเซอร์แรง HX11 และเซ็นเซอร์น้ำหนักกับ Arduino เพื่อวัดน้ำหนัก
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 10, 11, 12, 13);
#define DT A0
#define SCK A1
#define sw 2
long sample=0;
float val=0;
long count=0;
unsigned long readCount(void)
{
unsigned long Count;
unsigned char i;
pinMode(DT, OUTPUT);
digitalWrite(DT,HIGH);
digitalWrite(SCK,LOW);
Count=0;
pinMode(DT, INPUT);
while(digitalRead(DT));
for (i=0;i<24;i++)
{
digitalWrite(SCK,HIGH);
Count=Count<<1;
digitalWrite(SCK,LOW);
if(digitalRead(DT))
Count++;
}
digitalWrite(SCK,HIGH);
Count=Count^0x800000;
digitalWrite(SCK,LOW);
return(Count);
}
void setup()
{
Serial.begin(9600);
pinMode(SCK, OUTPUT);
pinMode(sw, INPUT_PULLUP);
lcd.begin(16, 2);
lcd.print(" Weight ");
lcd.setCursor(0,1);
lcd.print(" Measurement ");
delay(1000);
lcd.clear();
calibrate();
}
void loop()
{
count= readCount();
int w=(((count-sample)/val)-2*((count-sample)/val));
Serial.print("weight:");
Serial.print((int)w);
Serial.println("g");
lcd.setCursor(0,0);
lcd.print("Weight ");
lcd.setCursor(0,1);
lcd.print(w);
lcd.print("g ");
if(digitalRead(sw)==0)
{
val=0;
sample=0;
w=0;
count=0;
calibrate();
}
}
void calibrate()
{
lcd.clear();
lcd.print("Calibrating...");
lcd.setCursor(0,1);
lcd.print("Please Wait...");
for(int i=0;i<100;i++)
{
count=readCount();
sample+=count;
Serial.println(count);
}
sample/=100;
Serial.print("Avg:");
Serial.println(sample);
lcd.clear();
lcd.print("Put 100g & wait");
count=0;
while(count<1000)
{
count=readCount();
count=sample-count;
Serial.println(count);
}
lcd.clear();
lcd.print("Please Wait....");
delay(2000);
for(int i=0;i<100;i++)
{
count=readCount();
val+=sample-count;
Serial.println(sample-count);
}
val=val/100.0;
val=val/100.0; // put here your calibrating weight
lcd.clear();
}