🍪 Privacy & Transparency

We and our partners use cookies to Store and/or access information on a device. We and our partners use data for Personalised ads and content, ad and content measurement, audience insights and product development. An example of data being processed may be a unique identifier stored in a cookie. Some of our partners may process your data as a part of their legitimate business interest without asking for consent. To view the purposes they believe they have legitimate interest for, or to object to this data processing use the vendor list link below. The consent submitted will only be used for data processing originating from this website. If you would like to change your settings or withdraw consent at any time, the link to do so is in our privacy policy accessible from our home page..

Vendor List | Privacy Policy
Skip to content

Technik Blog

Programmieren | Arduino | ESP32 | MicroPython | Python | Raspberry PI

Menu
  • Projekte
    • LED’s
    • Servo & Schrittmotoren
    • Sound
    • LCD’s
    • Kommunikation
    • Sicherheit
    • Weekend Project
  • Arduino
    • Tutorials
    • ProMini
      • Anschließen & Programmieren
    • Nano
      • Arduino Nano – Übersicht
    • UNO
      • Übersicht
    • MEGA 2560
      • Übersicht
    • Leonardo
      • Übersicht
    • NodeMCU
      • NodeMCU – “Einer für (fast) Alles!”
    • Lilypad
      • Arduino: Lilypad “Jetzt Geht’s Rund!”
    • WEMOS
      • WEMOS D1 – Arduino UNO kompatibles Board mit ESP8266 Chip
      • WEMOS D1 Mini – Übersicht
      • Wemos D1 mini Shields
    • STM32x
      • STM32F103C8T6 – Übersicht
    • Maker UNO
      • Maker UNO – Überblick und Test
    • ATTiny85
      • Mini Arduino mit ATTiny85 Chip
      • ATtiny85 mit dem Arduino UNO beschreiben
  • Android
  • Über mich
  • DeutschDeutsch
  • EnglishEnglish
Menu

Arduino Lektion 14: 3 Achsen Lagesensor, HMC5883L

Posted on 5. Dezember 20153. Mai 2023 by Stefan Draeger

Mit dem 3 Achsen Lagesensor HMC5883L kann man sich leicht eine digitale Wasserwaage bauen, aber dazu später mehr, jetzt erstmal zu dem Sensor.

Der Sensor ist nicht größer als ein 20Cent Stück und somit sehr gut für Mikroschaltungen geeignet.

3 Achsen Lagesensor HMC5883L
3 Achsen Lagesensor HMC5883L

Auch bei diesem „Bausatz“ musste man die Steckerleiste an den Sensor löten, was wirklich nicht schwierig ist.

  • Technische Daten
  • Die Schaltung
  • Bibliotheken für den Sensor
  • Der Quellcode – Arduino
  • Zwischenergebnis
  • Das Video
  • Download

Technische Daten

  • Maße
    • Breite – 16 mm
    • Höhe – 19 mm
  • Stromaufnahme
    • Ruhemodus – 2 µA
    • Arbeitsmodus – 100 µA

Die Schaltung

Der Sensor verfügt über folgende PIN’s

  • VCC +5V – 5V
  • GND – GND
  • SCL – analog PIN A5
  • SDA – analog PIN A4
  • DRDY – bleibt in diesem Beispiel frei
  • 3V3 – bleibt in diesem Beispiel frei
Arduino Nano mit angeschlossenem 3 Achsen Lagesensor, HMC5883L.
Arduino Nano mit angeschlossenem 3 Achsen Lagesensor, HMC5883L.

Bibliotheken für den Sensor

Zu dem 3 Achsen Lagesensor HMC5883L gibt es eine fertige Bibliothek von Adafruit welche aus dem GutHub Repository
https://github.com/adafruit/Adafruit_HMC5883_Unified geladen werden kann.
Wie eine Bibliothek in die Arduino IDE eingebunden wird habe ich im
Tutorial Arduino IDE, Include .h Datei beschrieben.

Im nachfolgenden Code wurde auf den Einsatz der Bibliothek verzichtet, da es über die Boardmittel genauso gut funktioniert.

Der Quellcode – Arduino

#include <Wire.h> //I2C Arduino Bibliothek

#define address 0x1E //0011110b, I2C 7Bit Adresse des HMC5883 Chips

void setup(){
  Serial.begin(9600); //Baudrate
  Wire.begin();
  Wire.beginTransmission(address); //Beginnen der Kommunikation über die Adresse, für das setzen der Konfiguration
  Wire.write(0x02); //select mode register
  Wire.write(0x00); //Modus für das fortlaufende lesen der Werte.
  Wire.endTransmission(); //Beenden der Kommunikation.
}

void loop(){
  
  int x; //X Achse
  int y; //Y Achse
  int z; //Z Achse

  Wire.beginTransmission(address); //Beginnen der Kommunikation
  Wire.write(0x03); //select register 3, X MSB register
  Wire.endTransmission(); //Beenden der Kommunikation
  
  //Lesen der Daten vom 6 fach Register (2 Register pro Achse)
  Wire.requestFrom(address, 6);
  if(6<=Wire.available()){
    x = Wire.read()<<8; //X msb
    x |= Wire.read(); //X lsb
    z = Wire.read()<<8; //Z msb
    z |= Wire.read(); //Z lsb
    y = Wire.read()<<8; //Y msb
    y |= Wire.read(); //Y lsb
  }
  
  //Ausgabe der Werte für die X,Y,Z Achsen
  Serial.print("{");
  Serial.print("[x =");
  Serial.print(x);
  Serial.print("]");
  Serial.print("[y =");
  Serial.print(y);
  Serial.print("]");
  Serial.print("[z =");
  Serial.print(z);
  Serial.print("]");
  Serial.print("}");
  Serial.println("");
  
  delay(500); //500ms Pause.
}

Zwischenergebnis

Wenn man jetzt das Programm auf dem Arduino startet (kompiliert und übermittelt.), kann man auf dem seriellen Monitor folgende Ausgabe sehen.

Ausgabe des Sketches auf dem Serial Monitor der Arduino IDE
Ausgabe des Sketches auf dem Serial Monitor der Arduino IDE

Als nächsten Schritt möchte ich nun diese Werte auf einem Max7219 LED Shield darstellen.

Das Video

3 Achsen Lagesensor, HMC5883L
Dieses Video auf YouTube ansehen.

Download

3 Achsen Lagesensor, HMC5883LHerunterladen

8 thoughts on “Arduino Lektion 14: 3 Achsen Lagesensor, HMC5883L”

  1. Andre sagt:
    14. April 2018 um 18:12 Uhr

    Hi,
    kannst du mir helfen…
    Ich benutze deinen Code und eine Arduino Uno. Nur leider bekomme ich als Ausgabe für alle Achsen nur 0. Die I2C Adresse habe ich über einen Code ausgelesen (0x0D). Diese habe ich unter #define Address eingetragen, aber leider bekomme ich nur als Ausgabe 0 für alle Achsen.

    Danke

    Antworten
    1. Stefan Draeger sagt:
      14. April 2018 um 19:18 Uhr

      Hi,

      wie hast du die Adresse ermittelt?
      Es gibt einen I2C Scanner (https://playground.arduino.cc/Main/I2cScanner)
      mit diesem kannst du die korrekte Adresse ermitteln.

      Gruß,

      Stefan

      Antworten
      1. Andre sagt:
        14. April 2018 um 20:05 Uhr

        Ja genau den scanner hab ich benutzt

        Antworten
        1. Stefan Draeger sagt:
          14. April 2018 um 20:31 Uhr

          Hi,

          kannst du mir bitte deinen Sketch senden und vieleicht ein kleines Foto von deinem Aufbau?
          Manchmal liegt der Fehler auch einfach im Anschluss der PINs.

          E-Mail: info@draeger-it.blog

          Gruß,

          Stefan

          Antworten
  2. Martin Esche sagt:
    13. Dezember 2019 um 10:07 Uhr

    Was bedeutet Ruhemodus / Arbeitsmodus bei dem Sensor?

    Antworten
  3. Oliver sagt:
    29. Dezember 2021 um 17:07 Uhr

    Hallo,

    Beitrag ist zwar schon älter, hoffe trotzdem das mir hier geholfen werden kann.

    Habe auch das Problem das ich für x,y und z nur 0 angezeigt bekomme.

    Was könnt hier eine Lösung sein?

    Danke!

    Antworten
    1. Stefan Draeger sagt:
      29. Dezember 2021 um 17:38 Uhr

      Hi,

      welchen Mikrocontroller verwendest du? Hast du ein Bild deiner Schaltung für mich?

      Gruß,

      Stefan

      Antworten
  4. Günther sagt:
    6. August 2022 um 18:46 Uhr

    Hallo zusammen, ich habe ein ähnliches Problem. Mit dem I2C-Scanner die Adresse ausgelesen und im Quellcode hinterlegt. Allerdings sind alle Werte auf 0….
    Wie habt Ihr das gelöst?

    Danke für die Hilfe.
    Günther

    Antworten

Schreibe einen Kommentar Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Kategorien

Tools

  • 8×8 LED Matrix Tool
  • 8×16 LED Matrix Modul von Keyestudio
  • 16×16 LED Matrix – Generator
  • Widerstandsrechner
  • Rechner für Strom & Widerstände
  • ASCII Tabelle

Meta

  • Videothek
  • Impressum
  • Datenschutzerklärung
  • Disclaimer
  • Kontakt
  • Cookie-Richtlinie (EU)

Links

Blogverzeichnis Bloggerei.de Blogverzeichnis TopBlogs.de das Original - Blogverzeichnis | Blog Top Liste Blogverzeichnis trusted-blogs.com
©2023 Technik Blog | Built using WordPress and Responsive Blogily theme by Superb