- Erforderliche Materialien:
- Schaltplan:
- Wie das HC-SR04-Modul tatsächlich funktioniert:
- Messabstand zwischen zwei Ultraschallsensoren (HC-SR04):
- Programm für Sendersensor:
- Programm für Empfängersensor:
- Arbeiten:
- Improvisierte Idee - Kalibrierung des Sensors mit einem bekannten Abstand:
Der Ultraschallsensor (HC-SR04) wird üblicherweise verwendet, um die Entfernung eines Objekts von einem bestimmten Punkt zu ermitteln. Mit dem Arduino war das ziemlich einfach und der Code ist auch ziemlich einfach. In diesem Artikel werden wir jedoch etwas anderes mit diesen beliebten HC-SR04-Sensoren ausprobieren. Wir werden versuchen , den Abstand zwischen zwei Ultraschallsensoren zu berechnen, dh wir werden einen Sensor als Sender und den anderen Sensor als Empfänger verwenden. Auf diese Weise können wir den Standort eines Senders mithilfe vieler Ultraschallempfänger verfolgen. Diese Verfolgung wird als Triangulation bezeichnet und kann für automatische Docking-Roboter-Gepäckanhänger und andere ähnliche Anwendungen verwendet werden. Ermitteln des Abstands zwischen zwei US-Sensoren Es mag sich nach einer ziemlich einfachen Aufgabe anhören, aber ich stand vor wenigen Herausforderungen, die in diesem Projekt diskutiert werden.
Die in diesem Artikel beschriebene Technik ist nicht ziemlich genau und kann in realen Systemen ohne Modifikationen möglicherweise nicht nützlich sein. Während der Zeit dieser Dokumentation habe ich niemanden gefunden, der so gute Ergebnisse erzielt hat wie ich. Deshalb habe ich nur meine Ansichten darüber geteilt, wie ich es zum Laufen gebracht habe, damit Leute, die dies versuchen, das Rad nicht neu erfinden müssen.
Erforderliche Materialien:
- Arduino (2Nos) - Jedes Modell
- HCSR04-Modul (2Nos)
Schaltplan:
Obwohl wir einen US-amerikanischen (Ultraschall-) Sensor als Sender und den anderen als Empfänger einsetzen wollen, müssen alle vier Pins der Sensoren mit dem Arduino verbunden werden. Warum sollten wir? Mehr davon wird später besprochen, aber im Moment wird der Schaltplan wie folgt sein
Wie Sie sehen können, sind die Schaltpläne für Sender und Empfänger identisch. Überprüfen Sie auch: Arduino Ultrasonic Sensor Interfacing
Wie das HC-SR04-Modul tatsächlich funktioniert:
Bevor wir fortfahren, lassen Sie uns verstehen, wie der HC-SR04-Sensor funktioniert. Das folgende Zeitdiagramm hilft uns, die Funktionsweise zu verstehen.
Der Sensor verfügt über zwei Pins Trigger und Echo, mit denen die Entfernung gemessen wird, wie im Zeitdiagramm gezeigt. Um die Messung zu starten, sollten wir zuerst eine Ultraschallwelle vom Sender senden. Dies kann erreicht werden, indem der Trigger-Pin für 10 us hoch eingestellt wird. Sobald dies erledigt ist, sendet der Sender-Pin 8 Schallstöße von US-Wellen. Diese US-Welle trifft auf ein zurückprallendes Objekt und wird vom Empfänger empfangen.
Hier zeigt das Zeitdiagramm, dass, sobald der Empfänger die Welle empfängt, der Echo-Pin für eine Zeitdauer hoch geht, die der Zeit entspricht, die die Welle benötigt, um sich vom US-Sensor zu bewegen und zum Sensor zurückzukehren. Dieses Zeitdiagramm scheint nicht wahr zu sein.
Ich habe den Tx-Teil (Sender) meines Sensors abgedeckt und überprüft, ob der Echo-Impuls hoch geworden ist, und ja, er geht hoch. Dies bedeutet, dass der Echo-Impuls nicht darauf wartet, dass die US-amerikanische (Ultraschall-) Welle von ihr empfangen wird. Sobald es die US-Welle sendet, geht es hoch und bleibt hoch, bis die Welle zurückkehrt. Das richtige Zeitdiagramm sollte also ungefähr so aussehen (siehe unten für meine schlechten Schreibfähigkeiten).
Damit Ihr HC-SR04 nur als Sender funktioniert:
Es ist ziemlich einfach, einen HC-SR04 nur als Sender zu verwenden. Wie im Zeitdiagramm gezeigt, müssen Sie den Trigger-Pin als Ausgangs-Pin deklarieren und ihn 10 Mikrosekunden lang hoch halten. Dadurch wird der Ultraschallwellenstoß ausgelöst. Wenn wir also die Welle senden möchten, müssen wir nur den Trigger-Pin des Sendersensors steuern, für den der folgende Code angegeben ist.
Damit Ihr HC-SR04 nur als Empfänger funktioniert:
Wie im Zeitdiagramm gezeigt, können wir den Anstieg des Echo-Pins nicht steuern, da er sich auf den Trigger-Pin bezieht. Es gibt also keine Möglichkeit, den HC-SR04 nur als Empfänger zu verwenden. Wir können jedoch einen Hack verwenden, indem wir nur den Senderteil des Sensors mit Klebeband (wie in der Abbildung unten gezeigt) abdecken oder die US-Welle nicht außerhalb des Sendergehäuses entweichen lassen und der Echo-Pin von dieser US-Welle nicht betroffen ist.
Um den Echo-Pin hoch zu bringen, müssen wir diesen Dummy-Trigger-Pin nur 10 Mikrosekunden hoch ziehen. Sobald dieser Empfängersensor die vom Sendersensor übertragene US-Welle erhält, wird der Echo-Pin niedrig.
Messabstand zwischen zwei Ultraschallsensoren (HC-SR04):
Bisher haben wir verstanden, wie ein Sensor als Sender und der andere Sensor als Empfänger fungiert. Jetzt müssen wir die Ultraschallwelle vom Sendersensor senden und mit dem Empfängersensor empfangen und die Zeit überprüfen, die die Welle benötigt, um vom Sender zum Empfänger zu gelangen. Aber leider!, Wir haben hier ein Problem und das wird nicht funktionieren.
Das Sendermodul und das Empfängermodul sind weit voneinander entfernt. Wenn das Empfängermodul die US-Welle vom Sendermodul empfängt, weiß es nicht, wann der Sender diese bestimmte Welle gesendet hat. Ohne Kenntnis der Startzeit können wir die benötigte Zeit und damit die Entfernung nicht berechnen. Um dieses Problem zu lösen, muss der Echoimpuls des Empfängermoduls genau dann hoch gehen, wenn das Sendermodul die US-Welle gesendet hat. Mit anderen Worten, das Sendermodul und das Empfängermodul sollten gleichzeitig ausgelöst werden. Dies kann durch das folgende Verfahren erreicht werden.
In der obigen Abbildung steht der Tx für den Sendersensor und der Rx für den Empfängersensor. Wie gezeigt, wird der Sendersensor dazu gebracht, US-Wellen mit einer periodisch bekannten Verzögerung zu senden. Dies ist alles, was er tun muss.
Im Empfängersensor müssen wir den Trigger-Pin genau dann hoch stellen, wenn der Sender-Pin hoch geht. Also lassen wir den Empfänger-Trigger zunächst zufällig hoch gehen, was hoch bleibt, bis der Echo-Pin niedrig wird. Dieser Echo-Pin wird nur dann niedrig, wenn er eine US-Welle vom Sender empfängt. Sobald es niedrig wird, können wir davon ausgehen, dass der Sendersensor gerade ausgelöst wurde. Mit dieser Annahme können wir nun, sobald das Echo niedrig wird, auf die bekannte Verzögerung warten und dann den Empfänger-Trigger auslösen. Dies würde den Trigger sowohl des Senders als auch des Empfängers teilweise synchronisieren, und daher können Sie die sofortige Echoimpulsdauer mit pulsIn () ablesen und die Entfernung berechnen.
Programm für Sendersensor:
Das vollständige Programm für das Sendermodul finden Sie unten auf der Seite. Es wird lediglich der Sendersensor in regelmäßigen Abständen ausgelöst.
digitalWrite (trigPin, HIGH); delayMicroseconds (10); digitalWrite (trigPin, LOW);
Um einen Sensor auszulösen, muss der Triggerstift 10 uS hoch bleiben. Der Code, um dasselbe zu tun, ist oben gezeigt
Programm für Empfängersensor:
Im Empfängersensor haben wir das Senderauge des Sensors abgedeckt, um ihn wie zuvor beschrieben zu einem Dummy zu machen. Jetzt können wir die oben erwähnte Technik verwenden, um den Abstand zwischen zwei Sensoren zu messen. Das vollständige Programm finden Sie unten auf dieser Seite. Im Folgenden werden einige wichtige Zeilen erläutert
Trigger_US (); while (digitalRead (echoPin) == HIGH); delayMicroseconds (10); Trigger_US (); Dauer = PulsIn (echoPin, HIGH);
Zunächst lösen wir den US-Sensor mit der Funktion Trigger_US () aus und warten dann mit einer while-Schleife, bis der Echo-Pin hoch bleibt. Sobald es niedrig wird, warten wir auf eine vorher festgelegte Dauer. Diese Dauer sollte zwischen 10 und 30 Mikrosekunden liegen, die durch Ausprobieren bestimmt werden können (oder Sie können die unten angegebene improvisierte Idee verwenden). Nach dieser Verzögerung werden die USA erneut mit derselben Funktion ausgelöst und anschließend mit der Funktion pulsIn () die Dauer der Welle berechnet.
Mit den gleichen alten Formeln können wir nun den Abstand wie unten berechnen
Entfernung = Dauer * 0,034;
Arbeiten:
Stellen Sie die Verbindungen wie im Programm beschrieben her. Decken Sie den Tx-Teil des Empfängersensors wie in der Abbildung gezeigt ab. Laden Sie dann den Sendercode und den Empfängercode, die unten angegeben sind, auf den Sender bzw. den Empfänger Arduino hoch. Öffnen Sie den seriellen Monitor des Empfängermoduls, und Sie sollten den Abstand zwischen zwei Modulen beachten, wie im folgenden Video gezeigt.
Hinweis: Diese Methode ist nur eine Ideologie und möglicherweise nicht genau oder zufriedenstellend. Sie können jedoch die unten stehende improvisierte Idee ausprobieren, um bessere Ergebnisse zu erzielen.
Improvisierte Idee - Kalibrierung des Sensors mit einem bekannten Abstand:
Die Methode, die bisher seltsamerweise erklärt wurde, scheint zufriedenstellend zu sein, war aber für mein Projekt ausreichend. Ich möchte jedoch auch die Nachteile dieser Methode und einen Weg, sie zu überwinden, teilen. Ein Hauptnachteil dieser Methode besteht darin, dass wir davon ausgehen, dass der Echo-Pin des Empfängers unmittelbar nach dem Senden der US-Welle durch den Sendersensor auf einen niedrigen Wert fällt, was nicht der Fall ist, da die Welle einige Zeit benötigt, um von Sender zu Empfänger zu gelangen. Daher sind der Auslöser des Senders und der Auslöser des Empfängers nicht perfekt synchron.
Um dies zu überwinden, können wir den Sensor zunächst mit einem bekannten Abstand kalibrieren. Wenn die Entfernung bekannt ist, wissen wir, wie lange es dauert, bis die US-Welle den Empfänger vom Sender erreicht. Lassen Sie uns diese Zeit wie unten gezeigt als Del (D) nehmen.
Jetzt werden wir genau wissen, nach wie viel Zeit wir den Trigger-Pin des Empfängers auf High stellen sollten, um mit dem Trigger des Senders synchronisiert zu werden. Diese Dauer kann durch bekannte Verzögerung (t) - Verzögerung (D) berechnet werden. Ich konnte diese Idee aus zeitlichen Gründen nicht testen, daher bin ich mir nicht sicher, wie genau sie funktionieren würde. Wenn Sie es also versuchen, teilen Sie mir die Ergebnisse im Kommentarbereich mit.