آیا برای پروژه خود نیاز به شناسایی جهت قطب شمال دارید و گیج شده اید که چه کاری انجام دهید؟ و چه سنسور مغناطیس متری را انتخاب کنیم؟ این مقاله به شما آشنایی مختصری می دهد.
این پروژه از مغناطیسسنج سه محوره HMC5883L از Honeywell استفاده میکند که یک ماژول چند تراشهای (بهتر است به صورت بریک اوت بخرید) است و برای سنجش میدان مغناطیسی کم با رابط دیجیتال برای کاربردهایی مانند قطب نما و مغناطیس سنج طراحی شده است.
از تکنیک رابط I²C (مدار یکپارچه) برای برقراری ارتباط با میکروکنترلرها استفاده می کند و با ولتاژ 2.16-3.6 ولت جریان کمی مصرف می کند و وضوح 5 میلی گاوس را ارائه می دهد.
برد بریک اوت
اتصال آردوینو
Vcc برد برد را به منبع برق 3.3 ولت آردوینو و Gnd را به Gnd آردوینو وصل کنید. SDA (خط داده سریال) را به A4 و SCL (خط ساعت سریال) را به A5 آردوینو وصل کنید. اکنون به سراغ کد آردوینو می رویم و کتابخانه HMC5883L را از اینجا دریافت کنید. در آنجا می توانید از یک مثال ساده برای خواندن داده های حسگر به صورت سریال به قطب نمای مغناطیسی گرافیکی با استفاده از کد پردازش بیابید.
کد آردوینو
مثال ساده برای خواندن سنسور HMC5883L
#include <Wire.h> //I2C Arduino Library
#define address 0x1E //0011110b, I2C 7bit address of HMC5883
void setup(){
//Initialize Serial and I2C communications
Serial.begin(9600);
Wire.begin();
//Put the HMC5883 IC into the correct operating mode
Wire.beginTransmission(address); //open communication with HMC5883
Wire.send(0x02); //select mode register
Wire.send(0x00); //continuous measurement mode
Wire.endTransmission();
}
void loop(){
int x,y,z; //triple axis data
//Tell the HMC5883L where to begin reading data
Wire.beginTransmission(address);
Wire.send(0x03); //select register 3, X MSB register
Wire.endTransmission();
//Read data from each axis, 2 registers per axis
Wire.requestFrom(address, 6);
if(6<=Wire.available()){
x = Wire.receive()<<8; //X msb
x |= Wire.receive(); //X lsb
z = Wire.receive()<<8; //Z msb
z |= Wire.receive(); //Z lsb
y = Wire.receive()<<8; //Y msb
y |= Wire.receive(); //Y lsb
}
//Print out values of each axis
Serial.print("x: ");
Serial.print(x);
Serial.print(" y: ");
Serial.print(y);
Serial.print(" z: ");
Serial.println(z);
delay(250);
}
نمونه داده های پورت سریال
منابع