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.