Entfernungsmessung mit einem Raspberry Pi und HC-SR04 oder US-015 Sensor

Die vorgestellten Sensoren ermöglichen eine Abstandsmessung mittels Ultraschall. Der Sensor sendet eine Welle, die nach Reflexion am Hindernis zu ihm zurückkehrt. Durch die Berechnung der Zeit zwischen Senden und Empfangen des Impulses können Sie die Entfernung zwischen Sensor und Objekt bestimmen.

Sie benötigen die folgenden Artikel:

Verbindung mit dem Raspberry Pi

Verbinden Sie beide Geräte gemäß der angezeigten Tabelle

Raspberry Pi-GPIO Abstandssensor
5 V VCC
Masse Masse

GPIO4

Trig

GPIO1

Echo

Anschlussplan des Ultraschallsensors mit dem Raspberry Pi.

Service

Um die GPIO-Pins auf dem Raspberry Pi verwenden zu können, benötigen wir eine Bibliothek, die uns dies ermöglicht. Zu diesem Zweck verwenden wir wiringPi . Die Beschreibung zum Herunterladen und Installieren finden Sie hier . Es reicht aus, nachfolgende Befehle zu kopieren. Schließlich, um die Installation zu validieren:

  • gpio readall

Nach diesem Befehl sollten wir die folgende Tabelle sehen:

Jetzt schreiben wir ein einfaches Programm. Wir erstellen die Datei us_015.cpp

  • nanous_015.cpp

Die Datei sollte folgendes Programm enthalten:

 #include 
#include 
#include 
mit Namensraum std;

  int CM;
  lange Zeit;
  int trig = 4;
  Int-Echo = 1;
  void meas_odleglosci ();
  int pulseIn (int pin, int level);


int main (leer)
{
 VerdrahtungPiSetup ();

 PinMode (Trigger, AUSGANG);
 PinMode (Echo, INPUT);

 cout << "Abstandssensortest" << endl << endl;

 während (1)
 {
  Abstandsmaß (); // Entfernungsmessung
  cout << "Entfernung:"; // die Ergebnisse alle 200 ms in einer Schleife auf dem Bildschirm anzeigen
  cout << CM << "cm" << endl;
  Verzögerung (200);
 }
  0 zurückgeben;
}

void meas_odleglosci ()
{
  DigitalWrite (Trigger, HIGH); // hohen Zustand auf 10 uS setzen - Impuls $
  VerzögerungMikrosekunden (10);
  digitalWrite (trigger, LOW);
  ZEIT = pulseIn (Echo, HIGH);
  CM = ZEIT / 58; // Breite des reflektierten Impulses in US dividiert durch p $
}

int pulseIn (int pin, int level) // Funktion, die die Zeit misst, um einen bestimmten $ zu erreichen
{
   struct timeval tn, t0, t1;
   lange Mikros;
   gettimeofday (& t0, NULL);
   Mikros = 0;

   while (digitalRead (pin)! = level)
   {
      gettimeofday (& tn, NULL);

      wenn (tn.tv_sec> t0.tv_sec) Mikros = 1000000L; sonst Mikros = 0; Mikros + = (tn.tv_usec - t0.tv_usec); Wenn (Mikros> 10000) 0 zurückgeben; } gettimeofday (& t1, NULL); while (digitalRead (pin) == level) {gettimeofday (& tn, NULL); wenn (tn.tv_sec> t0.tv_sec) Mikros = 1000000L; sonst Mikros = 0; Mikros = Mikros + (tn.tv_usec - t0.tv_usec); Wenn (Mikros> 10000) 0 zurückgeben; aufrechtzuerhalten. Wenn (tn.tv_sec> t1.tv_sec) Mikros = 1000000L; sonst Mikros = 0; Mikros = Mikros + (tn.tv_usec - t1.tv_usec); Rückmikros; }

Speichern Sie dann die Änderungen an der Datei und schließen Sie sie. Um die erstellte Datei zu kompilieren, verwenden wir den Befehl:

  • g ++ -Wall -o us_015.o us_015.cpp -lwiringPi

Programmbetrieb

Um die Entfernung zu einem Objekt zu berechnen, wird die Reaktionszeit durch 58 geteilt (laut Dokumentation). Warum so viel? Dieser Wert ergibt sich aus der Formel:

ZEIT / [1 / (0,34 / 2) / 10]

  • der Wert in eckigen Klammern ist 58:
    • 0,34 - Wellengeschwindigkeit in m / ms (340 m / s) geteilt durch 2 (weil die Welle in beide Richtungen reiste).
    • Plus alles, was durch 10 teilbar ist, um Millimeter in Zentimeter umzurechnen

Programm mit folgendem Befehl ausführen:

  • sudo ./us_015.o

Das Ergebnis des Programms kann auf dem Monitor betrachtet werden:

Screenshot des Monitors.

Wir freuen uns auf die Zusammenarbeit mit Ihnen!