السبت، 15 مارس، 2014

البوصلة الألكترونية HMC5883L

البوصلة الألكترونية HMC5883L 



دائماً ما نسمع عن البوصلة , و هي اداة تستخدم للاسترشاد بالأتجاهات , حيث يوجد هناك ابره مصنوعة من مواد ممغنطة  Ferrous Magnatic و دائماً ما تتجه نحو القطب المغناطيسي الجنوبي" القطب الشمالي الجغرافي "  , و الفكرة انه يتجه نحو المجال المغناطيسي للكرة الأرضية , مثلاً لن تعمل البوصلة في وجود مجالات مغناطيسية مجاورة لأنه قد تسبب في تغيير المجال المغناطيسي للكرة الأرضية .








بالنسبة للبوصلة الكهربائية فعملها مختلف نوعاً ما من ناحية التركيب , اذا انها تتكون من 3 مقاومات ممغنطة تتغير مقاومتها بناءاً على المجالات المغناطيسية المتكونه حوله , و بناءاً على قيمة هذه المقاومات يتحدد قيمة التيار المار فيها , و عادة ما تكون هذه المقاومات الممغنطة موجودة داخل شرائح متكاملة IC تقوم بتنفيذ كل هذه العمليات المعقدة و تخزن النتائج في مسجلات Register يسهل الوصول لها .


ما سأقوم بشرحه اليوم هو الحساس HMC5883L و هو حساس يستطيع قراءة التغيرات في المجالات المغاطيسية القصيرة , و تحتوي على بروتوكول اتصال رقمي الا و هو I2C و مسجلات بطول 12Bit ADC ,و بشدة المجال التي يستطيع قراءتها من -8 إلى  8 جاوس  , يستعمل في اجهزة الهاتف , الاجهزة اللوحية , في اجهزة الملاحة




ما ستحتاجه لتنفيذ هذه التجربة :

1) بطاقة أردوينو Uno
2)الحساس HMC5883L 
3) اسلاك توصيل Jumper
4) BreadBoard

و التوصيل كما في الصورة , تذكر مصدر الجهد 3.3 فولت و ليس 5 فولت , و أي توصيل مع المصدر 5 فولت سيتسبب بتخريب هذه القطعة , فكن حذراً



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

هناك العديد من المكتبات , لكن أفضلها يمكن ان تحمله من هنا .

بعد ان تفك الضغط قم الضغط ثم وضع المكتبة في مسار المكتبات داخل برنامج الأردوينو ثم اعد تشغيل الأردوينو , قم بفتح
 المثال المرفق مع المكتبة .
/*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
===============================================
*/

// Arduino Wire library is required if I2Cdev I2CDEV_ARDUINO_WIRE implementation
// is used in I2Cdev.h
#include "Wire.h"

// I2Cdev and HMC5883L must be installed as libraries, or else the .cpp/.h files
// for both classes must be in the include path of your project
#include "I2Cdev.h"
#include "HMC5883L.h"

// class default I2C address is 0x1E
// specific I2C addresses may be passed as a parameter here
// this device only supports one I2C address (0x1E)
HMC5883L mag;

int16_t mx, my, mz;

#define LED_PIN 13
bool blinkState = false;

void setup() {
    // join I2C bus (I2Cdev library doesn't do this automatically)
    Wire.begin();

    // initialize serial communication
    // (38400 chosen because it works as well at 8MHz as it does at 16MHz, but
    // it's really up to you depending on your project)
    Serial.begin(38400);

    // initialize device
    Serial.println("Initializing I2C devices...");
    mag.initialize();

    // verify connection
    Serial.println("Testing device connections...");
    Serial.println(mag.testConnection() ? "HMC5883L connection successful" : "HMC5883L connection failed");

    // configure Arduino LED for
    pinMode(LED_PIN, OUTPUT);
}

void loop() {
    // read raw heading measurements from device
    mag.getHeading(&mx, &my, &mz);

    // display tab-separated gyro x/y/z values
    Serial.print("mag:\t");
    Serial.print(mx); Serial.print("\t");
    Serial.print(my); Serial.print("\t");
    Serial.print(mz); Serial.print("\t");
    
// To calculate heading in degrees. 0 degree indicates North
    float heading = atan2(my, mx);
    if(heading < 0)
      heading += 2 * M_PI;
    Serial.print("heading:\t");
    Serial.println(heading * 180/M_PI);

    // blink LED to indicate activity
    blinkState = !blinkState;
    digitalWrite(LED_PIN, blinkState);
}




 يجب الاخد بعين الاعتبار انها غير دقيقه  لكن بنسبه قليله, السبب هو شدة المجال المغناطيسي المؤثر حول البوصلة , فعند وجودها وسط مجالات مغناطيسية عالية , محركات كهربائية ذات ضجيج عالي , تبدأ البوصلة في اعطاء نتائج غير منطقية .








0 التعليقات :

إرسال تعليق

 
Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.