Τρίτη 5 Ιουλίου 2016

Μέτρηση μαγνητικού πεδίου με τον Arduino και τον αισθητήρα SS49E

Το ολοκληρωμένο τριών ακίδων SS49Ε της Honeywell περιλαμβάνει ένα αισθητήρα μαγνητικού πεδίου, που η λειτουργία του στηρίζεται στο φαινόμενο Hall, καθώς και τα απαραίτητα ηλεκτρονικά στοιχεία για την ενίσχυση του ασθενούς σήματος. Στην έξοδο του ολοκληρωμένου η παραγόμενη τάση είναι ευθέως ανάλογη της έντασης του μαγνητικού πεδίου στο οποίο βρίσκεται ο αισθητήρας.
Με βάση τα στοιχεία που δίνει ο κατασκευαστής της διάταξης:

Στοιχεία από τον κατασκευαστή του αισθητήρα SS49E

  • Εκτός μαγνητικού πεδίου η τάση στην έξοδο του ολοκληρωμένου ισούται με το μισό της τάσης τροφοδοσίας (Vout = 2.5V αν Vcc=5V)
  • Η τάση στην έξοδο αυξάνεται με τυπικό ρυθμό 1,4mV/Gauss όταν στη μπροστινή επιφάνεια του ολοκληρωμένου προσεγγίζει ένας νότιος μαγνητικός πόλος και μειώνεται με τον ίδιο ρυθμό όταν προσεγγίζει βόρειος μαγνητικός πόλος.
  • Ο αισθητήρας μετράει μαγνητικά πεδία έντασης από -1000 έως 1000 Gauss (-100 έως 100 mT)
Ο αισθητήρας συνδέεται στον Arduino ως εξής: Η ακίδα 1 του αισθητήρα στην ακίδα 5V του Arduino, η ακίδα 2 στην ακίδα γείωσης του Arduino και η ακίδα 3 στην αναλογική είσοδο Α0 του Arduino.

Για τη σύνδεση του αισθητήρα στον Arduino

Με το ακόλουθο sketch μετράμε την ένταση του μαγνητικού πεδίου με τον αισθητήρα. Το ίδιο sketch μπορεί να χρησιμοποιηθεί και με διαφορετικούς αισθητήρες μαγνητικού πεδίου τύπου φαινομένου Hall όπως οι Α1301 ή Α1302 της Allegro Microsystems.

#define NOFIELD 509L    // Analog output with no applied field, calibrate this

// Uncomment one of the lines below according to device in use A1301 or A1302 or SS49e
// This is used to convert the analog voltage reading to milliGauss
//#define TOMILLIGAUSS 1953L   // For A1301: 2.5mV = 1Gauss, and 1024 analog steps = 5V, so 1 step = 1953mG
//#define TOMILLIGAUSS 3756L  // For A1302: 1.3mV = 1Gauss, and 1024 analog steps = 5V, so 1 step = 3756mG
#define TOMILLIGAUSS 3488L    // For SS49e: 1.4mV = 1Gauss, and 1024 analog steps = 5V, so 1 step = 3488mG

void setup()
{
  Serial.begin(115200);
}

void loop()
{
    //  Μeasure magnetic field
    int raw = analogRead(0);

    //  Uncomment this to get a raw reading for calibration of no-field point
    //  Serial.print("Raw reading: ");
    //  Serial.print(raw);
    //  Serial.print(" - ");

    long compensated = raw - NOFIELD;                                            // adjust relative to no applied field
    float magnField = compensated * TOMILLIGAUSS / 10000.0;   // adjust scale to mili Tesla

    Serial.print(magnField);
    Serial.print(" mT ");

    if ( magnField > 0 )     Serial.println("(South pole)");
    else if( magnField < 0 ) Serial.println("(North pole)");
    else Serial.println();

    delay(1000);
}

Αρχικά πρέπει να αποσχολιαστούν οι τρεις γραμμές μετά την "// Uncomment this ..." ώστε αφού μεταφορτωθεί o κώδικας στον Arduino, να πάρουμε στη σειριακή κονσόλα την τιμή που επιστρέφει ο αισθητήρας όταν ευρίσκεται εκτός μαγνητικού πεδίου. Την τιμή αυτή πρέπει να εισάγουμε στη μεταβλητή NOFIELD του sketch. Μετατρέπουμε ξανά σε σχόλια τις τρεις προηγούμενες γραμμές και στη συνέχεια και εκ νέου μεταγλωτίζουμε και μεταφορτώνουμε το sketch στον Arduino. Κατά την εκτέλεση του προγράμματος και πλησιάζοντας το βόρειο και μετά το νότιο πόλο ενός μαγνήτη στον αισθητήρα, στη σειριακή κονσόλα παίρνουμε:

Τα αποτελέσματα μέτρησης μαγνητικού πεδίου με τον Arduino



Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου