Wstęp:
Podczas tego warsztatu wykorzystamy możliwości połączenia więcej niż jednego robota i skorzystamy z danych odczytywanych przez czujnik odległości. Przemienimy robota w radar, a także połączymy dwa roboty w niezwykły system przeciwwłamaniowy. Będą to dwa niepowiązane ze sobą programy, ale ilustrujące w ciekawy sposób różne możliwości wykorzystania czujnika.
Przebieg zajęć:
1. Wysyłanie fal - wprowadzenie do czujnika odległości
- Zajęcia zaczynamy od pokazania uczniom zdjęcia nietoperza i łodzi podwodnej. Co je ze sobą łączy? Dopytujemy uczniów, czy wiedzą, jak działa echolokacja. Rozmawiamy o jej podobieństwie do sonaru. Czy radar zawsze korzysta z wysyłania fal dźwiękowych?
- Prezentujemy czujnik odległości robota Photon i zapowiadamy, że dzisiaj będziemy się nim zajmować, przygotowując dwa różne programy.
2. Programujemy radar
- Jako pierwszy przygotujemy program definiujący funkcję radar. Skorzystamy ze znanej nam już pętli powtórzenia omówionej w scenariuszu #3.
- W tym programie robot kilkukrotnie obróci się i odczyta odległość od przeszkody. Łącznie robot Photon wykona pełny obrót (czyli o 360 stopni). Dla lepszego zobrazowania działania programu zerknijmy na zdjęcie:
- Robot stoi w pomieszczeniu otoczony różnymi przeszkodami. Po uruchomieniu programu robot 6 razy obróci się i zmierzy odległość dzielącą go od nich. Mając listę 6 odległości, moglibyśmy, nie oglądając pomieszczenia, domyślić się, jakie jest rozmieszczenie ścian i innych przeszkód. Im więcej małych kroków wykona robot, obracając się, tym pomiar będzie dokładniejszy i będziemy mogli na jego podstawie wykryć np. wystającą po lewej stronie szafkę.
- Po wykonaniu "skanu" otoczenia, chcemy otrzymać listę liczb opisujących odległość od przeszkody w każdym z kolejnych kierunków. Dlatego zaczynamy od określenia parametru, którym jest dystans. W tym wypadku chcemy, aby dystans nie był wyrażony w formie jednej odległości tylko kilku, dlatego tworzymy listę.
dystans = [ ] oznacza, że dystans będzie listą różnych wartości.
- append to metoda oznaczająca, że do listy dystans ma zostać dodana nowa wartość. Jaka? Pochodząca z czujnika odległości.
Dlatego zapisujemy ten wiersz jako nazwa_listy.append(skąd_wziąć_wartość). Odległość odczytamy dzięki metodzie get_distance_from_obstacle(), która szczegółowo opisana jest w dokumentacji->metody->sensory.
- Metoda print jest jedną z najprostszych w Pythonie. Oznacza wyświetlenie czegoś. W tym wypadku parametrów z listy dystans.
Przykład skonstruowania kodu do wykonania zadania
- Testujemy zdefiniowaną funkcję, możemy dokonać więcej pomiarów, przesuwając przedmioty w pobliżu robota i zobaczyć, jak zmieniają się wyniki.
3. Programujemy system przeciwwłamaniowy
Drugi program łączy ze sobą dwa lub więcej robotów. Wykorzystujemy w nim dwie nowe pętle, tworząc prosty system przeciwwłamaniowy.
- Wyobraźmy sobie, że jeden robot jest strażnikiem, stojącym przy wejściu do domu. Kiedy ktoś wejdzie i wykryje go czujnik odległości, robot w sypialni na piętrze zaalarmuje nas.
- Musimy zacząć od rozróżnienia dwóch robotów. Definiujemy je jako robot1 i robot2.
- robotem1 jest ten obiekt klasy Photon, który na liście podłączonych do Magic Bridge robotów jest podłączony jako robot 0. Warto to tu zaznaczyć, bo w Pythonie można się tym zaskoczyć - wszystkie odliczania rozpoczynane są od 0. Dlatego jeśli do Magic Bridge podłączone są dwa roboty, pierwszy z nich ma numer 0, a drugi 1. To tak jak w bloku mieszkalnym, w którym piętra liczymy od parteru.
- Wprowadzamy podobnie jak w radarze dystans. Tym razem jako jedną wartość (a nie listę) – aktualną odległość z czujnika robota1. Ponieważ odległość dzieląca robota od przeszkody będzie się zmieniać, dystans jest zmienną, czyli parametrem, który zawsze opisuje to samo, choć przybiera różne wartości.
W radarze metody odczytującej odległość użyliśmy w formie photon.get_distance_from_obstacle(). Tym razem w programie obecne są dwa roboty i musimy precyzyjnie określić, z którego chcemy skorzystać. Zamiast Photon.get... zapiszemy robot1.get...
Cały wiersz przyjmie formę dystans = robot1.get_distance_from_obstacle()
- Dotychczas wykorzystywana pętla odpowiadała bloczkowi „powtórz n razy” ze Scratcha. Teraz chcemy, aby warunek sprawdzany był ciągle, więc potrzebujemy pętli „zawsze”. Tak działa while True. Samo while powtarza kod w pętli tak długo, jak spełniony jest dany warunek (powtarzaj aż). Dopisany warunek True jest zawsze prawdziwy. Zawartość pętli zapisujemy od wcięcia.
- if to nic innego, jak znana ze Scratcha pętla „jeżeli”. Jeżeli dystans (robota1) będzie mniejszy niż 50 cm, robot2 uruchomi alarm.
- Lista podstawowych metod, w tym dostępnych kolorów i dźwięków dostępna jest w dokumentacji.
Przykład skonstruowania kodu do wykonania zadania
- Testujemy przygotowany kod. Możemy zastanowić się, co jeszcze może zrobić robot2, aby skutecznie ostrzec domowników o obecności intruza.
4. Podsumowanie
- Podsumowujemy zajęcia i zwracamy uwagę na wszystkie nowe elementy. Pętle if i while, definiowanie list i zmiennych.
- To dużo nowości, więc osoby, które wszystko zapamiętały i zrozumiały zasługują na uznanie.
Współautorem scenariusza jest Michał Nowak.