อุปกรณ์แจ้งเตือนเด็กหลงทาง

ผู้เขียนบทความ : กฤษณ์ จันทร์ประทีป COE#15

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

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

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

ปัจจุบันปัญหาการหายตัวของเด็กในประเทศไทยเป็นปัญหาที่ต่อเนื่อง ไม่ว่าจะเป็น เด็กผู้ชาย เด็กผู้หญิง ผู้ป่วยที่อยู่ในกระบวนการติดตาม หรือเด็กที่มีความพัฒนาล่าช้าหรือปัญญาอ่อนส่วนใหญ่ประเภทของสถานที่ที่เด็กหายไปมักจะไม่คาดคิดเช่น หน้าบ้าน หน้าโรงเรียน ตลาด

โครงการนี้มีการแก้ไขปัญหาคือการลดจำนวนเด็กที่หลงจากพ่อแม่หรือ ผู้ป่วยที่อยู่ในการติดตามและเด็กที่พัฒนาการล่าช้าโดย ESP32 และ Active Buzzer Module

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

1. เพื่อความปลอดภัยของเด็กที่หลงทางกับผู้ปกครอง : โครงการนี้สร้างมาเพื่อนความปลอดภัยของเด็กที่หลงทางกับผู้ปกครอง เมื่อเสียงจาก Buzzer ดังจะเป็นการแสดงตำแหน่งของเด็กที่หลงซึ่งเมื่อเด็กหลงทางผู้ปกครองสามารถปิด Wifi เพื่อให้ Buzzer ดังเพื่อหาตำแหน่งของเด็กได้ทันที

2. เพื่อลดจำนวนของเด็กที่หาย และหลงจากผู้ปกครอง : โครงการนี้จะช่วยให้เด็กที่หลงทางนั้นไม่จำเป็นต้องเดินไปไหนและลดการลูกลักพาตัวของเด็กด้วย

3.ขอบเขต

1. สามารถส่งข้อมูลแจ้งเตือน line notify ได้ : เมื่อผู้ปกครองเชื่อมต่อ Wifi ให้ Esp32 แล้วจะต้องมีข้อความแจ้งเตือนมายังไลน์ว่า Connected

2. สามารถระบุตำแหน่งได้ : สามารถระบุที่อยู่ที่เด็กอยู่ได้โดยเสียงของ Buzzer ได้อย่างชัดเจน

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

จำนวนเด็กที่หลงจากพ่อแม่และเด็กที่ถูกลักพาตัวนั้นน้อยลงและอุปกรณ์นี้สามารถเพิ่มความปลอดภัยให้เด็กที่หลงได้

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

1.ESP32 30-pin คือบอร์ดหรือโมดูลที่ใช้ชิพ ESP32 ซึ่งเป็นชิพคอมพิวเตอร์ที่มีความสามารถในการเชื่อมต่อแบบไร้สายและมีความหลากหลายในการให้บริการต่าง ๆ รวมถึงการเชื่อมต่อกับอุปกรณ์และเซนเซอร์ต่าง ๆ ผ่านพอร์ตต่าง ๆ ที่มีอยู่บนบอร์ดนี้

2.Active buzzer (บัซเซอร์แบบแอคทีฟ) คืออุปกรณ์ที่ใช้เป็นเสียงเตือนหรือสัญญาณเสียงในรูปแบบของความถี่ที่สูงของสัญญาณไฟฟ้าที่ได้รับการสั่งให้ทำงาน โดยไม่ต้องมีวงจรสั่งงานเสริม (driver circuit) เพิ่มเติม ในกรณีนี้, สัญญาณไฟฟ้าจะเป็นสัญญาณแบบไฟฟ้าเข็มขัด (digital signal) ที่เปลี่ยนไปตามการควบคุมของไมโครคอนโทรลเลอร์หรือบอร์ดควบคุมอื่น ๆ

#define BUZZER_PIN 21
void setup()
{
Serial.begin(115200);
pinMode(BUZZER_PIN, OUTPUT);
while (WiFi.status() != WL_CONNECTED) {
    digitalWrite(BUZZER_PIN, LOW);
    delay(500);
    digitalWrite(BUZZER_PIN, HIGH);
    Serial.println("Connecting to WiFi...");
    delay(500);
  }
}
void loop()
{
 if (WiFi.status() == WL_CONNECTED) {
    digitalWrite(BUZZER_PIN, HIGH);

    Serial.println("Connected to WiFi");
    delay(10000);
  }
if (WiFi.status() != WL_CONNECTED) {
    digitalWrite(BUZZER_PIN, LOW);

    delay(100);
    digitalWrite(BUZZER_PIN, HIGH);

    delay(100);

  }
}

บรรทัดโค๊ดในภาพ เป็นการเรียกใช้ฟังก์ชันของ active buzzer เมื่อ active buzzer ไม่ได้เชื่อม ต่อ Wifi จะส่งเสียงดังออกมาเมื่อ เชื่อมต่อ Wifi แล้วเสียงจะเงียบแล้วเมื่อ Wifi หลุด active buzzer จะส่งเสียงออกมา

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

ในภาพคือพิมพ์ใน Google ว่า line notify แล้วล็อกอิน line เมื่อล็อกอินไลน์แล้ว จะขึ้นหน้านี้มา

กดตรงชื่อไลน์ของเราตรงมุมขวา แล้วกด My page

เมื่อกด My page แล้วจะขึ้นหน้านี้

ให้กดตรงที่ Generate token เพื่อสร้าง Bot ไลน์ขึ้นมา

พิมพ์ชื่อ Bot แล้วเลือก 1-on-1 เพื่อให้ส่งแจ้งเตือนให้เราคนเดียวหรือจะกดกลุ่มไลน์เพื่อให้คนที่อยู่ในกลุ่มไลน์รู้ด้วยก็ได้เมื่อเสร็วให้กด Generate token

จะได้ Token มาให้ Copy Token ไว้เพื่อใช้ในการเขียนโปรแกรม

เมื่อสร้างแล้ว line จะแจ้งเตือนตามภาพ

#include <WiFi.h>
#include <TridentTD_LineNotify.h>
const char* ssid = "***";
const char* password = "******";
const char* lineToken = "*******";
void setup()
{
Serial.begin(115200);
 WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    digitalWrite(BUZZER_PIN, LOW);

    delay(500);
    digitalWrite(BUZZER_PIN, HIGH);

    Serial.println("Connecting to WiFi...");
    delay(500);
  }
  Serial.println("Connected to WiFi");
  LINE.setToken(lineToken);

  LINE.notify("Connecter");

}
void loop()
{
if (WiFi.status() == WL_CONNECTED) {
    digitalWrite(BUZZER_PIN, HIGH);

    Serial.println("Connected to WiFi");
    delay(10000);
  }
if (WiFi.status() != WL_CONNECTED) {
    digitalWrite(BUZZER_PIN, LOW);

    delay(100);
    digitalWrite(BUZZER_PIN, HIGH);

    delay(100);

  }
}

บรรทัดโค๊ดในภาพ เป็นการเรียกใช้ฟังก์ชัน line notify + Buzzer เพื่อส่งข้อความว่า Esp32 ได้เชื่อมต่อกับ Wifi แล้วการทำงานของโค๊ดคือ เมื่อ esp32 มี Wifi จะแจ้งเตือนไปยังไลน์ว่า Connected

4.สวิตช์กดติดปล่อยดับ (หรือ Switch On/Off) คือโมดูลที่ถูกใช้ร่วมกับ Esp32 คืออุปกรณ์ที่สามารถให้สัญญาณไฟฟ้าเปลี่ยนแปลงได้เมื่อมีการกดหรือปล่อย.

#include <WiFi.h>
#include <TridentTD_LineNotify.h>
#define BUZZER_PIN 21
#define SW_PIN 4


const char* ssid = "KKK";
const char* password = "31415926536";
const char* lineToken = "PrZVWxgd8h9AUQQoBsnYXzCCKBHjugLTXPtCkv7qKhj";
int lastState = HIGH;
int currentState;
void setup()
{
  Serial.begin(115200);

  pinMode(BUZZER_PIN, OUTPUT);
  pinMode(SW_PIN, INPUT_PULLUP);

  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    digitalWrite(BUZZER_PIN, LOW);

    delay(500);
    digitalWrite(BUZZER_PIN, HIGH);

    Serial.println("Connecting to WiFi...");
    delay(500);
  }
  Serial.println("Connected to WiFi");
  LINE.setToken(lineToken);


  LINE.notify("Connecter");

}

void loop()
{
  currentState = digitalRead(SW_PIN);
  if (lastState == HIGH && currentState == LOW) {
      LINE.notify("Connecter");
      Serial.println("กดปุ่ม");
    }
  if (WiFi.status() == WL_CONNECTED) {
    digitalWrite(BUZZER_PIN, HIGH);
    digitalWrite(Led_Green, HIGH);
    digitalWrite(Led_Red, LOW);
    Serial.println("Connected to WiFi");
    delay(10000);
  }
  if (WiFi.status() != WL_CONNECTED) {
    digitalWrite(BUZZER_PIN, LOW);


    delay(100);
    digitalWrite(BUZZER_PIN, HIGH);

    delay(100);
    Serial.println("Connecting to WiFi...");
    delay(10000);
  }
  lastState = currentState;
}

โค๊ด ปุ่มใช้เพื่อเช็คสถานะของ Esp32 ว่าเชื่อมต่อหรือไม่หากเชื่อมต่อจะแจ้งเตือนในไลน์ว่า Connected

6.LED (Light Emitting Diode) คืออุปกรณ์ที่สามารถแสดงแสงเป็นผลลัพธ์จากการให้กระแสไฟฟ้าไปผ่านมัน โดย LED มีความสามารถในการแปลงพลังงานไฟฟ้าเป็นแสงและมีการใช้งานที่หลากหลายในหลายแดนมาแล้ว โดยปกติ LED มีสีแดง สีเขียว และสีน้ำเงิน แต่ยังมี LED ที่สามารถแสดงสีอื่น ๆ ได้ รวมถึง LED ที่สามารถปรับสีได้ตามคำสั่ง (RGB LED)

#include <WiFi.h>
#include <TridentTD_LineNotify.h>
#define BUZZER_PIN 21
#define SW_PIN 4
#define Led_Green 27
#define Led_Red 26

const char* ssid = "KKK";
const char* password = "31415926536";
const char* lineToken = "PrZVWxgd8h9AUQQoBsnYXzCCKBHjugLTXPtCkv7qKhj";
int lastState = HIGH;
int currentState;
void setup()
{
  Serial.begin(115200);
  pinMode(Led_Green, OUTPUT);
  pinMode(Led_Red, OUTPUT);
  pinMode(BUZZER_PIN, OUTPUT);
  pinMode(SW_PIN, INPUT_PULLUP);

  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    digitalWrite(BUZZER_PIN, LOW);
    digitalWrite(Led_Red, LOW);
    delay(500);
    digitalWrite(BUZZER_PIN, HIGH);
    digitalWrite(Led_Red, HIGH);
    Serial.println("Connecting to WiFi...");
    delay(500);
  }
  Serial.println("Connected to WiFi");
  LINE.setToken(lineToken);
  digitalWrite(Led_Red, LOW);
  digitalWrite(Led_Green, HIGH);
  LINE.notify("Connecter");

}

void loop()
{
  currentState = digitalRead(SW_PIN);
  if (lastState == HIGH && currentState == LOW) {
      LINE.notify("Connecter");
      Serial.println("กดปุ่ม");
    }
  if (WiFi.status() == WL_CONNECTED) {
    digitalWrite(BUZZER_PIN, HIGH);
    digitalWrite(Led_Green, HIGH);
    digitalWrite(Led_Red, LOW);
    Serial.println("Connected to WiFi");
    delay(10000);
  }
  if (WiFi.status() != WL_CONNECTED) {
    digitalWrite(BUZZER_PIN, LOW);
    digitalWrite(Led_Green, LOW);
    digitalWrite(Led_Red, LOW);
    delay(100);
    digitalWrite(BUZZER_PIN, HIGH);
    digitalWrite(Led_Red, HIGH);
    delay(100);
    Serial.println("Connecting to WiFi...");
    delay(10000);
  }
  lastState = currentState;
}

โค๊ดของ Led จะเป็นอีก 1 อย่างที่บอกสถานะของ Esp32 ว่าเชื่อมต่อ Wifi หรือไม่โดยหากเมื่อไม่ได้เชื่อมต่อ LED สีแดงจะติดกระพิบแต่หากเชื่อมต่ออยู่ LED สีเขียวจะติดด้าง

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

ภาพการทำงานของโครงงานเด็กหลง

โค๊ดทั้งหมด

#include <WiFi.h>
#include <TridentTD_LineNotify.h>
#define BUZZER_PIN 21
#define SW_PIN 4
#define Led_Green 27
#define Led_Red 26

const char* ssid = "KKK";
const char* password = "31415926536";
const char* lineToken = "PrZVWxgd8h9AUQQoBsnYXzCCKBHjugLTXPtCkv7qKhj";
int lastState = HIGH;
int currentState;
void setup()
{
  Serial.begin(115200);
  pinMode(Led_Green, OUTPUT);
  pinMode(Led_Red, OUTPUT);
  pinMode(BUZZER_PIN, OUTPUT);
  pinMode(SW_PIN, INPUT_PULLUP);

  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    digitalWrite(BUZZER_PIN, LOW);
    digitalWrite(Led_Red, LOW);
    delay(500);
    digitalWrite(BUZZER_PIN, HIGH);
    digitalWrite(Led_Red, HIGH);
    Serial.println("Connecting to WiFi...");
    delay(500);
  }
  Serial.println("Connected to WiFi");
  LINE.setToken(lineToken);
  digitalWrite(Led_Red, LOW);
  digitalWrite(Led_Green, HIGH);
  LINE.notify("Connecter");

}

void loop()
{
  currentState = digitalRead(SW_PIN);
  if (lastState == HIGH && currentState == LOW) {
      LINE.notify("Connecter");
      Serial.println("กดปุ่ม");
    }
  if (WiFi.status() == WL_CONNECTED) {
    digitalWrite(BUZZER_PIN, HIGH);
    digitalWrite(Led_Green, HIGH);
    digitalWrite(Led_Red, LOW);
    Serial.println("Connected to WiFi");
    delay(10000);
  }
  if (WiFi.status() != WL_CONNECTED) {
    digitalWrite(BUZZER_PIN, LOW);
    digitalWrite(Led_Green, LOW);
    digitalWrite(Led_Red, LOW);
    delay(100);
    digitalWrite(BUZZER_PIN, HIGH);
    digitalWrite(Led_Red, HIGH);
    delay(100);
    Serial.println("Connecting to WiFi...");
    delay(10000);
  }
  lastState = currentState;
}

การทดลอง

เราจะทดลองจากการเดินทีละก้าวเพื่อเช็คระยะสัญญาณ Wifi ของ Esp32 ว่ากี่ก้าวอุปกรณ์จะทำงาน

โดยที่เราจะใส่รองเท้าในการวัดกาวเพื่อให้ง่ายต่อการคำนวณ รองเท้ามีความยาว 9.84 นิ้วหรือประมาณ 25 เซนติเมตร

วิดีโอการทดลองวัดระยะการทำงานของอุปกรณ์

ผลจากการทดลอง 10 ครั้งตามภาพ

Test การเชื่อมต่อ Wifi

Test การกดปุ่มเช็คสถานะ

7.สรุปผลการทดลอง

1.สรุปผล

จากการทดลองอุปกรณ์แจ้งเตือนเมื่อเด็กหลงสามารถแจ้งเตือนผ่าน Line ทำงานได้อย่างมีประสิทธิภาพตามเงื่อนไขที่ตั้งไว้ active buzzer สามารถส่งเสียงได้อย่างที่ตั้้งใจ

2.ข้อเสนอแนะ

สามารถนำไปต่อยอดโดยการใช้โมดูล GPS มาแชร์ละจิจูดกับลอจิจูดเมื่อระยะห่างของแม่กับลูกไกลตามที่กำหนดไว้จะส่ง ละจิจูดและลองจิจูดไปยังไลน์

3.ปัญหา

เนื่องจากการใช้งานอุปกรณ์ที่น้อยจึงไม่สามารถออกแบบอุปกรณ์ให้ใส่กล่องได้อย่างสวยงามได้

เนื่องจากการเขียนแบบ OOP นั้นค่อนข้างซับซ้อนจึงไม่สามารถเขียนได้ในตอนนี้

8.ข้อมูลอ้างอิง

1.https://ieeexplore.ieee.org/document/10112468

2.https://shorturl.asia/c0iDB

3.https://shorturl.asia/FYc6l

วิดีโอนำเสนอ อุปกรณ์แจ้งเตือนสำหรับเด็กหลง

You may also like...

ใส่ความเห็น

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