Wróć do informacji o e-podręczniku Wydrukuj Pobierz materiał do PDF Pobierz materiał do EPUB Pobierz materiał do MOBI Zaloguj się, aby dodać do ulubionych Zaloguj się, aby skopiować i edytować materiał Zaloguj się, aby udostępnić materiał Zaloguj się, aby dodać całą stronę do teczki

HC‑SR04, czyli elektroniczny nietoperz

Pomiaru odległości możemy dokonać za pomocą czujnika ultradźwiękowegoultradźwiękiultradźwiękowego HC‑SR04. Ma on cztery wyprowadzenia:

  • Vcc – pin zasilający układ napięciem 5 V;

  • Trig (od ang. trigger) – pin służący do zainicjowania pomiaru; gdy pojawi się na nim stan wysoki, czujnik wysyła falę dźwiękową o częstotliwości 40 kHz;

  • Echo – pin umożliwiający obserwację wyniku pomiaru (wyjście modułu); pin, do którego dociera fala odbita;

  • Gnd – masa układu.

Re79WEUPnc6iw
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Ze względu na wygląd czujnik ten kojarzy się z oczami robota, a tak naprawdę są to jednak „usta” i „uszy”. Za pomocą sensora nie zarejestrujemy oczywiście mowy ani muzyki, lecz niesłyszalne dla człowieka fale ultradźwiękowe.

Jak działa taki moduł? Otóż wysyła on falę dźwiękową, która po natrafieniu na przeszkodę odbija się od niej i wraca do czujnika. Czas potrzebny do przebycia tej odległości dzielimy przez dwa, a następnie mnożymy przez prędkość dźwięku.

R13VoAazE1dsu
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Wiemy już, jak realizowany jest pomiar odległości. Pod uwagę należy wziąć jeszcze to, jakie odległości chcemy mierzyć. Przedstawiony moduł działa w zakresie od 2 do 200 centymetrów. Jeżeli więc chcesz zmierzyć odległość większą, musisz zaopatrzyć się w mocniejszy czujnik.

Narysujmy schemat połączenia sensora z płytką Arduino Uno:

RkYOnosdz5pkQ

Elementy potrzebne do budowy układu:

  • płytka Arduino Uno,

  • płytka stykowa,

  • kabel USB typu A‑B,

  • czujnik HC‑SR04,

  • przewody i zworki połączeniowe.

Skonstruujemy układ, który będzie wyświetlał wyniki w monitorze portu szeregowego, a w następnie dodamy diody LED, sygnalizujące odległość samochodu (albo innego obiektu) od przeszkody.

Korzystając ze schematu podpinamy cztery przewody łączące wyprowadzenia czujnika z odpowiednimi pinami płytki Arduino.

R1s6lKBTmFQmD
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Możemy podłączyć płytkę do komputera. Następnie zaprogramujemy czujnik tak, aby zwrócone przez niego odległości były wyświetlane na monitorze portu szeregowego. Uruchamiamy aplikację Arduino IDE i otwieramy nowy szkic.

  1. Deklarujemy piny płytki Arduino, do których podłączamy wyprowadzenia Trig i Echo.

Linia 1. int trig znak równości 3 średnik. Linia 2. int echo znak równości 2 średnik.
  1. W ciele funkcji setup() ustawiamy pin Trig jako wyjściowy, a pin Echo jako wejściowy (odbiera on sygnał, a zatem jest elementem wejściowym). Chcemy wyświetlać odległość na ekranie, musimy więc nawiązać połączenie z portem szeregowym.

Linia 1. void setup otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. pinMode otwórz nawias okrągły trig przecinek otwórz nawias ostrokątny span class znak równości apostrof foreign apostrof lang znak równości apostrof en apostrof zamknij nawias ostrokątny OUTPUT otwórz nawias ostrokątny prawy ukośnik span zamknij nawias ostrokątny zamknij nawias okrągły średnik. Linia 3. pinMode otwórz nawias okrągły echo przecinek INPUT zamknij nawias okrągły średnik. Linia 4. Serial kropka begin otwórz nawias okrągły 9600 zamknij nawias okrągły średnik. Linia 5. zamknij nawias klamrowy.
  1. W ciele funkcji loop() ustawiamy wysoki stan napięcia na pinie Trig, dzięki czemu sensor będzie wysyłał fale ultradźwiękowe. W przypadku platformy Arduino czas trwania sygnału określa się zwykle w milisekundach, jednak w przypadku ultradźwiękowego czujnika odległości jest inaczej. Czas podajemy nie w mili-, lecz w mikrosekundach. Aby to zrobić, używamy zmodyfikowanej wersji funkcji delay() – jest nią delayMicroseconds(). Podajemy wartość 1000 µs, co odpowiada jednej milisekundzie. Po wysłaniu sygnału wyłączamy pin, czyli ustawiamy niski poziom napięcia.

Linia 1. void loop otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. otwórz nawias ostrokątny span class znak równości apostrof foreign apostrof lang znak równości apostrof en apostrof zamknij nawias ostrokątny digitalWrite otwórz nawias ostrokątny prawy ukośnik span zamknij nawias ostrokątny otwórz nawias okrągły trig przecinek otwórz nawias ostrokątny span class znak równości apostrof foreign apostrof lang znak równości apostrof en apostrof zamknij nawias ostrokątny HIGH otwórz nawias ostrokątny prawy ukośnik span zamknij nawias ostrokątny zamknij nawias okrągły średnik. Linia 3. otwórz nawias ostrokątny span class znak równości apostrof foreign apostrof lang znak równości apostrof en apostrof zamknij nawias ostrokątny delayMicroseconds otwórz nawias ostrokątny prawy ukośnik span zamknij nawias ostrokątny otwórz nawias okrągły 1000 zamknij nawias okrągły średnik. Linia 4. otwórz nawias ostrokątny span class znak równości apostrof foreign apostrof lang znak równości apostrof en apostrof zamknij nawias ostrokątny digitalWrite otwórz nawias ostrokątny prawy ukośnik span zamknij nawias ostrokątny zamknij nawias ostrokątny otwórz nawias okrągły trig przecinek LOW zamknij nawias okrągły średnik. Linia 5. zamknij nawias klamrowy.
  1. Musimy się dowiedzieć, ile czasu zajmuje fali dźwiękowej dotarcie do przeszkody i powrót do czujnika. Potrzebna będzie zmienna do przechowywania tej wartość. Deklarujemy ją na początku szkicu (można też zrobić to wewnątrz funkcji loop(), jednak dobrą praktyką jest umieszczanie stałych, zmiennych oraz bibliotek na samym początku). Druga zmienna, jakiej użyjemy, pozwoli na obliczenie odległości.

Linia 1. int czas średnik. Linia 2. int odleglosc średnik.
  1. W ciele funkcji loop() odczytujemy czas, jaki został odebrany przez pin Echo. Używamy w tym celu funkcji pulseIn(). Następnie obliczamy odległość. Współczynnik 58 użyty we wzorze niżej wynika z wyrażonego w mikrosekundach czasu potrzebnego fali dźwiękowej na przebycie jednego centymetra. Dla cali ten współczynnik wynosiłby 148.

odległość=czas powrotu sygnału od momentu jego wysłania58
Linia 1. czas znak równości pulseIn otwórz nawias okrągły echo przecinek HIGH zamknij nawias okrągły średnik. Linia 2. odleglosc znak równości czas prawy ukośnik 58 średnik.
  1. Wyświetlamy otrzymany wynik oraz jednostkę pomiaru na ekranie. Ustawiamy przejście do następnej linii po każdej prezentacji wartości. Określamy, co jaki czas ma być dokonywany pomiar – w przykładowym szkicu jest to 100 ms, dzięki czemu następujące po sobie odczyty zmieniają się płynnie. Możemy jednak ustawić tę wartość dowolnie.

Linia 1. Serial kropka print otwórz nawias okrągły cudzysłów Odleglosc wynosi dwukropek cudzysłów zamknij nawias okrągły średnik. Linia 2. Serial kropka print otwórz nawias okrągły odleglosc zamknij nawias okrągły średnik. Linia 3. Serial kropka println otwórz nawias okrągły cudzysłów cm cudzysłów zamknij nawias okrągły średnik. Linia 4. delay otwórz nawias okrągły 100 zamknij nawias okrągły średnik.
  1. Zapisujemy szkic, weryfikujmy poprawność kodu i wysyłamy go do płytki Arduino. Włączamy Monitor portu szeregowego, a następnie ustawiamy dowolny przedmiot przed czujnikiem i zwiększamy oraz zmniejszamy jego odległość od sensora. Na ekranie powinien pokazać się prawidłowy wynik.

RACMPOLgJmFgn

Tinkercad

Zróbmy symulację układu z sensorem ultradźwiękowym za pomocą środowiska Tinkercad.

R1XPEqUhRGTSc

Dodaj do głównego okna symulatora płytkę stykową.

R1HDarTn4uPBX

Z listy rozwijanej Komponenty wybierz Wszystko.

RxfWdOxxYn9Nx

Znajdź i dodaj do płytki czujnik HC‑SR04.

RsF86Ehg2WxE1

Dodaj moduł Arduino Uno do okna symulacji.

RMUizMw2UliFf

Pin VCC czujnika podpinamy z pinem 5V Arduino.

R5Fe0CAsgH6gl

Pin Trig podpinamy do pinu D3 Arduino.

RPbQBpKF2Me34

Pin Echo podpinamy z pinem D2 Arduino.

R14nuD9k0i57r

Pin GND podpinamy z pinem GND Arduino.

R1JT5hdbh83u0

Przejdźmy teraz do pisania kodu. W tym celu klikamy na przycisk Kod, z listy rozwijanej wybieramy Tekst, potwierdzamy chęć zmiany widoku i czyścimy zawartość.

Przepisz kod układu z sensorem ultradźwiękowym i uruchom symulację.

R1T5LnLfIF8kP

Film z działania programu.

R1Y6sMqjN1XoP
Film nawiązujący do treści materiału: Pokazujący schemat połączenia pomiędzy Płytką Arduino, a ultra dźwiękowym czujnikiem odległości.

Słownik

ultradźwięki
ultradźwięki

fale akustyczne o częstotliwości zbyt wysokiej, aby mogły być usłyszane przez człowieka; za dolną granicę częstotliwości fal ultradźwiękowych uznaje się 20 000 Hz (20 kHz)