Wyświetlenia: 164 Autor: Grace Czas publikacji: 2021-07-26 Pochodzenie: Strona
The Czujnik ultradźwiękowy HC-SR04 to jeden z najpopularniejszych modułów pomiaru odległości w projektach Arduino. Jest szeroko stosowany w robotach unikających przeszkód, czujnikach parkowania, wykrywaniu poziomu, inteligentnych koszach na śmieci, miernikach odległości i innych zastosowaniach wykorzystujących czujniki bezdotykowe.
Moduł emituje fale ultradźwiękowe o częstotliwości 40 kHz poprzez nadajnik. Kiedy fala dźwiękowa napotyka obiekt, odbija się z powrotem do odbiornika. Mierząc czas echa i wykorzystując prędkość dźwięku, Arduino może obliczyć odległość między czujnikiem a obiektem.
| Parametr | Wartość |
| Typowe napięcie robocze | 5 V prądu stałego |
| Statyczny prąd roboczy | Mniej niż 5 mA w niektórych wersjach modułów |
| Częstotliwość robocza | Fala ultradźwiękowa 40 kHz |
| Odległość wykrywania | Typowy zakres: 2 cm do 400 cm; niektóre wersje z regulacją wzmocnienia mogą obsługiwać większy zasięg. |
| Kąt detekcji | Zwykle w granicach 15 stopni; niektóre wersje z większym wzmocnieniem mogą osiągnąć około 30 stopni. |
| Precyzja | Do około 0,3 cm w odpowiednich warunkach testowych |
| Strefa niewidomych | Minimalna odległość pomiarowa około 2 cm |
Moduł ultradźwiękowy HC-SR04 posiada cztery piny: VCC, TRIG, ECHO i GND. Arduino wysyła krótki impuls wyzwalający na pin TRIG, następnie odczytuje impuls powrotny z pinu ECHO.
| Sworzeń HC-SR04 | Połączenie Arduino | Funkcjonować |
| VCC | 5 V | Zasilanie modułu ultradźwiękowego. |
| WYMUSKANY | Cyfrowy pin 9 | Wejście wyzwalające. Arduino stosuje impuls 10us, aby rozpocząć ustalanie zakresu. |
| ECHO | Cyfrowy pin 10 | Wyjście echa. Arduino odczytuje szerokość impulsu, aby obliczyć odległość. |
| GND | GND | Połączenie uziemiające. |
HC-SR04 działa na zasadzie pomiaru czasu przelotu. Arduino wysyła sygnał wyzwalający wysokiego poziomu trwający co najmniej 10 mikrosekund do pinu TRIG. Moduł następnie automatycznie wysyła osiem impulsów ultradźwiękowych o częstotliwości 40 kHz i czeka na odbite echo.
Po wykryciu odbitego sygnału ultradźwiękowego, pin ECHO wysyła impuls o wysokim poziomie. Czas trwania tego impulsu to czas podróży fali ultradźwiękowej w obie strony.
Odległość = czas wysokiego poziomu echa × prędkość dźwięku / 2
W kodzie Arduino popularną uproszczoną formułą jest:
Odległość w cm = czas trwania × 0,0343 / 2
Proces pomiaru czasu jest prosty: Arduino utrzymuje przez chwilę TRIG na niskim poziomie, wysyła wysoki impuls o wartości 10 us, a następnie przywraca TRIG na niski poziom. HC-SR04 wysyła impuls ultradźwiękowy i ustawia ECHO na wysokim poziomie do momentu powrotu odbitego sygnału lub upłynięcia czasu pomiaru.
Aby uniknąć niestabilnych odczytów, należy pozostawić krótkie opóźnienie pomiędzy pomiarami. Powszechnie stosowany jest cykl pomiarowy trwający około 60 ms, dzięki czemu poprzednie echo ultradźwiękowe ma czas na zaniknięcie przed kolejnym wyzwoleniem.
Funkcja Arduino PulsIn() służy do pomiaru czasu, przez jaki pin cyfrowy pozostaje WYSOKI lub NISKI. W przypadku HC-SR04 Arduino wykorzystuje impulsIn(echoPin, HIGH) do odczytu szerokości impulsu wysokiego poziomu z pinu ECHO.
| Składnia | Oznaczający |
| impulsIn(pin, wartość) | Odczytuje czas trwania WYSOKIEGO lub NISKIEGO impulsu. |
| impulsIn(pin, wartość, limit czasu) | Odczytuje impuls z wartością limitu czasu w mikrosekundach. |
Zalecane jest użycie limitu czasu. Jeśli echo nie zostanie zwrócone, funkcja może przestać czekać i zwrócić 0, zamiast blokować program na zbyt długi czas.
Okablowanie jest proste. Podłącz VCC do 5 V, GND do GND, TRIG do cyfrowego pinu wyjściowego Arduino i ECHO do cyfrowego pinu wejściowego Arduino. W poniższym przykładzie zastosowano Arduino Uno, TRIG na pinie 9 i ECHO na pinie 10.
Poniższy typowy program Arduino wysyła impuls wyzwalający o długości 10 us, odczytuje szerokość impulsu ECHO, oblicza odległość w centymetrach i drukuje wynik w monitorze szeregowym.
const int trigPin = 9; stała int echoPin = 10; długi czas trwania; odległość pływakaCm; void setup() { pinMode(trigPin, WYJŚCIE); tryb pin(echoPin, WEJŚCIE); Serial.begin(9600); } void pętla() { digitalWrite(trigPin, LOW); opóźnienieMikrosekundy(2); digitalWrite(trigPin, WYSOKI); opóźnienieMikrosekundy(10); digitalWrite(trigPin, LOW); czas trwania = impulsIn(echoPin, WYSOKI, 30000); if (czas trwania == 0) { Serial.println(„Poza zakresem”); } else { odległośćCm = czas trwania * 0,0343 / 2; Serial.print('Odległość: '); Serial.print(odległośćCm); Serial.println(cm); } opóźnienie(60); }
Jeśli widzisz wartości odległości na monitorze szeregowym, czujnik ultradźwiękowy HC-SR04 i okablowanie Arduino działają poprawnie. Dane dotyczące odległości można następnie wykorzystać do wykrywania przeszkód, sterowania ruchem robota, automatycznych drzwi, przypomnień o parkowaniu lub projektów dotyczących poziomu cieczy.
Trzymaj mierzony obiekt w zalecanym zakresie odległości i poza 2cm martwą strefą.
Aby uzyskać lepsze odbicie ultradźwiękowe, użyj płaskiej i solidnej powierzchni docelowej.
Unikaj pomiaru materiałów miękkich, zakrzywionych, porowatych lub dźwiękochłonnych.
Użyj stabilnego źródła zasilania 5 V, a okablowanie powinno być krótkie i bezpieczne.
Dodaj limit czasu do pulsIn(), aby zapobiec długiemu blokowaniu, gdy nie powraca żadne echo.
Filtruj średnią lub medianę kilku odczytów, aby zredukować szum.
Aby uzyskać większą dokładność, skompensuj temperaturę, ponieważ prędkość dźwięku zmienia się wraz z temperaturą powietrza.
| Aplikacja | Jak używany jest HC-SR04 |
| Robot unikający przeszkód | Wykrywa pobliskie obiekty i pomaga robotowi zmienić kierunek. |
| Czujnik odległości przy parkowaniu | Mierzy odległość pomiędzy pojazdem a przeszkodą. |
| Detekcja poziomu cieczy | Bezdotykowo mierzy odległość czujnika od powierzchni cieczy. |
| Inteligentny kosz na śmieci | Wykrywa pobliską rękę lub przedmiot i uruchamia automatyczne otwarcie pokrywy. |
Aby użyć czujnika ultradźwiękowego HC-SR04 z Arduino, podłącz VCC do 5 V, GND do GND, TRIG do cyfrowego pinu wyjściowego i ECHO do cyfrowego pinu wejściowego. Wyślij impuls wyzwalający o długości 10 us, odczytaj czas trwania echa za pomocą pulsIn() i oblicz odległość za pomocą wzoru na czas przelotu.
HC-SR04 jest niedrogi, łatwy w obsłudze i nadaje się do wielu projektów pomiaru odległości Arduino. Aby uzyskać najlepsze wyniki, należy zwrócić uwagę na powierzchnię docelową, kąt pomiaru, strefę ślepą, stabilną moc, obsługę przekroczenia limitu czasu i wpływ temperatury.
Arduino wysyła impuls 10us na pin TRIG. HC-SR04 emituje osiem impulsów ultradźwiękowych 40 kHz i ustawia pin ECHO na wysoki poziom, aż do powrotu odbitego dźwięku. Arduino mierzy czas tego impulsu i oblicza odległość.
Wzór to odległość = czas trwania × prędkość dźwięku / 2. W centymetrach popularną formułą Arduino jest odległośćCm = czas trwania × 0,0343 / 2, gdzie czas trwania mierzy się w mikrosekundach.
Zmierzony czas echa to czas podróży w obie strony od czujnika do obiektu i z powrotem do czujnika. Dzielenie przez 2 daje jednokierunkową odległość między czujnikiem a obiektem.
Można używać większości cyfrowych pinów Arduino. W wielu przykładach TRIG jest podłączony do cyfrowego styku 9, a ECHO jest podłączony do cyfrowego styku 10. Kod musi pasować do styków używanych w okablowaniu.
Typowe przyczyny to luźne okablowanie, niestabilne zasilanie 5 V, nieprawidłowe numery pinów TRIG lub ECHO, brak obiektu w zasięgu, pochylone powierzchnie celu, miękkie materiały, zablokowane głowice czujników lub brak limitu czasu w funkcji pulsIn().
Strefa ślepa to minimalna odległość, w której moduł nie może dokonać wiarygodnego pomiaru. W przypadku HC-SR04 martwa strefa wynosi zwykle około 2 cm. Obiekty znajdujące się bliżej niż ta mogą powodować niestabilne odczyty.
Tak, HC-SR04 można używać do prostych, bezdotykowych projektów pomiaru poziomu wody, jeśli czujnik jest chroniony przed wilgocią i zamontowany nad powierzchnią cieczy. W przypadku zbiorników wilgotnych, zewnętrznych lub przemysłowych zaleca się wodoodporny czujnik ultradźwiękowy.
Użyj stabilnego źródła zasilania, trzymaj czujnik prostopadle do celu, unikaj miękkich lub pochylonych powierzchni, dodaj limit czasu impulsu, wykonaj wiele odczytów, użyj filtrowania mediany i pozostaw około 60 ms między pomiarami.