ลองพิจารณาการเชื่อมต่อโมดูล GY-273 กับเข็มทิศดิจิตอลสามแกน Honeywell HMC5883L ไมโครเซอร์กิตนี้สามารถใช้สำหรับการวัดสนามแม่เหล็กในการนำทาง หากไม่ต้องการความแม่นยำในการวัดสูง (โดยมีข้อผิดพลาด 1 … 2 องศาและความเป็นไปได้ของการสอบเทียบ) อุปกรณ์เชื่อมต่อผ่านอินเทอร์เฟซ I2C
จำเป็น
- - เข็มทิศดิจิตอล HMC5883;
- - Arduino;
- - บอร์ดต้นแบบและสายเชื่อมต่อ
- - คอมพิวเตอร์.
คำแนะนำ
ขั้นตอนที่ 1
นี่คือคุณสมบัติหลักของเข็มทิศแม่เหล็ก:
- เซ็นเซอร์ไวต่อสนามแม่เหล็ก 3 แกน;
- ADC 12 บิตที่มีความละเอียด 2 mGs (มิลลิเกาส์)
- การทดสอบตัวเองในตัว;
- แรงดันไฟต่ำและการบริโภคต่ำ
- อินเทอร์เฟซดิจิตอล I2C;
- อัตราการโพลสูง - สูงถึง 160 ครั้งต่อวินาที (เวลาของการวัดหนึ่งครั้งประมาณ 6 ms)
- ความแม่นยำในการกำหนดทิศทางคือ 1 °… 2 °;
- สามารถใช้ได้ในสนามแม่เหล็กแรงสูง (สูงถึง ± 8 เกาส์)
แผนภาพสำหรับเชื่อมต่อเซ็นเซอร์แม่เหล็ก HMC5883L กับ Arduino แสดงในรูปภาพ มันกะทัดรัดและเรียบง่ายมากเพราะ อินเทอร์เฟซ I2C แบบสองสายนั้นยอดเยี่ยมเพราะต้องการการเชื่อมต่อเพียงเล็กน้อย คุณสามารถใช้เขียงหั่นขนม
ขั้นตอนที่ 2
ควรมีลักษณะบางอย่างเช่นรูปถ่าย ฉันจะเชื่อมต่อตัววิเคราะห์ลอจิกกับบัส SCL และ SDA เพื่อตรวจสอบการแลกเปลี่ยนข้อมูลระหว่าง Arduino และโมดูล HMC5883 มันไม่ได้บังคับ
ขั้นตอนที่ 3
ในฐานะที่เป็นคนรู้จักครั้งแรก เรามาลองอ่านการระบุหมายเลขทะเบียน 10 (0xA), 11 (0xB) และ 12 (0xC) ของเข็มทิศดิจิตอล HMC5883 แล้วเขียนแบบร่างดังในรูป มีให้พร้อมความคิดเห็นโดยละเอียด

ขั้นตอนที่ 4
สัญญาณที่ได้รับจากตัววิเคราะห์ลอจิกจะเป็นดังแสดงในภาพประกอบ
มันหมายความว่าอะไร? ไบต์แรกคือที่อยู่ I2C ที่เรา (อุปกรณ์หลัก Arduino) สร้างการสื่อสาร (สูง 7 บิต 0x1E) และโหมดการเขียน (บิตต่ำ - 0x0); ตัวเลขคือ 0x3C ไบต์ที่สองคือหมายเลข 0xA ซึ่งเราเขียนถึงที่อยู่ 0x1E และบิตยืนยันจากเซ็นเซอร์ HMC5883L ซึ่งเป็นสเลฟ นี่คือหมายเลขทะเบียนที่เราจะเริ่มอ่านข้อมูล เป็นอันเสร็จสิ้นการทำธุรกรรมครั้งแรก อันต่อไปเริ่มต้นขึ้น ไบต์ที่สามคือคำขออ่านจากทาส (7 บิตที่สำคัญที่สุดคือที่อยู่ 0x1E บิตที่ 8 คือการดำเนินการอ่าน 0x1 จำนวนผลลัพธ์คือ 0x3D) 3 ไบต์สุดท้ายคือการตอบสนองจากสเลฟ HMC5883L จากรีจิสเตอร์ 0xA, 0xB และ 0xC ตามลำดับ
เข็มทิศดิจิตอล HMC5883L จะเคลื่อนที่ผ่านรีจิสเตอร์อย่างอิสระในระหว่างการอ่านอย่างต่อเนื่อง เหล่านั้น ไม่จำเป็น (แต่ไม่ได้ห้าม) ระบุกรณีทุกครั้ง ตัวอย่างเช่น ถ้าแทนที่จะเป็น 0xA เราจะเขียน 0x3 และอ่าน 10 ครั้ง เราจะได้ค่าในการลงทะเบียน 10 รายการ เริ่มตั้งแต่วันที่ 3 ถึง 12
แล้วตัวเลขสามตัวนี้คืออะไร - 0x48, 0x34, 0x33? การใช้แผ่นข้อมูลสำหรับเข็มทิศดิจิตอล HMC5883L อีกครั้ง เราจะเห็นว่านี่เป็นค่าเริ่มต้นสำหรับการลงทะเบียนการระบุตัวตนทั้งสาม

ขั้นตอนที่ 5
ในการรับข้อมูลเข็มทิศดิจิทัลบนสนามแม่เหล็ก คุณต้องอ่านรีจิสเตอร์ 3 ถึง 8 เหมือนกับที่เราอ่านรีจิสเตอร์ระบุตัวตน ข้อแตกต่างเพียงอย่างเดียวคือข้อมูลสำหรับแกนสามแกน X, Y และ Z แต่ละรายการจะแสดงเป็นตัวเลขแบบไบต์คู่ แปลงเป็นเลขฐานสิบ เราจะได้ทิศทางตามแกนทั้งสามแกนแต่ละอัน