مقدمه
- مغناطیسسنج 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 به رزبریپای» براتون مفید واقع شده باشه. کامنت یادتون نره 🙂
اگر این نوشته برایتان مفید بود لطفا کامنت بنویسید.
با سلام
سیستم عامل رزبری پای بر اساس لینوکس هست ؟؟
یعنی میشه نرم افزار مناسب لینوکس رو روی اون نصب کرد ؟
برای مثال میشه پیام رسان ایتا نسخه لینوکس رو رو رزبری نصب و اجرا کرد ؟
بله هسته لینوکس هست.