คู่มือฉบับสมบูรณ์เกี่ยวกับการใช้ HMC5883L กับ Arduino

  • การเชื่อมต่อ HMC5883L กับ Arduino ผ่านการสื่อสาร I2C
  • รหัสอ่านแกน X, Y, Z ของสนามแม่เหล็ก
  • สร้างเข็มทิศดิจิตอลโดยการปรับความลาดเอียงของแม่เหล็ก

รหัส hmc5883l arduino-3

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

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

HMC5883L คืออะไรและทำงานอย่างไร

HMC5883L เป็น แมกนีโตมิเตอร์แบบสามแกน ซึ่งตรวจวัดส่วนประกอบของสนามแม่เหล็กโลกในแกน X, Y และ Z ซึ่งไม่เพียงช่วยให้ตรวจพบสนามแม่เหล็กเท่านั้น แต่ยังช่วยให้สามารถกำหนดทิศทางผ่านการคำนวณตามการวัดที่ได้รับอีกด้วย คุณลักษณะเหล่านี้ทำให้เป็นเซ็นเซอร์ที่เหมาะสำหรับการสร้างระบบการวางแนว เช่น เข็มทิศดิจิตอล

เซ็นเซอร์มักพบในโมดูลต่างๆ เช่น รุ่น GY-273 ซึ่งรวมถึงอุปกรณ์อิเล็กทรอนิกส์ที่จำเป็นด้วยเพื่ออำนวยความสะดวกในการเชื่อมต่อโดยตรงกับบอร์ด Arduino หรือไมโครคอนโทรลเลอร์อื่นๆ แหล่งจ่ายไฟมีความยืดหยุ่นและสามารถจ่ายไฟได้ทั้ง 3.3V และ 5V ซึ่งทำให้มีความหลากหลายมากในแง่ของความเข้ากันได้กับระบบต่างๆ

การเชื่อมต่อ Arduino

การเชื่อมต่อ HMC5883L กับ Arduino ทำได้ง่ายมากด้วยอินเทอร์เฟซ I2C ที่ใช้ การสื่อสารนี้ต้องการเพียงสองพินเท่านั้น: SDA และ SCLซึ่งจะต้องเชื่อมต่อกับพินที่สอดคล้องกันบนบอร์ด Arduino

  • ไปยัง Arduino Uno, นาโน และ มินิ : SDA เชื่อมต่อกับขา A4 และ SCL ถึง A5
  • หากคุณใช้ Arduino Mega หรือ Due: ต้องเชื่อมต่อ SDA กับพิน 20 และ SCL เพื่อพิน 21
  • ในกรณีของ Arduino Leonardo: SDA ไปที่พิน 2 และ SCL ไปที่พิน 3

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

การอ่านสนามแม่เหล็ก

วิธีการทำงานของ HMC5883L หลักคือการอ่านค่าสนามแม่เหล็กทั้งสามแกน เพื่อให้ได้ค่าเหล่านี้บน Arduino เราใช้ไลบรารีที่พัฒนาโดย Jeff Rowberg พบกับร้านหนังสือได้ที่ ที่เก็บ GitHub ของคุณ และดาวน์โหลดเพื่อใช้ใน Arduino IDE

เมื่อติดตั้งไลบรารีแล้ว เซ็นเซอร์จะสามารถเริ่มต้นและเริ่มอ่านค่าสนามแม่เหล็กได้ นี่เป็นตัวอย่างง่ายๆ ที่ทำสิ่งนี้:

#include "Wire.h"
#include "I2Cdev.h"
#include "HMC5883L.h"
HMC5883L magnetometro;
int16_t mx, my, mz;

void setup() {
Serial.begin(9600);
Wire.begin();
magnetometro.initialize();
}

void loop(){
magnetometro.getHeading(&mx, &my, &mz);
Serial.print("mx: "); Serial.print(mx);
Serial.print(" my: "); Serial.print(my);
Serial.print(" mz: "); Serial.println(mz);
delay(100);
}

ในโค้ดนี้ เครื่องวัดสนามแม่เหล็กจะเริ่มต้นและอ่านค่าบนทั้งสามแกนแบบวนซ้ำ ทุกครั้งที่เราดำเนินการ `loop()` ค่าของสนามแม่เหล็กใน X, Y และ Z จะแสดงบนมอนิเตอร์แบบอนุกรม

การตั้งค่าช่วงและอัตราขยาย

HMC5883L ช่วยให้คุณสามารถปรับ ช่วงการวัดสนามแม่เหล็ก ระหว่าง ±0.88 Gauss และ ±8.1 Gauss โดยมีระดับเกนต่างกัน ช่วงเริ่มต้นคือ ±1.3 Gauss และคุณสามารถแก้ไขได้เพื่อให้เหมาะกับความต้องการของโปรเจ็กต์ของคุณ ซึ่งสามารถทำได้โดยใช้บรรทัดต่อไปนี้ภายในโค้ด:

magnetometro.setGain(value);

ที่ไหน ความคุ้มค่า เป็นจำนวนเต็มระหว่าง 0 ถึง 7 ซึ่งจะเลือกระดับเกน ด้านล่างเราจะแสดงตารางที่มีค่าที่เกี่ยวข้อง:

ความกล้าหาญ Rango เกน (LSB/เกาส์)
0 ±0.88ก 1370
1 ±1.3ก 1090
2 ±1.9ก 820
3 ±2.5ก 660
4 ±4.0ก 440
5 ±4.7ก 390
6 ±5.6ก 330
7 ±8.1ก 230

การสร้างเข็มทิศดิจิทัล

การใช้งานทั่วไปอย่างหนึ่งของ HMC5883L คือการสร้าง เข็มทิศดิจิตอล- ในการทำเช่นนี้ เราจำเป็นต้องคำนวณมุมระหว่างเซ็นเซอร์และทิศเหนือแม่เหล็กโดยใช้การอ่านแกน X และ Y ซึ่งทำได้โดยใช้สูตร:

float angulo = atan2(my, mx) * 180 / M_PI;

ค่านี้จะทำให้คุณมีมุมการวางแนวเทียบกับทิศเหนือแม่เหล็ก เพื่อปรับมุมนี้ให้เป็น ทิศเหนือทางภูมิศาสตร์คุณต้องคำนึงถึงการปฏิเสธตำแหน่งแม่เหล็กของคุณ ซึ่งคุณสามารถปรึกษาได้จากเว็บไซต์ต่างๆ เช่น www.ign.es หรือ www.ngdc.noaa.gov

การปฏิเสธแม่เหล็กที่ถูกต้อง

เมื่อคุณมีความเบี่ยงเบนทางแม่เหล็กของตำแหน่งของคุณแล้ว คุณเพียงแค่ต้องลบมันออกจากมุมที่ได้รับ ตัวอย่างเช่น:

angulo -= declinacion;

เมื่อมุมเป็นลบ คุณสามารถเพิ่ม 360 องศาเพื่อให้ได้ค่าบวกที่ปรับระหว่าง 0 ถึง 360 องศาเสมอ:

if (angulo < 0) angulo += 360;

การตั้งค่านี้จะทำให้คุณมีเข็มทิศที่จะชี้ไปทางทิศเหนือทางภูมิศาสตร์อย่างแม่นยำเสมอ

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


เพิ่มเป็นแหล่งที่มาที่ต้องการ