Open form

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:

 

  1. #include
  2. #include
  3. #include
  4. using namespace std;
  5. int CM;
  6. long CZAS;
  7. int trig = 4;
  8. int echo = 1;
  9. void pomiar_odleglosci();
  10. int pulseIn(int pin, int level);
  11. int main (void)
  12. {
  13. wiringPiSetup ();
  14. pinMode(trig, OUTPUT);
  15. pinMode(echo, INPUT);
  16. cout <<"Test czujnika odleglosci"< t0.tv_sec) micros = 1000000L; else micros = 0;
  17. micros += (tn.tv_usec - t0.tv_usec);
  18. if (micros > 10000) return 0;
  19. }
  20. gettimeofday(&t1, NULL);
  21. while (digitalRead(pin) == level)
  22. {
  23. gettimeofday(&tn, NULL);
  24. if (tn.tv_sec > t0.tv_sec) micros = 1000000L; else micros = 0;
  25. micros = micros + (tn.tv_usec - t0.tv_usec);
  26. if (micros > 10000) return 0;
  27. }
  28. if (tn.tv_sec > t1.tv_sec) micros = 1000000L; else micros = 0;
  29. micros = micros + (tn.tv_usec - t1.tv_usec);
  30. return micros;
  31. }

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!