สารบัญ:

เข็มทิศดิจิตอลและตัวค้นหาหัวเรื่อง: 6 ขั้นตอน
เข็มทิศดิจิตอลและตัวค้นหาหัวเรื่อง: 6 ขั้นตอน

วีดีโอ: เข็มทิศดิจิตอลและตัวค้นหาหัวเรื่อง: 6 ขั้นตอน

วีดีโอ: เข็มทิศดิจิตอลและตัวค้นหาหัวเรื่อง: 6 ขั้นตอน
วีดีโอ: เข็มทิศและการหาทิศ 2024, กรกฎาคม
Anonim
เข็มทิศดิจิตอลและตัวค้นหาหัวเรื่อง
เข็มทิศดิจิตอลและตัวค้นหาหัวเรื่อง

ผู้เขียน:

คัลแลน วีแลน

Andrew Luft

เบลค จอห์นสัน

รับทราบ:

California Maritime Academy

อีวาน ชาง-ซิว

บทนำ:

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

เสบียง:

- โมดูล GPS DIYmall 6M

- HiLetgo MPU9250/6500 9 แกน 9 DOF 16 Bit

- แหวนอดาฟรุต NeoPixel 16

- MakerFocus 4pcs 3.7V แบตเตอรี่ลิเธียมแบบรีชาร์จ

- บอร์ด ELEGOO MEGA 2560 R3

- Adafruit Mini Lipo พร้อมแจ็ค Mini-B USB - เครื่องชาร์จ USB LiIon/LiPoly - v1

- 2.8 TFT LCD พร้อม Touchscreen Breakout Board พร้อมช่องเสียบ MicroSD

ขั้นตอนที่ 1: การออกแบบฟังก์ชันการทำงานของโครงการ

การออกแบบฟังก์ชันการทำงานของโครงการ
การออกแบบฟังก์ชันการทำงานของโครงการ

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

สถานะ 1: กำลังโหลดสถานะ

สถานะการโหลดใช้เพื่อให้ Arduino Mega รับข้อมูลกลับจากเซ็นเซอร์สองตัวเมื่อเริ่มทำงาน อุปกรณ์จะแสดงการโหลดบนหน้าจอ ล้างค่าตัวเลขทั้งหมดบนหน้าจอ และไฟ LED บนวงแหวน NeoPixel จะสว่างเป็นวงกลม

สถานะ 2: โหมดเข็มทิศ

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

สถานะ 3: โหมดติดตามหัวเรื่อง

ในสถานะนี้ อุปกรณ์จะช่วยให้ผู้ใช้สร้างหัวข้อที่ต้องการได้ อุปกรณ์จะแสดงอุปกรณ์ที่มุ่งหน้าไปและผู้ใช้ที่มุ่งหน้าไปบนหน้าจอ LCD พร้อมกับข้อมูลละติจูดและลองจิจูด วงแหวน NeoPixel จะสว่างขึ้นเพื่อระบุผู้ใช้ที่มุ่งหน้าไปตามทิศทางของอุปกรณ์

ภายในทั้งสถานะ 2 และ 3 มีสถานะเซ็นเซอร์สองสถานะ สถานะเซ็นเซอร์เหล่านี้อนุญาตให้อุปกรณ์ดึงข้อมูลจากเซ็นเซอร์ที่ให้ข้อมูลที่แม่นยำที่สุดขึ้นอยู่กับสภาพการทำงานของอุปกรณ์

สถานะเซนเซอร์ 1: MPU

หากอุปกรณ์ไม่เคลื่อนที่ ข้อมูลส่วนหัวจะถูกดึงออกจาก MPU เนื่องจากเป็นข้อมูลที่แม่นยำที่สุดเมื่ออุปกรณ์ไม่เคลื่อนที่

สถานะเซนเซอร์ 2: GPS

หากอุปกรณ์กำลังเคลื่อนที่ ข้อมูลส่วนหัวจะถูกดึงออกจากชิป GPS เนื่องจากเป็นข้อมูลที่ถูกต้องที่สุดในเงื่อนไขนี้

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

ขั้นตอนที่ 2: ตั้งค่าและ Wire Diagram

ตั้งค่าและไดอะแกรมลวด
ตั้งค่าและไดอะแกรมลวด
ตั้งค่าและไดอะแกรมลวด
ตั้งค่าและไดอะแกรมลวด
ตั้งค่าและไดอะแกรมลวด
ตั้งค่าและไดอะแกรมลวด

โครงการใช้และ Arduino Mega clone board คล้ายกับบอร์ดด้านบน ส่วนประกอบทั้งหมดในโครงการจะเชื่อมต่อกับบอร์ดนี้ ด้านบนเป็นไดอะแกรมโดยละเอียดเกี่ยวกับวิธีการเชื่อมต่อส่วนประกอบสำหรับโครงการนี้ ปุ่มไม่มีวงจรละเอียดเพราะตั้งค่าได้หลายวิธี ในโครงการนี้ พวกเขาใช้ตัวต้านทานแบบดึงลง 100K และปุ่มง่ายๆ เพื่อส่งสัญญาณ 3 โวลต์ไปยังพินที่กำหนด

ขั้นตอนที่ 3: การทดสอบส่วนประกอบและรหัสพื้นฐาน

โครงการจะดึงข้อมูลจากทั้งชิป MPU และ GPS ตามที่อธิบายไว้ก่อนหน้านี้ สิ่งที่แนบมาคือรหัสสามรหัสที่เปิดใช้งานการทดสอบข้อมูลจาก MPU, GPS และ MPU พร้อมหน้าจอเพื่อตรวจสอบการทำงานของชิ้นส่วนต่างๆ สิ่งสำคัญคือต้องทำให้ส่วนประกอบทำงานได้ในขั้นตอนนี้ เนื่องจากโค้ดจะแยกจากกันสำหรับชิปแต่ละตัว และปัญหาต่างๆ สามารถแก้ไขได้โดยไม่ต้องกลัวว่าจะทำให้เกิดข้อผิดพลาดที่คาดไม่ถึงในโค้ดสุดท้าย

ห้องสมุดที่จำเป็น:

Adafruit_ILI9341_Albert.h

SPI.h

Adafruit_GFX.h

Adafruit_ILI9341.h

TinyGPS++.h

Adafruit_NeoPixel.h

MPU9250.h

ทั้งหมดนี้สามารถพบได้โดยการค้นหาชื่อด้านบน ฉันจะไม่โพสต์ลิงก์เนื่องจากมีสำเนาของไลบรารีเหล่านี้จำนวนมากจากแหล่งต่างๆ และปฏิบัติตามมาตรฐานชุมชนของการลิงก์ไปยังต้นฉบับเท่านั้น ฉันจะให้คุณค้นหาสิ่งเหล่านี้ด้วยตนเอง

ขั้นตอนที่ 4: การปรับเทียบ MPU

การสอบเทียบ MPU
การสอบเทียบ MPU

หัวเรื่องที่พบผ่าน MPU ในสถานะ 2 และสถานะ 3 ถูกแบ่งออกเป็นสี่ส่วน นี่เป็นสิ่งจำเป็นเนื่องจากวิธีการสอบเทียบของเราจำเป็นต้องค้นหาขนาดต่ำสุดและสูงสุดจากเครื่องวัดความเข้มข้นของสนามแม่เหล็กตามแกน x และ y สิ่งนี้ทำโดยการหมุนอุปกรณ์แบบสุ่มรอบสามแกนของมัน โดยปราศจากสนามแม่เหล็กไฟฟ้าที่สำคัญใดๆ นอกเหนือจากสนามแม่เหล็กของโลก จากนั้นเรานำค่าต่ำสุดและสูงสุดตามแกน x และ y มารวมกันเป็นสมการสเกลเพื่อจำกัดขนาดระหว่างค่าลบหนึ่งและหนึ่ง ในรูปด้านบน BigX และ BigY เป็นค่าสูงสุดของข้อมูลแมกนีโตมิเตอร์ตามแนวแกน x และ y ตามลำดับ LittleX และ LittleY เป็นค่าต่ำสุดของข้อมูลแมกนีโตมิเตอร์ตามแนวแกน x และ y ตามลำดับ IMU.getMagX_uT() และ IMU.getMagY_uT() คือค่าที่ถูกดึงออกจากเครื่องวัดความเข้มข้นของสนามแม่เหล็กเมื่อใดก็ได้ตามแกน x และ y ตามลำดับ และ Mx และ My เป็นค่าที่ปรับขนาดใหม่ที่ใช้ในการคำนวณส่วนหัว

ขั้นตอนที่ 5: รหัสสุดท้าย

รหัสสุดท้าย
รหัสสุดท้าย
รหัสสุดท้าย
รหัสสุดท้าย
รหัสสุดท้าย
รหัสสุดท้าย
รหัสสุดท้าย
รหัสสุดท้าย

ขั้นตอนสุดท้ายคือการสร้างรหัสสุดท้าย ฉันได้แนบสำเนาของรหัสสุดท้ายของโครงการ ภายในบันทึกช่วยนำทางรหัส ความท้าทายที่ยิ่งใหญ่ที่สุดของส่วนนี้คือการทำให้ควอแดรนต์ทำงานได้อย่างถูกต้อง การใช้งานควอแดรนท์นั้นน่าเบื่อและท้าทายตรรกะมากกว่าที่เราคาดไว้ เริ่มแรกเราใช้ arctan พื้นฐาน (My/Mx) แล้วแปลงจากเรเดียนเป็นองศา เนื่องจาก Arduino ส่งออกเป็นเรเดียนโดยค่าเริ่มต้น อย่างไรก็ตาม จตุภาคเดียวที่ใช้ได้ผลคือตั้งแต่ 90 องศาถึง 180 องศา ซึ่งให้เอาต์พุตเป็นลบและจบลงด้วยจตุภาค III วิธีแก้ไขคือใช้ค่าสัมบูรณ์ เนื่องจากยังคงเพิ่มขึ้นอย่างถูกต้อง ค่านี้ถูกลบออกจาก 360 เพื่อให้ไฟ LED NeoPixel ถูกต้องในสถานะ 2 สว่างขึ้น และใช้การดำเนินการทางคณิตศาสตร์ที่คล้ายกันในสถานะ 3 โดยพิจารณาว่าส่วนหัวมีขนาดใหญ่หรือเล็กกว่าส่วนหัวอินพุตของผู้ใช้ ซึ่งทั้งสองส่วนสามารถเห็นได้ใน รหัสด้านบน ในรูปด้านบน ส่วนหัวสอดคล้องกับไฟ NeoPixel ที่จะติดสว่างตามความแตกต่างระหว่างส่วนหัวของอุปกรณ์กับการเบี่ยงเบนจากทิศเหนือในกรณีของสถานะ 2 และจากส่วนหัวของผู้ใช้ ในกรณีนี้ 90 ถึง 180 องศาจะสอดคล้องกับ Quadrant III ในทั้งสองกรณี tft.print ทำให้หน้าจออ่านอุปกรณ์ที่มุ่งหน้ามาจากทิศเหนือ

สำหรับอีกสามควอแดรนต์ การใช้ arctan(My/Mx) ทำให้เกิดการผกผันของการเพิ่มขึ้นเมื่ออุปกรณ์ถูกหมุน กล่าวคือ มุมของส่วนหัวจะนับถอยหลังเมื่อควรจะนับขึ้นและในทางกลับกัน วิธีแก้ปัญหานี้คือพลิกอาร์คแทนเจนต์ให้อยู่ในรูปอาร์คแทน (Mx/My) แม้ว่าวิธีนี้จะแก้ไขการผกผันที่เพิ่มขึ้น แต่ก็ไม่ได้ให้หัวข้ออุปกรณ์ที่ถูกต้อง ซึ่งเป็นที่ที่ควอแดรนต์เข้ามาเล่น การแก้ไขอย่างง่ายคือการเพิ่มกะโดยยึดตามจตุภาคที่เกี่ยวข้อง ดังรูปต่อไปนี้ ซึ่งเป็นชิ้นส่วนของรหัสจากรัฐ 2 และ 3 ของแต่ละจตุภาคอีกครั้ง

คำสั่งแรก if ดำเนินการถ้าส่วนหัวที่คำนวณโดยสมการ MPU มากกว่าส่วนหัวของผู้ใช้ ภายใต้เงื่อนไขนี้ ส่วนหัวอินพุตของผู้ใช้จะถูกเพิ่มไปยังส่วนหัวของอุปกรณ์ และค่าที่เกี่ยวข้องจะถูกลบออกจาก 360 หากดำเนินการคำสั่ง else สมการส่วนหัวของ MPU จะถูกลบออกจากส่วนหัวอินพุตของผู้ใช้ เงื่อนไขเหล่านี้ถูกนำมาใช้เพื่อไม่เพียงแต่รับค่าที่ถูกต้องสำหรับ NeoPixel เท่านั้น แต่ยังเพื่อหลีกเลี่ยงการรับค่าที่อยู่นอกขอบเขตที่ยอมรับได้ ซึ่งมีค่าตั้งแต่ 0 ถึง 359 องศา

แนะนำ: