اتصال ماژول مغناطیس‌سنج سه محوره HMC5883L به رزبری‌پای

مقدمه

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

جهت اطلاعات بیشتر درباره‌ی مغناطیس‌سنج HMC5883L و نحوه بکارگیری آن، می‌توانید به مطلب ماژول مغناطیس‌سنج HMC5883L در بخش ماژول‌ها و سنسورها رجوع کنید.

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

دیاگرام اتصالات

ارتباط مغناطیس‌سنج سه محوره HMC5883L با رزبری‌پای

مثال

بزرگی میدان مغناطیسی در جهت‌های x ،y و z را از ماژول مغناطیس‌سنج HMC5883L خوانده و زاویه (heading angle) را از این سه محور محاسبه کرده و زاویه (heading angle) را روی مانیتور سریال نمایش می‌دهیم.

برای اطلاعات بیشتر درباره‌ی توابع پایتون I2C به کار رفته در رزبری‌پای، می‌توانید به مطلب توابع پایتون I2C برای رزبری‌پای رجوع کنید.

مراحل برنامه‌نویسی

  • ابتدا باید رجیستر پیکربندی A را برای حالت میانگین اندازه‌گیری ۸ نمونه در نرخ خروجی داده پیش‌فرض ۱۵ هرتز تنظیم کنیم.
  • بهره را با تنظیم رجیستر پیکربندی B مشخص کنیم، در اینجا 0xA0 (می‌توان هر بهره مطلوب دیگری را نوشت)
  • حالت عملکرد اندازه‌گیری بی‌وقفه (continous mode) را با رجیستر Mode تنظیم کنید. بنابراین مقدار رجیستر Mode باید 0x00 باشد.
مطلب پیشنهادی:  معرفی رزبری‌پای ۴

پس از مقداردهی اولیه، مقادیر خام رجیسترهای محور X ،Y و Z را بخوانید.

مقدار Heading را از فرمول زیر محاسبه کنید.

ارتباط مغناطیس‌سنج سه محوره HMC5883L با رزبری‌پای

برنامه پایتون

'''
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

مطلب پیشنهادی:  دسترسی به ورودی و خروجی‌های همه منظوره رزبری‌پای - Raspberry Pi GPIO

ارتباط مغناطیس‌سنج سه محوره HMC5883L با رزبری‌پای

منبع: ترجمه از سایت electronicwings.com

امیدواریم آموزش «اتصال ماژول مغناطیس‌سنج سه محوره HMC5883L به رزبری‌پای» براتون مفید واقع شده باشه. کامنت یادتون نره 🙂

اگر این نوشته‌ برایتان مفید بود لطفا کامنت بنویسید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

2 دیدگاه

  1. Amir Zadhoush

    با سلام
    سیستم عامل رزبری پای بر اساس لینوکس هست ؟؟
    یعنی میشه نرم افزار مناسب لینوکس رو روی اون نصب کرد ؟
    برای مثال میشه پیام رسان ایتا نسخه لینوکس رو رو رزبری نصب و اجرا کرد ؟