Sonar

Skonstruujmy prawdziwy sonar, którego używa się na łodziach podwodnych

Czas trwania – 90min
Poziom trudności – TRUDNY

Wstęp

Cześć! Czy wiesz, co łączy łódź podwodną i nietoperza? Oboje używają dźwięku w celu poruszania po otoczeniu. To bardzo interesująca ciekawostka zwłaszcza, że dzisiaj zbudujemy SONAR, czyli urządzenie wykrywające obiekty przed sobą, a w dodatku utworzymy wizualizację otoczenia w LOFI Blocks!

Przygotowanie

Moduły:

  • LOFI Brain
  • Serwomotor
  • Czujnik odległości
  • Kabel USB

Co wcześniej trzeba przygotować:

Przeglądarkę Google Chrome z rozszerzeniem LOFI Robot ScratchX
(https://www.lofirobot.com/edubox/konfiguracja/)

Konstrukcja robota

Wiedzę z lekcji o czujniku parkowania

Podłączenie:

  • Czujnik odległości → port Distance
  • Serwomotor → OUTPUT1
  • Zasilanie robota → kabel USB → wyjście USB w komputerze

Przebieg

Przeszukiwanie otoczenia

Żeby mieć pełnoprawny sonar musimy stworzyć robota, który przeszukuje otoczenie przed nim. Będzie to coś podobnego do czujnika parkowania (do którego warto zajrzeć przed tą lekcją :). Musimy więc użyć obracającej się głowy, którą stworzymy wykorzystując zmienną. Nazwiemy ją pozycja. Musimy teraz sprawić by głowa robota obracała się zgodnie z wartością zmiennej (blok Ustaw serwo… w zakładce ROBOT. Za każdym wykonaniem naszego programu będziemy zmieniali wartość zmiennej o 1. Wszystkie operacje na zmiennych znajdziesz w zakładce ZMIENNE.

1_obracanie_sonaru

Oczywiście musimy wyzerować zmienną, gdy przekroczy ona wartość 100 – jest to maksymalna wartość obrotu serwomotora.

2_zerowanie_zmiennej

Dodałem również chwilę czekania po wyzerowaniu zmiennej, umożliwi to powrót serwomotora do pozycji 0.

Wizualizacja otoczenia przy pomocy rysowania

Zajmiemy się teraz wizualizacją otoczenia. LOFI Blocks umożliwia rysowanie różnych elementów na specjalnie przygotowanej planszy dostępnej po naciśnięciu ikony pędzla znajdującej się po prawej stronie.

3_ikona_rysowania

Jeżeli klikniesz teraz na tę ikonkę, to plansza powinna być całkowicie biała.

Przedstawmy nasze otoczenie przy pomocy kresek. Kreski będą różnej długości, w zależności od tego, co widzi nasz czujnik odległości. Jeżeli coś pojawi się w pobliżu robota, kreska stanie się dużo krótsza. Narysujmy sobie takie kreski!

Przejdź do zakładki RYSOWANIE i wybierz blok Prostokąt.

4_prostokat_pusty

Jak widzisz, blok ten posiada różne parametry:
X – punkt początkowy prostokąta na osi poziomej
Y – punkt początkowy prostokąta na osi pionowej
Oba te punkty informują o tym, gdzie będzie znajdował się lewy górny róg prostokąta.
⇔ – szerokość prostokąta
⇕ – długość prostokąta

Dodajmy zatem prostokąt w punkcie X = 0 oraz Y = 0, o szerokości 1 i długości równej wartości odczytywanej z czujnika odległości. Program będzie wyglądał następująco:

5_prostokat_w_programie

Gdy włączymy program, zobaczymy że na planszy coś się pojawiło.

6_kreska

Chyba nie tak miał wyglądać nasz sonar… brakuje mu obracania prostokątów wraz z obrotem głowy. Dodajmy blok Obróć z zakładki RYSOWANIE.

7_obroc

Blok ten służy do obracania bloków w nim zawartym o określony kąt, wokół określonego miejsca obrotu ( na osi X oraz Y). W naszym sonarze, punkt obrotu będzie się znajdował na górnej krawędzi, w połowie szerokości planszy. Jesteś w stanie określić to miejsce przy pomocy współrzędnych X i Y? Wiemy, że szerokość całej planszy to 100, a więc połowa to 50. W miejsce X wpiszemy więc 50. A co z tą górną krawędzią? Skoro wysokość planszy określają igreki, a na samym dole Y ma wartość 100, to na górnej krawędzi Y będzie miał wartość 0!

Okej! Mamy już punkt obrotu! Musimy jeszcze ustalić o jaki kąt będziemy obracali rysowane przez nas prostokąty. Musimy zapamiętać pewne zasady:

  • Obiekty obracają się zgodnie z ruchem wskazówek zegara, gdy obracamy je o dodatni kąt (np. 45)
  • Obiekty obracają się przeciwnie do ruchu wskazówek zegara, gdy obracamy je o kąt ujemny (np. -45)

Jak sprawić, by nasz sonar rysował prostokąty od lewej strony aż do prawej? Ustalmy początkowe położenie prostokątów po lewej stronie. Wpiszmy zatem, że kąt obrotu ma być równy 90.
Program i wizualizacja będzie wyglądał w ten sposób:

8_kat_obrotu_90

Jeśli chcemy, by nasz sonar obracał się wraz z ruchem głowy, musimy uzależnić go od zmiennej pozycja. Zmienna pozycja przyjmuje wartości od 0 do 100, więc gdy zaczniemy odejmować zmienną od początkowego położenia, prostokąty będą rysować się obrócone o: 90, 89, 88, 87… aż dojdą do wartości -10 stopni (bo gdy zmienna osiągnie wartość 100, to w działaniu działaniu 90 – 100 uzyskamy -10). Spróbujmy wykonać takie odejmowanie!

9_kat_pozycja

Nasz sonar już prawie działa. Musimy tylko sprawić, by prostokąty obracały się od 90 do -90 stopni, zamiast od 90 do -10 stopni. Musimy sprawić, by podczas odejmowania zmienna kierunek osiągała wartość maksymalną 180, a nie tak jak dotychczas tylko 100. Wystarczy tylko przed odejmowaniem pomnożyć zmienną przez liczbę 1.80 i program wydaje się być prawie doskonały!

10_kat_pelny

Juhuuu! Mój robot zobaczył coś dużego po lewej stronie. Warto dodać wyczyszczenie planszy do rysowania po sprawdzeniu otoczenia. Zrobimy to rysując ogromny kwadrat (tak duży jak cała plansza) w bloku warunkowym odpowiedzialnym za powrót głowy do początkowego położenia. Jednak zauważ, że nasze prostokąty są czarne, więc gdy narysujemy taki duży kwadrat, to on również będzie czarny i wtedy już nic nie będziemy w stanie odczytać z naszego sonaru.
Pomoże nam tutaj blok Wypełnienie znajdujący się w zakładce RYSOWANIE.

11_wypelnienie

Pewnie zastanawiasz się, co oznaczają te dziwne literki R, G, B i A. Otóż pierwsze trzy to oznaczenia kolorów, a ostatnia A reprezentuje przezroczystość. Wartość liczbowa obok literek przedstawia, jak bardzo chcemy danego koloru użyć.

  • R – Red – Czerwony
  • G – Green – Zielony
  • B – Blue – Niebieski

12_rgb

Powyżej przedstawiłem ci jak można mieszać 3 podstawowe kolory, by uzyskać inne. Na przykład, gdy pomieszasz zielony z czerwonym uzyskasz żółty! Zauważ, że gdy wszystkie kolory ustawisz na 0, to wyjdzie kolor czarny.
Blok Wypełnienie jest jak wzięcie pędzla do ręki i zanurzenie go w wybranej farbie. W dodatku możemy z różną siłą dociskać ten pędzel do naszej planszy, dzięki regulacji przezroczystości. Spróbujmy zamalować planszę na biało (R:100, G:100, B:100, A:100) po przeskanowaniu otoczenia naszym sonarem. Wyglądałoby to tak:

13_caly program

Jeżeli udało nam się zakolorować całą planszę na biało, to może zmienimy kolor prostokątów, które obrazują nasze otoczenie? Ja proponuje kolor czerwony! Zobacz, jak mi to wyszło.

14_kolorowanie_prostokatow

Tym sposobem nasz sonar jest gotowy! Kolor czerwony jest uzależniony od tego co widzi czujnik odległości. Gdy w pobliżu nic nie ma to prostokąty będą długie i czerwone, natomiast gdy coś będzie bliżej to prostokąt stanie się coraz ciemniejszy i krótszy.

Dodatkowe zadanie

Spróbuj odtworzyć sekwencję bloków, którą widzisz poniżej. Stworzą one doskonałe tło dźwiękowe dla twojego sonaru. Możesz również pobawić się na własną rękę i stworzyć jakąś ciekawą kombinację kolorystyczną lub dźwiękową! Wszystkie bloki dźwiękowe znajdziesz w zakładce Dźwięk. Pamiętaj, że bloków dźwiękowych nie trzeba umieszczać w głównym programie sonaru, należy je wstawić do osobnej pętli Graj. Miłej zabawy!

15_dzwieki

ZOBACZ GOTOWY PROJEKT

O autorze scenariusza:

LOFI Robot

Ten artykuł napisały dla Ciebie roboty znad morza. Najprawdopodobniej miały na imię Maciek i Tomek.