Inhaltsverzeichnis:

Arduino Hall-Effekt-Sensor mit Interrupts - Gunook
Arduino Hall-Effekt-Sensor mit Interrupts - Gunook

Video: Arduino Hall-Effekt-Sensor mit Interrupts - Gunook

Video: Arduino Hall-Effekt-Sensor mit Interrupts - Gunook
Video: Arduino hall effect sensor with interrupts 2024, November
Anonim
Image
Image
Was ist ein Hall-Effekt-Sensor?
Was ist ein Hall-Effekt-Sensor?

Hallo allerseits, Heute zeige ich Ihnen, wie Sie einen Hall-Effekt-Sensor an einen Arduino anschließen und mit einem Interrupt verwenden können.

Im Video verwendete Werkzeuge und Materialien (Affiliate-Links): Arduino Uno:

Hall-Effekt-Sensoren:

Verschiedene Widerstände:

Schritt 1: Was ist ein Hall-Effekt-Sensor?

Was ist ein Hall-Effekt-Sensor?
Was ist ein Hall-Effekt-Sensor?
Was ist ein Hall-Effekt-Sensor?
Was ist ein Hall-Effekt-Sensor?
Was ist ein Hall-Effekt-Sensor?
Was ist ein Hall-Effekt-Sensor?

Ein Hall-Effekt-Sensor ist ein Gerät, das verwendet wird, um die Stärke eines Magnetfelds zu messen. Seine Ausgangsspannung ist direkt proportional zur magnetischen Feldstärke durch ihn.

Hall-Effekt-Sensoren werden für Näherungssensorik, Positionierung, Geschwindigkeitserkennung und Stromsensoranwendungen verwendet.

Der, mit dem ich heute arbeiten werde, trägt die Bezeichnung 3144, ein Hall-Effekt-Schalter, der hauptsächlich für Hochtemperatur- und Automobilanwendungen verwendet wird. Sein Ausgang ist standardmäßig hoch und geht einmal auf niedrig, wenn ein Magnetfeld vorhanden ist.

Der Sensor hat 3 Pins, VCC, Masse und Ausgang. Sie können sie in dieser Reihenfolge identifizieren, wenn Sie den Sensor mit den Etiketten zu sich hin halten. VCC befindet sich auf der linken Seite und der Ausgang befindet sich auf der rechten Seite. Um eine Spannungsdrift zu verhindern, wird zwischen VCC und dem Ausgang in einer Pull-Up-Konfiguration ein 10k-Widerstand verwendet.

Schritt 2: Was ist ein Interrupt?

Was ist eine Unterbrechung?
Was ist eine Unterbrechung?
Was ist eine Unterbrechung?
Was ist eine Unterbrechung?

Um den Sensor mit dem Arduino zu verbinden, verwenden wir eine einfache, aber sehr leistungsstarke Funktion namens Interrupt. Ein Interrupt-Job soll sicherstellen, dass der Prozessor schnell auf wichtige Ereignisse reagiert. Wenn ein bestimmtes Signal erkannt wird, unterbricht ein Interrupt (wie der Name schon sagt) alles, was der Prozessor tut, und führt einen Code aus, der darauf ausgelegt ist, auf jeden externen Stimulus zu reagieren, der dem Arduino zugeführt wird. Sobald dieser Code abgeschlossen ist, geht der Prozessor zu dem zurück, was er ursprünglich getan hat, als ob nichts passiert wäre!

Das Tolle daran ist, dass es Ihr System so strukturiert, dass es schnell und effizient auf wichtige Ereignisse reagiert, die in Software nicht leicht vorhersehbar sind. Das Beste daran ist, dass Ihr Prozessor für andere Aufgaben frei wird, während er auf das Erscheinen eines Ereignisses wartet.

Der Arduino Uno hat zwei Pins, die wir als Interrupts verwenden können, Pin 2 und 3. Die Funktion, die wir verwenden, um den Pin als Interrupt zu registrieren, heißt attachInterrupt, wobei wir als ersten Parameter den zu verwendenden Pin senden, der zweite Parameter ist den Namen der Funktion, die wir aufrufen möchten, sobald ein Interrupt erkannt wird, und als dritten Parameter senden wir den Modus, in dem der Interrupt arbeiten soll. In der Videobeschreibung befindet sich ein Link zur vollständigen Referenz für diese Funktion.

Schritt 3: Verbindungen und Code

Anschlüsse und Code
Anschlüsse und Code
Anschlüsse und Code
Anschlüsse und Code
Anschlüsse und Code
Anschlüsse und Code

In unserem Beispiel verbinden wir den Hall-Effekt-Sensor mit Pin 2 des Arduino. Am Anfang der Skizze definieren wir die Variablen für die Pin-Nummer der eingebauten LED, den Interrupt-Pin sowie eine Byte-Variable, die wir zum Modifizieren durch den Interrupt verwenden. Es ist wichtig, dass wir diesen als flüchtig markieren, damit der Compiler weiß, dass er außerhalb des Hauptprogrammflusses durch den Interrupt geändert wird.

In der Setup-Funktion legen wir zunächst die Modi an den verwendeten Pins fest und hängen dann den Interrupt wie zuvor erklärt an. Eine andere Funktion, die wir hier verwenden, ist digitalPinToInterrupt, die, wie der Name schon sagt, die Pinnummer in die Interruptnummer übersetzt.

Bei der Hauptmethode schreiben wir einfach die Zustandsvariable auf den LED-Pin und fügen eine sehr kleine Verzögerung hinzu, damit der Prozessor Zeit hat, richtig zu arbeiten.

Wo wir den Interrupt angehängt haben, haben wir blink als zweiten Parameter angegeben und dies ist der Funktionsname, der aufgerufen werden soll. Im Inneren invertieren wir einfach den Zustandswert.

Der dritte Parameter der Funktion attachIntertupt ist der Modus, in dem sie arbeitet. Wenn wir es als CHANGE haben, wird die Blinkfunktion jedes Mal ausgeführt, wenn sich der Interrupt-Zustand ändert, also wird sie einmal aufgerufen, sobald wir den Magneten in die Nähe des Sensors bringen, und erneut ausgelöst, wenn wir ihn entfernen. Auf diese Weise leuchtet die LED, während wir den Magneten nahe an den Sensor halten.

Wenn wir nun den Modus auf RISING ändern, wird die Blinkfunktion erst ausgelöst, wenn am Interrupt-Pin eine steigende Flanke des Signals zu sehen ist. Jedes Mal, wenn wir den Magneten in die Nähe des Sensors bringen, schaltet sich die LED entweder aus oder ein, also haben wir im Grunde einen Magnetschalter gemacht.

Der letzte Modus, den wir ausprobieren werden, ist LOW. Damit wird beim Schließen des Magneten ständig die Blinkfunktion ausgelöst und die LED flackert, wobei ihr Zustand ständig invertiert ist. Wenn wir den Magneten entfernen, ist es wirklich unvorhersehbar, wie der Zustand enden wird, da dies vom Zeitpunkt abhängt. Dieser Modus ist jedoch sehr nützlich, wenn wir wissen möchten, wie lange eine Taste gedrückt wurde, da wir die Zeitfunktionen verwenden können, um dies zu bestimmen.

Schritt 4: Weitere Aktionen

Weitere Maßnahmen
Weitere Maßnahmen

Interrupts sind eine einfache Möglichkeit, Ihr System schneller auf zeitkritische Aufgaben zu reagieren. Sie haben auch den zusätzlichen Vorteil, dass Sie Ihre Hauptschleife () freigeben, um sich auf einige Hauptaufgaben im System zu konzentrieren. (Ich finde, dass dies meinen Code bei der Verwendung etwas organisierter macht - es ist einfacher zu erkennen, wofür der Hauptteil des Codes entworfen wurde, während die Interrupts periodische Ereignisse verarbeiten.) Das hier gezeigte Beispiel ist so ziemlich das meiste Grundfall für die Verwendung eines Interrupts - Sie können sie zum Lesen eines I2C-Geräts, zum Senden oder Empfangen von drahtlosen Daten oder sogar zum Starten oder Stoppen eines Motors verwenden.

Wenn Sie eine interessante Verwendung eines Interrupt- oder Hall-Effekt-Sensors haben, lassen Sie es mich bitte in den Kommentaren wissen, teilen Sie dieses Instructable und vergessen Sie nicht, meinen YouTube-Kanal für weitere tolle Tutorials und Projekte in der zu abonnieren Zukunft.

Prost und danke fürs Zuschauen!

Empfohlen: