mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP Kompass für Arduino gesucht


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Henry K. (sammx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich plane derzeit einen Sensor zur Bestimmung der Windrtichtung. Gedacht 
ist die Ausrichtung mithilfe eines Magnetometer auszulesen.

Da ich an meinen Arduino nur noch wenige Pins frei habe und diese auch 
nicht erweitern möchte, kann ich leider Lösungsansätze wie das Auslesen 
der Richtung mithilfe von mehreren Reed-Schaltern nicht verwenden.

Der Sensor sollte folgende Anforderungen erfüllen:
- Anschluss über I²C-Interface
- fehlerfreie Bibliothek für den Sensor verfügbar
- preiswert

Wichtig ist mir auch noch, eine absolute Richtung berechnen zu können, 
ohne dass der Sensor dauerhaft überwacht werden muss, da der Arduino 
nicht immer aktiv ist.
Eine Neigungskompensation benötige ich nicht.

Im Internet konnte ich einen geeigneten Sensor leider noch nicht finden. 
Insbesondere auch deswegen, da Sensoren wie der HMC5883L nicht mehr 
erhältlich sind.

Welchen Sensor würdet ihr empfehlen?

Autor: Beo Bachta (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Henry K. schrieb:
> Der Sensor sollte folgende Anforderungen erfüllen:
> - Anschluss über I²C-Interface
> - fehlerfreie Bibliothek für den Sensor verfügbar
> - preiswert

Du willst also dass dir gebratene Tauben in den Mund fliegen
während du im Schaukelstuhl sitzt, nicht wahr?

Das gibt's im Paradies.

Autor: Dr. Sommer (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Henry K. schrieb:
> - fehlerfreie Bibliothek für den Sensor verfügbar

Die Erstellung fehlerfreier Software ist extrem aufwendig, was daher nur 
sehr selten gemacht wird. Für Hobby-Frickler-Kram wie Arduino schon gar 
nicht. Dafür entsprechende Experten zu beauftragen wird also sehr teuer. 
Vielleicht kannst du das ja als Dissertation ausschreiben.

Autor: Henry K. (sammx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gut, das kam vielleicht etwas falsch rüber.

Mit fehlerfrei meinte ich vielmehr, dass die verfügbaren Bibliotheken 
keine 300 Issues offen haben, die primäre Funktionsmängel beschreiben.

Beo Bachta schrieb:
> Du willst also dass dir gebratene Tauben in den Mund fliegen
> während du im Schaukelstuhl sitzt, nicht wahr?

Wer will das nicht? Nein, Spaß bei Seite, ich möchte einfach nicht zu 
viel Zeit darin verlieren, eine eigene Bibliothek schreiben zu müssen.

Autor: donvido (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Henry K. schrieb:
> da Sensoren wie der HMC5883L nicht mehr
> erhältlich sind.

So ein Quatsch.

Autor: Beo Bachta (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Henry K. schrieb:
> Gut, das kam vielleicht etwas falsch rüber.

Neee, keine Sorge, da kommt schon alles richtig 'rüber.

Henry K. schrieb:
> Wichtig ist mir auch noch, ......

Autor: Wolfgang (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Henry K. schrieb:
> Mit fehlerfrei meinte ich vielmehr, dass die verfügbaren Bibliotheken
> keine 300 Issues offen haben, die primäre Funktionsmängel beschreiben.

So weit muss es erstmal kommen, dass bei der im Internet verfügbaren 
Software ein Ticketsystem mit "Issues" geführt wird.

Für so etwas simples, wie einen Richtungssensor würde mich das sehr 
wundern.

Warum brauchst du unbedingt einen Magnetfeldsensor. Willst du damit 
absolut gegen das Erdmagnetfeld messen? Woher soll dann die Information 
über die Missweisung kommen? Kannst du den Windmesser nicht einmal fest 
aufstellen und dabei definiert ausrichten? Warum darf es kein Sensor mit 
SPI sein? Wie hoch müssen Winkel- und Zeitauflösung sein?

Autor: Wolfgang (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Henry K. schrieb:
> Insbesondere auch deswegen, da Sensoren wie der HMC5883L nicht mehr
> erhältlich sind.
>
> Welchen Sensor würdet ihr empfehlen?

Beispielsweise einen HMC5883L
Oder soll es für eine Großserie sein, für die du die nächsten 15-Jahre 
Nachlieferbarkeit garantieren musst?

Sonst würde ich einfach knapp 2€ investieren und so ein Board bestellen.
Ebay-Artikel Nr. 322339666602

Autor: Henry K. (sammx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wolfgang schrieb:
> Beispielsweise einen HMC5883L
> Oder soll es für eine Großserie sein, für die du die nächsten 15-Jahre
> Nachlieferbarkeit garantieren musst?
>
> Sonst würde ich einfach knapp 2€ investieren und so ein Board bestellen.
> Ebay-Artikel Nr. 322339666602

Von denen hab ich schon zwei Stück rumliegen. Nur blöd, dass das keine 
HMC5883L sind, sondern billig gefälschte QMC5883, mit denen man keine 
plausiblen Werte erhälten kann.

donvido schrieb:
> So ein Quatsch.

Das liegt nämlich genau daran, dass HMC5883L nicht mehr hergestellt 
werden, da diese veraltet sind. Folglich verkaufen Plagiatoren 
gefälschte, unbrauchbare Chips als HMC5883L.

Wolfgang schrieb:
> Warum brauchst du unbedingt einen Magnetfeldsensor. Willst du damit
> absolut gegen das Erdmagnetfeld messen? Woher soll dann die Information
> über die Missweisung kommen? Kannst du den Windmesser nicht einmal fest
> aufstellen und dabei definiert ausrichten? Warum darf es kein Sensor mit
> SPI sein? Wie hoch müssen Winkel- und Zeitauflösung sein?

SPI kann ich auch nutzen, bin ich allerdings noch nicht eingearbeitet.
Ich kann auch den Windrichtungsmesser im Vorfeld aufstellen und 
ausrichten. Ich bin auch gerne offen für eine bessere Umsetzung.

: Bearbeitet durch User
Autor: Henry K. (sammx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat hier jemand schon Erfahrung mit einem MAG3110 Magnetometer?

Autor: Stefan S. (chiefeinherjar)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Wie wäre es mit einem Poti und Auslesen der Stellung über einen SPI-ADC?

Autor: Wolfgang (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Henry K. schrieb:
> Ich bin auch gerne offen für eine bessere Umsetzung.

Was hast du denn mit dem Kompasssensor vor? Den Sensor an die Windfahne 
zu hängen, um deren Richtung bezogen auf das Erdmagnetfeld damit zu 
bestimmen, ist wegen der nötigen elektrischen Verbindung meist wenig 
erfolgversprechend.

Autor: Henry K. (sammx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan S. schrieb:
> Wie wäre es mit einem Poti und Auslesen der Stellung über einen SPI-ADC?

Meines Wissens ist das Auslesen des Wertes zwischen ca. 359° und 1° bei 
einen Potentiometer schwierig bis unmöglich.

Autor: Henry K. (sammx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wolfgang schrieb:
> Was hast du denn mit dem Kompasssensor vor? Den Sensor an die Windfahne
> zu hängen, um deren Richtung bezogen auf das Erdmagnetfeld damit zu
> bestimmen, ist wegen der nötigen elektrischen Verbindung meist wenig
> erfolgversprechend.

Ja genau das habe ich vor. Die elektrische Verbindung dürfte mit einem 
Schleifring kein Problem darstellen.

Autor: Stefan S. (chiefeinherjar)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Henry K. schrieb:
> Wolfgang schrieb:
>> Was hast du denn mit dem Kompasssensor vor? Den Sensor an die Windfahne
>> zu hängen, um deren Richtung bezogen auf das Erdmagnetfeld damit zu
>> bestimmen, ist wegen der nötigen elektrischen Verbindung meist wenig
>> erfolgversprechend.
>
> Ja genau das habe ich vor. Die elektrische Verbindung dürfte mit einem
> Schleifring kein Problem darstellen.

Ich denke, er spielt eher auf das magnetische Feld der Stromversorgung 
an, welche den Sensor stören kann.

Henry K. schrieb:
> Stefan S. schrieb:
>> Wie wäre es mit einem Poti und Auslesen der Stellung über einen SPI-ADC?
>
> Meines Wissens ist das Auslesen des Wertes zwischen ca. 359° und 1° bei
> einen Potentiometer schwierig bis unmöglich.

Naja, das wäre ein undefinierter Bereich um 1 Grad. Ist das so schlimm?

: Bearbeitet durch User
Autor: Henry K. (sammx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan S. schrieb:
> Ich denke, er spielt eher auf das magnetische Feld der Stromversorgung
> an, welche den Sensor stören kann.

In der Nähe des Magnetsensor würden sich nur die Versorgungsleitungen 
des Sensors selbst sein.

Stefan S. schrieb:
> Woher weißt du das? Das sind 360 Schritte. 8 Bit reichen da nicht; der
> interne ADC vom Arduino hat schon 10 Bit und wenn man wirklich auf
> Nummer sicher gehen will nimmt man einen vernünftigen 12 Bit ADC und hat
> ganze 4096 Schritte.

Ich meine den Übergang von einen hohen auf einen niedrigen 
Widerstandswert am Übergang von 360° auf 0°

Autor: Stefan S. (chiefeinherjar)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Henry K. schrieb:
> Stefan S. schrieb:
>> Woher weißt du das? Das sind 360 Schritte. 8 Bit reichen da nicht; der
>> interne ADC vom Arduino hat schon 10 Bit und wenn man wirklich auf
>> Nummer sicher gehen will nimmt man einen vernünftigen 12 Bit ADC und hat
>> ganze 4096 Schritte.
>
> Ich meine den Übergang von einen hohen auf einen niedrigen
> Widerstandswert am Übergang von 360° auf 0°

Ja das ist mir dann auch aufgefallen, dass ich dich da falsch verstanden 
habe - mein Fehler.

Autor: Henry K. (sammx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan S. schrieb:
> Naja, das wäre ein undefinierter Bereich um 1 Grad. Ist das so schlimm?

Welcher Wert wird in diesem Bereich geliefert? Wenn das plausible Werte 
für eine andere Ausrichtung wären, erfasse ich eine falsche 
Himmelsrichtung.

Autor: Stefan S. (chiefeinherjar)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Henry K. schrieb:
> Stefan S. schrieb:
>> Naja, das wäre ein undefinierter Bereich um 1 Grad. Ist das so schlimm?
>
> Welcher Wert wird in diesem Bereich geliefert? Wenn das plausible Werte
> für eine andere Ausrichtung wären, erfasse ich eine falsche
> Himmelsrichtung.

Das könnte man in Software lösen.
Wenn vorher beispielsweise 358, 358, 357, usw Grad berechnet wurden - 
und dann ein Sprung auf 124 Grad stattfindet dann kann man diese 
verwerfen. Vereinfacht ausgedrückt.

Autor: Wolfgang (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Henry K. schrieb:
> Ja genau das habe ich vor. Die elektrische Verbindung dürfte mit einem
> Schleifring kein Problem darstellen.

Ich würde solchen mechanischen Aufwand vermeiden, alleine schon wegen 
Schleppfehlern auf Grund der Reibung. Oder willst du nur bei Starkwind 
messen? Was spricht gegen die berührungslose Abtastung der Position über 
eine optische Kodierscheibe. Auslesen kann man die über ein 8-Bit DIO, 
angebunden über I2C, SPI oder was genehm ist.

Stefan S. schrieb:
> Ich denke, er spielt eher auf das magnetische Feld der Stromversorgung
> an, welche den Sensor stören kann.

Bestimmt nicht. Stromversorgungsleitungen kann man verdrillen und 
Magnetfelder entstehen nur durch Strom, den man für die Anwendung 
hoffentlich klein halten kann. Wenn es ganz schlimm kommt, kann man die 
externe Stromversorgung während der Messung ausschalten und aus einem 
Kondensator leben ;-)

Autor: Henry K. (sammx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wolfgang schrieb:
> Ich würde solchen mechanischen Aufwand vermeiden, alleine schon wegen
> Schleppfehlern auf Grund der Reibung. Oder willst du nur bei Starkwind
> messen? Was spricht gegen die berührungslose Abtastung der Position über
> eine optische Kodierscheibe. Auslesen kann man die über ein 8-Bit DIO,
> angebunden über I2C, SPI oder was genehm ist.

Ich kann mir gerade nicht vorstellen, wie eine positionsbezogene 
Kodierscheibe aussehen müsste.
Welche Komponenten bräuchte ich für diese Lösung?

Autor: Sabine W. (sabine_w31)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wolfgang schrieb:
> Ich würde solchen mechanischen Aufwand vermeiden, alleine schon wegen
> Schleppfehlern auf Grund der Reibung. Oder willst du nur bei Starkwind
> messen? Was spricht gegen die berührungslose Abtastung der Position über
> eine optische Kodierscheibe. Auslesen kann man die über ein 8-Bit DIO,
> angebunden über I2C, SPI oder was genehm ist.

Ich würde die Drehung mit einem Rotationssensor von AMS messen. An einem 
Ende vom sich im Wind drehenden Teil einen Magneten befestigen, 
gegenüber dem Magneten kommt der Sensor, der mittels Hall-Sensoren die 
Drehung mit 12-14 Bit auflösen kann. Ausgelesen wirds mit SPI. Die 
Sensoren gibt es nackt oder auf kleinen Boards.

Autor: Henry K. (sammx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sabine W. schrieb:
> Ich würde die Drehung mit einem Rotationssensor von AMS messen. An einem
> Ende vom sich im Wind drehenden Teil einen Magneten befestigen,
> gegenüber dem Magneten kommt der Sensor, der mittels Hall-Sensoren die
> Drehung mit 12-14 Bit auflösen kann. Ausgelesen wirds mit SPI. Die
> Sensoren gibt es nackt oder auf kleinen Boards.

Welche Sensoren würdest du konkret empfehlen?

Autor: Manfred (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Henry K. schrieb:
> Da ich an meinen Arduino nur noch wenige Pins frei habe und diese auch
> nicht erweitern möchte, kann ich leider Lösungsansätze wie das Auslesen
> der Richtung mithilfe von mehreren Reed-Schaltern nicht verwenden.

Über einen Analogport, mit Widerständen?

Die Wertereihe zur Schaltung:
int KeyNo[9] = {914, 796,  679,  562, 464, 347,  229,  109, 0}; // 
analoge Tastenwerte

Und in der Abfrage natürlich mit etwas Toleranz:
if (KeyValue > (KeyNo[ChkKey] - 20) && KeyValue < (KeyNo[ChkKey] + 20))

Autor: Nautilus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Henry K. schrieb:
> Welche Sensoren würdest du konkret empfehlen?

Nimm doch einen BBC micro:bit.
Der hat auf der Platine einen Magnetfeldsensor. einen kinderleicht zu 
programmierenden Prozessor und einen I2c Bus.

Autor: Henry K. (sammx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nautilus schrieb:
> Henry K. schrieb:
>> Welche Sensoren würdest du konkret empfehlen?
>
> Nimm doch einen BBC micro:bit.
> Der hat auf der Platine einen Magnetfeldsensor. einen kinderleicht zu
> programmierenden Prozessor und einen I2c Bus.

Den kannte ich noch gar nicht. Sicherlich interessant, damit zu 
experimentieren. Leider ist er mir mit 15€ für den Anwendungszweck etwas 
zu teuer und braucht auch zu viel Strom.


Manfred schrieb:
> Über einen Analogport, mit Widerständen?
>
> Die Wertereihe zur Schaltung:
> int KeyNo[9] = {914, 796,  679,  562, 464, 347,  229,  109, 0}; //
> analoge Tastenwerte
>
> Und in der Abfrage natürlich mit etwas Toleranz:
> if (KeyValue > (KeyNo[ChkKey] - 20) && KeyValue < (KeyNo[ChkKey] + 20))

Hat gewisse Ähnlichkeit mit einem Shiftregister. Allerdings sind mir 8 
Reed-Schalter zu ungenau und ich habe auch leider keinen analogen PIN 
mehr frei.
Trotzdem danke für deinen Lösungsansatz.

Autor: Stefan (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

der Titel "Kompass für Arduino gesucht ist" unglücklich gewählt und 
nicht zielführend weil bei Kompass jeder irgendwie an das Erdmagnetfeld 
denkt.

Besser wäre "Rotary encoder gesucht" und dafür eigenen sich alle schon 
genannten ICs wie HMC5833L, QMC5833 oder auch MAG3110 bestens.

Wichtig ist nur dass nicht das Erdmagnetfeld benutzt wird sondern ein 
"diametral" magnetisierter Magnet in geeigneter Anordnung wie im Bild 
gezeigt am Ende der Drehachse.
Auflösungen von 1 Grad und besser sind möglich.

Veilleicht noch ein Hinweis aus eigener Erfahrung mit dem Mag3110: Es 
müssen unbedingt Fremdeffekte von (mag.) Eisenteilen in der Umgebung des 
Aufbaus irgendie kompensiert (herausgerechnet) werden da die ICs sehr 
empfindlch sind und diese Effekte sehr stören.
Dies gilt auch insbesondere bei der Bestimmung des Erdmagnetfelds da 
hier (bei meinem Aufbau) die konstanten Fremdeffekte fast immer um den 
Faktor 5 grösser sind.


Gruss

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.