ระบบตรวจวัดแผ่นดินไหว (Earthquake measurement)

ผู้เขียนบทความ : นายอุกฤษฏ์ พราหมณ์เอม และนายเจษฎากร จะนะจินา COE. #15

คณะวิศวกรรมศาสตร์ : สาขาวิศวกรรมคอมพิวเตอร์

วิชา : 04-513-201 การโปรแกรมคอมพิวเตอร์ขั้นสูง 1/2566

1. ความเป็นมา

แผ่นดินไหวเป็นหนึ่งในเหตุการณ์ที่เกิดขึ้นตามธรรมชาติ เนื่องจากการเคลื่อนตัวของแผ่นเปลือกโลก ซึ่งเกิดจากความร้อน ที่แกนกลางของโลก การเคลื่อนตัวดังกล่าวส่งผลให้ชนกับแผ่น เปลือกโลกอีกแผ่นหนึ่ง และยังทําให้เกิดรอยเลื่อนระหว่างแผ่น เปลือกโลกอีกด้วย แผ่นดินไหวเป็นเรื่องปกติมากในประเทศที่ ต้องเผชิญโดยตรงกับแผ่นเปลือกโลก เช่น อินโดนีเซีย ญี่ปุ่น ชิลี จีน และฟิลิปปินส์ระดับความเสียหายที่เกิดจากแผ่นดินไหว สามารถวัดได้จากระดับความรุนแรงของความเสียหาย

ดังนั้น บทความนี้ เราจึงเสนอการออกแบบระบบการวัด ระดับความรุนแรงของความเสียหายโดยใช้ไมโครคอนโทรลเลอร์ ที่ใช้ ESP32 ซึ่งสามารถตรวจสอบ บันทึก และส่งการแจ้งเตือน ล่วงหน้าแบบเรียลไทม์เมื่อความเสียหายจากแผ่นดินไหวรุนแรง โดยอาศัย Internet of Things (IoT) . การออกแบบระบบโดย ใช้เซ็นเซอร์ความเร่งและโพเทนชิออมิเตอร์เป็นเครื่องตรวจจับ การสั่นสะเทือนที่ติดอยู่กับบอร์ดที่ใช้ ESP32 ระบบนี้ยังใช้ Line Notify เพื่อส่งข้อมูลเซ็นเซอร์ไปยังผู้ใช้

2. วัตถุประสงค์

  1. เพื่อให้เห็นภาพรวมและเข้าใจในกระบวนการและแผนที่การเคลื่อนไหวของแผ่นดิน
  2. เพื่อป้องกันและลดอันตรายที่อาจเกิดขึ้นจากแผ่นดินไหวในอนาคต
  3. เพื่อการเตือนภัยและรักษาความปลอดภัย

3. ขอบเขต

  1. ระบบสามารถตรวจวัดแผ่นดินไหวในพื้นที่ที่กำหนดได้
  2. ป้องกันและลดการสูญเสียได้
  3. จัดเก็บข้อมูลเพื่อให้สามารถทำการคาดการณ์แผ่นดินไหวได้

4. ประโยชน์ที่คาดว่าจะได้รับ

  1. ระบบนี้จะช่วยให้ทุกคนสามารถรับมือกับเหตุการณ์แผ่นดินไหว
  2. ช่วยลดความสูญเสียของผู้คน
  3. ช่วยในการวางแผนการแก้ไขหรือการป้องกันการเสียหายจากแผ่นดินไหว

5. ความรู้ที่เกี่ยวข้อง

  • บอร์ด ESP32 เป็น Micro Controller ที่รองรับการเชื่อมต่อ WiFi , Bluetooth – BLE ในตัว ภาษาที่ใช้ในการพัฒนาโปรแกรมคือ ภาษา C หรือ Python ภาษา Python ต้องทำการอัพเกรดเฟิร์มแวร์ให้รองรับ Python การพัฒนาโปรแกรมขึ้นอยู่กับผู้ที่พัฒนา โปรแกรม IDE ที่ใช้พัฒนาคือ Arduino IDE หรือ Visual Studio สำหรับ Visual Studio จำเป็นต้องติดตั้ง Plugin Espressif IDF หรือ PlatformIO IDE และต้อง Enable (Arduino) ESP32 รองรับการเชื่อมต่อ WiFi และ BLE หรือ Bluetooth ได้โดยไม่ต้องซื้อโมดูลเพิ่มเติม บอร์ด ESP32 เองยังมีการทำงานที่แบ่งเป็น 2 Core และ Pin I/O เลือกฟั่งชั่นการทำงานได้ใน Pin เดียวกัน เช่น การแปลง Analog to Digital หรือ Digital to Analog การเชื่อมต่อ SD Card Camera PWD RTC และ Touch เป็นต้น
  • เซ็นเซอร์ MPU6050 คือโมดูลวัดความเฉื่อยหรือ IMU (Inertial Measurment Units) ที่มี 6 องศาอิสระ (DoF) ต้องขอบคุณเซ็นเซอร์ชนิด 3 แกน accelerometer และไจโรสโคปแบบ 3 แกนที่ใช้ในการทำงาน MPU6050 นี้สามารถทราบได้ว่าวัตถุที่บรรจุอยู่ในตำแหน่งใดเพื่อใช้ใน การใช้งาน การนำทาง, goniometry, การป้องกันการสั่นไหว, การควบคุมท่าทาง ฯลฯ สามารถตรวจจับการสั่นสะเทือนที่เกิดขึ้นได้ จากนั้นจะคํานวณการสั่นสะเทือนตามแกนคาร์ทีเซียน (X, Y, Z) หากข้อมูลการสั่นสะเทือนที่ตรวจพบเกินระดับ เครื่องจะส่งข้อความแจ้งเตือนไปยังแอปพลิเคชันไคลเอ็นต์มือถือ Line ของผู้ใช้
  • Buzzer คือ ลำโพงแบบแม่เหล็กหรือ แบบเปียโซที่มีวงจรกำเนิดความถี่ (oscillator ) อยู่ภายในตัว ใช้ไฟเลี้ยง 3.3 – 5V สามารถสร้างเสียงเตือนหรือส่งสัญญาณที่เป็นรูปแบบต่างๆ
  • Line Notify เป็นบริการรับการแจ้งเตือนจากบัญชีทางการในรูปแบบ API สำหรับโปรแกรมเมอร์ นักพัฒนาซอฟต์แวร์ นำไปใช้ต่อยอดพัฒนาโปรเจคต่างๆ เชื่อมต่อกับเว็บเซอร์วิส เช่น Github IFTTT และ Mackerl สร้างการแจ้งเตือนแบบข้อความไปยังกลุ่มหรือบัญชีส่วนตัวได้โดยไม่เสียค่าใช้จ่าย ยกเว้นกรณีที่เชื่อมต่อกับเว็บเซอร์วิสอื่นๆ ซึ่งอาจมีบางบริการที่ใช้ได้เฉพาะบัญชีแบบเสียค่าบริการเท่านั้น

  • Arduino IDE เป็น Software ของทางผู้สร้าง Arduino ได้จัดทําขึ้นมาไว้ใช้เป็น Editor สําหรับเขียนโปรแกรม (ด้วยภาษา C++) Arduino IDE ยังสามารถ Compile code และ Upload โปรแกรมลง Arduino Board ได้

6. ผลการดำเนินงาน

  • Diagram การทำงานของระบบ
  • การทำงานของระบบ

ระบบของเราใช้ไมโครคอนโทรลเลอร์ที่ใช้ ESP32 และเซ็นเซอร์มาตรความเร่ง MPU6050 ในการส่งข้อมูลแบบเรียลไทม์เราใช้โปรโตคอล Line เพื่อให้ผู้ใช้ได้รับข้อความเตือนล่วงหน้า เซ็นเซอร์ MPU6050 ทําหน้าที่เป็นเครื่องตรวจจับการสั่นสะเทือนทําให้สามารถตรวจจับการสั่นสะเทือนที่เกิดขึ้นได้ จากนั้นจะคํานวณการสั่นสะเทือนตามแกนคาร์ทีเซียน (X, Y, Z) หากข้อมูลการสั่นสะเทือนที่ตรวจพบเกินระดับ จะส่งข้อความแจ้งเตือนไปยังแอปพลิเคชันไคลเอ็นต์มือถือ Line ของผู้ใช้ และจะมีเสียงแจ้งเตือนผ่าน Buzzer อีกด้วย

  • การทดสอบ

ส่วนนี้จะกล่าวถึงการทดสอบโดยแบ่งการทดลองออกเป็น 2 ส่วนดังนี้

  1. การทดสอบการทำงานของเซ็นเซอร์ตามที่ต้องการทดลองการทำงานของระบบ ESP32 โดยการอ่านค่าเซ็นเซอร์

ค่าปกติที่เซ็นเซอร์อ่านได้หากไม่มีการสั่นไหว

ค่าที่เซ็นเซอร์อ่านได้หากมีการสั่นไหว

  1. โดยทดสอบการสั่นไหวของเซ็นเซอร์ โดนการเคลื่อนที่เซ็นเซอร์ให้ค่า x, y, z เปลี่ยนแปลงจนเกินค่าที่ตั้งไว้จากนั้น จะมีการส่งข้อความยังผู้ใช้ เพื่อให้มาเช็คระบบ

เมื่อมีการสั่นไหวของเซ็นเซอร์

เมื่อเซ็นเซอร์ไม่มีการสั่นไหว

  • Code ที่ใช้ในการทำงาน
#include <Wire.h>
#include <MPU6050_tockn.h>
#include <TridentTD_LineNotify.h>
#include <WiFi.h>

class MPU6050Sensor {
private:
    MPU6050 mpu;
    int minval;
    int maxval;

public:
    MPU6050Sensor(int minVal, int maxVal) : minval(minVal), maxval(maxVal) {
        Wire.begin();
        mpu.begin();
        mpu.calcGyroOffsets(true);
    }

    bool isDangerous() {
        mpu.update();
        int gyroX = mpu.getGyroX();
        int gyroY = mpu.getGyroY();
        int gyroZ = mpu.getGyroZ();

        return (gyroX > maxval || gyroX < minval ||
                gyroY > maxval || gyroY < minval ||
                gyroZ > maxval || gyroZ < minval);
    }
};

class LineNotifier {
private:
    const char *token;

public:
    LineNotifier(const char *lineToken) : token(lineToken) {
        LINE.setToken(token);
    }

    void notifySticker(const char *message, int stickerID, int stickerPackageID) {
        LINE.notifySticker(message, stickerID, stickerPackageID);
    }
};

class Buzzer {
private:
    int pin;

public:
    Buzzer(int buzzerPin) : pin(buzzerPin) {
        pinMode(pin, OUTPUT);
    }

    void playAlertSound(int frequency, int duration) {
        tone(pin, frequency, duration);
        delay(duration);
        noTone(pin);
    }
};

class WiFiConnection {
public:
    WiFiConnection(const char *ssid, const char *password) {
        WiFi.begin(ssid, password);
        Serial.printf("WiFi connecting to %s\n", ssid);
        while (WiFi.status() != WL_CONNECTED) {
            Serial.print(".");
            delay(400);
        }
        Serial.printf("\nWiFi connected\nIP : ");
        Serial.println(WiFi.localIP());
    }
};

MPU6050Sensor sensor(-10, 10);
LineNotifier notifier("NUhCznKhU7q6ElIAuSagR7xWyu2xqneanOsVJ2RE7ur");
Buzzer buzzer(14);
WiFiConnection wifiConnection("NOTE30", "25471302");

void setup() {
    Serial.begin(115200);
}

void loop() {
    if (sensor.isDangerous()) {
        notifier.notifySticker("อัตรายให้หาที่หลบภัย!!", 11538, 51626511);
        buzzer.playAlertSound(1000, 500);
        delay(1000);
    } else {
        notifier.notifySticker("ปลอดภัยแล้ว", 6359, 11069868);
    }

    delay(1500);
}
  • วิดีโอการทำงานของระบบตรวจวัดแผ่นดินไหว

7. สรุปผลและข้อเสนอแนะ

บทความนี้มีการออกแบบระบบ สําหรับระบบตรวจวัดแผ่นดินไหว ในส่วนต่างๆของอุปกรณ์ ตรวจจับการสั่นสะเทือนทําให้สามารถตรวจจับการสั่นสะเทือนที่เกิดขึ้นได้ จากนั้นจะคํานวณการสั่นสะเทือนตามแกนคาร์ทีเซียน (X, Y, Z) ตามที่เราต้องการได้ และแจ้งเตือนเมื่อเกิดการสั่นไหวให้ผู้ใช้ได้รับรู้ได้ ว่าจะเกิดการสั่นไหวในพื้นที่นี้และมีเสียงการแจ้งเตือนควบคู่ได้ตรงตามที่ต้องการ

  • ข้อเสนอแนะ

ปรับปรุงความแม่นยําของเซ็นเซอร์ของระบบ และปรับปรุงให้พกพาอุปกรณ์ได้ง่าย เพื่อให้ระบบของเราสามารถเชื่อมต่อกับสถานที่ที่เหมาะสมต่างๆภายในอาคาร

8. อ้างอิง

ESP32 เบื้องต้น :: บทที่ 1 แนะนำ ESP32 – ArtronShop บอร์ดอิเล็กทรอนิกส์ Arduino ESP32 ESP8266 : Inspired by LnwShop.com

3-Axis MPU-6500 Gyroscope and Accelerator Sensor Replace MPU-6050 For Arduino | eBay

Keyes Small Passive Buzzer Sensor Module KY-006 in category Electronics/ATMEL, ARDUINO at Easy Technology.

Deskduino [SLQ Wiki]

You may also like...

ใส่ความเห็น

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