حساس المجال المغناطيسي HMC5883

تعريف بالحساس :

HMC5883L عبارة عن حساس بوصلة رقمية ثلاثية المحاور XYZ تستخدم لغرضين عامين: لقياس مغنطة مادة مغناطيسية مثل المغناطيس الحديدي ، أو لقياس القوة المغناطيسية ، وفي بعض الحالات ، اتجاه المجال المغناطيسي عند نقطة في الفضاء. الاتصال مع HMC5883L بسيط ويتم كل ذلك من خلال بروتوكول I2C.

يمكن تشغيل هذا الحساس بمستويات جهد من 3 الى 5 فولت .

هذا الحساس قليل الاستخدام في التطبيقات العادية ولكنه شائع الاستخدام في الروبوتات المتحركة وتطبيقات مراقبة حالة الجو المتقدمة .

ونظراً لكون هذا الحساس يستخدم بروتوكول I2C فتوصيله بمختلف المتحكمات (كالاردوينو) بسيط وسهل حيث نحتاج لمنفذين فقط لنقل البيانات SDA ,SCL (اضافة لمنافذ التغذية الكهربائية).

Magnetic Field Sensor HMC5883

تحميل المكتبات الضرورية :

لتشغيل هذا الحساس مع الاردوينو نحتاج لمكتبة خاصة تدعى Adafruit HMC5883 وهي من تطوير شركة adafruit للالكترونيات ويجب ايضا ان نستخدم مكتبة Adafruit sensor للحساسات العامة.

التوصيل والبرمجة :

سنشرح الان كيفية توصيل هذا الحساس مع الاردوينو وسنتعلم كيفية قراءة قيم الحساس وعرضها على شاشة السيريال الخاصة بالاردوينو.

تقسم القراءات في الحساس الى نوعين اساسيين : القراءة الحقيقية والقراءة الاعتيادية.

القراءة الحقيقية :

من خلال هذه القراءة نستطيع تحديد زاوية الاتجاه حسي الاتجاهات الاربعة , مثلاً : شمال N يكون 0 او 360 درجة

				
					#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_HMC5883_U.h>
Adafruit_HMC5883_Unified mag = Adafruit_HMC5883_Unified(12345);
void setup(void){
Serial.begin(9600);}
void loop(){
sensors_event_t event;
mag.getEvent(&event);
float heading = atan2(event.magnetic.y, event.magnetic.x);
float declinationAngle = 0.22;
heading += declinationAngle;
if (heading < 0) {
heading += 2 * PI;  }
if (heading > 2 * PI) {
heading -= 2 * PI;  }
float headingDegrees = heading * 180 / M_PI;
Serial.print("Heading : ");
Serial.print(headingDegrees);
Serial.println(" degree");
delay(500);}
				
			
حساس المجال المغناطيسي HMC5883 | Magnetic Field Sensor HMC5883 with Arduino
حساس المجال المغناطيسي HMC5883 | Magnetic Field Sensor HMC5883

القراءة الاعتيادية :

تحول القراءة الحقيقية (الزاوية ) و تحدد الاتجاه بناءاً على ثنائية من الاتجاهات الرئيسية , مثال : 210°  تصبح S 30° W حيث S:SOUTH , W:WEST .

				
					#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_HMC5883_U.h>
Adafruit_HMC5883_Unified mag = Adafruit_HMC5883_Unified(12345);
void setup(void){
Serial.begin(9600);}
void loop(){
sensors_event_t event;
mag.getEvent(&event);
float heading = atan2(event.magnetic.y, event.magnetic.x);
float declinationAngle = 0.22;
heading += declinationAngle;
if (heading < 0) {
    heading += 2 * PI;  }
if (heading > 2 * PI) {
    heading -= 2 * PI;  }
float headingDegrees = heading * 180 / M_PI;
if (headingDegrees == 0 || headingDegrees == 360 ){
Serial.println("N");}
if (headingDegrees > 0 && headingDegrees < 90 ) {
Serial.print("N");
Serial.print(headingDegrees);
Serial.write(176);
Serial.println("E");}
if (headingDegrees == 90) {
Serial.println("E");}
if (headingDegrees > 90 && headingDegrees < 180 ) {
headingDegrees = 180 - headingDegrees;
Serial.print("S");
Serial.print(headingDegrees);
Serial.write(176);
Serial.println("E");}
if (headingDegrees == 180) {
Serial.println("S");}
if (headingDegrees > 180 && headingDegrees < 270 ) {
headingDegrees = headingDegrees - 180;
Serial.print("S");
Serial.print(headingDegrees);
Serial.write(176);
Serial.println("W");}
if (headingDegrees == 270) {
Serial.println("W");}
if (headingDegrees > 270 && headingDegrees < 360 ) {
headingDegrees = 360 - headingDegrees;
Serial.print("N");
Serial.print(headingDegrees);
Serial.write(176);
Serial.println("W");}
delay(500);}
				
			

قياس وتحديد اشعة الحقل المغناطيسي :

باستخدام هذا الكود ، تعرض الشاشة التسلسلية قيم اشعة المجال المغناطيسي على ثلاثة محاور (محاور X و Y و Z) وتقيس الشدة بواحدة micro-Tesla (uT).

				
					#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_HMC5883_U.h>
Adafruit_HMC5883_Unified mag = Adafruit_HMC5883_Unified(12345);
void setup() {
Serial.begin(9600);}
void loop(void) {
sensors_event_t event; 
mag.getEvent(&event);
Serial.print("X axis: "); Serial.print(event.magnetic.x); Serial.print(" uT   ");
Serial.print("Y axis: "); Serial.print(event.magnetic.y); Serial.print(" uT   ");
Serial.print("Z axis: "); Serial.print(event.magnetic.z); Serial.println(" uT");
delay(500);}
				
			

انتقل إلى المتجر

حساس المجال المغناطيسي

35.00 ر.س

أردوينو أونو

50.00 ر.س

لوحة تجارب 170 نقطة

8.00 ر.س
انتقال إلى الأعلى