Alarm

Skonstruujmy zaawansowany alarm, który wykryje każdego intruza

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
(http://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.

1_jezeli_czujnik_odleglosci

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.

2_jezeli_czujnik_odleglosci_sygnalizacja_on

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:

3_jezeli_sygnalizacja_glaskanie

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:

4_zmienna_do_zalaczania_alarmu

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ę?

6_jezeli_alarm_w_przeciwnym_razie

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!

7_wlaczanie_sygnalizacji_przez_zmienna

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:

8_alarm_cala_sygnalizacja

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:

9_Obracaj_silnik_w_przod

A gdy sygnalizacją będzie wyłączona zamieńmy kierunki:

10_obracaj_silnik_w_przod

Cały program mógłby wyglądać o tak:

11_caly_program_silniki

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ę tylko aż osiągnąć 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.

12_ustaw_serwo

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ę pomiędzy 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!

13_caly_program_serwomotor

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!

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.