ผู้เขียนบทความ : นางสาวกีรตา ชูสุวรรณ COE#15
คณะวิศวกรรมศาสตร์ : สาขาวิศวกรรมคอมพิวเตอร์
วิชา : 04-513-201 การโปรแกรมคอมพิวเตอร์ชั้นสูง 1/2566
1.ความเป็นมาและความสำคัญของปัญหา
ปัจจุบันเทคโนโลยีของประเทศไทย มีจำนวนประชากรที่ออกกำลังและรักสุขภาพเป็นอย่างมากแต่มีส่วนน้อยที่ไม่ออกกำลังกายและมักป่วยอยู่บ่อยๆ เราจึงทำเครื่องชั่งน้ำหนักวัดส่วนสูงดิจิตอล โดยทั่วไปแล้วเครื่องชั่งน้ำหนักวัดส่วนสูงดิจิตอลทำงานโดยใช้เทคโนโลยีเซ็นเซอร์ที่วัดความยาวหรือระยะทาง สามารถวัดส่วนสูงได้อย่างรวดเร็วและแม่นยำมากขึ้น นอกจากนี้เครื่องชั่งน้ำหนักวัดส่วนสูงดิจิตอลยังมีการแสดงผลผ่านหน้าจอดิจิตอลที่อ่านง่ายและรายละเอียดเพิ่มขึ้น เครื่องชั่งน้ำหนักวัดส่วนสูงดิจิตอลได้รับการพัฒนาและปรับปรุงตลอดกาลและเป็นอุปกรณ์ที่สำคัญในหลายแบบงานที่ต้องการวัดส่วนสูง เช่น การวัดส่วนสูงเด็ก การตรวจสุขภาพ และการควบคุมน้ำหนักตัวเองภายในบ้านและหน่วยงานต่าง ๆ
2.วัตถุประสงค์
2.1.เพื่อศึกษาและพัฒนาการที่มีประสิทธิภาพมากขึ้น
2.2.เพื่อพัฒนารูปแบบของเครื่องชั่งน้ำหนักวัดส่วนสูงดิจิตอลให้มีคุณภาพ
2.3.เพื่อให้สะดวกแก่การใช้งานมากยิ่งขึ้น
3. ขอบเขตการทำงาน
1.สามารถชั่งน้ำหนักวัดส่วนสูงและเห็นผลได้ทันที
2.สามารถแสดงค่า BMI และบอกระดับค่าดัชนีมวลกายได้ทันที
4.ประโยชน์ที่คาดว่าจะได้รับ
1.การวัดน้ำหนักและส่วนสูง: โปรเจคนี้สามารถใช้ในการวัดน้ำหนักและส่วนสูงของบุคคลได้อย่างสะดวก แม้ในสถานที่ที่ไม่มีเครื่องชั่งอื่น ๆ ที่ใช้วัดส่วนสูง และแสดงค่าดัชนีมวลกายได้ทันที
2.การดูแลสุขภาพ: สามารถใช้เครื่องชั่งน้ำหนักวัดส่วนสูงในการตรวจสุขภาพส่วนตัว และติดตามการเปลี่ยนแปลงในน้ำหนักและส่วนสูงตลอดเวลา
3.การใช้งานในสถานพยาบาล: เครื่องชั่งน้ำหนักวัดส่วนสูงดิจิตอลเป็นเครื่องมาตรวัดที่มีความแม่นยำสูง สามารถใช้ในโรงพยาบาลและคลินิกเพื่อการวินิจฉัยและรักษาผู้ป่วย
5.ความรู้ที่เกี่ยวข้อง
โค้ดเริ่มต้นด้วยการ Include ตัวของเซนเซอร์ต่างๆ ใน Library จำเป็นต้องโหลดไว้ใน Library เพราะจำเป็นต้องเรียกใช้
#include <Arduino.h>
#include "HX711.h"
#include "soc/rtc.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
5.1 การกำหนดค่าคงที่ โค้ดกำหนดค่าคงที่ของ โหลดเซลล์และอัลตร้าโซนิค มีดังนี้
#define TRIG_PIN 18
#define ECHO_PIN 5
#define LOADCELL_DOUT_PIN 23
#define LOADCELL_SCK_PIN 4
HX711 scale;
int reading;
int lastReading;
float duration_us, distance_cm;
int tall = 203;
int heightCm;
int level;
// REPLACE WITH YOUR CALIBRATION FACTOR
#define CALIBRATION_FACTOR 27.419
float calculateBMI(float weight, float heightCm) {
float heightM = heightCm / 100.0;
float bmi = weight / (heightM * heightM);
return bmi;
5.2 โค้ดการคำนวณค่า BMI ของน้ำหนักส่วนสูง
void loop() {
const float cal = 0.001;
if (scale.wait_ready_timeout(200)) {
reading = round(scale.get_units());
float weight = reading * cal;
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
duration_us = pulseIn(ECHO_PIN, HIGH);
distance_cm = 0.017 * duration_us;
heightCm = tall - (duration_us * 0.034 / 2);
float bmi = calculateBMI(weight, heightCm);
if (bmi < 18.5) {
level = 1; // Underweight
} else if (bmi >= 18.5 && bmi <= 24.9) {
level = 2; // Normal weight
} else if (bmi >= 25 && bmi <= 29.9) {
level = 3; // Overweight
} else {
level = 4; // Obesity
}
5.3 โค้ดที่แสดงค่าไปยัง LCD มีดังนี้
Serial.print("Weight: ");
Serial.print(weight, 1);
Serial.println(" kg");
lcd.setCursor(0, 0);
lcd.print("Weight: ");
lcd.setCursor(10, 0);
lcd.print(weight, 1);
lcd.setCursor(14, 0);
lcd.print("kg");
lcd.setCursor(0, 1);
lcd.print("HIGHT :");
lcd.setCursor(11, 1);
lcd.print(heightCm);
lcd.setCursor(14, 1);
lcd.print("cm");
lcd.setCursor(0, 2);
lcd.print("BMI :");
lcd.setCursor(10, 2);
lcd.print( bmi,1);
lcd.setCursor(0, 3);
lcd.print("LEVEL : ");
lcd.setCursor(7, 3);
lcd.print(level);
if (level==1) {
lcd.print(" Underweight");
} else if (level==2) {
lcd.print(" Normal ");
} else if (level==3) {
lcd.print(" Overweight");
} else {
lcd.print(" Obesity ");
}
5.4 รวมการทำงานของโค้ดแบบแปลงโค้ดเป็น PYTHON
import RPi.GPIO as GPIO
import time
TRIG_PIN = 18
ECHO_PIN = 5
LOADCELL_DOUT_PIN = 23
LOADCELL_SCK_PIN = 4
CALIBRATION_FACTOR = 27.419
tall = 203
GPIO.setmode(GPIO.BCM)
GPIO.setup(TRIG_PIN, GPIO.OUT)
GPIO.setup(ECHO_PIN, GPIO.IN)
def calculate_bmi(weight, height_cm):
height_m = height_cm / 100.0
bmi = weight / (height_m * height_m)
return bmi
def setup():
print("Initializing the scale")
GPIO.setup(TRIG_PIN, GPIO.OUT)
GPIO.setup(ECHO_PIN, GPIO.IN)
GPIO.setup(LOADCELL_DOUT_PIN, GPIO.IN)
GPIO.setup(LOADCELL_SCK_PIN, GPIO.OUT)
GPIO.output(TRIG_PIN, False)
time.sleep(2)
def loop():
duration_us = 0
GPIO.output(TRIG_PIN, True)
time.sleep(0.00001)
GPIO.output(TRIG_PIN, False)
while GPIO.input(ECHO_PIN) == 0:
pulse_start = time.time()
while GPIO.input(ECHO_PIN) == 1:
pulse_end = time.time()
duration = pulse_end - pulse_start
duration_us = duration * 1000000
distance_cm = duration_us * 0.034 / 2
height_cm = tall - distance_cm
reading = round(0) # Replace 0 with your weight reading logic
weight = reading * 0.001
bmi = calculate_bmi(weight, height_cm)
level = 0
if bmi < 18.5:
level = 1 # Underweight
elif 18.5 <= bmi <= 24.9:
level = 2 # Normal weight
elif 25 <= bmi <= 29.9:
level = 3 # Overweight
else:
level = 4 # Obesity
print("Weight: {:.1f} kg".format(weight))
print("Height: {} cm".format(height_cm))
print("BMI: {:.1f}".format(bmi))
print("Level: {}".format(level))
time.sleep(2.5)
if _name_ == "_main_":
setup()
try:
while True:
loop()
except KeyboardInterrupt:
GPIO.cleanup()
5.5 Load cell ทำหน้าที่อ่านค่าน้ำหนัก และ แรงกดทับของสิ่งของ
5.6 HX711 ทำหน้าที่อ่านค่า และส่งค่าไปยัง ESP32
5.7 Ultrasonic sensor ทำหน้าที่วัดระยะทางหรือค่าส่วนสูง และส่งค่าไปยัง ESP32
6.หลักการทำงาน
Diagram ของระบบการทำงาน
วิธีการใช้งาน และการทดลองจริง
ขึ้นยืนบนฐานชั่งและยืนตัวตรงอย่างนิ่งที่สุด เพื่อให้เซนเซอร์ทำงานออกมาได้ค่าคงที่มากที่สุด
ผลการทดลองที่ได้
7. สรุปผลและข้อเสนอแนะ
• จากการทดลองทั้งหมด เมื่อขึ้นชั่งน้ำหนักและวัดส่วนสูง ค่าที่แสดงผ่านจอ LCD ทำงานได้อย่างสมบูรณ์แบบ แต่ค่ามีความคลาดเคลื่อนเล็กน้อย เพียง 1-2% เท่านั้น
• Load cell ทำงานได้อย่างถูกต้อง
•Ultrasonic ตรวจจับระยะได้ถูกต้อง
• LCD แสดงผลได้อย่างจัดเจน และเคลื่อนไหวตลอดเวลา
ข้อเสนอแนะ
- ประยุกต์ชิ้นงานอุปกรณ์ให้มีความมั่นคงกว่านี้
- เพิ่มฟังก์ชั่นการแจ้งเตือนผ่านไลน์
- เพิ่มการแสกนคิวอาร์โค้ดเพื่อบันทึกข้อมูล
8. อ้างอิง
https://www.princess-it-foundation.org/project/wp-
https://www.cybertice.com/article/312/
https://th.cytron.io/tutorial/height-measurement-using-microbit-and-ultrasonic-simple-for-beginners
9. วิดิโอการทำงานของเครื่องชั่งน้ำหนักวัดส่วนสูงดิจิตอล