Pomiar odległości z wykorzystaniem Raspberry Pi i czujnika HC-SR04 lub US-015

 

Przedstawione czujniki umożliwiają pomiar odległości przy pomocy ultradźwięków. Czujnik wysyła falę, która po odbiciu od przeszkody wraca do niego. Obliczając czas między wysłaniem, a odebraniem impulsu można określić odległość sensora od obiektu.

 

Potrzebne będą następujące elementy:

 

Podłączenie z Raspberry Pi

Należy połączyć oba urządzenia według przedstawionej tabeli

 

GPIO Raspberry Pi Czujnik odległości
5 V VCC
GND GND

GPIO 4

Trig

GPIO 1

Echo

 

Schemat połączenie czujnika ultradźwiękowego z Raspberry Pi.

Obsługa

Aby korzystać z pinów GPIO w Raspberry Pi potrzebujemy biblioteki, która nam to umożliwi. W tym celu użyjemy wiringPi. Opis jak ją pobrać i zainstalować znajdziemy tutaj. Wystarczy kopiować kolejne polecenia. Na koniec, aby sprawdzić poprawność instalacji:

 

  • gpio readall

Po tym poleceniu powinniśmy zobaczyć poniższą tabelkę:

 

 

Teraz napiszemy prosty program. Tworzymy plik us_015.cpp

 

  • nano us_015.cpp

 

Plik powinien zawierać następujący program:

 

#include 
#include 
#include 
using namespace std;

  int CM;
  long CZAS;
  int trig = 4;
  int echo = 1;
  void pomiar_odleglosci();
  int pulseIn(int pin, int level);


int main (void)
{
 wiringPiSetup ();

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

 cout <<"Test czujnika odleglosci"< t0.tv_sec) micros = 1000000L; else micros = 0;

      micros += (tn.tv_usec - t0.tv_usec);

      if (micros > 10000) return 0;
   }

   gettimeofday(&t1, NULL);

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

      if (tn.tv_sec > t0.tv_sec) micros = 1000000L; else micros = 0;

      micros = micros + (tn.tv_usec - t0.tv_usec);

      if (micros > 10000) return 0;
   }

   if (tn.tv_sec > t1.tv_sec) micros = 1000000L; else micros = 0;
   micros = micros + (tn.tv_usec - t1.tv_usec);

   return micros;
}

Następnie zapisujemy zmiany w pliku i zamykamy go. Aby skompilować utworzony plik wykorzystamy polecenie:

 

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

 

Działanie programu

 

W celu obliczenia odległości od obiektu, czas odpowiedzi jest dzielony przez 58 (wg dokumentacji). Dlaczego akurat tyle? Ta wartość pochodzi ze wzoru:

 

CZAS / [1/(0.34 / 2 )/10]

 

  • wartość w nawiasie kwadratowym równa jest 58:
    • 0.34 - prędkość fali w m/ms (340 m/s) dzielona przez 2 (ponieważ fala przebyła drogę w dwie strony).
    • Dodatkowo wszystko dzielne przez 10, by zamienić milimetry na centymetry

 

Program uruchamiany następującym poleceniem:

 

  • sudo ./us_015.o

 

Wynik programu możemy obejrzeć na monitorze:

 

 

Zrzut ekranu monitora.

zapraszamy do współpracy!