Czas trwania – 45 min
Poziom trudności – ŚREDNI
Wstęp
Witaj koderze! Jeżeli zbyt często ktoś zaskakuje Cię, gdy pilnie uczysz się programowania robotów, to dzisiejsza lekcja jest w sam raz dla Ciebie! Nauczymy się budować robota, który posłuży nam za alarm. Robot będzie potrafił zaalarmować Cię dzięki diodom i głośnemu dźwiękowi buzzera, a także z niezadowoleniem będzie kręcił głową, gdy wykryje intruza.
Alarm wyłączysz głaszcząc robota po głowie. Brzmi jak z najlepszych filmów sci-fi? Z LOFI ROBOT to możliwe! Do dzieła!
Przygotowanie
Moduły:
- LOFI Brain
- Czujnik światła
- Czujnik odległości
- Dioda LED x2
- Serwomotor / silniki
- Kabel USB
Co wcześniej trzeba przygotować:
Przeglądarkę Google Chrome z rozszerzeniem LOFI Robot ScratchX
(https://www.lofirobot.com/edubox/konfiguracja/)
Konstrukcja robota (opcjonalnie)
Wiedzę ze zmiennych i bloków warunkowych (zajrzyj do lekcji o lampkach!)
Podłączenie:
- Czujnik światła → INPUT1
- Czujnik odległości → port Distance
- Serwomotor → OUTPUT1 lub w wersji z silnikami DC – Silnik 1 → M1 Silnik 2 → M2
- Dioda → OUTPUT3
- Dioda → OUTPUT4
- Zasilanie robota → kabel USB → wyjście USB w komputerze
ZDJECIE Z PODLACZENIEM
Przebieg
Proste załączanie i wyłączanie alarmu przy użyciu bloków warunkowych
Zacznijmy od najbardziej podstawowych funkcji naszego robota, czyli włączania i wyłączania alarmu. Użyjemy w tym celu bloków warunkowych JEŻELI.
Przede wszystkim robot powinien włączyć alarm, gdy czujnik odległości wykryje obiekt w odległości mniejszej niż… hmm… niech to będzie 70% maksymalnego zasięgu czujnika.
Blok czujnika odległości znajdziesz w zakładce ROBOT.
Jeżeli udało Ci się przebrnąć przez poprzednie lekcje, to powyższy układ bloków powinien być dla Ciebie dziecinną igraszką. Jeżeli jednak nie wiesz do końca, o co tu chodzi, to zerknij na lekcję o lampkach. Tam wszystko zostało dokładnie wyjaśnione! W skrócie: sprawdzamy za pomocą bloku porównawczego czy czujnik odległości wykrył jakiś obiekt bliżej niż wartość 70.
Powinniśmy teraz dodać funkcje sygnalizujące robota, zacznijmy od tych prostych, czyli włączenie lampek i buzzera. Wszystkie te bloki znajdziecie w zakładce ROBOT.
Jak pamiętasz, OUTPUT3 i OUTPUT4 to diody. Super, mamy alarm – może nie do końca działający jak prawdziwy alarm, ale zawsze zrobi troche hałasu!
Zaprojektujmy wyłączenie piszczącego robota poprzez “głaskanie”. W tym celu wykorzystamy czujnik światła i blok warunkowy zbudowany bardzo podobnie do tego, który już mamy. Gdy przykryjemy robota dłonią, to powinien wyłączyć sygnalizację intruza. Sprawdź, jak wygląda moja propozycja na kod programu:
Wygląda super i coraz bardziej przypomina prawdziwy system alarmowy. Jeżeli spróbujesz go przetestować to zauważysz, że jest pewien problem. Gdy czujnik będzie ciągle wykrywał intruza, a ty będziesz chciał wyłączyć robota poprzez zasłonięcie czujnika światła to alarm będzie nieustannie wydawał krótkie dźwięki oraz migał lampkami. Jest to spowodowane tym, że program jest wykonywany od samej góry do samego dołu, a potem się powtarza. Najpierw wydaje dźwięk i zapala lampki (bo przecież wykrył intruza!), a potem decyduje się być cicho (bo w końcu go pogłaskałeś, co nie?!) i od nowa… Jak to rozwiązać? Kolejny problem do przemyślenia dla młodego kodera! Podpowiedź: zmienna!
Wykorzystanie zmiennej do załączania alarmu
Spróbujmy zrobić tak, by program najpierw sprawdzał czy warto uruchomić alarm, a potem niech sprawdzi czy ty już jesteś świadomy obecności kogoś niepowołanego. W tym celu utworzymy zmienną (jeśli nie jesteś w tym za dobry, to sprawdź lekcję o zaawansowanej lampce). Jeżeli robot kogoś wykryje to ustawi zmienną alarmu jako prawdę, jeżeli jednak zorientuje się, że już go głaszczesz to zmienna zostanie ustawiona na fałsz. Czym jest prawda, a czym fałsz wyjaśnię już za chwilę! Spójrz na moją propozycje programu:
Blok prawdy lub fałszu znajdziesz w zakładce LOGIKA. Jak widzisz, zmienne mogą być nie tylko liczbami, ale również mogą mówić, czy jakaś sytuacja jest prawdziwa lub nie – są to tzw. wartości LOGICZNE, tak naprawdę wszystko w komputerach działa na ich bazie. W tym przypadku najpierw sprawdzamy, czy przypadek wykrycia intruza jest prawdziwy. Jeżeli tak, to alarm oczywiście powinien się włączyć, więc zmienna alarmto PRAWDA (po angielsku TRUE).
W dalszym kroku sprawdzamy, czy głaszczesz swojego robota. Jeżeli tak to alarm powinien zostać wyłączony – robot w takiej sytuacji ustawia zmienną alarm na FAŁSZ (po angielsku FALSE).
Sprawdźmy, jak działa nasz program załączający zmienną w konsoli. Dorzuć blok konsoli (znajdziesz go w zakładce KONTROLA) i spróbuj zasymulować obecność intruza, a potem pogłaszcz robota i sprawdź jak reaguje zmienna w monitorze czujników.
Sygnalizacja intruza przy pomocy zmiennej alarm.
Obecnie robot nie informuje Cię o obecności kogoś obcego. Musimy sprawić, by po sprawdzeniu poprzednich warunków robot włączał sygnalizację, gdy zmienna alarm jest ustawiona na prawdę. Pomyśl, jak można to najprościej wykonać!
No jasne! Użyjemy bloku warunkowego Jeżeli… w przeciwnym razie.
Co powiesz na moją propozycję?
Ten blok może wydać Ci się dość dziwny. Poprzednio, gdy sprawdzaliśmy, czy czujnik odległości i oświetlenia jest mniejszy od pewnej wartości używaliśmy bloków porównawczych. Zauważ jednak, że blok warunkowy sprawdza, czy blok ustawiony po Jeżeli… jest prawdą. Wcześniej sprawdzaliśmy czy prawdą jest, że czujnik odległości wykrył kogoś w odległości mniejszej niż 20. Jeżeli tak, to włączał alarm. Teraz sprawdzamy czy alarm jest prawdą, jeśli tak to, włączymy całą sygnalizację. Mam nadzieję, że udało Ci się zrozumieć to skomplikowane zagadnienie. Sprawdź, jak poszło mi włączanie sygnalizacji!
Działa naprawdę super! A co Ty na to, żeby dodać efekt pikania do naszego alarmu? Można to zrobić dzięki blokowi Czekaj znajdującemu się w zakładce KONTROLA. Blok ten sprawia, że program na chwilę zatrzymuje się zanim zrobi kolejny krok w programie, a po minięciu podanego przez Ciebie czasu zacznie dalej wykonywać następne polecenia. Spróbujmy wykonać taką sekwencję:
Włącz sygnalizację!
Czekaj 100 milisekund
Wyłącz sygnalizację!
Czekaj 100 milisekund!
W naszym programie wyglądałoby to następująco:
Jak widzisz, w bloku Czekaj znajduje się liczba 10, a mieliśmy czekać 100 milisekund. To dlatego, że 1 w bloku oznacza 10 milisekund, więc 10 w bloku jest równe 100 milisekundom, a 100 w bloku oznacza czekanie przez okrąglutką sekundę! Przetestuj różne czasy czekania i dobierz ten, który wydaje Ci się najlepszy dla alarmu.
Właściwie to nasz robot to już pełnoprawny alarm, a nawet super-alarm, ale chyba nie byłbym sobą, gdybym nie zaproponował Ci kolejnej ciekawej funkcjonalności.
Ruch serwomotorem lub silnikami w rytm alarmu – co Ty na to? Gdy robot zobaczy intruza, to nie dość, że wystraszy go dźwiękami i lampkami, to jeszcze zacznie się bardzo niepokojąco wiercić. Intruz gdy go zobaczy to na pewno pomyśli sobie
“RANY, RETY, ZWARIOWANE ROBOTY!” i szybko zwieje jak najdalej 🙂
Użycie silników / serwomotorów w alarmie
Żeby wykorzystać silniki lub serwomotory w alarmie, musimy wrzucić bloki odpowiadające za ruch robota do bloku warunkowego. Najpierw omówię ruch przy pomocy silników, a następnie serwomotorów – zachęcam Cię jednak do przeczytania całości, gdyż taka wiedza może przydać Ci się w przyszłości.
SILNIKI
Proponuję by nasz robot w przypadku załączenia alarmu jeździł raz w przód, a za chwilę w tył. Wykonamy to dzięki blokom Obracaj silnik, które znajdują się w zakładce ROBOT.
Gdy sygnalizacja się załączy, rozkażmy robotowi jechać w przód dzięki takiej sekwencji bloków:
A gdy sygnalizacją będzie wyłączona zamieńmy kierunki:
Cały program mógłby wyglądać o tak:
Serwomotor
Jeżeli posiadasz serwomotor, to można go bardzo fajnie zastosować. Zbuduj głowę lub ramię robota i przymocuj je do serwomotora. Bardzo efektowne będzie machanie ręką, lub kręcenie głową po włączeniu alarmu. Zanim jednak wykonamy nasz program, chciałbym krótko opisać Ci działanie serwomotora.
Serwomotory to takie silniki, które można zaprogramować tak, by silnik kręcił się aż osiągnie zadaną przez Ciebie pozycję. W LOFI Blocks możemy ustawić serwomotor w zakresie 180 stopni dzięki blokowi Ustaw serwo znajdującemu się w zakładce ROBOT.
Gdy ustawimy serwomotor na 100, to całkowicie skręci się w jedną stronę. Gdy ustawimy go na 0, to będzie skręcony w drugą stronę. Jak myślisz, jaka wartość pozwoli mu ustawić się po środku? No jasne, że 50!
Spróbujmy teraz wykonać kręcenie głową, które możesz również zastosować do machania ramieniem robota. Gdy robot włączy sygnalizację, ustawimy głowę w pozycji 60. Gdy robot się na chwilę wyłączy, ustawimy głowę na 40. W ten sposób będzie wykonywał kręcenie głową w czasie trwania alarmu. W przypadku, gdy alarmu nie będzie – głowa będzie w pozycji neutralnej czyli 50. Zobacz, jak udało mi się wykonać to na blokach!
Gotowy alarm!
Twój turbo-nowoczesny-alarm jest już całkowicie skończony! Wiesz już naprawdę dużo na temat bloków warunkowych, zmiennych, bloków liczbowych i porównawczych.
Nie zostało nic innego, niż dopasować alarm do swoich potrzeb, a potem ustawić go w miejscu, do którego nie mogą wchodzić osoby inne, niż te znające sposób na wyłączenie robota. Gratulacje!