KursyPoradnikiInspirujące DIYForum

Kurs micro:bit – #5 – sterowanie za pomocą gestów

Kurs micro:bit – #5 – sterowanie za pomocą gestów

W tej części zajmiemy się małym modułem, który da nam wielkie możliwości. Dzięki użyciu czujnika gestów będziemy mogli sterować urządzeniami za pomocą zwykłego machnięcia dłonią.

Czujniki takie spotyka się m.in. w samochodach, dzięki nim kierowca może np. zmienić piosenkę prostym gestem (bez spoglądania na radio).

Czym jest moduł czujnika gestów?

Dzięki wykorzystaniu czujnika gestów działanie naszych programów będzie mogło zależeć od tego, w jaki sposób poruszymy dłonią. Będziemy mogli więc budować urządzenia, którym można dosłownie rozkazywać za pomocą gestów. Ruch ręką w lewo włączy lampkę, ruch w prawo ją wyłączy, ale to nie koniec, bo nasz czujnik potrafi wykryć aż dziewięć różnych gestów. Jego działanie można przyrównać do małej, bardzo prostej kamery, która próbuje rozpoznać, co robi nasza dłoń.

Przykładowe gesty rozpoznawane przez czujnik: ruchy lewo/prawo, góra/dół oraz obroty

Przykładowe gesty rozpoznawane przez czujnik: ruchy lewo/prawo, góra/dół oraz obroty

Czujnik gestów to bardzo mały, ale skomplikowany układ elektroniczny, którego nie bylibyśmy w stanie samodzielnie podłączyć do micro:bita. Na szczęście, jeśli korzystamy z gotowych modułów Grove, to bez problemów możemy dodać taki czujnik do naszego urządzenia. Po pierwsze nie musimy martwić się podłączeniem, bo wszystko jest już gotowe. Po drugie producent dostarcza gotowe bloczki, które sprawiają, że wykorzystanie tego czujnika jest wręcz banalne.

Gotowe zestawy do kursów Forbota

 Komplet elementów  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 »

Instalacja nowych bloczków

Środowisko MakeCode wyposażone jest w komplet najpotrzebniejszych bloczków. Zdarza się jednak, że do micro:bita chcemy podłączyć nowy moduł, który wymaga specyficznych funkcji. W takiej sytuacji często będziemy musieli zainstalować nowe bloczki, które dostarczy nam producent modułu.

W celu zainstalowania bloczków tworzymy nowy projekt i klikamy w ustawienia (ikona koła zębatego w prawym górnym rogu środowiska), a następnie wybieramy opcję Extensions. Do wyszukiwarki, która pojawi się w nowym oknie, wpisujemy „grove” i naciskamy klawisz Enter. Na liście wyników powinien wyświetlić się nasz zestaw modułów. Klikamy na niego w celu pobrania i zainstalowania bloczków.

Wyszukiwarka nowych bloczków

Wyszukiwarka nowych bloczków

Po chwili nasze środowisko odświeży się, a na liście bloczków zobaczymy nową zakładkę, która będzie nazywała się Grove. Znajdziemy tam bloczki przygotowane przez firmę SeeedStudio, czyli producenta modułów z serii Grove, na których bazuje zestaw do tego kursu.

Widok nowych bloczków w środowisku

Widok nowych bloczków w środowisku

Od razu warto też zapamiętać, gdzie można zaktualizować wersję zainstalowanych bloczków – opcja ta przydaje się, gdy producent przygotuje aktualizację zawierającą nowe funkcję lub naprawę błędów. Aby zaktualizować pakiet, przechodzimy do ustawień (ikonka koła zębatego), wybieramy Project Settings, a następnie rozwijamy menu Explorer i klikamy ikonkę odświeżania, która widoczna jest obok Grove.

Odświeżenie i zaktualizowanie pakietu bloczków

Odświeżenie i zaktualizowanie pakietu bloczków

Jak micro:bit może wykrywać gesty?

Nowe bloczki zainstalowane, więc możemy przejść do praktyki. Zacznijmy od prostego testu, w którym sprawdzimy, czy nasz moduł działa poprawnie. Czujnik gestów jest skomplikowanym układem, więc nie możemy podłączać go do zwykłych wejść/wyjść (tak jak robiliśmy to poprzednio). Tym razem moduł należy podłączyć do gniazda opisanego jako I2C. Jeśli podłączymy go do innego wejścia, to raczej nic złego się nie stanie, ale wtedy czujnik nie będzie działał.

I2C to oznaczenie popularnego sposobu, dzięki któremu mogą komunikować się różne urządzenia elektroniczne. Temat ten jest dość zawiły, na ten moment nie trzeba się zagłębiać w dokładne działanie I2C, ale warto zapamiętać, że coś takiego istnieje – podczas swojej dalszej przygody z elektroniką będziesz spotykał tę nazwę stosunkowo często.

W związku z tym, że czujnik gestów jest skomplikowanym urządzeniem, wymaga on od nas, abyśmy na początku (zaraz po wystartowaniu programu) dokonali pewnych ustawień. Na szczęście producent przygotował gotowy bloczek init gesture, który znajdziemy zakładce Grove.

Każdy program, który korzysta z czujnika gestów, musi zawierać taki bloczek w on start (najlepiej na samym początku). Z naszego punktu widzenia działanie tego bloczka będzie właściwie niewidoczne, ale trzeba go dodawać. Znacznie ciekawszy będzie już dla nas bloczek on Gesture, który też znajdziemy w zakładce Grove – to właśnie za jego pomocą będziemy mogli reagować na konkretne gesty.

Bloczki pozwalające na korzystanie z czujnika gestów

Bloczki pozwalające na korzystanie z czujnika gestów

Mamy tam do wyboru 10 opcji:

  • None – brak reakcji (czujnik nie będzie reagował na żadne gesty)
  • Right – ruch dłonią w prawo
  • Left – ruch dłonią w lewo
  • Up – ruch dłonią do góry
  • Down – ruch dłonią w dół
  • Forward – ruch dłonią do przodu (w kierunku czujnika)
  • Backward – ruch dłonią wstecz (od czujnika)
  • Clockwise – kręcenie dłonią w prawo (zgodnie ze wskazówkami zegara)
  • Anticlockwise – kręcenie dłonią w lewo (przeciwnie do wskazówek zegara)
  • Wave – machanie dłonią

Zaczniemy od prostego testu, w którym postaramy się rozpoznać ruch dłonią w lewo i prawo. Najpierw wstawiamy bloczek init gesture do on start, a potem dodajemy dwa bloczki on Gesture. Jeden ma reagować na ruch w lewo, a drugi na ruch w prawo. Oba bloczki uzupełniamy strzałkami, które zostały narysowane za pomocą znanego nam już show leds z zakładki Basic.

Program pozwalający przetestować czujnik gestów

Program pozwalający przetestować czujnik gestów

Wgrywamy program i testujemy, przesuwając dłoń kilka centymetrów nad czujnikiem w lewo i prawo. Zależnie od kierunku ruchu powinna się pokazać odpowiednia strzałka. Wszystko oczywiście zależy od tego, jak ustawiliśmy czujnik względem naszego micro:bita. 

Przy okazji warto również poznać nowy bloczek, który pozwoli na rysowanie strzałek bez mozolnego, ręcznego zaznaczania każdej diody (jak we wcześniejszym programie). Tutaj z pomocą przyjdzie nam bloczek show arrow dostępny w menu more, które pojawia się po kliknięciu zakładki Basic. Bloczek ten pozwala na łatwe wyświetlenie jednej z ośmiu strzałek, które opisane są kierunkami świata.

Wcześniejszy program można więc zapisać prościej w taki sposób:

Program testujący działanie czujnika gestów z nowymi strzałkami

Program testujący działanie czujnika gestów z nowymi strzałkami

W ramach samodzielnych eksperymentów spróbuj dodać nowe bloczki, które będą reagowały na ruch do góry (Up) oraz w dół (Down). Możesz wykorzystać gotowe strzałki lub narysować coś samodzielnie. Możesz też zbudować układ, który w zależności od ruchu ręki wyświetli inną ikonkę – np. ruch w dół to smutna buźka, a ruch do góry – wesoła buźka.

Magiczny instrument

Spróbujmy teraz wykorzystać czujnik do budowy instrumentu, który będzie wydawał dźwięki zależnie od ruchów naszej dłoni. Oczywiście można tutaj zaszaleć i wykorzystać dowolnie bloczki z poprzedniej części kursu. Zaczynamy jednak od podłączenia – czujnik gestów do I2C, a głośnik do wyjścia P0.

Przykładowy program może wyglądać następująco:

Program przykładowego instrumentu

Program przykładowego instrumentu

Zależnie od wykonanego ruchu odegrany zostanie inny dźwięk. Do tego w trzech przypadkach na ekranie pojawi się też ikona strzałki. Dobierając różne dźwięki i prędkość naszych ruchów, można wykorzystać nasz instrument do odgrywania oryginalnych melodii!

W ramach samodzielnej pracy warto rozbudować program w taki sposób, aby strzałki (lub różne ikony) pojawiały się po wykryciu każdego gestu – zwróć uwagę, jak działa program, gdy nie rysujemy nic po wykryciu ruchu w dół (wtedy cały czas wyświetlana jest poprzednia ikonka).

Zapętlanie muzyki w tle

Warto też zwrócić uwagę, że w pokazanym tu programie przy ruchu ręką w dół uruchamia się melodia nyan, która jest zapętlona. Przy takim ustawieniu muzyka będzie zapętlona, ale będzie można przerwać ją za pomocą innego dźwięku (np. ruszając dłonią w lewo, co widać na wcześniejszej demonstracji).

Jeśli zmienimy ustawienie tego bloczka na repeating forever in background, to melodii właściwie nie da się przerwać! Inny dźwięk zostanie odegrany, ale później micro:bit wróci do zapętlonego wcześniej utworu. Wyłączenie takiej muzyki, która jest „zapętlona w tle”, będzie możliwe tylko za pomocą bloczka stop melody. Można to sprawdzić przy użyciu kolejnego programu, w którym zmieniono sposób zapętlania muzyki i dodano gest oddalania dłoni od czujnika w celu wyłączenia muzyki.

Program z inną wersją zapętlenia muzyki

Program z inną wersją zapętlenia muzyki

Działanie tego układu w praktyce wygląda bardzo podobnie. Warto jednak zwrócić uwagę na to, że tym razem zakończenie krótkiego dźwięku nie zatrzymuje muzyki, która jest zapętlona w tle. Aby zupełnie wyciszyć układ, trzeba wykonać gest odsuwania ręki od czujnika.

Sterownik oświetlenia

Do sprawdzenia pozostały nam jeszcze trzy gesty. Zacznijmy od wykrywania ruchu dłoni, która kręci się w lewo i prawo. Są to idealne gesty np. do regulacji jasności oświetlenia. Kręcenie w lewo jest dość naturalnym ruchem na zmniejszenie intensywności światła, a kręcenie w prawo – na jego zwiększenie. Układ testowy będzie bardzo prosty. Wystarczy czujnik gestów podłączony do I2C, bo źródłem światła tym razem będą diody umiejscowione na płytce micro:bit.

Program łączy bloczki poznane na samym początku naszego kursu z bloczkami od czujnika gestów. Całość jest bardzo prosta – obrót dłoni w prawo włącza wszystkie diody na ekranie, obrót w przeciwną stronę wyłącza część diod, więc światło będzie słabsze. Do tego dodany został jeszcze bloczek, który po naciśnięciu przycisku A wyłączy wszystkie diody.

Regulacja oświetlenia przez kręcenie dłonią

Regulacja oświetlenia przez kręcenie dłonią

Po wgraniu programu przechodzimy do testu. W praktyce chodzi o to, aby kręcić kółka całą dłonią lub jednym palcem nad czujnikiem i zabierać rękę z pola widzenia czujnika. To znaczy, że nie należy trzymać dłoni nad czujnikiem i ciągle kręcić nią kółka – to nic nie da. Należy zrobić 1–2 kółka i odsunąć rękę – taki ruch zostanie wtedy poprawnie zinterpretowany.

Oświetlenie z prawdziwą regulacją jasności

W poprzednim ćwiczeniu regulacja oświetlenia polegała na wyłączeniu części diod. Najlepiej byłoby jednak, gdybyśmy mogli zmieniać jasność diod, prawda? Na szczęście jest to możliwe!

Przyda nam się nowy bloczek – set brightness, który znajdziemy w menu more wewnątrz zakładki Led. Pozwala on na faktyczną regulację jasności świecenia diod, które są na micro:bicie. W bloczku tym wpisujemy liczbę z zakresu od 0 do 255 – im wartość jest większa, tym diody świecą jaśniej.

Faktyczna regulacja jasności diod na micro:bicie

Faktyczna regulacja jasności diod na micro:bicie

Po wykryciu odpowiedniego gestu ustawiana jest wybrana jasność ekranu, a następnie włączane są wszystkie diody. Efekt działania programu powinien być następujący:

Warto zapamiętać, że bloczek set brightness działa niezależnie od bloczków show leds (nie muszą one zawsze występować parami). W powyższym programie bloczek show leds został powielony tylko dlatego, że przycisk A wyłączał diody, więc wykrycie gestu musiało je ponownie włączać.

Dobrze widać to na kolejnym przykładzie. Tutaj nie ma opcji wyłączania diod, więc włączamy je tylko raz – po starcie (ustawiając jasność na mniej więcej połowę). Wewnątrz bloczków wykrywających gesty możemy mieć w takiej sytuacji tylko zmianę jasności. Nie musimy za każdym razem włączać diod.

Program regulujący jasność diod, które zostały włączone na samym początku

Program regulujący jasność diod, które zostały włączone na samym początku

Wykrywanie machania

Pora na wykrywanie ostatniego gestu, czyli machania. Tutaj sprawa jest dość trudna – na tyle, że minęło sporo czasu, zanim sam nauczyłem się odpowiednio machać przed czujnikiem. Przez pewien czas byłem nawet pewny, że czujnik nie działa poprawnie. Ostatecznie jednak się udało – chociaż ostrzegam, że gest ten jest „trudny” dla czujnika, więc efekty mogą być różne.

Połączenie musi zostać takie samo jak poprzednio (czujnik gestów do I2C). Program jest bardzo prosty – zwyczajnie po wykryciu odpowiedniego gestu (Wave) wyświetlamy dowolną ikonkę (np. parasola).

Program do testowania gestu machania

Program do testowania gestu machania

Cała trudność polega na odpowiednim machaniu. Gest ten dla człowieka jest łatwy do rozpoznania, mały czujnik może mieć z tym jednak problemy, ponieważ machanie może mu się mylić z ruchami w lewo, prawo, górę i dół. Aby czujnik miał szanse zinterpretować ten gest, trzeba pomachać nad nim dwa razy z delikatnie rozsuniętymi od siebie palcami i zabrać rękę.

Zbudujmy mały termometr

Skoro wyświetlamy już na micro:bicie parasol, który kojarzy się z pogodą, to warto od razu wspomnieć o tym, że nasza mała płytka jest też wyposażona w termometr! Jego wskazania możemy bardzo łatwo pokazać na wyświetlaczu. Wystarczy wykorzystać z zakładki Input bloczek temperature, który można umieścić w bloczku show number – wtedy wartość temperatury pokaże się na wyświetlaczu.

Program prostej stacji pogodowej

Program prostej stacji pogodowej

Od teraz, jeśli pomachamy do naszej płytki, to wyświetli nam się symbol parasola, a później zobaczymy odczyt aktualnej temperatury. Przykład działania układu widoczny jest na poniższym nagraniu:

Wskazania tego termometru mogą być minimalnie zawyżone (wynika to z budowy micro:bita), ale przy wielu zastosowaniach taka informacja będzie dla nas wystarczająca.

W ramach zadania dodatkowego zastanów się, jak można rozbudować ten program, aby ikona, która pokazuje się przed temperaturą, była zależna od wskazań termometru – np. słońce, gdy jest ciepło, lub chmura, gdy jest zimno. Jeśli masz problem z narysowaniem na ekranie ikony słońca lub chmury, to wykorzystaj bloczek show string i wyświetl jakiś powiązany tekst (np. „Ubierz się ciepło!”).

Dodatek (dostępny w książce)

Osoby, które zamówiły kurs w formie książki drukowanej lub e-booka, znajdą tu dodatkowy przykład wykorzystania magnetometru cyfrowego do budowy elektronicznego kompasu wskazującego północ oraz rozwiązania do poniższych zadań dodatkowych.

Zadania dodatkowe

Jeśli w treści zadania nie ma informacji, gdzie należy podłączyć dany moduł, to znaczy, że musisz dobrać odpowiednie gniazdo samodzielnie (wiedząc, że niektóre moduły mają pewne ograniczenia). Pamiętaj zatem, że to nic złego, jeśli w odpowiedziach do zadań zostały wykorzystane inne gniazda niż te, które wybrałeś samodzielnie – to nic złego, bo jest tu całkiem spora dowolność. Liczy się tylko efekt finalny, czyli poprawnie działający układ.

Zad. 5.1. Napisz program, który wyświetla ikonkę uśmiechniętej buźki, a po wykryciu gestu machania ręką wyświetla na ekranie napis „WITAJ!”. Potrenuj przy okazji gest machania ręką! Jeśli nie uda Ci się odpowiednio machać, to możesz zamienić wykrywany gest na dowolny inny, np. ruch ręką w lewo.

Zad. 5.2. Wykorzystaj czujnik gestów do napisania programu, w którym gest „w stronę czujnika” włącza wybraną przez Ciebie melodię, aby grała zapętlona. Gest „od czujnika” powinien wyłączać melodię, a gesty kręcenia dłonią w lewo i prawo powinny odpowiednio zmniejszać i zwiększać tempo odtwarzanej muzyki o 10. Podczas zmiany tempa na ekranie powinny wyświetlać się ikonki strzałek zbudowanych za pomocą bloczka show leds, symbolizujące obrót w lewo lub prawo.

Zad. 5.3. Stwórz program kostki do gry, która losuje nową wartość, gdy ktoś wykona gest machnięcia ręką w lewo. Spróbuj dodać na ekranie krótką animację, która będzie symulowała potrząsanie kostką.

Podsumowanie

Za nami eksperymenty z bardzo ciekawym czujnikiem, który ma wiele praktycznych zastosowań. Takie układy znaleźć można w samochodach, telefonach oraz wielu innych nowoczesnych sprzętach. Przed przejściem dalej warto upewnić się, że czujnik reaguje poprawnie na wszystkie gesty. Małym wyjątkiem może być tutaj tylko gest machania, który jest naprawdę trudny do opanowania!

Czy wpis był pomocny? Oceń go:

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

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 części kursu micro:bita zajmiemy się modułem wyświetlacza 7-segmentowego, poznamy też zmienne, czyli bardzo, ale to bardzo użyteczne elementy, które musi znać każdy programista!

Autor kursu: Damian Szymański

Nawigacja kursu

czujniki, gesty, kurs, kursmicrobit, micro:bit

Trwa ładowanie komentarzy...