Kurs micro:bit – #8 – ultradźwiękowy czujnik odległości

Kurs micro:bit – #8 – ultradźwiękowy czujnik odległości

W tym odcinku kursu micro:bita poznamy ostatni moduł Grove, który jest częścią naszego zestawu. Ultradźwiękowy czujnik odległości pozwoli na dokładny pomiar odległości od 0 do 350 cm.

Sensory takie spotykane są np. w samochodach, gdzie ułatwiają kierowcom parkowanie.

Jak działa czujnik ultradźwiękowy?

Nasz czujnik ultradźwiękowy to duży moduł, na którym znajduje się wiele elementów elektronicznych. Najciekawsze są jednak dwie małe „puszki” zakryte cienką, metalową siateczką. Są to przetworniki ultradźwiękowe – elementy te mogą generować i odbierać dźwięki niesłyszalne dla ludzkiego ucha.

Uproszczona zasada działania czujnika ultradźwiękowego

Uproszczona zasada działania czujnika ultradźwiękowego

W naszym module jeden z przetworników pełni funkcję nadajnika (opisany jako „T”), a drugi – odbiornika (opisany jako „R”). Nadajnik wytwarza falę dźwiękową, która przemierza pomieszczenie. Jeśli na drodze napotkana zostanie jakaś przeszkoda, to sygnał odbije się od niej i wróci do czujnika.

Mierząc czas, po którym nasz odbiornik „zauważy” odbity sygnał, możemy obliczyć dokładną odległość czujnika od przeszkody. Podobnie z nawigowaniem między przeszkodami radzą sobie nietoperze, które wykorzystują tak zwaną echolokację.

Zestaw elementów do kursu

 999+ pozytywnych opinii  Gwarancja pomocy  Wysyłka w 24h

Moduły do wykonania wszystkich ćwiczeń z kursu micro:bita dostępne są w formie gotowych zestawów! W komplecie m.in.: micro:bit, czujnik gestów i odległości oraz taśma diod RGB.

Zamów w Botland.com.pl »

Wykorzystanie czujnika ultradźwiękowego

Czujnik ultradźwiękowy z serii Grove możemy podłączyć do dowolnego uniwersalnego wejścia – w tym przykładzie podłączymy go do gniazda P1. Podczas korzystania z tego modułu przydaje się również dodatkowe zasilanie, które należy podłączyć do płytki rozszerzającej możliwości micro:bita (temat ten został dokładnie opisany w poprzedniej części kursu). Przed napisaniem pierwszego programu musimy jeszcze zainstalować pakiet bloczków Grove (instrukcja w 5. części kursu) i możemy ruszać!

Zacznijmy od prostego programu testowego, dzięki któremu sprawdzimy, czy czujnik działa. W tym celu do pętli nieskończonej (bloczek forever) dodajemy warunek, w którym sprawdzamy tylko, czy wartość odczytana z czujnika jest mniejsza od 20 cm. Zależnie od uzyskanego wyniku na ekranie powinna pojawić się jedna z dwóch ikon. Cały program jest bardzo prosty, potrzebujemy tylko jednego nowego bloczka, jakim jest Ultrasonic Sensor (in cm) – znajdziemy go w zakładce Grove.

Program testujący działanie czujnika ultradźwiękowego

Program testujący działanie czujnika ultradźwiękowego

Po wgraniu programu wystarczy zbliżyć rękę do czujnika. Jeśli zbliżymy dłoń na mniej niż 20 cm, to na naszym wyświetlaczu powinien pokazać się mały kwadracik. Przy okazji warto zapamiętać, że podczas pracy takiego czujnika ultradźwiękowego możemy (ale nie musimy) słyszeć delikatne „cykanie”, które jest generowane przez przetworniki (zależy to głównie od konkretnego egzemplarza czujnika).

Prosty czujnik parkowania

Idealnym projektem do pokazania tego modułu w praktyce jest budowa czujnika parkowania. W końcu właściwie identyczne rozwiązania można spotkać w samochodach. Małe, okrągłe elementy, które montowane są w zderzakach samochodów, to właśnie przetworniki czujników ultradźwiękowych. Działają one bardzo podobnie do naszego czujnika.

Przykład dwóch czujników ultradźwiękowych w zderzaku

Przykład dwóch czujników ultradźwiękowych w zderzaku

Zacznijmy więc od zbudowania prostej wersji takiego urządzenia. Czujnik ultradźwiękowy zostawiamy podłączony do gniazda P1, a do P0 podłączamy pasek diod (omówiony w poprzedniej części kursu).

Zacznijmy od najprostszej wersji programu, w której odległość od przeszkody będzie przedstawiana za pomocą paska diod RGB. Tutaj idealnie sprawdzi się bloczek show bar graph, który będzie informował nas o odległości od przeszkody.

Konfigurujemy pasek diod i tworzymy zmienną sensor, do której zapisywana będzie wartość z czujnika odległości. Wartość maksymalną w show bar graph ustawiamy na 350 cm (taki jest maksymalny zasięg deklarowany przez producenta; niektóre wersje mogą mieć trochę inny zakres, np. do 400 cm).

Program prostego czujnika parkowania

Program prostego czujnika parkowania

Po wgraniu programu układ powinien od razu działać – im bliżej czujnika znajdzie się jakaś przeszkoda, tym mniej diod będzie świeciło. Do testowania tego układu najlepiej wykorzystać dłoń lub kartkę A4, którą można przybliżać do czujnika.

Układ działa, ale jest mało praktyczny. Gdyby taki czujnik parkowania był zamontowany w samochodzie, to jeśli przeszkoda byłaby bardzo daleko (np. 4 m od samochodu), kierowca byłby cały czas rozpraszany przez świecące diody. Idealnie byłoby, gdyby układ reagował tylko na przeszkody, które są blisko, np. 60 cm od czujnika – w przeciwnym wypadku diody powinny być wyłączone. Oczywiście jest to możliwe – wystarczy jeden prosty warunek.

Czujnik parkowania z ograniczeniem

Dodajmy więc do naszego układu limit, który sprawi, że urządzenie będzie sygnalizowało zbliżającą się przeszkodę, tylko jeśli będzie ona bliżej niż 60 cm przed czujnikiem. W programie dodany został prosty warunek – jeśli odczyt czujnika wskaże, że nie ma przeszkody (lub jest dalej niż 60 cm), to automatycznie zmieniamy wartość zmiennej sensor na 0.

Dzięki temu na pasku diod RGB będziemy pokazywać przeszkodę tylko wtedy, gdy będzie ona blisko czujnika. Od razu zmieniamy też wartość maksymalną na bloczku show bar graph – z 350 na 60.

Program czujników parkowania z ograniczeniem

Program czujników parkowania z ograniczeniem

Teraz układ będzie działał już znacznie lepiej. Brak przeszkody przed czujnikiem sprawi, że na pasku diod RGB będzie świeciła się tylko jedna dioda (bo tak bloczek show bar graph sygnalizuje zero), a w momencie wykrycia przeszkody włączą się wszystkie diody. Im bliżej będzie przeszkoda, tym mniej diod będzie się świeciło. Uzyskaliśmy więc bardzo praktyczny układ prostego czujnika parkowania.

Czujnik parkowania z dokładnym pomiarem

Diody RGB są bardzo dobrym sygnalizatorem, ale niektórzy kierowcy mogą oczekiwać dokładniejszych informacji. Czujnik ultradźwiękowy pozwala na konkretny pomiar odległości, więc możemy tę wartość pokazać wprost (np. na wyświetlaczu). Zostawiamy zatem poprzedni układ, czyli pasek diod RGB do P0 i czujnik do P1, a ponadto – do gniazda P2/P16 – podłączamy moduł wyświetlacza 7-segmentowego.

W programie tworzymy nową zmienną, np. 7seg, którą łączymy z informacjami o tym wyświetlaczu. Od razu ustawiamy też jasność wyświetlacza na maksymalną wartość. Następnie w pętli forever dodajemy bloczek show number (z zakładki Grove), za którego pomocą wyświetlamy wartość z czujnika.

Program czujników parkowania z limitem

Program czujników parkowania z limitem

Po wgraniu tego programu można od razu podejrzeć faktyczne pomiary z czujnika. Ich dokładność zależy od bardzo wielu czynników, więc nie należy spodziewać się idealnych wyników, ale na pewno powinny one wskazywać wartości zbliżone do prawdziwej odległości.

Dopiero od teraz będzie też widoczne, jak bardzo czuły jest układ – wystarczy delikatnie przesunąć dłoń lub ustawić ją pod innym kątem, a wskazania czujnika będą zupełnie inne.

Przykładowy dokładny pomiar z ultradźwiękowego czujnika odległości (przeszkoda poza kadrem)

Przykładowy dokładny pomiar z ultradźwiękowego czujnika odległości (przeszkoda poza kadrem)

Czujnik parkowania z sygnałem dźwiękowym

Prawdziwy system czujników parkowania stosowany w samochodach sygnalizuje obecność przeszkody także za pomocą dźwięków. Dodajmy więc taką opcję do naszego układu. Odłączamy pasek diod RGB i do gniazda P0 podłączamy moduł głośnika, którym zajmowaliśmy się w 4. części kursu.

Zaczynamy od zrobienia małego porządku w poprzednim programie. Po pierwsze, usuwamy informacje o pasku diod RGB (zarówno z on start oraz z forever). Po drugie, musimy dodać bloczek generujący dźwięk w momencie, gdy odległość będzie mniejsza od 60 cm. Klikamy więc na znaczek plusa, aby do bloczka warunkowego if dodać sekcję else. Do nowego miejsca wstawiamy bloczek play tone High B, długość dźwięku ustawiamy na 1/2, do tego dodajemy opóźnienie równe 100 ms.

Program czujników parkowania z dźwiękiem

Program czujników parkowania z dźwiękiem

Układ będzie zatem działał w pętli następująco:

  • wartość odczytaną z czujnika zapisz do zmiennej sensor,
  • sprawdź, czy zmienna sensor jest większa od 60:
    • jeśli tak: to oznacza, że przeszkoda jest daleko, nie robimy nic, tylko ustawiamy wartość zmiennej na 0, aby nie pokazywać na wyświetlaczu 7-segmentowym zbędnych informacji,
    • jeśli nie: to oznacza, że przeszkoda jest blisko i z głośnika ma się wydobyć krótki pisk (dodatkowe opóźnienie zostało dodane, aby piski nie były zbyt częste).

Wgrywamy program i testujemy – wszystko powinno działać zgodnie z oczekiwaniami! Przydałoby się jednak, aby sygnał dźwiękowy zmieniał się, gdy nasza przeszkoda będzie już naprawdę blisko. W tym celu do naszego programu musimy dodać jeszcze jeden warunek, za którego pomocą będziemy mogli rozróżnić, jak daleko jesteśmy od przeszkody.

Usuwamy więc tymczasowo zawartość sekcji else i w to miejsce dodajemy kolejny bloczek warunkowy, w którym sprawdzamy, czy przeszkoda jest dalej niż 15 cm od czujnika. Następnie, zależnie od wyniku tego testu, możemy wydać różne dźwięki i odczekać różny czas.

Program czujników parkowania z różnymi dźwiękami

Program czujników parkowania z różnymi dźwiękami

Powyższy program będzie działał następująco:

  • wartość odczytaną z czujnika zapisz do zmiennej sensor,
  • sprawdź, czy zmienna sensor jest większa od 60:
    • jeśli tak: to oznacza, że przeszkoda jest daleko, nie robimy nic, tylko ustawiamy wartość zmiennej na 0, aby nie pokazywać na wyświetlaczu 7-segmentowym zbędnych informacji,
    • jeśli nie, to sprawdź, czy przeszkoda jest dalej niż 15 cm od nas:
      • jeśli jest dalej: wydaj dźwięk o długości 1/2 i odczekaj 100 ms,
      • jeśli jest bliżej: wydaj dźwięk o długości 1/4 i odczekaj 25 ms.

Całkiem szybko udało nam się zbudować prosty system czujników parkowania. Co ciekawe, nasz układ ma praktycznie te same funkcje, które posiadają prawdziwe systemy czujników. Można nawet zakupić takie zestawy w wersji do samodzielnego montażu. Gdybyśmy do naszego układu podłączyli drugi czujnik, to miałby on dokładnie te same funkcje co poniższy zestaw czujników parkowania.

Przykład czujników parkowania do samodzielnego montażu

Przykład czujników parkowania do samodzielnego montażu

Prosty system alarmowy

Czujnik ultradźwiękowy możemy też wykorzystać w roli prostego czujnika alarmowego, który wykryje intruza zbliżającego się do urządzenia. Dzięki temu nasz micro:bit może pełnić funkcję centralki alarmowej, która będzie strzegła naszego pokoju. Zaczynamy od podłączenia niezbędnych elementów – tym razem podłączamy moduł głośnika do P0, moduł czujnika do P1, a pasek diod RGB do P2.

Zaczynamy od niezbędnych konfiguracji. W tym przypadku wewnątrz bloczka on start znaleźć musi się przypisanie informacji na temat paska diod do zmiennej strip. Dodatkowo możemy też dodać krótką animację z trzech ikon, która będzie symbolizowała aktywację alarmu po włączeniu zasilania układu.

Zawartość bloczka on start

Zawartość bloczka on start

Teraz przechodzimy do uzupełniania pętli forever. W jej wnętrzu umieszczamy bloczek warunkowy if, który ma być uzależniony od wskazań czujnika. Na potrzeby tego przykładu będzie nas interesowało, jeśli ktoś zbliży się do układu na mniej niż 50 cm. Jeśli ktoś podejdzie do naszego alarmu, to włączy się sygnalizacja (migający pasek diod i dźwięk).

Główna część programu – zawartość pętli forever

Główna część programu – zawartość pętli forever

Po wgraniu całego programu układ będzie działał zgodnie z oczekiwaniami, ale będzie mało użyteczny. Alarm będzie „dzwonił” tylko wtedy, gdy nasz potencjalny złodziej będzie stał przed urządzeniem. Jeśli ktoś szybko odejdzie lub odwróci czujnik, to układ momentalnie przestanie wydawać dźwięki, bo czujnik nie będzie wykrywał już intruza. Zdecydowanie lepiej byłoby, gdyby raz aktywowany układ alarmował nas cały czas lub do momentu, gdy go wyłączymy – tutaj z pomocą przyjdzie nowa pętla, czyli while.

Czym jest pętla while?

Pętla while, a dokładnie while...do, to połączenie pętli nieskończonej (forever) i warunku (if). Bloczki zawarte wewnątrz pętli while będą wykonywane w koło, do czasu gdy pewien warunek przestanie być prawdziwy. Domyślnie w bloczku tym zamiast warunku znajdziemy napis „true”, co oznacza prawdę. Taki zapis sprawia, że pętla ta domyślnie działa identycznie jak pętla nieskończona, ale można to łatwo zmienić. Brzmi zawile? Sprawdźmy to na przykładzie.

Alarm z opcją wyłączenia

Dodajmy pętle while...do z zakładki Loops wewnątrz naszego bloczka warunkowego i obejmijmy nią wszystkie instrukcje, które były tam poprzednio.

Pierwszy program z pętlą while...do

Pierwszy program z pętlą while...do

Działanie instrukcji zawartych wewnątrz bloczka forever należy teraz rozumieć następująco: jeśli czujnik wykrył intruza, to wejdź do pętli while i wykonuj w koło bloczki, które są w jej wnętrzu. Mają być one powtarzane tak długo, jak długo w miejscu na wpisanie warunku będzie „prawda”. W tym przypadku nie ma tam jeszcze warunku, jest za to „prawda” (true), którą wpisaliśmy na sztywno.

Łatwo to sprawdzić na żywo. Wgrywamy program i testujemy – gdy czujnik wykryje intruza, alarm się włączy i będzie działał cały czas (nawet jeśli intruz zniknie z pola widzenia czujnika), i nie będzie opcji, aby go wyłączyć (pomijając odłączenie układu od zasilania).

Dodajmy do naszego programu nową zmienną, np. alarm. Jej wartość ustawiamy na 1 w sytuacji, gdy czujnik wykryje intruza. Teraz uzupełniamy warunek wewnątrz pętli while (tak samo, jak robimy to w bloczkach if), aby pętla wykonywała się w koło do momentu, gdy zmienna alarm jest równa 1. Na koniec dodajemy bloczek reagujący na naciśnięcie przycisku (on button A pressed), w którym zmienną alarm ustawiamy na 0.

Ostateczna wersja prostej centralki alarmowej

Ostateczna wersja prostej centralki alarmowej

Od teraz działanie programu będzie znacznie bardziej praktyczne. Gdy układ wykryje intruza, to nasza zmienna alarm przyjmie wartość 1 i układ przejdzie do pętli while, która będzie wykonywała się w koło tak długo, jak długo wartość zmiennej alarm będzie równa 1. Czyli w praktyce alarm będzie włączony do momentu, gdy naciśniemy przycisk A, który zmieni wartość tej zmiennej. Wtedy program „wyjdzie” z pętli while i układ będzie czekał na ponowne wykrycie intruza.

Oczywiście wyłączenie alarmu jednym przyciskiem to tylko prosty przykład. W prawdziwym alarmie takie wyłączenie mogłoby nastąpić po wpisaniu odpowiedniego kodu. Działanie tego mechanizmu byłoby jednak identyczne – wpisanie poprawnego kodu zmieniałoby jedną zmienną, która mogłaby prowadzić do wyłączenia alarmu. Kolejny raz zbudowaliśmy pozornie prosty układ, który po drobnym dopracowaniu można byłoby realnie wykorzystać!

Podsumowanie

Czujnik ultradźwiękowy to ciekawy moduł, który często zaskakuje precyzją pomiarów i tym, jak wiele może mieć zastosowań – od czujników parkowania, przez centralki alarmowe, aż po systemy automatyki domowej, gdzie może być używany np. do automatycznego włączania światła.

Czy wpis był pomocny? Oceń go:

Średnia ocena 5 / 5. Głosów łącznie: 4

Nikt jeszcze nie głosował, bądź pierwszy!

Artykuł nie był pomocny? Jak możemy go poprawić? Wpisz swoje sugestie poniżej. Jeśli masz pytanie to zadaj je w komentarzu - ten formularz jest anonimowy, nie będziemy mogli Ci odpowiedzieć!

W kolejnej, ostatniej części kursu micro:bita wykorzystamy kolorowe przewody (tzw. krokodylki), które do tej pory nie były jeszcze przez nas używane. Dzięki nim do naszej płytki będziemy mogli podłączyć elementy, które nie są częścią systemu Grove – m.in. sprawdzimy, jak można sterować micro:bitem za pomocą zwykłego banana!

Autor kursu: Damian Szymański

Nawigacja kursu

alarm, czujnik, kursmicrobit, micro:bit, ultradźwięki

Trwa ładowanie komentarzy...