เครื่องชั่งน้ำหนักวัดส่วนสูงดิจิตอล

ผู้เขียนบทความ : นางสาวกีรตา ชูสุวรรณ 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. วิดิโอการทำงานของเครื่องชั่งน้ำหนักวัดส่วนสูงดิจิตอ

You may also like...

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *