Schritt 12: Kontrolle und Probleme des Moduls HCSR-04
Pinbelegung
GND - Gemeinsamkeiten
Dieser Pin verbindet auf den Boden des Schaltplans Netto
VCC - Stromschiene
Dieser Pin muss an die Stromleitung der unsere Schaltung gebunden werden, die - in meinem Fall von 5V Buck-Konverters bereitgestellt wird.
TRIG - Trigger-Pins
Der Benutzer muss bieten eine Mikrosekunde lang Impuls auf diese PIN-Nummer, dann warten, bis das Echo auf die Echo-Pin zu kommen. Beachten Sie, dass Echo ist hoch in den ersten zehn Millisekunden, stellen Sie sicher, dass Sie warten, die sich bei Initialisierung. Diese Pin wird behauptet, dann Programm muss warten, bis eine steigende Flanke und starten einen Timer, TMR1. Die WASTE_10_US(); ist ein Makro ich schrieb, es besteht genügend "NOP" Montage-Anleitung zu eine Gesamtzeit von 10 Mikrosekunden zu verschwenden. Zählen wird gestoppt, wenn der Echo-Puls wieder niedriger geht. Von der Zahl im Zähler Register wissen wir den Zeitaufwand für den Sound von eventuellen Hindernis wieder. Wir wissen, dass die Geschwindigkeit des Schalls - können wir den Abstand berechnen!
ECHO - Echo-pin
Diese Pin wird verwendet, um die reflektierten Schallwellen zu erkennen. Ich habe es mit einer Pin, die nur für den Fall - Interrupt, hat verbunden, sondern es dient im einfachen Eingabemodus. Eine steigende Flanke hält den zuvor genannten Zähler und speichert es in eine Variable, die kurz nach verarbeitet wird.
Ein kleiner Trick, um die PIC-s-Leben leichter machen
Das Timing der Impulse entnehmen Sie bitte dem Datenblatt dieses Moduls. Wie bereits erwähnt, müssen Sie warten, die ersten ca. 100 ms, dann geben 10 Mikrosekunden Triggerimpulse am Pin TRIG. Ein 8-Zyklus Ausbruch aus dem Sender "Speaker" ergibt so einen Impuls zu geben. Dann müssen wir warten, bis ein Echo zu kommen. Das Echo ist vom Empfänger erfasst und umgewandelt in einen Impuls mit variabler Länge auf der ECHO-Pin. Die Länge dieses Echo-Impuls ist direkt proportional mit der Entfernung zum Hindernis. Das Datenblatt gibt eine einfache Formel für diese Berechnung:
Abstand [cm] = t [Mikrosekunden] gemessen / 58
Dadurch wird den Abstand in Zentimetern zurückgegeben. Ich teilen nur durch 5,8, also der Abstand in Millimetern zurückgegeben wird. Da ich nicht unbedingt extrem präzise Messungen benötigen, werde ich eine kleine Drehung hier hinzufügen. Ich möchte nur Hindernisse zu vermeiden, mich interessiert nicht, wie weit sie sind, so gibt es keine Verwendung zur Berechnung der Entfernung in doppelter Variablentypen. Diese Art von Berechnungen nehmen eine lange Zeit, die in diesem Fall völlig unnötig ist. Also lasst uns ein wenig die Berechnungen zu vereinfachen. Wir wissen, dass die empfangenen Impulslänge in Mikrosekunden benötigt wird, um herauszufinden, die Entfernung. Unsere Zeitbasis ist jedoch keine sehr Runde eins, 83,33 [ns]. Also, statt die Anzahl der TMR1, Multiplikation mit der Zeitbasis, die Länge in Mikrosekunden, bekommen dann dividiert sie durch 5.8 um den Abstand in Millimetern, tun wir etwas einfacher und dümmer. Wir etablieren eine einzelne TMR1 Graf womit in Millimetern:
1 Count = 83,33 [ns] = 0.08333 [uns], die durch 5,8 Ergebnisse in 0,014 [mm] für jeden TMR1 eingeteilt [Count]
Dies vorausgeschickt, können wir Folgendes schreiben:
1 [count] .......................... 0,014 [mm]
x [Count] y [mm]
und weiter schreibt die folgende Formel:
y [mm] = (X * 0,014) / 1 = X * 0,014 = X / 71.42
So wissen wir, dass wir den Abstand zum Hindernis erhalten können, indem man TMR1 Graf mit 71.42. Dies ist jedoch noch ein Präzisions-Kalkül, die sehr lange dauert, so dass wir schauen und erkennen, dass dies das nicht weit von 64, eine schöne "Runde" Zahl ist. Teilung mit den Potenzen von 2 Software ist sehr einfach, über gleich sechs Schaltzeiten möglich ist. Byte Verschiebung ist eine native Anweisung des PIC, und es ist sehr sehr schnell im Vergleich zu einer doppelten Division. Also, lasst uns Runde 71.42 bis 64 und nur Shift TMR1 links 6 Mal eine Vorstellung darüber, wie nahe ein Hindernis zu bekommen!
Mal sehen, den Unterschied, die, den diesen Trick bei einer 8000 (z. B.) Zählung gibt:
Original: 8000 / 71.42 = 112 [mm]
knifflig: 8000 / 64 = (8000 >> 6) = 125 [mm]
Der Fehler beträgt also rund 10 %, nicht viel im Vergleich zu die riesige Menge an Zeit, die wir gerade gespeichert!
Probleme
Ich habe keine Probleme während der Arbeit mit diesem Modul, das einzige, was geschehen war, dass das Kabel zwischen dem Bild und der ECHO-Pin blieb getrennt und die PIC wartete endlos auf Kanten auf, dass der Stift, getroffen. Dies war leicht zu fangen, da die rote LED, die zu jeder Sekunde schaltet nicht mehr. Ich wusste sofort, dass das Programm fror, und der einzige Ort, den es einfrieren kann diese Wartezeit für Rand-Routine ist. Problem gelöst, nach einer Minute!
Noch eins: diese Dinge funktionieren mit 5 [V], also mit nur 4,8 [V] bei voller Ladung bedeutet, dass wir es zu weit dehnen. Wenn die Spannung nicht ausreicht um das Echo zu fangen, hängt die MCU, warten auf das ECHO zu kommen!