Wstęp
W poniższym artykule chciałbym przedstawić zasadę działania czujnika ultradźwiękowego i jego obsługę za pomocą mikrokontrolera (Atmega328p). Program jest napisany w języku C. Aby go zrozumieć będzie potrzebna minimalna wiedza z programowania, a także pojęcie, jak działa mikrokontroler.
Zasada działania czujnika
Zjawisko, które pozwala nam mierzyć odległość lub obecność obiektu przed czołem czujnika to odbicie fali dźwiękowej. Jest ona generowana za pomocą piezoelektryka np. kryształu kwarcu w postaci plasterka, który drga i wprawia w ruch powietrze (tak, jak ludzie, gdy mówią). Drgania te powodują powstanie ultradźwięków o częstotliwości 40 kHz, czyli niesłyszalnych dla ludzi. Fale dźwiękowe odbijają się od obiektu i w części powracają do czujnika. Aby wyznaczyć odległość, wystarczy zmierzyć czas między wysłaniem a powrotem dźwięku. Poniższa ilustracja wyjaśni wszystko.
Jak obliczyć odległość?
Z lekcji fizyki wiemy, że aby obliczyć drogę w ruchu jednostajnym, należy pomnożyć czas i prędkość. Wykorzystamy to do naszych obliczeń:
V – prędkość dźwięku w powietrzu w temperaturze pokojowej 21°C
V = 344 [m/s]
t – czas między wysłaniem a powrotem fali [s], który mierzymy mikrokontrolerem
Jeśli chodzi o czas, to będziemy mierzyć go w mikrosekundach [us], trzeba go pomnożyć przez 10^-6. Dodatkowo całe równanie dzielimy przez 2, ponieważ fala porusza się w obie strony:
Dystans chcę mieć w [cm], dlatego 344 [m/s] mnożę razy 100 (10^2).
co po uproszczeniu daje mi:
dalej 10^-4 zrzucam do mianownika ze zmianą znaku potęgi:
skracamy to co możliwe, aby maksymalnie uprościć obliczenia w programie i otrzymujemy:
Podłączenie i obsługa czujnika HC-SR04
Link do dokumentacji: https://cdn.sparkfun.com/datasheets/Sensors/Proximity/HCSR04.pdf
VCC- plus zasilania (5V, zgodnie z dokumentacją)
GND – masa
Trig – wejście wyzwalania czujnika
Echo – wyjście, na którym pojawia się sygnał
Obsługa odbywa się w następujących krokach:
- Podajemy stan wysoki na wejście Trig na co najmniej 10 [us]
- Czujnik wykona serię 8 pulsów, wysyłając falę ultradźwiękową
- Sensor na wyjściu Echo wystawia stan wysoki, którego czas trwania jest proporcjonalny do mierzonej odległości. W celu jego zmierzenia wykorzystamy Timer sprzętowy z funkcją INPUT CAPTURE.
Na czym polega tryb Input capture?
Dokumentacja używanego przeze mnie mikrokontrolera:
https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf
Tryb input capture używany jest do pomiaru długości jakiegoś zdarzenia np. okresu jakiegoś sygnału. Ja użyję go do pomiaru długości impulsu na wyjściu Echo, który jest równy odległości. Mikrokontroler (Atmega328p) posiada rejestry, które programista ustawia zgodnie ze swoimi potrzebami. Pozwalają przykładowo na włączanie przetwornika A/C, czyli można je porównać do ustawień wewnątrz mikrokontrolera. Poniżej znajdują się rejestry (znajdują się w dokumentacji), które trzeba skonfigurować, aby timer działał w trybie Input capture:
Program oraz prezentacja działania
Komentarze wyjaśnią działanie każdej linii programu:
Przykładem wykorzystania takiego czujnika jest prosty czujnik parkowania. Wraz ze zmniejszaniem odległości od przeszkody zapalane są kolejne diody led.