Ultradźwiękowy Moduł HC-SR04 zapewnia funkcję pomiaru bezstykowego odległości w od 2cm do 400cm. Dokładność pomiaru w tym zakresie może osiągnąć do 3mm. Tak jego dane precyzuje producent … Ja zaprezentuję jak pogodzić HC-SR04 Bascom AVR i zbudować elektroniczny miernik odległości.
Moduł jest zbudowany z nadajnika oraz odbiornika ultradźwiękowego i obwodu sterowania.
Powiedzmy, że moduł ten jest uzupełnieniem serii modułów HC-SR501 – wszak znakowanie podobne, dotyczy serii HC-SRxxx.
Podstawowa zasada pracy:
⇒ Na pinie IO trigger ustawić przynajmniej na 10µs stan wysoki, poziom TTL,
⇒ Moduł automatycznie wysyła osiem impulsów o częstotliwości 40kHz, oraz wykrywa czy istnieje powrotny sygnał w postaci odbitych impulsów.
⇒ Jeśli sygnał powraca, ustawiony jest stan wysoki na wyjściu IO, czas trwania stanu wysokiego określa czas trwania powrotu ultradźwięków.
Formuła do obliczeń: µs/58 = cm lub µs/148 = cal, lub długość odcinka mierzonego= czas wysokiego poziomu * prędkość dźwięku(340m/s) / 2;
Producent sugeruje użycie cyklu pomiarowego trwającego ponad 60ms, w celu zapobieżenia wyzwalania w trakcie trwania sygnału echo.
sposób obliczania według innego źródła:
S = F/58,82 gdzie S – odległość w centymetrach, F – szerokość impulsu w mikrosekundach.
Obliczanie odległości omówienie:
odległość = prędkość * czas
Niech D będzie odległością między czujnikiem ultradźwiękowym i celem
Całkowita droga przebyta przez fale ultradźwiękowe jest odcinkiem: 2d (tam i z powrotem)
Prędkość dźwięku w powietrzu: 340 m/s = 34000 cm/s
Tak więc, d = (34000 * czas) / 2, gdzie czas = (TMR1H: TMR1L) / (1000000)
Dlatego, d = (TMR1H: TMR1L) /58.82 cm
Podczas przeprowadzania pomiarów zalecane jest aby zakres oddalonej powierzchni nie był mniejszy niż 0,5m2. Wymagana jest płaska gładka powierzchnia, w przeciwnym razie, będzie mieć to wpływ na wyniki pomiarów.
Jeżeli żadna przeszkoda nie zostanie wykryta, pin wyjściowy podaje sygnał wysokiego poziomu o czasie trwania 38ms.
Podstawowe parametry pracy:
⇒ Rozdzielczość 3mm,
⇒ Napięcie zasilania: DC 5V,
⇒ prąd pobierany podczas pracy: 15mA,
⇒ częstotliwość robocza: 40Hz,
⇒ maksymalny zasięg: 4m,
⇒ minimalny zasięg: 2cm,
⇒ dopuszczalny kąt pomiaru: 15°, (lub 30°)
⇒ czas trwania sygnału wyzwalającego Trigger: 10µS TTL,
⇒ wyjście sygnału Echo w zakresie poziomu TTL, zakres impulsu proporcjonalny do mierzonej odległości,
⇒ wymiary modułu: 45 x20 x15mm.
Przejdźmy teraz do konkretów związanych z Bascom AVR.
Na potrzeby rozpoznawcze modułu można zadowolić się instrukcją waitus dla wygenerowania sygnału startu pomiaru. Natomiast całą późniejszą robotą związaną z pomiarem stanu wysokiego wyprowadzenia ECHO, można obarczyć instrukcję pulsein ;-D która wystąpi w roli „pracowitego murzyna”. I tym sposobem kod stał się banalnie prosty do opracowania.
Jedynie zaznaczyć tu trzeba, że wartość mierzona jest w dziesiątkach mikrosekund, a stan licznika zapisywany jest na dwóch bajtach i może wynieść (65535) 655,35ms. W opisie polecenia wyczytamy również , że nie korzysta ono z timera, i w celu dostosowania jednostki zależnej od rezonatora, należy zmienić jej wartość w bibliotece mcs.lib. W przypadku przepełnienia licznika zmienna ERR zwróci wartość 1. Gdy będzie to niezbędne można posłużyć się biblioteką ($lib) „pulsein.lib”.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
'badanie modulu dalmierza ultradzwiêkowego HC-SR04 2013-01-27 - 2015-05-30 $regfile = "m328pdef.dat" $crystal = 8000000 $hwstack = 32 $swstack = 32 $framesize = 32 Config Portc.2 = Output 'wyjscie dla Trigger Config Portc.3 = Input 'wejscie dla Echo Trigger Alias Portc.2 Dim Czas As Word 'zmienna dla dlugosci sygnalu Dim Cm As Single 'zmienna przechowuj¹ca odleg³oæ $baud = 9600 Echo Off Const Wsp = 0.1725 'Wspólczynnik przeliczania dlugosci impulsu w odleglosc Print "zyje ..." Do Print "nowy pomiar" Trigger = 1 'podajemy impuls na pin trigger Waitus 10 Trigger = 0 Pulsein Czas , Pinc , 3 , 1 'polów impulsu wysokiego Cm = Czas / 5.8 'obliczenia wedlug wzoru z noty Print Cm Cm = Czas * Wsp 'obliczamy odlegloc na podstawie wspólczynnika If Cm < 2 Then Print "za ma³y dystans" Else Print "zmierzony czas: " ; Czas ; "/100=ms odleglosc: " ; Fusing(cm , "###.###") 'prezentacja danych w konsoli RS, wynik w centymetrach End If Waitms 100 Loop End |
Krótkie omówienie i prezentacja wyników testu.
Na jakość pomiarów ma bezpośredni wpływ zastosowany oscylator mikrokontrolera. W trakcie testów, po przełączeniu źródła taktowania na zewnętrzny kwarc 16MHz, wyniki były bardzo powtarzalne i praktycznie nie występowały odstępstwa. Równie istotny jest kąt odbicia ultradźwięków od oddalonej płaszczyzny pomiarowej. W trakcie testów występowała rozbieżność wyników od rzeczywistej odległości, którą kontrolowałem miarą zwijaną, niemniej uważam, że precyzja pomiarów jest do „ogarnięcia” i wyskalowania. 😉
Najkrótszy dystans jaki udało mi się prawidłowo zmierzyć za pomocą modułu ultradźwiękowego HC-SR04 i wyświetlić wynik w terminalu wynosił 18mm. Najdłuższego nie byłem w stanie oszacować ze względu na skromne warunki , w testach największa mierzona odległość wynosiła nieco ponad 3m.
Na dziś dzień, są też podobne moduły przesyłające dane jako znaki ASCI. Moduł taki ma wtedy 3 wyprowadzenia. A wysyłane dane to gotowy wynik odległości w centymetrach.
Opis ma charakter wspominkowy, kiedyś to z ciekawości zakupiłem ten moduł. Jako taki do dziś dnia nie ma zastosowania i odpoczywa w szufladzie (od około 15-01-2013) do czasu, aż się przyda. W tytule napisałem „HC-SR04 Bascom AVR i …” z powodu braku pomysłu dla zastosowania tego kawałka elektroniki. Niemniej na pewno znalazł by zastosowanie u konstruktorów robotów, i pojazdów autonomicznych. Można by go też zastosować w samochodzie jako system ostrzegania przez zderzeniem, najechaniem na niewidoczną przeszkodę podczas manewrowania pojazdem.
A.D. 2015-08-22
Buszując w zasobach internetu, kilka dni temu odkryłem jeszcze inną wersję tego modułu. Oznaczona została symbolem HC-SR05 (HY-SRF05), wygląda identycznie niemniej posiada dodatkowe piąte wyprowadzenie o nazwie OUT, którego funkcjonalności nie udało mi się odkryć. Przeglądając diagram z zaprezentowanym schematem komunikacji zakładam iż obsługiwać się go będzie identycznie w podstawowej funkcjonalności.
nota katalogowa
HC-SR04_Cytron.pdf (4365 pobrań )
,
nota katalogowa
HC-SR04_Elecfreaks.pdf (8485 pobrań )
,
nota katalogowa
HC-SR04_IteadStudio.pdf (4582 pobrania )
,
znaleziony schemat modułu
HC-SR04_schemat.jpg (4505 pobrań )