กลับไปหน้ารวมไฟล์
phonelocator-777cff.md

ภาพรวม (Overview)

เคยลืมมือถือไว้บ้านเพื่อนป่ะน้อง? หรือกลัวพวกมือดีมาจิ๊กมือถือเราไปไหม? พี่เชื่อว่าทุกคนต้องเคยเจอประสบการณ์เสียวสันหลังตอนหามือถือไม่เจอแน่ๆ โปรเจกต์ PhoneLocator ตัวนี้เกิดมาเพื่อตามหามือถือโดยเฉพาะ (ก็ตามชื่อมันนั่นแหละ) โดยมันจะส่งพิกัด geolocation ของเครื่องเรามาให้ทาง email จะได้ตามไปเก็บกู้สมบัติล้ำค่าคืนมาได้ทัน ขอบคุณระบบเทพๆ อย่าง Blynk ที่ทำให้เราแค่กดปุ่มเดียวก็จบเรื่อง แต่บอกก่อนนะว่างานนี้ต้องมีบัญชี Blynk ด้วย ส่วนวิธีสมัครพี่จัดไว้ให้ด้านล่างแล้ว ไปดูกันเลยวัยรุ่น!

หลักการทำงาน (Functionality)

โปรเจกต์นี้ทำงานง่ายๆ เลยน้อง เมื่อไรที่เรากดปุ่มปุ๊บ เจ้า Arduino Yún จะทำการอ่านค่าพิกัดจากมือถือแล้วส่ง email มาให้เราทันที และเพื่อให้ดูเป็นมือโปรขึ้นมาหน่อย ให้คิดซะว่า email นี้ส่งมาจากแอป Blynk ในมือถือเรานั่นแหละ เผื่อโดนขโมยไปโจรจะได้งง ดูภาพประกอบตามนี้เลย

ภาพรวมการทำงาน

ส่วนรูปนี้คือภาพรวมของตัว Code นะครับ

ภาพรวมของ Code
  • if(button is pressed): ตัวนี้จะเช็คว่าปุ่มที่ต่อกับ Pins 2 ถูกกดหรือยัง
  • getLocation: ไปดึงพิกัดตำแหน่งมือถือมาจาก Blynk
  • Process Data: เอาพิกัดที่ได้มาจัดรูปแบบใส่ลงในเนื้อหา email
  • Send email: ส่ง email ไปหาเราเลย

หลังจากกดปุ่มไปแล้ว รอสัก 8 วินาที Arduino จะตอบกลับมาถ้าเจอมือถือน่ะนะ อ้อ! โปรเจกต์นี้ทำงานได้แม้ว่ามือถือจะสลีปอยู่หรือรันแอปอื่นอยู่ก็ตาม ขอแค่ตั้งค่าให้แอป Blynk รันแบบ Background ได้ (ถึงปิดแอปไปก็ยังไหว) แต่ต้องเช็คให้ชัวร์นะว่าโปรเจกต์ Blynk ในมือถือเปิด ON ไว้อยู่ รายละเอียดเพิ่มเติมไปดูที่ขั้นตอนการสร้างเลย

ประโยชน์ที่น้องจะได้รับ

ทำโปรเจกต์นี้แล้วได้อะไรบ้าง:

  • ตามหามือถือได้เวลาหายหรือโดนจิ๊ก
  • ใช้งานง่ายจัดๆ กดปุ่มเดียวจบ

ขั้นตอนการสร้าง (Constructing the Project)

ขั้นตอนที่ 1: เตรียมของกันหน่อยวัยรุ่น ของที่ต้องใช้มีไม่กี่อย่าง จัดไป:

  • Jumper Wires (สายจัมพ์)
  • 1, Arduino Yún
  • 1, ปุ่ม (Button)
  • 1, Breadboard
  • 1, Resistor (220Ω)
  • 1, Smart Phone

ขั้นตอนที่ 2: ต่อวงจร (Connecting the Circuit) โปรเจกต์ง่ายๆ วงจรก็ต้องง่ายตาม ดูตามแผนภาพนี้เลยน้อง ห้ามช็อตนะตัวนี้!

ผังวงจร (The Schematics)

ขั้นตอนที่ 3: มาทำความเข้าใจ Code กัน Code โปรเจกต์นี้มี 3 ส่วนหลักๆ เข้าใจง่ายทุกอัน:

  • getLocation
  • Process Location Data
  • Send Email

มาเจาะลึกแต่ละฟังก์ชันกัน:

  • getLocation
BLYNK_WRITE(V0) // อ่านค่าพิกัดจาก Virtual Pin 0
{ 
 latitude = param[0].asDouble(); 
 longitude = param[1].asDouble(); 
 altitude = param[2].asDouble(); 
 speed = param[3].asDouble(); 
} 

Blynk จะเก็บค่า Variable ไว้ใน Virtual Pins ซึ่งฟังก์ชัน BLYNK_WRITE(V0) จะอ่านค่าจาก V0 แล้วแยกเก็บใน Variable ต่างๆ โดยเราจะใช้ latitude และ longitude ในงานนี้ ก่อนจะ Upload โค้ด อย่าลืมเช็คว่าเซ็ตโปรเจกต์ใน Blynk ถูกต้องแล้วนะ

  • Process Location Data
if(latitude != 0.00 && longitude != 0.00) // ถ้าได้พิกัดที่ถูกต้อง
     { 
       // String toSend คือเนื้อความที่จะส่งเข้า email
       String toSend = "Phone Located! \
 received co-ordinates \
 LAT "; 
       toSend += latitude; // ใส่ค่าพิกัดลงใน string
       toSend += " LNG "; 
       toSend += longitude; 
       toSend += ". View location on Maps: "; 
       toSend += "www.google.com/maps/?q="; 
       toSend += latitude; 
       toSend += ","; 
       toSend += longitude; 
       delay(500); 
    }

การส่ง email ต้องส่งเป็น String เท่านั้น เราเลยต้องปั้นเนื้อความให้เป็น String ก่อน ส่วนนี้จะทำงานก็ต่อเมื่อได้พิกัดที่แม่นยำมาแล้ว โดยเราจะใส่ทั้งละติจูด ลองจิจูด และลิงก์ Google Maps ให้กดดูได้เลยหล่อๆ

ตัว Arduino จะคอยเช็คตลอดว่าพิกัดที่ได้มามีตัวตนไหม (ไม่ใช่ 0) ถ้ายังไม่เจอพิกัดที่ถูกต้อง มันจะวน Loop ขอตำแหน่งใหม่เรื่อยๆ สูงสุด 10 รอบ

  • Send Email
Blynk.email(userEmail, "PhoneLocator | Notification", toSend); // ส่ง email เลย
       if(proDebug == 1) 
       { 
         Serial.println("Success"); 
         Serial.println("Email Sent"); 
         Serial.println("Restarting Protocol"); 
         Serial.println(""); 
       }  

นี่คือฟังก์ชันสั่งส่ง email จริงๆ แล้ว โดยจะเอา String ที่เราเตรียมไว้ส่งไป ส่วน proDebug คือเครื่องมือช่วยเช็คการทำงาน (Debugging) ถ้าจะใช้งานจริงแบบไม่ต้องต่อคอมฯ ให้ตั้งเป็น 0 ซะ แต่ค่าเริ่มต้นจะเป็น 1 ซึ่งต้องเปิด Serial Monitor ไว้ถึงจะทำงานนะน้อง

การตั้งค่า Variable เช็คให้ดีว่าแก้ค่าตรงที่เขียนว่า TODO ครบหรือยัง เช่น email ของเรา, Blynk auth token และ proDebug เดี๋ยวพี่จะสอนวิธีเอา Auth token ในขั้นตอนถัดไป

Libraries ที่ใช้ Bridge - Arduino LLC (ตัวนี้ Library สาธารณะ) Blynk - Blynk (ตัวนี้เป็นสัญญาอนุญาตแบบ MIT License)

การตั้งค่า Blynk (Blynk Setup)

  • Step 1: โหลด Blynk ซะ Blynk เป็นแอปที่ช่วยให้ทำโปรเจกต์ IoT ได้ง่ายเว่อร์ ไปโหลดมาซะ มีทั้งใน IOS และ Android

  • Step 2: สร้างบัญชี Blynk ทำตามรูปด้านล่างนี้เลยวัยรุ่น

การติดตั้งขั้นสุดท้าย (Setup) ขั้นตอนสุดท้ายคือแก้ Variable ตรงที่บอกว่า TODO ให้หมด ถ้ายังไม่ได้ทำน่ะนะ โดยเฉพาะค่า auth ต้องเอา Auth token ที่ได้จาก email มาใส่ให้ตรง ต่อ Arduino Yún เข้ากับ Mac/PC แล้ว Upload โค้ดลงไปได้เลย! สู้งานนะน้อง!

PhoneLocator พร้อมลุย

เบื้องหลังโปรเจกต์

พี่สร้างโปรเจกต์นี้ขึ้นมาเพราะอยากหาวิธีง่ายๆ ในการตามหามือถือหาย Blynk ช่วยให้ Arduino Yún ของเราดึงค่า geolocation ได้แม้ว่าแอปจะทำงานอยู่เบื้องหลังหรือเครื่องจะสลีปอยู่ แค่คลิกปุ่มเดียวก็รู้เรื่อง ลองทดสอบกับ iPhone (iOS11) แล้ว ผ่านฉลุย!

รายละเอียดทางเทคนิคเพิ่มเติม

ศูนย์กลางการกู้คืนสมาร์ทโฟนผ่าน IoT

PhoneLocator คือโปรเจกต์ Smart-home ที่ใช้งานได้จริง ช่วยให้น้องหามือถือเจอด้วยการสั่งให้มันร้องเตือนผ่านปุ่มกดจริงๆ บนโต๊ะข้างเตียง

  • Cloud-Webhook Dispatch Engine: เมื่อกดปุ่มปุ๊บ Arduino (ที่ต่อ WiFi ไว้) จะส่งแพ็กเก็ต JSON แบบเข้ารหัสไปยัง IFTTT หรือ Blynk webhook
  • Cloud-to-App Handshake: บริการ Cloud จะส่งคำสั่ง "Phone Search" แบบลำดับความสำคัญสูงไปยังมือถือ บังคับให้มันแผดเสียงเตือนออกมาแม้ว่าจะตั้งโหมด "เงียบ" (Silent) ไว้ก็ตาม

การสร้างต้นแบบ (Prototyping)

  • ตรวจสอบผ่าน Web Editor: ระบบการเชื่อมต่อ WiFi และการ Sync ข้อมูลบน Cloud ถูกปรับจูนมาอย่างดีผ่าน Arduino Web Editor เพื่อให้มั่นใจว่าฟีเจอร์ "ตามหามือถือ" ของเราจะทำงานได้ 100% ตลอดเวลา จัดไปวัยรุ่น!

ข้อมูล Frontmatter ดั้งเดิม

title: "PhoneLocator"
description: "Simply click a button to receive your phone's geolocation."
author: "andreiflorian"
category: "Internet of Things, BT & Wireless"
tags:
  - "tracking"
  - "internet of things"
views: 17504
likes: 11
price: 299
difficulty: "Easy"
components:
  - "1x Breadboard (generic)"
  - "1x Jumper wires (generic)"
  - "1x Arduino Yun"
  - "1x Pushbutton switch 12mm"
  - "1x Resistor 221 ohm"
tools: []
apps:
  - "1x Arduino Web Editor"
  - "1x Blynk"
downloadableFiles:
  - "https://create.arduino.cc/editor/LightPro/3225afdc-6c29-40c8-a696-b2de5a0e31e1"
documentationLinks: []
passwordHash: "070e62f55a6acfaf5c003dd8f5cfd98039e1b4f64db24d3ed07198657da87f69"
encryptedPayload: "U2FsdGVkX18GLkz6RXN4uF0BwHyw2oA4xDS3h8k8gHn+8Syn4z8WpnnUowLRgRaSyHhHYpJTidd2yRZJYBHHD3DwAqkS92UdifPTHREXWUATOZ+KSwv2GrNr0PXd4g1s"
seoDescription: "Get your phone's geolocation instantly using PhoneLocator and Arduino with a simple button click."
videoLinks: []
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/phonelocator-777cff_cover.png"
lang: "th"