Měření vzdálenosti pomocí senzoru Raspberry Pi a HC-SR04 nebo US-015

Prezentované senzory umožňují měření vzdálenosti pomocí ultrazvuku. Senzor vysílá vlnu, která se k ní vrací po odrazu od překážky. Výpočtem času mezi odesláním a přijetím pulzu můžete určit vzdálenost mezi senzorem a objektem.

Budete potřebovat následující položky:

Spojení s Raspberry Pi

Připojte obě zařízení podle uvedené tabulky

GPIO Raspberry Pi Senzor vzdálenosti
5 V VCC
GND GND

GPIO 4

Trig

GPIO 1

Echo

Schéma zapojení ultrazvukového senzoru s Raspberry Pi.

Servis

Abychom mohli použít GPIO piny na Raspberry Pi, potřebujeme knihovnu, která nám to umožní. Pro tento účel používáme wiringPi. Popis toho, jak stáhnout a nainstalovat jej lze nalézt zde. Stačí zkopírovat následné příkazy. Nakonec k ověření instalace:

  • gpio readall

Po tomto příkazu bychom měli vidět níže uvedenou tabulku:

Nyní napíšeme jednoduchý program. Vytvoříme soubor us_015.cpp

  • nano us_015.cpp

Soubor by měl obsahovat následující program:

 #include 
#include 
#include 
pomocí jmenného prostoru std;

  int CM;
  dlouho;
  int trig = 4;
  int echo = 1;
  void measure_odleglosci ();
  int pulseIn (int pin, int level);


int main (neplatný)
{
 wiringPiSetup ();

 pinMode (trig, OUTPUT);
 pinMode (echo, INPUT);

 cout << "Test snímače vzdálenosti" << endl << endl;

 zatímco (1)
 {
  distance_measure (); // měření vzdálenosti
  cout << "Vzdálenost:"; // zobrazí výsledky na obrazovce ve smyčce každých 200 ms
  cout << CM << "cm" << endl;
  zpoždění (200);
 }
  návrat 0;
}

void measurementment_odleglosci ()
{
  digitalWrite (trig, HIGH); // nastavení vysokého stavu na 10 uS - impuls $
  delayMicroseconds (10);
  digitalWrite (trig, LOW);
  TIME = pulseIn (echo, HIGH);
  CM = TIME / 58; // šířka odraženého pulzu v uS děleno p $} int pulseIn (int pin, int level) // funkce měřící čas k dosažení daného $ {struct timeval tn, t0, t1; dlouhé mikroskopy; gettimeofday (& t0, NULL); mikro = 0; while (digitalRead (pin)! = level) {gettimeofday (& tn, NULL); if (tn.tv_sec> t0.tv_sec) micros = 1000000L; else mikro = 0; micros + = (tn.tv_usec - t0.tv_usec); pokud (mikro> 10 000) vrátí 0; } gettimeofday (& t1, NULL); while (digitalRead (pin) == level) {gettimeofday (& tn, NULL); if (tn.tv_sec> t0.tv_sec) micros = 1000000L; else mikro = 0; micros = micros + (tn.tv_usec - t0.tv_usec); pokud (mikro> 10 000) vrátí 0; } if (tn.tv_sec> t1.tv_sec) micros = 10 000 000L; else mikro = 0; micros = micros + (tn.tv_usec - t1.tv_usec); zpětné mikroskopy; }

Poté uložte změny do souboru a zavřete jej. K sestavení vytvořeného souboru použijeme příkaz:

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

Provoz programu

Pro výpočet vzdálenosti k objektu je doba odezvy dělena 58 (podle dokumentace). Proč tolik? Tato hodnota je odvozena ze vzorce:

ČAS / [1 / (0,34 / 2) / 10]

  • hodnota v hranatých závorkách je 58:
    • 0,34 - rychlost vlny vm / ms (340 m / s) dělená 2 (protože vlna obíhala oběma směry).
    • Navíc vše dělitelné 10 převádí milimetry na centimetry

Program spusťte pomocí následujícího příkazu:

  • sudo ./us_015.o

Výsledek programu lze zobrazit na monitoru:

Screenshot monitoru.

zveme vás ke spolupráci!