กลับไปหน้ารวมไฟล์
day-3-updating-the-gps-location-591e8f.md

การนำทางอัตโนมัติ: เลเยอร์การเชื่อมต่อ Aquabots

วันที่ 3 ของโปรเจกต์ Aquabots Autonomous Vessels ถือเป็นการเปลี่ยนผ่านที่สำคัญจากการประกอบฮาร์ดแวร์ไปสู่การรวมระบบ ในขณะที่ขั้นตอนก่อนหน้ามุ่งเน้นไปที่ "การเพิ่ม GPS" เฟสนี้จะนำ Update Cycle มาใช้ ซึ่งคือความสามารถของเรือในการรายงานพิกัดทั่วโลกไปยังเซิร์ฟเวอร์ Aquabots Client อย่างสม่ำเสมอ เปลี่ยนเรือที่หยุดนิ่งให้กลายเป็นสินทรัพย์ IoT ที่ติดตามได้

สถาปัตยกรรมซอฟต์แวร์แบบโมดูลาร์

เพื่อจัดการกับความซับซ้อนของเรืออัตโนมัติ โปรเจกต์นี้ใช้สถาปัตยกรรม Distributed Module บน Arduino Mega 2560 การแยกส่วนความรับผิดชอบนี้ช่วยป้องกันความล้มเหลวของโค้ดแบบ "Monolithic":

  1. WebClient Module: ทำหน้าที่เป็นเกตเวย์ จัดการการเชื่อมต่อแบบ HTTP/TCP กับเซิร์ฟเวอร์ Aquabots เพื่อให้มั่นใจว่าข้อมูลปลอดภัยและการส่งข้อมูลมีประสิทธิภาพ
  2. Registration Module: จัดการข้อมูลประจำตัวที่ไม่ซ้ำกันของเรือ ทำให้มั่นใจว่าพิกัดที่ส่งไปนั้นถูกระบุไปยัง ID ตัวเรือที่ถูกต้องในฐานข้อมูลกองเรือส่วนกลาง
  3. TinyGPS Module: นี่คือตัวสร้างข้อมูล โดยการใช้ Serial1 ของ Mega จะแยกวิเคราะห์ประโยค NMEA ดิบให้เป็นค่า Latitude และ Longitude แบบ floats ที่อ่านได้
  4. Vessel Module (หัวใจหลัก): ประสานงานกับโมดูลอื่นๆ ดึงข้อมูลที่แยกวิเคราะห์ล่าสุดจาก TinyGPS และส่งไปยัง WebClient ในช่วงเวลาปกติ

การเอาชนะความล่าช้าของสัญญาณ

การรายงานข้อมูล GPS ในสภาพแวดล้อมทางทะเลนำเสนอความท้าทายที่ไม่เหมือนใคร:

  • RF Signal Management: Adafruit GPS Antenna มีความสำคัญอย่างยิ่งต่อการรักษาสัญญาณในที่โล่ง โปรเจกต์นี้ทำให้มั่นใจว่าแม้กระทั่งสำหรับ "Cold Starts" ตรรกะอัตโนมัติจะไม่เริ่มทำงานจนกว่าจะยืนยันการระบุตำแหน่งแบบ 3D-fix ได้
  • Coordinate Precision: การรายงานพิกัดเป็นค่า floats ที่มีความแม่นยำสูงช่วยให้สามารถคำนวณการคลาดเคลื่อนได้ถึงระดับเซนติเมตร ซึ่งจำเป็นสำหรับการนำ PID-based steering มาใช้ในอนาคต
  • Continuous Polling: ต่างจากเครื่องติดตามรถยนต์ที่อาจอัปเดตนาทีละครั้ง เรืออัตโนมัติต้องการการอัปเดตบ่อยครั้งเพื่อแก้ไขกระแสน้ำและลม ซึ่งจัดการใน loop() หลักผ่านการจับเวลาแบบ non-blocking ของโมดูล Vessel

แผนงานสู่ความเป็นอิสระ

การสร้างลิงก์การส่งข้อมูลทางไกล (telemetry) ที่เชื่อถือได้นี้ เป็นการวางรากฐานสำหรับ Day 4: Revving the Servos เมื่อเรือรู้ว่าตัวเองอยู่ที่ไหนและสามารถแจ้งเซิร์ฟเวอร์ได้ เซิร์ฟเวอร์ก็จะสามารถเริ่มส่ง "Waypoints" กลับมาได้ ซึ่งเป็นการเริ่มต้นการเดินทางอัตโนมัติข้ามผืนน้ำอย่างแท้จริง

เป็นเวลานานพอสมควรแล้วตั้งแต่ Day 2 ของโปรเจกต์ การพัฒนาเรืออัตโนมัติของเรา บางครั้งเรื่องส่วนตัวก็เข้ามาขัดขวางการทำสิ่งที่สนุกจริงๆ แต่ตอนนี้ทุกอย่างเรียบร้อยแล้ว และสัปดาห์ที่ผ่านมาเรายุ่งกับการทดสอบและดำเนินการต่อจากจุดที่เราหยุดไว้ก่อนหน้านี้

เพื่อเตือนความจำเล็กน้อย เราสามารถลงทะเบียนเรือกับ Aquabots Client ได้ และเพิ่งเพิ่ม Grove GPS unit เข้ากับ Arduino ของเรา เพื่อให้เราสามารถระบุตำแหน่งได้ วันนี้เราจะเพิ่มโค้ดเล็กน้อยเพื่อให้ Aquabots Client สามารถรับตำแหน่งที่อัปเดตจาก GPS ได้อย่างต่อเนื่อง ฮาร์ดแวร์ (ดังนั้น) จึงเหมือนกับของ day 2 ทุกประการ

วันนี้เราจะรวมซอร์สโค้ดซอฟต์แวร์ทั้งหมด เพื่อให้เราสามารถเห็นการพึ่งพากันระหว่างซอร์สต่างๆ จุดเริ่มต้นหลักคือโมดูล Vessels ซึ่งประกอบด้วยฟังก์ชัน setup() และ loop() ที่เป็นที่รู้จักกันดีของ Arduino โมดูลนี้สร้างโมดูลอีกสี่โมดูล ซึ่งแต่ละโมดูลมีหน้าที่เฉพาะตัว:

1: WebClient: จัดการการสื่อสารกับ Aquabots Client

2: Registration: ลงทะเบียนเรือกับ Aquabots Client (ดู day 1)

3: TinyGPS: จัดการ GPS Unit ที่เชื่อมต่อกับ Serial1 ของ Arduino Mega (ดู day 2)

4: Vessel. นี่คือส่วนใหม่! ปัจจุบันมันทำหน้าที่เพียงแค่ส่งค่า latitude และ longitude ของเรือไปยัง Aquabots Client อย่างไรก็ตาม ในอีกไม่กี่วันข้างหน้าเราจะเพิ่มชุดควบคุม servo เพื่อให้เรือของเรามีชีวิตชีวาขึ้นมาจริงๆ!

เมื่อเตรียมการทั้งหมดเสร็จสิ้น เราก็ตั้งตารอที่จะได้เห็น propellers หมุนได้ในที่สุด แต่เราจะเก็บสิ่งนั้นไว้สำหรับ day 4.

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

title: "Day 3: Updating the GPS Location"
description: "Day 2 of the Aquabots Autnomous Vessels Project: Updating the GPS location with the Aquabots Client"
author: "keesp"
category: ""
tags:
  - "autonomous"
  - "gps"
  - "vessel"
  - "iot"
views: 1166
likes: 2
price: 2450
difficulty: "Easy"
components:
  - "1x Grove Mega Shield"
  - "1x Arduino Mega 2560"
  - "1x Adafruit SMA to uFL/u.FL/IPX/IPEX RF Adapter Cable"
  - "1x Seeed Grove Blue Wrapper Pack 1-2"
  - "1x Adafruit GPS Antenna"
  - "1x Grove-GPS"
tools: []
apps:
  - "1x Aquabots Client"
downloadableFiles: []
documentationLinks: []
passwordHash: "dbe68674481ca21fb2e3d574de8c81840c2507a366edfaa36e27d5751cdc0c7f"
encryptedPayload: "U2FsdGVkX1+NZ2bV8Mw8mtyk6MMgiRMhNeyuVxNOm57VxvnUPsPrcXDoPAIDfp6p/ZjwuyG7UpzhgL7HjoEaXzUhcalFuDiXJeKvZCKejbE="
seoDescription: "Day 3: Updating the GPS location for Aquabots Autonomous Vessels Project using the Aquabots Client and Arduino."
videoLinks: []
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/day-3-updating-the-gps-location-591e8f_cover.jpg"
lang: "th"