Ultradźwiękowy czujnik odległości HC-SR04 2-200cm – Szczegóły na temat produktu i przykłady zastosowań

Czas czytania: 4 min.

HC-SR04 – ultradźwiękowy czujnik odległości, który umożliwia wykonywanie pomiaru odległości od obiektu poprzez wysyłanie i odbieranie fali ultradźwiękowej. To znakomity moduł do zastosowania w robotach jeżdżących – dzięki takiemu czujnikowi przeszkody na torze jazdy zostają odpowiednio szybko wykryte, aby robot zdążył je bezpiecznie ominąć. 

Ultrasonic distance sensor HC-SR04 2-200cm + mounting bracket
Ultradźwiękowy czujnik odległości HC-SR04 2-200cm z uchwytem montażowym.

Konstrukcja czujnika składa się ze sparowanych ze sobą elementów głównych – nadajnika i odbiornika, a także układu sterowania i generatora sygnału pomiarowego. Nadajnik wysyła sygnał ultradźwiękowy, który zostaje odbity od obiektu, względem którego jest mierzona odległość, a fala ultradźwiękowa powraca do odbiornika i podlega procesowi przetwarzania w celu obliczenia różnicy czasu, który mija od chwili wysłania sygnału pomiarowego, do chwili jego odebrania. Sygnał wyjściowy z czujnika może być przekazany do dalszego przetwarzania przez zewnętrzny mikrokontroler współpracujący w celu obliczenia odległości czujnika względem pobliskiego obiektu. HR-SR04 jest niedrogim czujnikiem, a przy tym odznacza się bardzo dobrą dokładnością pomiaru na poziomie ±0,3 cm. Czujnik może współpracować zarówno z płytkami Arduino, jak i Raspberry Pi, przy czym podłączając czujnik HC-SR04 do Raspberry Pi, należy skorzystać z konwertera poziomów logicznych, który obniża napięcie 5,0V z czujnika na poziom 3,3V, zgodny z wyprowadzeniami GPIO w Raspberry Pi.

Budowa i zasada działania ultradźwiękowego czujnika odległości

Moduł czujnika HC-SR04 ma cztery wyprowadzenia:

  • “Vcc” – wejście napięcia zasilającego 5V
  • “Trig” – wejście sygnału wyzwalającego cykl pomiarowy
  • “Echo” – wyjście sygnału odwzorowującego czas przemieszczania się fali ultradźwiękowej
  • “Gnd” – masa zasilania

Wyprowadzenia “Vcc” i “Gnd” muszą być podłączone do pinów zasilania napięciem 5V (“VCC”) i masy (“GND”) w Arduino, a wyprowadzenia “Trig” i “Echo” należy podłączyć do osobnych wyprowadzeń dwustanowych. Po podaniu na wejście “Trig” sygnału stanu wysokiego o czasie trwania wynoszącym 10µs wbudowany generator podaje na nadajnik czujnika sygnał ultradźwiękowy o częstotliwości 40kHz przez czas 200µs. Po zakończeniu wysyłania tego sygnału pin “Echo” zostaje przerzucony w stan wysoki i rozpoczyna się pomiar. Wyemitowana fala ultradźwiękowa jest wysyłana w powietrze i gdy napotka na drodze przeszkodę, zostaje odbita w stronę odbiornika wbudowanego w module czujnika. Zmierzony czas trwania stanu wysokiego na pinie “Echo” jest proporcjonalny do odległości czujnika od przeszkody. Cały cykl pomiarowy obrazują oscylogramy przedstawione na rys. 1.

Rys 1 – relacja między przebiegami czasowymi sygnałów czujnika HC-SR04

Aby obliczyć odległość pokonaną przez falę ultradźwiękową, trzeba wiedzieć, że prędkość dźwięku w powietrzu wynosi ok. 340 m/s, przy czym do naszych obliczeń użyjemy przeliczenia na 0,034cm/µs. Przykładowo, gdy przeszkoda jest umieszczona 10 cm od czujnika, wówczas czas trwania cyklu pomiarowego będzie trwał ok. 592µs. Czas zmierzony przez czujnik obejmuje wysłanie fali ultradźwiękowej oraz jej powrót do źródła, a więc dwukrotną odległość czujnika od punktu odbicia fali ultradźwiękowej. Z tego względu otrzymany wynik pomiaru należy podzielić przez 2. Obliczeń należy dokonać zgodnie z zależnościami (1.1) i (1.2).

Specyfikacja techniczna ultradźwiękowego czujnika odległości HC-SR04

  • Napięcie zasilania: 5V
  • Maksymalny pobór prądu: 20mA
  • Poziom logiczny stanu wysokiego: 5V
  • Poziom logiczny stanu niskiego: 0V
  • Zakres temperatury roboczej: -15 – +70°C
  • Kąt pomiaru: 30°
  • Kąt odbicia fali ultradźwiękowej: °15
  • Częstotliwość sygnału pomiarowego: 50kHz
  • Zakres pomiarowy czujnika: ±0,02 – 2,00m
  • Dokładność pomiaru: 0,003m
  • Wymiary czujnika: 45 x 20 x 15mm
Ultradźwiękowy czujnik odległości Pololu
Gravity URM09 - ultrasonic distance sensor 2-500cm sensor analog - DFRobot SEN0307

Ultradźwiękowe czujniki odległości

Przykładowy kod programu w środowisku Arduino IDE

Aby zrealizować przykładowy program na Arduino do obsługi czujnika HC-SR04, w pierwszej kolejności należy przypisać odpowiednie wyprowadzenia, do których są podłączone piny czujnika “Trig” i “Echo”. W przykładowym programie przyjęto, że piny czujnika są połączone z wyprowadzeniami Arduino o numerach odpowiednio 5 i 6 – są to wyprowadzenia dwustanowe. Następnie definiujemy zmienne określające parametry pomiaru, tj. czas trwania cyklu pomiarowego (zmienna typu “long”) oraz zmierzoną odległość czujnika od obiektu (zmienna typu “int”). Pin nr 5 (“Trig”) jest określony jako wyjście, a pin nr 6 (“Echo”) jako wejście. W celu podglądu wyniku pomiaru wprowadzamy uruchomienie transmisji danych przez interfejs UART za pomocą instrukcji Serial.begin(). Na początku każdego cyklu pomiarowego pin “Trig” jest ustawiany w stan logiczny niski. Po odczekaniu 2 mikrosekund pin “Trig” jest przerzucany w stan logiczny wysoki na czas 10µs, po czym ponownie jest zerowany. Wówczas pin “Echo” zostaje przerzucony w stan wysoki, co jest równoznaczne z wysłaniem fali ultradźwiękowej i rozpoczęciem cyklu pomiarowego. 

Czas trwania cyklu pomiarowego jest odmierzany za pomocą funkcji pulseIn() – w omawianym przypadku funkcja ta wykonuje pomiar czasu trwania stanu wysokiego na pinie “Echo”. Po zakończeniu cyklu pomiarowego zmierzony czas trwania impulsu “czaspomiaru” jest podstawiany do wzoru w następnej linijce kodu – w ten sposób zostaje obliczona wartość zmiennej “odległość”, która obrazuje rzeczywistą odległość czujnika od obiektu. Obliczony wynik jest wysyłany do komputera, a jego wartość zostaje wyświetlona w monitorze portu szeregowego. Kolejny pomiar jest wykonywany w taki sam sposób w pętli.

Kod programu

/*
*Program obsługujący ultradźwiękowy czujnik odległości HC-SR04
*/

// Przypisanie pinów funkcyjnych czujnika do ponumerowanych wyprowadzeń Arduino
const int Trig = 5;
const int Echo = 6;

// Definiowanie zmiennych określających parametry pomiaru
long czaspomiaru; // Czas trwania cyklu pomiarowego
int odleglosc; // Zmierzona odległość czujnika od obiektu

// Ustawienie funkcji sprzętowych
void setup() {
  pinMode(Trig, OUTPUT); // Ustawienie pinu Trig jako wyjście
  pinMode(Echo, INPUT); // Ustawienie pinu Echo jako wejście

  Serial.begin(9600); // Uruchomienie transmisji danych przez interfejs UART; Prędkość transmisji: 9600 bitów na sekundę
}

void loop() {
  digitalWrite(Trig, LOW); // Wyzerowanie pinu sygnału Trigger
  delay(0.002); // odczekanie 2 mikrosekund

  digitalWrite(Trig, HIGH); // Ustawienie pinu sygnału Trigger w stan wysoki
  delay(0.010); // odczekanie 10 mikrosekund

  digitalWrite(Trig, LOW); // Ustawienie pinu sygnału Trigger w stan wysoki - start pomiaru

  czaspomiaru = pulseIn(Echo, HIGH); //pomiar czasu trwania impulsu (stanu wysokiego) na pinie Echo
  odleglosc = czaspomiaru*0.034/2; // Obliczanie odległości czujnika od obiektu

  // Wyświetlanie wartości zmierzonej odległości obiektu od czujnika w oknie monitora portu szeregowego

  Serial.print("Odleglosc zmierzona: ");
  Serial.println(odleglosc);
}

Jak oceniasz ten wpis blogowy?

Kliknij gwiazdkę, aby go ocenić!

Średnia ocena: 4.2 / 5. Liczba głosów: 5

Jak dotąd brak głosów! Bądź pierwszą osobą, która oceni ten wpis.

Podziel się:

Picture of Grzegorz Galuba

Grzegorz Galuba

GG nie ma czasu na gadu-gadu - jest zawsze na bieżąco z nowościami z oferty, wybiera tylko najlepsze i dba, aby pojawiały się na czas. Jego rozległa wiedza o specyfikacjach technicznych produktów to nieocenione wsparcie dla całej ekipy. Do pracy przyjeżdża rowerem i już najwyższa pora, aby wszyscy zaczęli brać z niego przykład. Oaza spokoju.

Zobacz więcej:

Masz pytanie techniczne?
Napisz komentarz lub zapytaj na zaprzyjaźnionym forum o elektronice.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Ze względów bezpieczeństwa wymagane jest korzystanie z usługi Google reCAPTCHA, która podlega Polityce prywatności i Warunkom użytkowania.