مقدمه
- مغناطیسسنج HMC5883L برای اندازهگیری اندازه و جهت میدان مغناطیسی زمین به کار میرود. این سنسور برای قطبیابی و مگنومتری ارزان قیمت به کار میرود.
- این سنسور میدان مغناطیسی زمین را در محورهای X ،Y و Z از میلی گوس تا ۸ گوس اندازه میگیرد.
- میتوان از آن برای پیدا کردن جهت سر قطعه نیز استفاده کرد.
- این سنسور از پروتکل I2C برای ارتباط با میکروکنترلر بهره میگیرد.
جهت اطلاعات بیشتر دربارهی مغناطیسسنج HMC5883L و نحوه بکارگیری آن، میتوانید به مطلب ماژول مغناطیسسنج HMC5883L در بخش ماژولها و سنسورها رجوع کنید.
برای برقرار کردن ارتباط بین ماژول مغناطیسسنج HMC5883L با رزبریپای، باید از فعال بودن پروتکل I2C روی رزبریپای اطمینان حاصل کنیم. بنابراین پیش از برقرای ارتباط، باید برخی پیکربندیهای مربوط به I2C را روی رزبریپای انجام دهیم که برای آن میتوانید به مطلب I2C رزبریپای مراجعه کنید.
دیاگرام اتصالات

مثال
بزرگی میدان مغناطیسی در جهتهای x ،y و z را از ماژول مغناطیسسنج HMC5883L خوانده و زاویه (heading angle) را از این سه محور محاسبه کرده و زاویه (heading angle) را روی مانیتور سریال نمایش میدهیم.
برای اطلاعات بیشتر دربارهی توابع پایتون I2C به کار رفته در رزبریپای، میتوانید به مطلب توابع پایتون I2C برای رزبریپای رجوع کنید.
مراحل برنامهنویسی
- ابتدا باید رجیستر پیکربندی A را برای حالت میانگین اندازهگیری ۸ نمونه در نرخ خروجی داده پیشفرض ۱۵ هرتز تنظیم کنیم.
- بهره را با تنظیم رجیستر پیکربندی B مشخص کنیم، در اینجا 0xA0 (میتوان هر بهره مطلوب دیگری را نوشت)
- حالت عملکرد اندازهگیری بیوقفه (continous mode) را با رجیستر Mode تنظیم کنید. بنابراین مقدار رجیستر Mode باید 0x00 باشد.
پس از مقداردهی اولیه، مقادیر خام رجیسترهای محور X ،Y و Z را بخوانید.
مقدار Heading را از فرمول زیر محاسبه کنید.

برنامه پایتون
'''
Find Heading by using HMC5883L interface with Raspberry Pi using Python
http://www.electronicwings.com
'''
import smbus #import SMBus module of I2C
from time import sleep #import sleep
import math
#some MPU6050 Registers and their Address
Register_A = 0 #Address of Configuration register A
Register_B = 0x01 #Address of configuration register B
Register_mode = 0x02 #Address of mode register
X_axis_H = 0x03 #Address of X-axis MSB data register
Z_axis_H = 0x05 #Address of Z-axis MSB data register
Y_axis_H = 0x07 #Address of Y-axis MSB data register
declination = -0.00669 #define declination angle of location where measurement going to be done
pi = 3.14159265359 #define pi value
def Magnetometer_Init():
#write to Configuration Register A
bus.write_byte_data(Device_Address, Register_A, 0x70)
#Write to Configuration Register B for gain
bus.write_byte_data(Device_Address, Register_B, 0xa0)
#Write to mode Register for selecting mode
bus.write_byte_data(Device_Address, Register_mode, 0)
def read_raw_data(addr):
#Read raw 16-bit value
high = bus.read_byte_data(Device_Address, addr)
low = bus.read_byte_data(Device_Address, addr+1)
#concatenate higher and lower value
value = ((high << 8) | low)
#to get signed value from module
if(value > 32768):
value = value - 65536
return value
bus = smbus.SMBus(1) # or bus = smbus.SMBus(0) for older version boards
Device_Address = 0x1e # HMC5883L magnetometer device address
Magnetometer_Init() # initialize HMC5883L magnetometer
print (" Reading Heading Angle")
while True:
#Read Accelerometer raw value
x = read_raw_data(X_axis_H)
z = read_raw_data(Z_axis_H)
y = read_raw_data(Y_axis_H)
heading = math.atan2(y, x) + declination
#Due to declination check for >360 degree
if(heading > 2*pi):
heading = heading - 2*pi
#check for sign
if(heading < 0):
heading = heading + 2*pi
#convert into angle
heading_angle = int(heading * 180/pi)
print ("Heading Angle = %d°" %heading_angle)
sleep(1)
خروجی HMC5883L

منبع: ترجمه از سایت electronicwings.com
امیدواریم آموزش «اتصال ماژول مغناطیسسنج سه محوره HMC5883L به رزبریپای» براتون مفید واقع شده باشه. کامنت یادتون نره 🙂
اگر این نوشته برایتان مفید بود لطفا کامنت بنویسید.
آموزش طراحی و ساخت پروژه های الکترونیک و برنامه نویسی میکروکنترلر ها آموزش الکترونیک,آموزش رزبری پای,آموزش راه اندازی ماژول و سنسور,آموزش آردوینو,نرم افزار های الکترونیک, طراحیPCB,برنامه نویسی میکروکنترلرها ARM AVR PIC FPGA
با سلام
سیستم عامل رزبری پای بر اساس لینوکس هست ؟؟
یعنی میشه نرم افزار مناسب لینوکس رو روی اون نصب کرد ؟
برای مثال میشه پیام رسان ایتا نسخه لینوکس رو رو رزبری نصب و اجرا کرد ؟
بله هسته لینوکس هست.