Inhaltsverzeichnis:

Arduino Magnetometer - Gunook
Arduino Magnetometer - Gunook

Video: Arduino Magnetometer - Gunook

Video: Arduino Magnetometer - Gunook
Video: How to Use Magnetometers on the Arduino - Ultimate Guide to the Arduino #41 2024, November
Anonim
Arduino-Magnetometer
Arduino-Magnetometer

Was bauen wir?

Menschen können keine Magnetfelder erkennen, aber wir verwenden Geräte, die ständig auf Magneten angewiesen sind. Motoren, Kompasse, Rotationssensoren oder Windkraftanlagen benötigen zum Beispiel Magnete zum Betrieb. In diesem Tutorial wird beschrieben, wie Sie ein Arduino-basiertes Magnetometer bauen, das ein Magnetfeld mit drei Hall-Effekt-Sensoren erfasst. Der Magnetfeldvektor an einem Ort wird mittels isometrischer Projektion auf einem kleinen Bildschirm angezeigt.

Was ist ein Arduino?

Ein Arduino ist ein kleiner benutzerfreundlicher Open-Source-Mikrocontroller. Es hat digitale Ein- und Ausgangspins. Es verfügt auch über analoge Eingangspins, die zum Lesen von Eingaben von Sensoren nützlich sind. Es stehen verschiedene Arduino-Modelle zur Verfügung. Dieses Tutorial beschreibt, wie Sie entweder das Arduino Uno oder das Arduino MKR1010 verwenden. Es können jedoch auch andere Modelle verwendet werden.

Bevor Sie mit diesem Tutorial beginnen, laden Sie die Arduino-Entwicklungsumgebung sowie alle Bibliotheken herunter, die für Ihr spezielles Modell benötigt werden. Die Entwicklungsumgebung ist unter https://www.arduino.cc/en/main/software verfügbar, und Installationsanweisungen sind unter https://www.arduino.cc/en/main/software verfügbar.

Was ist ein Magnetfeld?

Permanentmagnete üben Kräfte auf andere Permanentmagnete aus. Stromführende Drähte üben Kräfte auf andere stromführende Drähte aus. Auch Permanentmagnete und stromführende Drähte üben Kräfte aufeinander aus. Diese Kraft pro Einheit Teststrom ist ein magnetisches Feld.

Wenn wir das Volumen eines Objekts messen, erhalten wir eine einzelne Skalarzahl. Magnetismus wird jedoch durch ein Vektorfeld beschrieben, eine kompliziertere Größe. Erstens variiert es mit der Position im gesamten Raum. Zum Beispiel ist das Magnetfeld, das einen Zentimeter von einem Permanentmagneten entfernt liegt, wahrscheinlich größer als das Magnetfeld, das zehn Zentimeter entfernt ist.

Als nächstes wird das Magnetfeld an jedem Punkt im Raum durch einen Vektor dargestellt. Die Größe des Vektors repräsentiert die Stärke des Magnetfelds. Die Richtung ist sowohl zur Kraftrichtung als auch zur Richtung des Prüfstroms senkrecht.

Wir können uns das Magnetfeld an einer einzigen Stelle als Pfeil vorstellen. Wir können uns das Magnetfeld im ganzen Raum durch eine Reihe von Pfeilen an verschiedenen Orten vorstellen, möglicherweise von unterschiedlicher Größe und in verschiedene Richtungen. Eine schöne Visualisierung ist unter https://www.falstad.com/vector3dm/ verfügbar. Das von uns gebaute Magnetometer zeigt das Magnetfeld am Ort der Sensoren als Pfeil auf dem Display an.

Was ist ein Hall-Effekt-Sensor und wie funktioniert er?

Ein Hall-Effekt-Sensor ist ein kleines, kostengünstiges Gerät, das die Stärke des Magnetfelds in einer bestimmten Richtung misst. Es besteht aus einem mit Überschussladungen dotierten Halbleiterstück. Der Ausgang einiger Hall-Effekt-Sensoren ist eine analoge Spannung. Andere Hall-Effekt-Sensoren haben einen integrierten Komparator und erzeugen einen digitalen Ausgang. Andere Hall-Effekt-Sensoren werden in größere Instrumente integriert, die Durchfluss, Drehzahl oder andere Größen messen.

Die Physik hinter dem Hall-Effekt wird durch die Lorentz-Kraft-Gleichung zusammengefasst. Diese Gleichung beschreibt die Kraft auf eine sich bewegende Ladung aufgrund eines externen elektrischen und magnetischen Feldes.

Bild
Bild

Die folgende Abbildung veranschaulicht den Hall-Effekt. Angenommen, wir möchten die Stärke des Magnetfelds in Richtung des blauen Pfeils messen. Wie im linken Teil der Abbildung gezeigt, führen wir einen Strom senkrecht zur Richtung des zu messenden Feldes durch ein Stück Halbleiter. Strom ist ein Ladungsfluss, also bewegt sich eine Ladung im Halbleiter mit einer gewissen Geschwindigkeit. Diese Ladung wird aufgrund des externen Felds eine Kraft spüren, wie im mittleren Teil der Abbildung gezeigt. Ladungen bewegen sich aufgrund der Kraft und sammeln sich an den Kanten des Halbleiters. Ladungen bauen sich auf, bis die Kraft aufgrund der angesammelten Ladungen die Kraft aufgrund des externen Magnetfelds ausgleicht. Wir können die Spannung am Halbleiter messen, wie im rechten Teil der Abbildung gezeigt. Die gemessene Spannung ist proportional zur Stärke des Magnetfelds und liegt senkrecht zum Strom und zur Richtung des Magnetfelds.

Bild
Bild

Was ist isometrische Projektion?

An jedem Punkt im Raum wird das Magnetfeld durch einen dreidimensionalen Vektor beschrieben. Unser Bildschirm ist jedoch zweidimensional. Wir können den dreidimensionalen Vektor in eine zweidimensionale Ebene projizieren, um ihn auf dem Bildschirm zu zeichnen. Es gibt mehrere Möglichkeiten, dies zu erreichen, z. B. isometrische Projektion, orthographische Projektion oder schräge Projektion.

In der isometrischen Projektion sind die x-, y- und z-Achsen 120 Grad voneinander entfernt und erscheinen gleichermaßen verkürzt. Weitere Informationen zur isometrischen Projektion sowie die benötigten Formeln finden Sie auf der Wikipedia-Seite zum Thema.

Schritt 1: Vorräte sammeln

Arduino und Kabel

Der Arduino ist das Gehirn des Magnetometers. Diese Anleitung beschreibt die Verwendung eines Arduino Uno oder eines Arduino MKR1010. In beiden Fällen wird ein Kabel benötigt, um es mit dem Computer zu verbinden.

Option 1: Arduino Uno und USB AB-Kabel

www.digikey.com/product-detail/de/arduino/A000066/1050-1024-ND/2784006

www.digikey.com/product-detail/de/stewart-connector/SC-2ABE003F/380-1424-ND/8544570

Option 2: Arduino MKR1010 und microUSB-Kabel

www.digikey.com/product-detail/de/arduino/ABX00023/1050-1162-ND/9486713

www.digikey.com/product-detail/de/stewart-connector/SC-2AMK003F/380-1431-ND/8544577

TFT-Display

TFT steht für Thin Film Transistor. Dieses 1,44-Zoll-Display enthält 128 x 128 Pixel. Es ist klein, hell und farbenfroh. Es wird an einer Breakout-Platine befestigt. Die Header-Pins werden jedoch separat geliefert, sodass Sie sie anlöten müssen. (Lötmittel und ein Lötkolben sind erforderlich.)

www.digikey.com/product-detail/de/adafruit-industries-llc/2088/1528-1345-ND/5356830

    Bild
    Bild
  • Analoge Hall-Effekt-Sensoren

Es werden drei Hall-Effekt-Sensoren benötigt. Der Link unten ist für die Allegro-Teilenummer A1324LUA-T. Bei diesem Sensor ist Pin 1 die Versorgungsspannung, Pin 2 ist Masse und Pin 3 ist der Ausgang. Andere Hall-Sensoren sollten auch funktionieren, aber stellen Sie sicher, dass sie analog und nicht digital sind. Wenn Sie einen anderen Sensor verwenden, überprüfen Sie die Pinbelegung und passen Sie die Verkabelung bei Bedarf an. (Ich habe zu Testzwecken tatsächlich einen anderen Sensor derselben Firma verwendet. Der von mir verwendete ist jedoch veraltet und dieser Sensor ist sein Ersatz.)

www.digikey.com/product-detail/de/allegro-microsystems-llc/A1324LUA-T/620-1432-ND/2728144

Kleines Steckbrett und Draht

www.digikey.com/product-detail/de/adafruit-industries-llc/239/1528-2143-ND/7244929

Permanentmagnete zum Testen

Kühlschrankmagnete funktionieren gut.

Schritt 2: Verkabelung

Verdrahtung
Verdrahtung

Löten Sie die Header auf dem Display.

Bild
Bild

Platzieren Sie die Sensoren an einem Ende des Steckbretts und platzieren Sie das Display und Arduino am gegenüberliegenden Ende. Der Strom in den Drähten im Arduino und im Display erzeugt Magnetfelder, die die Sensoren nicht lesen sollen. Darüber hinaus möchten wir die Sensoren möglicherweise in der Nähe von Permanentmagneten platzieren, die den Strom in den Drähten des Displays und des Sensors beeinträchtigen könnten. Aus diesen Gründen wollen wir die Sensoren weit weg vom Display und Arduino. Auch aus diesen Gründen sollte dieses Magnetometer von sehr starken Magnetfeldern ferngehalten werden.

Platzieren Sie die Sensoren senkrecht zueinander, aber so nah wie möglich beieinander. Biegen Sie die Sensoren vorsichtig, um sie senkrecht zu stellen. Jeder Pin jedes Sensors muss sich in einer separaten Reihe des Steckbretts befinden, damit er separat angeschlossen werden kann.

Bild
Bild

Die Verkabelung unterscheidet sich zwischen dem MKR1010 und dem Uno aus zwei Gründen leicht. Zuerst kommunizieren Arduino und Display per SPI. Verschiedene Arduino-Modelle haben unterschiedliche dedizierte Pins für bestimmte SPI-Leitungen. Zweitens können die Analogeingänge des Uno bis zu 5 V akzeptieren, während die Analogeingänge des MKR1010 nur bis zu 3,3 V akzeptieren. Die empfohlene Versorgungsspannung für die Hall-Effekt-Sensoren beträgt 5 V. Die Sensorausgänge sind mit Arduino-Analogeingängen verbunden, und diese können so groß wie die Versorgungsspannungen sein. Verwenden Sie für den Uno die empfohlene 5-V-Versorgung für die Sensoren. Verwenden Sie für den MKR1010 3,3 V, damit der analoge Eingang des Arduino nie eine Spannung sieht, die größer ist als er verarbeiten kann.

Befolgen Sie die folgenden Diagramme und Anweisungen für das von Ihnen verwendete Arduino.

Verkabelung mit dem Arduino Uno

Bild
Bild

Das Display hat 11 Pins. Verbinden Sie sie wie folgt mit dem Arduino Uno. (NC bedeutet nicht verbunden.)

  • Vin →5V
  • 3.3 →Öffner
  • Masse → Masse
  • SCK →13
  • SO → NC
  • SI →11
  • TCS →10
  • RST →9
  • Gleichstrom →8
  • CCS → NC
  • Lite → NC

Verbinden Sie Vin der Sensoren mit 5V des Arduino. Verbinden Sie die Masse des Sensors mit der Masse des Arduino. Verbinden Sie den Ausgang der Sensoren mit den analogen Eingängen A1, A2 und A3 des Arduino.

Bild
Bild

Verkabelung mit dem Arduino MKR1010

Bild
Bild

Das Display hat 11 Pins. Verbinden Sie sie wie folgt mit dem Arduino. (NC bedeutet nicht verbunden.)

  • Vin →5V
  • 3.3 →Öffner
  • Masse → Masse
  • SCK → SCK 9
  • SO → NC
  • SI →MOSI 8
  • TCS →5
  • RST →4
  • D/C →3
  • CCS → NC
  • Lite → NC

Verbinden Sie Vin der Sensoren mit Vcc des Arduino. Dieser Pin hat 3,3 V, nicht 5 V. Verbinden Sie die Masse des Sensors mit der Masse des Arduino. Verbinden Sie den Ausgang der Sensoren mit den analogen Eingängen A1, A2 und A3 des Arduino.

Bild
Bild

Schritt 3: Testen Sie das Display

Lassen Sie uns das TFT-Display zum Laufen bringen. Glücklicherweise hat Adafruit einige benutzerfreundliche Bibliotheken und ein ausgezeichnetes Tutorial, das sie begleitet. Diese Anweisungen folgen genau dem Tutorial, Öffnen Sie die Arduino-Entwicklungsumgebung. Gehen Sie zu Extras → Bibliotheken verwalten. Installieren Sie die Bibliotheken Adafruit_GFX, Adafruit_ZeroDMA und Adafruit_ST7735. Starten Sie die Android-Entwicklungsumgebung neu.

Das Graphicstest-Beispiel ist in den Bibliotheken enthalten. Öffne es. Datei → Beispiele → Adafruit ST7735 und ST7789 Bibliothek → Grafiktest. Um die 1,44 -Anzeige auszuwählen, kommentieren Sie Zeile 95 aus und entkommentieren Sie Zeile 98.

Originalfassung:

94 // Verwenden Sie diesen Initialisierer, wenn Sie einen 1,8-Zoll-TFT-Bildschirm verwenden:

95 tft.initR(INITR_BLACKTAB); // ST7735S-Chip initieren, schwarzer Tab

Richtige Version für 1,44 -Display:

94 // Verwenden Sie diesen Initialisierer, wenn Sie einen 1,8-Zoll-TFT-Bildschirm verwenden:

95 //tft.initR(INIT_BLACKTAB); // ST7735S-Chip initieren, schwarze Registerkarte 96 97 // ODER diesen Initialisierer (unkommentiert) verwenden, wenn ein 1,44-Zoll-TFT verwendet wird: 98 tft.initR (INITR_144GREENTAB); // SST35R-Chip initieren, grüne Registerkarte

Das Display kommuniziert über SPI, und verschiedene Arduino-Modelle verwenden unterschiedliche dedizierte Pins für einige Kommunikationsleitungen. Das Grafiktest-Beispiel ist so eingerichtet, dass es mit den Uno-Pins funktioniert. Wenn Sie den MKR1010 verwenden, fügen Sie die folgenden Zeilen zwischen den Zeilen 80 und 81 hinzu.

Korrekturen für den MKR1010:

80

#define TFT_CS 5 #define TFT_RST 4 #define TFT_DC 3 #define TFT_MOSI 8 #define TFT_SCLK 9 Adafruit_ST7735 tft=Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST); 81 Gleitkomma p=3,1415926;

Speichern Sie das geänderte Grafiktest-Beispiel. Stecken Sie den Arduino in den Computer, wenn Sie dies noch nicht getan haben. Gehen Sie zu Tools → Board und Tools → Port, um zu überprüfen, ob der Computer das Arduino finden kann. Gehen Sie zu Skizze → Hochladen. Wenn das Beispiel funktioniert, zeigt das Display Linien, Rechtecke, Text und die vollständige Demo an. Das Adafruit-Tutorial bietet weitere Details, wenn eine Fehlerbehebung erforderlich ist.

Schritt 4: Der Magnetometer-Code

Laden Sie den angehängten Code herunter und öffnen Sie ihn in der Arduino-Entwicklungsumgebung.

Dieses Programm verwendet sechs Funktionen:

Setup() initialisiert die Anzeige

Loop() enthält die Hauptschleife des Programms. Es verdunkelt den Bildschirm, zeichnet die Achsen, liest die Eingaben und zeichnet den Pfeil, der den Magnetfeldvektor darstellt. Es hat eine Bildwiederholfrequenz von einer Sekunde, die durch Ändern von Zeile 127 geändert werden kann

DrawAxes3d() zeichnet und beschriftet die x-, y- und z-Achsen

DrawArrow3d() nimmt eine x-, y- und z-Eingabe im Bereich von 0 bis 1023 an. Aus diesen Werten berechnet es die Endpunkte des Pfeils im Raum. Als nächstes verwendet es die Funktionen isometricxx() und isometricyy(), um die Endpunkte auf dem Bildschirm zu berechnen. Schließlich zeichnet es den Pfeil und druckt die Spannungen am unteren Rand des Bildschirms

Isometricxx() findet die x-Koordinate der isometrischen Projektion. Es nimmt die x-, y- und z-Koordinaten eines Punktes auf und gibt die entsprechende x-Pixelposition auf dem Bildschirm zurück

Isometricyy() findet die y-Koordinate der isometrischen Projektion. Es nimmt die x-, y- und z-Koordinaten eines Punktes auf und gibt die entsprechende y-Pixelposition auf dem Bildschirm zurück

Vor dem Ausführen des Codes müssen wir angeben, welche Pins für die SPI-Kommunikation mit dem Display verwendet werden sollen, und wir müssen die Quellspannung für die Sensoren angeben. Wenn Sie den MKR1010 verwenden, kommentieren Sie die Zeilen 92-96 sowie die Zeile 110 aus. Dann die Zeilen 85-89 sowie die Zeile 108 auskommentieren. Wenn Sie den Uno verwenden, kommentieren Sie die Zeilen 85-89 sowie die Zeile 108 aus Dann entkommentieren Sie die Zeilen 92-96 sowie die Zeile 110.

Laden Sie den Code hoch, Sketch → Upload.

Sie sollten die x-, y- und z-Achsen in Rot sehen. Ein grüner Pfeil mit blauem Kreis für die Spitze repräsentiert den Magnetfeldvektor an den Sensoren. Spannungswerte werden unten links angezeigt. Wenn Sie einen Magneten näher an die Sensoren bringen, sollten sich die Spannungswerte ändern und die Größe des Pfeils sollte größer werden.

Bild
Bild

Schritt 5: Zukünftige Arbeit

Zukünftige Arbeit
Zukünftige Arbeit

Der nächste Schritt wäre, das Gerät zu kalibrieren. Das Sensordatenblatt enthält Informationen zur Umrechnung von Sensorrohspannungswerten in magnetische Feldstärke. Die Kalibrierung könnte durch Vergleich mit einem genaueren Magnetometer verifiziert werden.

Permanentmagnete interagieren mit stromführenden Drähten. Drähte in der Nähe des Displays und im Arduino erzeugen Magnetfelder, die die Sensorwerte beeinflussen könnten. Wenn dieses Gerät zum Messen in der Nähe eines starken Permanentmagneten verwendet wird, interagiert das Magnetfeld des zu testenden Geräts mit dem Arduino und dem Display, verursacht Rauschen und beschädigt es möglicherweise. Eine Abschirmung könnte dieses Magnetometer robuster machen. Der Arduino kann größeren Magnetfeldern standhalten, wenn er in einer Metallbox abgeschirmt ist, und es wird weniger Rauschen eingeführt, wenn abgeschirmte Kabel die Sensoren anstelle von blanken Drähten verbinden.

Das Magnetfeld ist eine Funktion der Position, daher ist es an jedem Punkt im Raum unterschiedlich. Dieses Gerät verwendet drei Sensoren, einen zum Messen der x-, y- und z-Komponente des Magnetfelds an einem Punkt. Die Sensoren befinden sich nahe beieinander, aber nicht an einem einzigen Punkt, was die Auflösung des Magnetometers einschränkt. Es wäre cool, Magnetfeldmesswerte an verschiedenen Stellen zu speichern und sie dann als eine Reihe von Pfeilen an den entsprechenden Stellen anzuzeigen. Das ist jedoch ein Projekt für einen anderen Tag.

Verweise

Informationen zu Adafruit Arduino-Grafikbibliotheken

https://learn.adafruit.com/adafruit-1-44-color-tft-with-micro-sd-socket/overview

Magnetfeldvisualisierung

https://www.falstad.com/vector3dm/

Informationen zu Hall-Effekt- und Hall-Effekt-Sensoren

  • https://sensing.honeywell.com/index.php?ci_id=47847
  • https://www.allegromicro.com/~/media/Files/Datasheets/A1324-5-6-Datasheet.ashx

Informationen zur isometrischen Projektion

  • https://en.wikipedia.org/wiki/3D_projection
  • https://en.wikipedia.org/wiki/Isometric_projection

Empfohlen: