Slajd 1/55
Czujniki, multimedia, gry i komunikacja - wprowadzenie
Cel slajdu: zapowiedź piątej prezentacji - wykorzystanie sprzętu telefonu i autorski pomysł aplikacji.

Strona tytułowa

Tytuł: Czujniki, multimedia, gry i komunikacja - jak wykorzystać możliwości telefonu. Omawiamy zasoby, których nie ma zwykły komputer.

Czujniki, gry 2D i komunikacja - przegląd Zaawansowane możliwości urządzeń mobilnych w AI2 Pełne wykorzystanie sprzętu: czujniki ruchu, silnik Canvas, multimedia i Web API. Czujniki 🧭 Akcelerometr Żyroskop Lokalizacja GPS Multimedia 🎙️ Aparat foto Mowa (TTS) Rozpoznawanie Gry 2D 🎮 Płótno Canvas Sprajty & Piłka Fizyka kolizji Internet 🌐 Web API / JSON TinyWebDB Udostępnianie Czujniki, multimedia, gry i komunikacja (AI2) Slajd 1/55
Slajd 2/55
Spis treści prezentacji 5

Plan wykładu

Spis treści prezentacji 5: Czujniki i Gry 1 Czujniki sprzętowe Akcelerometr, orientacja, GPS 2 Multimedia i Mowa Aparat, audio, SpeechRecognizer 3 Silnik gier Canvas 2D Sprajty, kolizje, gra "Łap piłkę" 4 Komunikacja i Web Web API, TinyWebDB, Sharing 5 Projekt "Aktywny dzień" Krokomierz, wykresy, publikacja Czujniki, multimedia, gry i komunikacja (AI2) Slajd 2/55
Slajd 3/55
Cele uczenia się prezentacji 5

Co student będzie umiał

  • W1: odczytać dane z czujników: akcelerometru, orientacji, lokalizacji. Te trzy czujniki są podstawą aplikacji opartych na ruchu.
  • W2: wykorzystać aparat, mikrofon, syntezator i rozpoznawanie mowy. To komponenty dostępne w palecie Media.
  • W3: rysować i animować obiekty na komponencie Canvas. Canvas to obszar własnego rysowania i gier.
  • W4: zbudować prostą grę sterowaną ruchem telefonu. Połączenie czujnika i Canvas tworzy grę.
  • W5: użyć komponentów komunikacyjnych: telefon, SMS, udostępnianie. Aplikacja wymienia dane ze światem.
  • K1: zaprojektować własną aplikację wykorzystującą czujniki. To końcowy sprawdzian całego cyklu nauki.
To prezentacja podsumowująca - pokazuje pełnię możliwości App Inventor.
Cele uczenia się: Zaawansowany inżynier mobilny C1 Odczyt i przetwarzanie sygnałów z czujników Interpretacja wektora przyspieszenia (X, Y, Z), orientacji przestrzennej i koordynat GPS. C2 Budowa silnika gier 2D na Canvas Tworzenie pętli gry, ruch obiektów Ball/Sprite, detekcja zderzeń i odbić od krawędzi. C3 Komunikacja sieciowa i publikacja Wysyłanie zapytań HTTP GET, obsługa formatu JSON oraz zasady publikacji w Google Play. Czujniki, multimedia, gry i komunikacja (AI2) Slajd 3/55
Slajd 4/55
Dlaczego czujniki czynią aplikację mobilną

Telefon jako komputer z supermocami

  • Czujniki pozwalają reagować na świat zewnętrzny. Nie trzeba nic wpisywać - telefon sam odczytuje otoczenie.
  • Ekran dotykowy umożliwia bezpośrednią interakcję. Dotyk zastępuje mysz i klawiaturę.
  • Aparat i mikrofon dostarczają danych wejściowych. Zdjęcia i nagrania stają się danymi aplikacji.
  • GPS określa położenie, akcelerometr - ruch. Razem pozwalają śledzić, gdzie i jak porusza się telefon.
  • Łączność pozwala komunikować się i udostępniać. Internet, SMS i udostępnianie łączą użytkowników.
Aplikacja mobilna to program, który "czuje" i "widzi" - dlatego jest tak różnorodna.
Smartfon a komputer stacjonarny: Rola sensorów Komputer stacjonarny (PC) • Statyczna pozycja na biurku • Klawiatura i mysz (I/O pośrednie) • Brak wiedzy o otoczeniu • Brak czujników położenia • Aplikacje biurowe, przetwarzanie Smartfon z sensorami • Urządzenie stale w ruchu • Dotyk, gesty i potrząsanie • Świadomość lokalizacji (GPS) • Pomiar natężenia światła, kroków • Kontekstowe aplikacje mobilne! Czujniki, multimedia, gry i komunikacja (AI2) Slajd 4/55
Slajd 5/55
Przegląd komponentów czujników w AI2

Sekcja Sensors i Media

  • AccelerometerSensor - przyspieszenie w trzech osiach. Mierzy ruch i przechylenie urządzenia.
  • OrientationSensor - orientacja telefonu w przestrzeni. Podaje pochylenie i kierunek geograficzny.
  • LocationSensor - współrzędne GPS. Podaje szerokość i długość geograficzną.
  • Clock - czas i zdarzenia cykliczne. Odmierzany czas napędza animacje i pomiary.
  • Camera - zdjęcia. Uruchamia aparat i zwraca ścieżkę do zapisanego zdjęcia.
  • SoundRecorder, SpeechRecognizer - dźwięk i mowa. Nagrywają dźwięk i zamieniają mowę na tekst.
Paleta Sensors w App Inventor 2 AccelerometerSensor Pomiar przyspieszenia w osiach X, Y, Z Wykrywanie wstrząsów (Shaking) OrientationSensor Kąty obrotu telefonu: Azymut (kompas), Pitch, Roll LocationSensor Szerokość i długość geograficzna GPS, prędkość poruszania się, adres Pedometer Dedykowany licznik kroków, przebyty dystans i kalorie ProximitySensor & Light Czujnik zbliżeniowy (ułożenie przy uchu) oraz czujnik natężenia światła otoczenia Czujniki, multimedia, gry i komunikacja (AI2) Slajd 5/55
Slajd 6/55
Akcelerometr - zasada działania

Pomiar ruchu i przechylenia

Akcelerometr mierzy przyspieszenie telefonu w trzech osiach: X (lewo-prawo), Y (góra-dół), Z (przód-tył). Wartości podawane są w metrach na sekundę do kwadratu (m/s²); w spoczynku odczytujemy w nich siłę grawitacji.
  • W spoczynku grawitacja daje w Z wartość ok. 9,8 m/s² - znak zależy od ułożenia telefonu. Wartość ujemna w położeniu ekranem do góry.
  • Przechylenie telefonu zmienia wartości X i Y. Im większy kąt, tym większa wartość w danej osi.
  • Na tej podstawie sterujemy obiektami w grach. Kierunek i siłę ruchu widzimy w liczbach.
  • Wykrywa też wstrząsy i potrząśnięcia. Służy do tego zdarzenie Shaking.
Akcelerometr to najczęściej używany czujnik w grach mobilnych.
Akcelerometr trójosiowy: Układ współrzędnych +X (Prawo) +Y (Góra) +Z (Do przodu) Pomiary przyspieszenia: Oś X: Przechył w poziomie >0: w prawo, <0: w lewo Oś Y: Przechył w pionie >0: góra uniesiona, <0: dół uniesiony Oś Z: Płaszczyzna ekranu +9.81 m/s² gdy leży płasko na stole Grawitacja ziemska: 9.81 m/s² Czujniki, multimedia, gry i komunikacja (AI2) Slajd 6/55
Slajd 7/55
Akcelerometr - bloki i zdarzenia

Jak odczytać dane

  • Zdarzenie: when AccelerometerSensor1.AccelerationChanged. Wywołuje się przy każdej zmianie przyspieszenia.
  • Parametry: xAccel, yAccel, zAccel. Trzy liczby odpowiadają trzem osiom telefonu.
  • W akcji odczytujemy te wartości i reagujemy. Z odczytów budujemy logikę sterowania.
  • Właściwość AccelerometerSensor1.Available sprawdza, czy czujnik istnieje na urządzeniu. Najpierw sprawdzamy jej wartość, potem odczytujemy dane.
  • Możemy wykrywać potrząśnięcie (Shaking). Energiczny ruch telefonu wywołuje to zdarzenie.
Przykład: gdy |xAccel| > 5, przesuwamy piłkę w lewo lub w prawo.
Obsługa zdarzenia: AccelerationChanged when AccelerometerSensor1 .AccelerationChanged (x, y, z) set lblX.Text = join ("Oś X: ", round (get xAccel * 10) / 10) set lblY.Text = join ("Oś Y: ", round (get yAccel * 10) / 10) set lblZ.Text = join ("Oś Z: ", round (get zAccel * 10) / 10) • Zdarzenie wyzwalane automatycznie przy każdym wykrytym ruchu telefonu. Czujniki, multimedia, gry i komunikacja (AI2) Slajd 7/55
Slajd 8/55
Czujnik orientacji

OrientationSensor - kierunek telefonu

  • Mierzy kąty: Roll (przechył), Pitch (pochylenie), Azimuth (kierunek, kompas). Kąty podawane są w stopniach.
  • Zdarzenie: when OrientationSensor1.OrientationChanged. Podaje aktualne wartości azimutu, pochylenia i przechyłu.
  • Dobry do sterowania i do kompasu. Czujnik orientacji precyzyjniej poda kąt obrotu niż akcelerometr.
  • Azimuth wskazuje kierunek geograficzny. Zero oznacza północ, 90 stopni wschód.
  • Warto kalibrować kompas dla dokładności. Rysowanie ósemki w powietrzu pomaga sensorowi.
OrientationSensor: Kąty orientacji w przestrzeni Azimuth (Azymut) 🧭 Zakres: 0° do 360° 0° = Północ 90° = Wschód 180° = Południe 270° = Zachód Cyfrowy kompas Pitch (Pochylenie) 📐 Zakres: -90° do +90° Kąt nachylenia wzdłuż osi góra-dół. 0°: telefon płasko +90°: pionowo Wykrywanie podniesienia Roll (Przechył) ⚖️ Zakres: -90° do +90° Kąt przechyłu wzdłuż osi lewo-prawo. <0: w lewo >0: w prawo Sterowanie w grach Czujniki, multimedia, gry i komunikacja (AI2) Slajd 8/55
Slajd 9/55
Czujnik orientacji - zastosowania

Praktyczne przykłady

  • Kompas cyfrowy wskazujący północ. Wystarczy odczytać wartość Azimuth.
  • Poziomica budowlana (pomiar przechyłu). Telefon leży poziomo, gdy Roll i Pitch są bliskie zeru.
  • Sterowanie grą przez pochylanie telefonu. Pochylenie zastępuje przyciski kierunkowe.
  • Zmiana układu treści po obrocie telefonu. Aplikacja sama dostosowuje widok do ułożenia ekranu.
  • Wykrywanie, czy telefon leży płasko. Bliskie zeru wartości Roll i Pitch oznaczają położenie na stole.
Orientacja i akcelerometr często pracują razem - np. w grach wyścigowych.
Zastosowania praktyczne: OrientationChanged 1. Wirtualna róża wiatrów (Kompas): set imgIglaKompasu .Heading = 360 - get azimuth Obrót grafiki igły magnetycznej kompensuje obrót obudowy urządzenia. 2. Wskaźnik poziomu (Sztuczny horyzont): set ballPoziomica .X = srodekX + (get roll * czulosc) Pozycja kulki pęcherza na ekranie bezpośrednio odzwierciedla kąt przechyłu. Czujniki, multimedia, gry i komunikacja (AI2) Slajd 9/55
Slajd 10/55
Potrząśnięcie telefonem

Zdarzenie Shaking

  • Akcelerometr ma zdarzenie when ... .Shaking. Wywołuje się przy energicznym ruchu urządzenia.
  • Wykrywa energiczne potrząśnięcia telefonem. Dobra interakcja bez dotykania ekranu.
  • Można nim losować wynik (jak rzut kostką). Losowanie wykonujemy blokiem random integer.
  • Przydatne w grach i aplikacjach losujących. Każde potrząśnięcie daje nowy wynik.
  • Właściwość MinimumInterval ogranicza częstotliwość zdarzeń Shaking. Zapobiega zbyt częstemu odpalaniu zdarzenia.
Pomysł: potrząśnij telefonem, aby wylosować cytat dnia lub hasło.
Zdarzenie Shaking: Detekcja potrząśnięcia when AccelerometerSensor1 .Shaking call Sound1 .Vibrate (100) // Sygnał haptyczny set global oczka = random integer from 1 to 6 set imgKostka .Picture = join ("k", get global oczka, ".png") Przykłady zastosowania: • Rzucanie kośćmi w grach planszowych • Czyszczenie notatnika / rysunku • Wezwanie SOS Czujniki, multimedia, gry i komunikacja (AI2) Slajd 10/55
Slajd 11/55
Ćwiczenie: wykrywanie przechyłu

Mini-aplikacja "Poziomica"

  1. Dodajemy AccelerometerSensor1 i Label1. To dwa podstawowe komponenty ćwiczenia.
  2. W zdarzeniu AccelerationChanged odczytujemy xAccel. Oś X reaguje na przechylenie w lewo i w prawo.
  3. Ustawiamy Label1.Text na wartość xAccel. Na ekranie zobaczymy liczby z czujnika.
  4. Dodajemy warunek: jeśli xAccel > 3, pokaż "w prawo". Próg odcina drgania.
  5. Jeśli xAccel < -3, pokaż "w lewo". Ujemna wartość to przechył w lewą stronę.
  6. W przeciwnym razie "poziom". Zakres między -3 a 3 traktujemy jako poziom.
Test na prawdziwym telefonie - emulator zwykle nie ma akcelerometru.
Mini-projekt: Aplikacja Poziomica (Spirit Level) ● Stan: POZIOM (0°) Logika pozycjonowania: ball.X = 75 - (xAccel * 5) ball.Y = 55 + (yAccel * 5) Warunek idealnego poziomu: if abs(xAccel) < 0.5 and abs(yAccel) < 0.5 then kolor = ZIELONY (Sukces!) Zastosowanie modułu matematycznego abs() do wykrywania progu tolerancji. Czujniki, multimedia, gry i komunikacja (AI2) Slajd 11/55
Slajd 12/55
Lokalizacja GPS

LocationSensor - gdzie jesteśmy

  • Komponent LocationSensor podaje szerokość i długość geograficzną. Wartości wyrażone są w stopniach dziesiętnych.
  • Właściwości: Latitude, Longitude, Altitude, Accuracy. Accuracy podaje promień niepewności w metrach.
  • Zdarzenie LocationChanged reaguje na zmianę położenia. Dostarcza też wysokość i prędkość.
  • Wymaga włączonego GPS i zgody użytkownika. Bez zgody system nie udostępni danych.
  • Działa słabo w budynkach i pod dachem. Wtedy pomaga lokalizacja po sieciach Wi-Fi.
Dostęp do lokalizacji wymaga świadomej zgody użytkownika - to kwestia prywatności.
LocationSensor: Moduł pozycjonowania GPS Współrzędne geograficzne Latitude (Szerokość): np. 52.2297° N (Warszawa) Longitude (Długość): np. 21.0122° E Altitude (Wysokość): np. 112 m n.p.m. Dokładność do kilku metrów Źródła sygnału (Provider) 1. Satelity GPS Wysoka precyzja na otwartej przestrzeni, większe zużycie baterii. 2. Sieci komórkowe / Wi-Fi Szybki fix w budynkach, mniejsza precyzja (kilkadziesiąt metrów). 3. TimeInterval / Distance Częstotliwość próbkowania sygnału. Czujniki, multimedia, gry i komunikacja (AI2) Slajd 12/55
Slajd 13/55
Lokalizacja - zastosowania

Co można zbudować z GPS

  • Aplikacja pokazująca współrzędne i wysokość. Trzy etykiety wystarczą do wyświetlenia danych.
  • Prosty licznik przebytego dystansu. Dystans liczymy między kolejnymi odczytami.
  • Zapis trasy w TinyDB i rysowanie na mapie. Punkty trasy tworzą listę współrzędnych.
  • Oznaczanie miejsc (geotagging) ze zdjęciami. Do zdjęcia dodajemy współrzędne miejsca.
  • Powiadomienie po dotarciu do celu. Warunek porównuje odległość z zapamiętanym celem.
Zastosowania LocationSensor w aplikacjach 📍 Gdzie mój samochód? • Zapis koordynat parkowania do TinyDB • Nawigacja piesza powrotna do pojazdu Praktyczne i proste 🏃‍♂️ Tracker aktywności • Rejestracja punktów trasy co 10 metrów • Obliczanie prędkości i sumy dystansu w km Dla biegaczy i kolarzy 🗺️ Przewodnik turystyczny • Geofencing: alerty o zabytkach w pobliżu • Adres uliczny (Reverse Geocoding) Inteligentny pilot Czujniki, multimedia, gry i komunikacja (AI2) Slajd 13/55
Slajd 14/55
Lokalizacja - obsługa w blokach

Odczyt współrzędnych

  • when LocationSensor1.LocationChanged (latitude, longitude, altitude, speed). Odpala się tylko, gdy położenie się zmieniło.
  • Budujemy napis: "Szerokość: " + latitude. Blok join skleja tekst z liczbą.
  • Ustawiamy etykiety wartościami. Etykieta pokazuje odczyt na ekranie.
  • Warunek sprawdza, czy sensor ma dane (HasLongitudeLatitude). Chroni przed wyświetlaniem pustych wartości.
  • Zapisujemy współrzędne w TinyDB jako punkt trasy. Każdy punkt zajmuje jedno miejsce w liście.
Przykład: co 30 sekund dopisujemy punkt do listy trasy.
Obsługa zdarzenia: LocationChanged when LocationSensor1 .LocationChanged (lat, lng, alt, speed) set lblWspolrzedne.Text = join ("Poz: ", lat, ", ", lng) set lblPredkosc.Text = join ("Prędkość: ", round(speed * 3.6), " km/h") set lblAdres.Text = LocationSensor1 .CurrentAddress • Właściwość CurrentAddress dokonuje automatycznego tłumaczenia koordynat na ulicę. Czujniki, multimedia, gry i komunikacja (AI2) Slajd 14/55
Slajd 15/55
Aparat fotograficzny

Komponent Camera

  • Metoda call Camera1.TakePicture uruchamia aparat. Zdjęcie robi systemowa aplikacja aparatu.
  • Zdjęcie trafia do komponentu Image lub do pliku. Ścieżkę pliku podajemy we właściwości Picture.
  • Zdarzenie AfterPicture informuje o wykonaniu zdjęcia. Parametr image to ścieżka do pliku.
  • Dostępny jest też ImagePicker (wybór z galerii). Pozwala wybrać istniejące zdjęcie zamiast nowego.
  • Zdjęcia można zapisywać i przetwarzać dalej. Można je też udostępniać innym aplikacjom.
Dostęp do aparatu i galerii wymaga zgody użytkownika - aplikacja prosi o nią automatycznie.
Komponent Camera: Wykonywanie zdjęć when btnZrobZdjecie .Click call Camera1 .TakePicture when Camera1 .AfterPicture (image) set imgPodglad .Picture = get image // Wyświetlenie fotki call TinyDB1 .StoreValue ("ostatnieZdjecie", get image) Czujniki, multimedia, gry i komunikacja (AI2) Slajd 15/55
Slajd 16/55
Aplikacja "Notatnik ze zdjęciami"

Pomysł na praktyczne wykorzystanie aparatu

  • Użytkownik robi zdjęcie i dodaje opis. To para danych: obraz i tekst.
  • Dane (opis i ścieżka do zdjęcia) zapisujemy w TinyDB. Wystarczą dwa klucze: opis i ścieżka.
  • Lista notatek wyświetlana w ListPicker. ListPicker ułatwia wybór wpisu z listy.
  • Po wybraniu notatki pokazujemy zdjęcie i opis. Zdarzenie AfterPicking uruchamia podgląd.
  • Można dodać lokalizację GPS do notatki. Współrzędne zapiszemy jako dodatkowy tag.
Architektura aplikacji: Notatnik ze zdjęciami Foto-Notatka 📸 🖼️ Wpisz opis zdjęcia... Aparat / Zrób zdjęcie Zapisz notatkę Model pamięci foto-notatki: Tag: "fotoSciezka" Zapis lokalnego URI pliku zdjęcia Tag: "fotoOpis" Tekst wpisany przez użytkownika Tag: "fotoData" Znacznik czasu z komponentu Clock Zdjęcie fizycznie pozostaje na dysku! Czujniki, multimedia, gry i komunikacja (AI2) Slajd 16/55
Slajd 17/55
Dźwięk - odtwarzanie i nagrywanie

Komponenty Player, Sound i SoundRecorder

  • Player - odtwarza długie pliki audio i wideo. Dobry do utworów i podkładów muzycznych.
  • Sound - krótkie efekty dźwiękowe (np. klik). Krótkie pliki odtwarzane natychmiast.
  • SoundRecorder - nagrywa dźwięk z mikrofonu. Musi mieć ustawioną ścieżkę zapisu.
  • Pliki wgrywamy w sekcji Media lub zapisujemy na urządzeniu. Wgranie pliku w Designerze dodaje zasób do projektu.
  • Playerem sterujemy metodami Start, Pause i Stop, a Sound - metodą Play. Sound nie ma pauzy, bo gra krótkie efekty.
Krótkie dźwięki w grach dodają dynamiki - to prosty sposób na poprawę odbioru aplikacji.
Obsługa audio: Sound, Player i SoundRecorder Komponent Sound 🔔 Krótkie efekty dźwiękowe • Czas trwania < 5 sek. • Dźwięk błędu/kliku • Obsługa wibracji: call Sound1.Vibrate(ms) Komponent Player 🎵 Długie pliki audio • Muzyka w tle, audiobook • Metody Play, Pause, Stop • Właściwość Loop (pętla) Kontrola głośności (Volume) SoundRecorder 🎙️ Nagrywanie z mikrofonu • Rejestracja głosu • Start() i Stop() • Zdarzenie AfterSoundRecorded Zapis do pliku .3gp / .mp4 Czujniki, multimedia, gry i komunikacja (AI2) Slajd 17/55
Slajd 18/55
Rozpoznawanie mowy

SpeechRecognizer - sterowanie głosem

  • Komponent zamienia wypowiedziane słowa na tekst. Dlatego nazywamy go rozpoznawaniem mowy.
  • Metoda call SpeechRecognizer1.GetText uruchamia nasłuch. Po nagraniu wypowiedzi zwraca rozpoznany tekst.
  • Zdarzenie AfterGettingText zwraca rozpoznany tekst. Parametr result to gotowy napis.
  • Zwykle wymaga dostępu do sieci i zgody na mikrofon. Rozpoznawanie wykonuje systemowy silnik mowy.
  • Dokładność zależy od wymowy i hałasu. Ciche i wyraźne mówienie zwiększa skuteczność.
Pomysł: powiedz "czerwony", aby zmienić kolor ekranu.
SpeechRecognizer: Przetwarzanie mowy na tekst when btnMow .Click call SpeechRecognizer1 .GetText when SpeechRecognizer1 .AfterGettingText (result) set lblRozpoznanyTekst.Text = get result call wykonajKomendeGlosowa (get result) Czujniki, multimedia, gry i komunikacja (AI2) Slajd 18/55
Slajd 19/55
Syntezator i rozpoznawanie - razem

Aplikacja "Rozmówca"

  • TextToSpeech wypowiada pytanie. Syntezator zamienia tekst na głos.
  • SpeechRecognizer słucha odpowiedzi. Mikrofon i rozpoznawanie wyłapują słowa.
  • Porównujemy odpowiedź z oczekiwaną. Blok compare texts sprawdza zgodność napisów.
  • Reagujemy komunikatami i punktacją. Aplikacja informuje, czy odpowiedź była poprawna.
  • Efekt: prosty asystent głosowy. Wzorzec można rozbudować o kolejne pytania.
Połączenie mowy i rozpoznawania daje wrażenie prawdziwej rozmowy - to bardzo efektowne w aplikacjach.
Architektura konwersacyjna: Mowa wejściowa i wyjściowa 1. Wejście (Audio) 🗣️ Użytkownik mówi SpeechRecognizer 2. Logika aplikacji ⚙️ Rozpoznanie intencji if "pogoda" then... 3. Wyjście (Głos) 🔊 Odpowiedź bota TextToSpeech Czujniki, multimedia, gry i komunikacja (AI2) Slajd 19/55
Slajd 20/55
Mowa w praktyce - ćwiczenie

Budowa prostego sterowania głosem

  1. Dodajemy SpeechRecognizer1 i Label1. Oba komponenty są w palecie Media.
  2. Button "Słuchaj" wywołuje GetText. Przycisk uruchamia nasłuchiwanie mowy.
  3. W AfterGettingText odczytujemy result. Result zawiera rozpoznany tekst.
  4. W warunkach porównujemy tekst z "lewo" i "prawo". Blok if sprawdza, którą komendę wypowiedziano.
  5. Wyświetlamy reakcję na ekranie. Etykieta pokazuje wynik sterowania głosem.
  6. TextToSpeech potwierdza wybór głosem. Aplikacja odpowiada użytkownikowi dźwiękowo.
Sterowanie głosem: Obsługa komend mownych when SpeechRecognizer1 .AfterGettingText (result) if contains (downcase(get result), "czerwony") then set Screen1 .BackgroundColor = RED else if contains (downcase(get result), "zielony") then set Screen1 .BackgroundColor = GREEN • Użycie funkcji downcase() zabezpiecza przed różnicami wielkości liter z silnika mowy. Czujniki, multimedia, gry i komunikacja (AI2) Slajd 20/55
Slajd 21/55
Multimedia - przegląd możliwości

Co jeszcze oferuje AI2

  • VideoPlayer - odtwarzanie filmów. Obsługuje formaty .mp4 i .3gp.
  • Camcorder - nagrywanie wideo. Nagranie odbieramy zdarzeniem AfterRecording.
  • Translator - tłumaczenie tekstu (zastąpił usługę Yandex). Tłumaczenie odbywa się w chmurze.
  • Web - pobieranie danych z internetu. Komponent wykonuje zapytania HTTP.
  • Canvas - rysowanie i animacje. Podstawa gier i własnych wykresów.
Multimedia i internet zamieniają prostą aplikację w bogate narzędzie.
Katalog komponentów sekcji Media VideoPlayer Odtwarzanie plików wideo (.mp4) Zasoby lokalne lub strumień URL ImagePicker Wybór zdjęcia z galerii telefonu Bez konieczności robienia nowego Camcorder Nagrywanie filmów wideo z użyciem wbudowanej kamery Translator (Tłumacz) Automatyczne tłumaczenie tekstów między dziesiątkami języków TextToSpeech Wysokiej jakości syntezator mowy Wsparcie dla języka polskiego (pl) Czujniki, multimedia, gry i komunikacja (AI2) Slajd 21/55
Slajd 22/55
Canvas - rysowanie

Komponent Canvas jako tablica

Canvas to obszar, po którym można rysować (linie, koła, teksty) i na którym umieszcza się obiekty ruchome (Sprite). Rysowanie wykonują metody Draw, wywoływane w blokach podczas działania aplikacji.
  • Metody: DrawLine, DrawCircle, DrawText. Rysują linie, koła i teksty na obszarze Canvas.
  • Można ustawiać kolor i grubość pędzla. Służą właściwości PaintColor i LineWidth.
  • Zdarzenia: TouchDown, TouchUp, Dragged. Informują o dotykaniu i przeciąganiu.
  • Na Canvas umieszczamy Ball i ImageSprite. To jedyne komponenty przesuwne na Canvas.
  • To podstawa animacji i gier. Rysowanie i ruch tworzą rozgrywkę.
Komponent Canvas: Układ współrzędnych i rysowanie (0, 0) Lewy Górny Tekst (X_max, Y_max) Kluczowe metody Canvas: DrawLine (x1, y1, x2, y2) Rysowanie odcinka DrawCircle (x, y, r, fill) Rysowanie koła lub okręgu DrawText (text, x, y) Napis na płótnie Clear() Czyszczenie całego płótna Czujniki, multimedia, gry i komunikacja (AI2) Slajd 22/55
Slajd 23/55
Sprite - obiekty ruchome

Ball i ImageSprite

  • Ball - kolorowa kula o zadanych wymiarach. Rozmiar ustalamy promieniem Radius.
  • ImageSprite - obiekt z obrazkiem. Wygląd pochodzi z pliku graficznego.
  • Wspólne właściwości to X, Y, Speed i Heading. Ball ma dodatkowo Radius, a ImageSprite Width i Height.
  • Metody: MoveTo, MoveIntoBounds i Bounce. Zdarzenie CollidedWith informuje o zderzeniu.
  • Zdarzenia: when Ball1.CollidedWith. Odpala się przy zderzeniu z innym obiektem.
Sprite porusza się samodzielnie, gdy ustawimy prędkość i kierunek - nie trzeba animować go ręcznie.
Aktorzy sceny 2D: Ball i ImageSprite Komponent Ball (Kula) Radius (Promień): Rozmiar kuli w pikselach PaintColor: Jednolity kolor wypełnienia Lekki obiekt geometryczny ImageSprite (Sprajt) 🚀 Picture (Obrazek): Plik graficzny (PNG z przezroczystością) Rotates (Obrót): Grafika obraca się z kątem Heading Złożone postacie i pojazdy Czujniki, multimedia, gry i komunikacja (AI2) Slajd 23/55
Slajd 24/55
Animacja z użyciem Clock

Poruszanie obiektu w czasie

  • Clock1.TimerInterval ustawiamy np. na 30 ms. Co 30 milisekund włączy się zdarzenie Timer.
  • W zdarzeniu Timer zmieniamy pozycję sprite. Każde wywołanie przesuwa obiekt o krok.
  • Np. Ball1.X = Ball1.X + 5. Wartość 5 to przesunięcie w pikselach.
  • Odbicia realizujemy przez Bounce lub zmianę kierunku. Metoda Bounce przyjmuje krawędź ze zdarzenia EdgeReached.
  • Im krótszy interwał, tym płynniejsza animacja. Bardzo krótki interwał zwiększa obciążenie telefonu.
Fizyka ruchu: Heading, Speed i Interval Wbudowany automatyczny silnik ruchu: Heading (Kierunek): Kąt w stopniach (0° = prawo, 90° = góra, 180° = lewo, 270° = dół) Speed (Prędkość): Liczba pikseli przesunięcia w każdym kroku animacji Interval (Krok): Częstotliwość odświeżania w milisekundach (np. 20 ms = 50 FPS) Porównanie z ruchem sterowanym zegarem Clock: • Wbudowany ruch jest zoptymalizowany i nie obciąża bloków aplikacji. • Clock.Timer stosujemy, gdy prędkość lub trajektoria zależy od skomplikowanych wzorów. Zasada: Jeśli to możliwe, używaj właściwości Speed i Heading sprajta. Czujniki, multimedia, gry i komunikacja (AI2) Slajd 24/55
Slajd 25/55
Kolizje - wykrywanie zderzeń

CollidedWith

  • Zdarzenie when Ball1.CollidedWith (other). Parametr other wskazuje drugi obiekt.
  • Reagujemy, gdy dwa obiekty się zetkną. Zderzenie dotyczy włączonych obiektów Sprite.
  • Możemy zwiększać punkty, kończyć grę lub odbijać. W akcji decydujemy o przebiegu gry.
  • Parametr other pozwala sprawdzić, z czym nastąpiło zderzenie. Porównujemy go z konkretnym komponentem.
  • Warunki rozróżniają rodzaj obiektu (np. przeszkoda, nagroda). Dzięki temu nagroda działa inaczej niż przeszkoda.
Wykrywanie kolizji to serce logiki większości gier zręcznościowych.
Obsługa kolizji i odbić od krawędzi when Ball1 .EdgeReached (edge) call Ball1 .Bounce (get edge) // Odbicie! edge: 1=góra, -1=dół, 3=prawo, -3=lewo when Ball1 .CollidedWith (other) if get other = KoszykSprite then punkty = punkty + 1; call zresetujPilke Czujniki, multimedia, gry i komunikacja (AI2) Slajd 25/55
Slajd 26/55
Sterowanie dotykiem

Zdarzenia dotykowe na Canvas

  • when Canvas1.Touched - dotknięcie palcem. Zdarzenie dostarcza współrzędne dotknięcia.
  • Parametry: x, y - współrzędne dotknięcia. Liczone od lewego górnego rogu Canvas.
  • Możemy przesuwać obiekt w miejsce dotknięcia. Wystarczy ustawić X i Y obiektu na te wartości.
  • when Canvas1.Dragged - przeciąganie. Dostarcza pozycję startową i bieżącą.
  • Przeciąganie pozwala np. rysować linie. Łączymy punkty liniami od początku do końca gestu.
Przykład: dotknij ekranu, aby przesunąć piłkę w to miejsce.
Interakcja dotykowa na Canvas: Dragged i Touched when KoszykSprite .Dragged (startX, ...) set KoszykSprite .X = currentX - (KoszykSprite.Width / 2) Płynne przesuwanie koszyka palcem w poziomie podążając za gestem. Gesty dotykowe na płótnie Canvas: • Touched (x, y): pojedyncze dotknięcie punktowe (np. strzał w cel) • Dragged (startX...): ciągnięcie palcem po ekranie (przenoszenie obiektów) • Flung (speed...): szybkie pchnięcie / rzucenie kulki z nadaną prędkością Czujniki, multimedia, gry i komunikacja (AI2) Slajd 26/55
Slajd 27/55
Gry - planowanie

Od pomysłu do gry

  • Cel gry: co gracz ma osiągnąć? Jasny cel to fundament każdej gry.
  • Sterowanie: dotyk, przechył, głos? Wybór wpływa na komponenty i bloki.
  • Przeszkody i nagrody: zderzenia. Kolizje realizują zdarzenia CollidedWith.
  • Punktacja i czas: warunki zwycięstwa i porażki. Te liczby decydują o końcu rozgrywki.
  • Poziom trudności: przyspieszanie, więcej przeszkód. Stopniowy wzrost utrzymuje zainteresowanie gracza.
Nawet najprostsza gra potrzebuje jasnych zasad - inaczej nie sprawia przyjemności.
Pętla gry 2D: Cykl wykonawczy (Game Loop) 1. Wejście 📱 Dotyk, przechył lub potrząśnięcie 2. Fizyka ⚡ Ruch obiektów nowe X i Y 3. Kolizje 💥 Zderzenia z koszykiem/ścianą 4. Stan 🏆 Punkty, życia lub Game Over Pętla wykonuje się cyklicznie kilkadziesiąt razy na sekundę. Czujniki, multimedia, gry i komunikacja (AI2) Slajd 27/55
Slajd 28/55
Przegląd przykładowych gier

Co można zbudować w AI2

  • Łap piłkę - sterowanie przechyłem telefonu. Klasyczny wzorzec gier zręcznościowych.
  • Labirynt - unikanie ścian i przeszkód. Sterowanie orientacją lub dotykiem.
  • Klikacz - szybkość reakcji. Gracz klikający pole w odpowiednim czasie.
  • Zgadnij liczbę - gra logiczna. Porównywanie liczb i podpowiedzi.
  • Memory - dopasowywanie obrazków. Sprawdzanie pamięci i skojarzeń.
Gatunki gier 2D w App Inventor 🏓 Pong / Kometka • Paletka na dole • Odbijanie piłki • Kąt odbicia Bounce • Prosty schemat 🧺 Łapacz obiektów • Koszyk ruchomy • Spadające owoce/piłki • Sterowanie przechyłem • Nasz główny projekt! 🌀 Labirynt z kulką • Ściany jako przeszkody • Kula toczy się zgodnie z kątem przechyłu • Dotarcie do mety Czujniki, multimedia, gry i komunikacja (AI2) Slajd 28/55
Slajd 29/55
Gra "Łap piłkę" - cel

Projekt gry sterowanej przechyłem

  • Cel: przesuwać kosz (duszka) i łapać spadające piłki. Gracz ma złapać jak najwięcej piłek.
  • Sterowanie: przechylenie telefonu w lewo/prawo. Akcelerometr zastępuje przyciski.
  • Komponenty: Canvas, Ball, ImageSprite, AccelerometerSensor, Clock, Label. Każdy z nich pełni jedną funkcję w grze.
  • Nowe pojęcia: animacja, kolizja, punktacja, przyspieszanie. To filary mechaniki gier zręcznościowych.
  • Efekt: dynamiczna gra zręcznościowa. Gotowy model można przerabiać na własne gry.
Gra łączy wszystko, czego nauczyliśmy się wcześniej - czujniki, Canvas, zmienne i zdarzenia.
Projekt gry: "Łap piłkę" (Catch the Ball) Główna koncepcja rozgrywki: Gracz przechyla telefon w lewo lub w prawo, sterując koszykiem na dole ekranu. Z góry spadają piłki. Złapanie = +1 pkt. Upadek na podłogę = -1 życie (start: 3 życia). 1. Zręczność 🏎️ Szybkie reakcje na pojawiające się piłki 2. Przechył 📱 Sterowanie czujnikiem AccelerometerSensor 3. Trudność 📈 Piłka przyspiesza wraz z punktami Czujniki, multimedia, gry i komunikacja (AI2) Slajd 29/55
Slajd 30/55
Łap piłkę - interfejs

Elementy ekranu gry

  • Canvas1 - pole gry, pełny ekran. Najpierw ustawiamy jego szerokość i wysokość.
  • ImageSprite kosz - sterowany obiekt na dole. Kosz reaguje na przechylenie telefonu.
  • Ball1 - spadająca piłka. Porusza się w dół dzięki zegarowi.
  • Label punkty - wynik. Pokazuje liczbę złapanych piłek.
  • Label zycie - liczba żyć lub czas. Spada, gdy piłka przeleci obok kosza.
  • AccelerometerSensor1, Clock1 - sterowanie i animacja. Czujnik steruje, zegar animuje.
Łap piłkę: Projekt interfejsu w Designerze Punkty: 12 ❤️❤️🖤 KOSZYK Komponenty ekranu: Canvas1 Główny obszar renderowania gry Ball1 Spadający obiekt (Radius: 12) KoszykSprite ImageSprite poruszany w poziomie AccelerometerSensor1 Odczyt przechyłu telefonu Sound1 Dźwięki złapania i utraty życia Czujniki, multimedia, gry i komunikacja (AI2) Slajd 30/55
Slajd 31/55
Łap piłkę - sterowanie przechyłem

Przesuwanie kosza

  • when AccelerometerSensor1.AccelerationChanged. Wynik odczytu steruje położeniem kosza.
  • Odczytujemy xAccel. Wartość dodatnia to przechył w prawo.
  • Nowa pozycja kosza: kosz.X = kosz.X + xAccel * czulosc. czulosc to współczynnik wzmocnienia ruchu.
  • Ograniczamy pozycję do granic Canvas. Kosz nie może wyjść poza ekran.
  • Warunki: if kosz.X < 0 then kosz.X = 0; if kosz.X > szerokosc then kosz.X = szerokosc - min_szerokosc. Górną granicą jest szerokość Canvas pomniejszona o szerokość kosza.
Ograniczenie pozycji do ekranu zapobiega "ucieczce" obiektu poza widok.
Sterowanie koszykiem przez przechył telefonu when AccelerometerSensor1 .AccelerationChanged noweX = KoszykSprite.X - (get xAccel * czulosc) if noweX < 0 then noweX = 0 if noweX > (Canvas1.Width - Koszyk.Width) then max set KoszykSprite .X = noweX • Ograniczenie brzegowe zapobiega ucieczce koszyka poza ekran. Czujniki, multimedia, gry i komunikacja (AI2) Slajd 31/55
Slajd 32/55
Łap piłkę - spadanie piłki

Animacja opadania

  • when Clock1.Timer (co ok. 30 ms). Duża częstotliwość daje płynny ruch.
  • Zwiększamy pozycję Y piłki: Ball1.Y = Ball1.Y + predkosc. predkosc to krok piłki w pikselach.
  • Gdy piłka spadnie poza dół ekranu, przenosimy ją na górę w losowej kolumnie. Warunek porównuje Y piłki z wysokością Canvas.
  • Prędkość rośnie z czasem dla trudności. Wystarczy zwiększać zmienną predkosc.
  • Losową kolumnę wyznacza random integer. Zakres losowania to od 0 do szerokości Canvas.
Mechanika opadania piłki: Procedura losowania to zresetujPilke set Ball1 .Y = 10 (góra płótna) set Ball1 .X = random integer from 20 to (Canvas1.Width - 20) set Ball1 .Heading = 270 (zwrot pionowo w dół) set Ball1 .Speed = 5 + (punkty / 4) // Stopniowanie prędkości set Ball1 .Enabled = true Czujniki, multimedia, gry i komunikacja (AI2) Slajd 32/55
Slajd 33/55
Łap piłkę - kolizja i punkty

Złapanie piłki

  • when Ball1.CollidedWith (other). Zderzenie piłki z koszem to sukces gracza.
  • Sprawdzamy, czy other to kosz (warunkiem). Porównujemy other z komponentem kosza.
  • Punkty = punkty + 1 i aktualizacja etykiety. Wartość zmiennej trafia do Label punkty.
  • Piłka wraca na górę, prędkość rośnie. Cykl rozgrywki zaczyna się od nowa.
  • Opcjonalnie dźwięk Sound1.Play przy złapaniu. Efekt dźwiękowy nagradza gracza.
Zderzenie piłki z koszem to moment przyznania punktu - kluczowy element rozgrywki.
Kolizja: Złapanie piłki do koszyka when Ball1 .CollidedWith (other) if get other = KoszykSprite then set punkty = punkty + 1 call Sound1.Play ("ding.wav") // Dźwięk sukcesu call zresetujPilke // Nowa piłka z góry • Parametr `other` jednoznacznie identyfikuje obiekt, z którym nastąpiło zderzenie. Czujniki, multimedia, gry i komunikacja (AI2) Slajd 33/55
Slajd 34/55
Łap piłkę - utrata życia i koniec

Warunek porażki

  • Gdy piłka spadnie poza dół, tracimy życie. Warunek sprawdza pozycję Y piłki.
  • zycie = zycie - 1. Zmniejszamy licznik o jeden.
  • Gdy zycie = 0, kończymy grę. Zatrzymujemy zegar i wyłączamy czujnik.
  • Pokazujemy wynik końcowy i zapisujemy rekord w TinyDB. Porównanie z najlepszym wynikiem aktualizuje rekord.
  • Przycisk restartu zeruje stan gry. Przywraca życie, punkty i start piłki.
Utrata życia: Dotknięcie dolnej krawędzi when Ball1 .EdgeReached (edge) if get edge = -1 then // Dolna krawędź ekranu set zycia = zycia - 1; call Sound1.Vibrate(200) if zycia <= 0 then call gameOver // Koniec gry i zapis rekordu else call zresetujPilke // Gramy dalej Czujniki, multimedia, gry i komunikacja (AI2) Slajd 34/55
Slajd 35/55
Łap piłkę - poziomy trudności

Zwiększanie trudności

  • Prędkość piłki rośnie co pewien czas lub co punkt. Zmieniamy wartość zmiennej predkosc.
  • Można dodać drugą piłkę. Drugi Ball podnosi poziom trudności.
  • Można zmniejszać rozmiar kosza. Mniejszy cel to trudniejsze łapanie.
  • Można dodawać przeszkody (bomby). Ich dotknięcie może kończyć grę.
  • Trudność regulujemy zmienną predkosc. Jedna zmienna steruje całym poziomem.
Stopniowe zwiększanie trudności utrzymuje zaangażowanie gracza.
Progresja trudności: Skalowanie prędkości Dynamiczna prędkość piłki (Ball1.Speed): set Ball1.Speed = 5 + floor ( get global punkty / 4 ) Punkty: 0–3 Speed: 5 Tempo początkowe Punkty: 4–7 Speed: 6 Średnie tempo Punkty: 12+ Speed: 8+ Szybkie wyzwanie Czujniki, multimedia, gry i komunikacja (AI2) Slajd 35/55
Slajd 36/55
Łap piłkę - wnioski

Czego uczy gra

  • Połączenie czujnika z animacją daje sterowanie ruchem. To główna zaleta gier mobilnych.
  • Clock napędza animację. Odmierza kroki ruchu wszystkich obiektów.
  • Kolizje realizują logikę gry. Zdarzenia CollidedWith decydują o punktach.
  • Zmienne prowadzą stan rozgrywki. Punkty, życie i prędkość to zmienne.
  • TinyDB zapisuje rekordy. Najlepszy wynik przetrwa zamknięcie aplikacji.
Ten szkielet można wykorzystać do dowolnej gry zręcznościowej.
Wnioski: Czego uczy budowa gry 2D 1 Sprzętowa interakcja (HCI) Sterowanie ruchem obudowy daje użytkownikowi fizyczne poczucie kontroli nad światem gry. 2 Pętla zdarzeń i kolizje Precyzyjne rozróżnianie obiektów kolizji (other) oraz odbiór zdarzenia krawędzi (EdgeReached). 3 Grywalizacja i emocje Punkty, wibracja, dynamiczna prędkość i skończona pula żyć angażują gracza. 4 Modularna architektura Wydzielenie procedur resetu piłki i końca gry ułatwia rozwój i testowanie. Czujniki, multimedia, gry i komunikacja (AI2) Slajd 36/55
Slajd 37/55
Inne pomysły na gry

Inspiracje do własnych projektów

  • Labirynt sterowany orientacją. Pochylenie telefonu przesuwa gracza.
  • Gra pamięciowa z obrazkami. Odwracanie i dopasowywanie par kart.
  • Refleks: klikaj zielone pola, unikaj czerwonych. Nagradzamy szybkie i celne kliknięcia.
  • Kompas-skarb: znajdź kierunek do celu. Azimuth prowadzi do ukrytego skarbu.
  • Skok wzwyż: wykrywanie ruchu telefonem. Potrząśnięcie wyzwala skok bohatera.
Inspiracje: Kolejne mechaniki gier w AI2 1. Space Shooter (Strzelanka) • Statek sterowany palcem • Pociski wylatujące z dołu (Ball) • Wrogie sprajty na górze ekranu 2. Arkanoid / Breakout • Paletka odbijająca kulkę • Klocki niszczone przy uderzeniu • Kolizje z wieloma sprajtami 3. Flappy Bird (Latający ptak) • Symulacja grawitacji w dół • Dotyk ekranu podbija sprajta • Rury przesuwające się w lewo 4. Gra pamięciowa (Memory) • Siatka kafelków do odkrywania • Dopasowywanie par obrazków • Pomiar czasu i liczby ruchów Czujniki, multimedia, gry i komunikacja (AI2) Slajd 37/55
Slajd 38/55
Komunikacja - telefon i SMS

Komponenty PhoneCall i Texting

  • PhoneCall - wykonanie połączenia: najpierw ustaw PhoneNumber, potem call PhoneCall1.MakePhoneCall. Metoda nie przyjmuje argumentów.
  • Texting - wysłanie SMS: ustaw PhoneNumber i Message, potem call Texting1.SendMessage. Metoda korzysta z właściwości komponentu.
  • Można też odbierać wiadomości (zdarzenie MessageReceived). Zdarzenie podaje numer i treść wiadomości.
  • Wymaga uprawnień i zgody użytkownika. System pyta o zgodę przy pierwszym użyciu.
  • Przydatne w aplikacjach alarmowych i kontaktowych. SMS z lokalizacją to przykład użycia.
Komponenty komunikacyjne należy używać odpowiedzialnie - dotyczą prywatności i mogą kosztować pieniądze.
Komponenty łączności: PhoneCall i Texting PhoneCall (Połączenia) 📞 PhoneNumber: Numer telefonu odbiorcy MakePhoneCall(): Wybiera numer przez dialer Zastosowanie: przycisk SOS Texting (Wiadomości SMS) ✉️ Message i PhoneNumber: Treść i adresat wiadomości SendMessageDirect(): Wysyłka SMS bezpośrednio Odbiór: MessageReceived Czujniki, multimedia, gry i komunikacja (AI2) Slajd 38/55
Slajd 39/55
Udostępnianie treści

Komponent Sharing

  • Umożliwia wysłanie treści do innych aplikacji. Lista aplikacji zależy od tego, co jest zainstalowane.
  • Metoda call Sharing1.ShareMessage. Najprostszy sposób na udostępnienie tekstu.
  • Można udostępniać tekst, zdjęcia, pliki. Służą metody ShareMessage, ShareFile i ShareFileWithMessage.
  • Otwiera systemowe okno wyboru aplikacji. To użytkownik decyduje, dokąd trafi treść.
  • Przydatne do dzielenia się wynikami i notatkami. Wynik gry można wysłać znajomym.
Przykład: udostępnij swój najlepszy wynik znajomym.
Komponent Sharing: Integracja z ekosystemem Metoda: call Sharing1 .ShareMessage call Sharing1.ShareMessage (join ("Zdobyłem rekord: ", rekord, " pkt!")) Jak działa systemowe udostępnianie? • Wyświetla standardowe menu Androida z listą zainstalowanych aplikacji. • Pozwala wysłać tekst lub plik (ShareFileMessage) przez WhatsApp, e-mail, Bluetooth itp. Brak konieczności implementowania własnego klienta poczty czy komunikatora! Czujniki, multimedia, gry i komunikacja (AI2) Slajd 39/55
Slajd 40/55
Internet - komponent Web

Pobieranie danych z sieci

  • Web wysyła zapytania HTTP i odbiera odpowiedzi. Obsługuje metody GET, POST, PUT i DELETE.
  • Metoda Web1.Get / Web1.PostText. Adres strony podajemy we właściwości Url.
  • Zdarzenie GotText zwraca odpowiedź serwera. Parametry zawierają kod i treść odpowiedzi.
  • Można pobierać dane z API (np. pogoda, cytaty). Odpowiedź JSON rozkładamy blokiem JsonTextDecode.
  • Wymaga internetu i obsługi formatu (np. JSON). Format trzeba przetworzyć na dane aplikacji.
Komponent Web otwiera aplikację na świat - dane mogą pochodzić z zewnętrznych serwisów.
Komponent Web: Pobieranie danych z sieci (REST API) 1. Wysłanie zapytania HTTP GET: set Web1 .Url = "https://api.pogoda.pl/warszawa"; call Web1 .Get when Web1 .GotText (url, code, type, content) if get responseCode = 200 then daneJson = call Web1 .JsonTextDecodeWithDictionaries (content) Czujniki, multimedia, gry i komunikacja (AI2) Slajd 40/55
Slajd 41/55
TinyWebDB - dane w chmurze

Współdzielenie danych między użytkownikami

  • TinyWebDB przechowuje dane na serwerze. Serwer wymienia dane między urządzeniami.
  • W przeciwieństwie do TinyDB - dane są wspólne i w chmurze. Każdy użytkownik może odczytać wspólne wartości.
  • StoreValue zapisuje dane, a GetValue zwraca wynik zdarzeniem GotValue. Odczyt jest asynchroniczny, więc reagujemy w GotValue.
  • Można zbudować ranking graczy online. Ranking zapisujemy pod wspólnym tagiem.
  • Wymaga serwera lub gotowej usługi. Domyślnym jest testowy serwer MIT, dane mogą przepadać.
TinyWebDB: Globalna baza danych w chmurze TinyDB (Pamięć lokalna) • Pamięć flash telefonu • Dostępna tylko na tym aparacie • Działa w 100% offline • Ustawienia, lokalne rekordy Zastosowanie: prywatne dane TinyWebDB (Chmura) • Zewnętrzny serwer webowy • Współdzielona między graczami • Wymaga połączenia z internetem • Globalna tabela rekordów TOP 10 Zastosowanie: rywalizacja online Czujniki, multimedia, gry i komunikacja (AI2) Slajd 41/55
Slajd 42/55
Aplikacje komunikacyjne - przykłady

Co można zbudować

  • Przycisk "Zadzwoń do mamy" dla seniora. Duży przycisk dzwoni pod zapisany numer.
  • Aplikacja alarmowa wysyłająca SMS z lokalizacją. SMS z GPS wysyłany po naciśnięciu alarmu.
  • Rozgłośnia: udostępnianie zdjęć i notatek. Obieg treści przez aplikacje systemowe.
  • Ranking wyników w chmurze. TinyWebDB udostępnia wspólny ranking.
  • Komunikator grupowy na bazie TinyWebDB. Wymiana krótkich wiadomości przez wspólną bazę.
Komunikacja czyni aplikację użyteczną dla innych - to ważny krok od projektu szkolnego do realnego.
Przykłady aplikacji łączących sensory i sieć 🚨 Przycisk SOS • Pobranie GPS • Wysłanie SMS z linkiem do mapy • Połączenie alarmowe ⛅ Pogodynka GPS • Odczyt koordynat • Zapytanie Web API • Wyświetlenie temp. • Synteza mowy TTS 🏆 Globalny Ranking • Zapis nicku i pkt do bazy TinyWebDB • Lista najlepszych ze wszystkich szkół Czujniki, multimedia, gry i komunikacja (AI2) Slajd 42/55
Slajd 43/55
Autorski projekt: "Aktywny dzień" - idea

Pomysł na aplikację własną

  • Problem: mało ruchu w ciągu dnia, brak motywacji. Dotyczy wielu uczniów korzystających z telefonów.
  • Rozwiązanie: aplikacja liczy kroki i aktywność, nagradza za wysiłek. Akcelerometr dostarcza danych o ruchu.
  • Grupa odbiorców: uczniowie i studenci. Interfejs dostosowany do młodych użytkowników.
  • Cechy: prostota, grywalizacja, zapis postępów. Motywuje do codziennej aktywności.
  • Wykorzystuje: akcelerometr, Clock, TinyDB, Canvas, udostępnianie. Łączy większość tematów z prezentacji.
Autorski projekt to sprawdzenie wszystkich umiejętności zdobytych w całym cyklu.
Projekt końcowy: Aplikacja "Aktywny dzień" Koncepcja autorskiej aplikacji zdrowotnej: Mobilny asystent monitorujący codzienną aktywność fizyczną użytkownika. Łączy czujnik kroków (Pedometer/Akcelerometr), wykresy na Canvas i lokalizację GPS. 1. Krokomierz 👟 Bieżące zliczanie kroków, km i kcal 2. Wykres Canvas 📊 Słupkowy postęp wobec celu 10 tys. 3. Motywacja 🏅 Odznaki, powiadomienia i archiwum w TinyDB Czujniki, multimedia, gry i komunikacja (AI2) Slajd 43/55
Slajd 44/55
"Aktywny dzień" - specyfikacja

Co ma robić aplikacja

  • F1: liczyć kroki na podstawie akcelerometru. Analiza wartości X, Y i Z wykrywa krok.
  • F2: pokazywać dzienny postęp na wykresie. Wykres rysujemy na komponencie Canvas.
  • F3: wyznaczać cel (np. 1000 kroków) i nagradzać jego osiągnięcie. Osiągnięcie celu wywołuje nagrodę.
  • F4: zapisywać historię dni w TinyDB. Dane przetrwają restartowanie aplikacji.
  • F5: udostępniać wynik znajomym. Komponent Sharing wysyła komunikat.
  • F6: wyświetlać komunikaty motywacyjne. Pojawiają się np. po osiągnięciu połowy celu.
Specyfikacja wymagań: "Aktywny dzień" W1 Licznik kroków w czasie rzeczywistym Odczyt zdarzenia Pedometer1.SimpleStep lub filtrowanie akcelerometru. W2 Przelicznik dystansu i energii Dystans = kroki × 0.75 m | Kalorie = kroki × 0.04 kcal. W3 Wizualizacja słupkowa na Canvas Dynamiczny pasek postępu pokazujący stopień realizacji dziennego celu. W4 Zapis historii w TinyDB Przechowywanie osiągnięć z kolejnych dni pod kluczem daty (RRRR-MM-DD). System działa lokalnie, dbając o pełną prywatność danych użytkownika. Czujniki, multimedia, gry i komunikacja (AI2) Slajd 44/55
Slajd 45/55
"Aktywny dzień" - ekrany

Struktura aplikacji

  • Screen1 - Menu: Start, Postępy, Ustawienia, Udostępnij. Menu prowadzi do pozostałych ekranów.
  • Screen2 - Licznik: kroki, postęp, komunikat. Główny ekran pomiaru aktywności.
  • Screen3 - Postępy: wykres tygodnia z Canvas. Porównanie dni pod względem kroków.
  • Screen4 - Ustawienia: cel dzienny, reset. Użytkownik dostosowuje aplikację do siebie.
  • Dane wspólne w TinyDB. Baza łączy wszystkie ekrany aplikacji.
Architektura aplikacji "Aktywny dzień": 3 ekrany Screen1: Pulpit • Licznik kroków • Słupek Canvas • Dystans (km) • Kalorie (kcal) • Start / Stop Główny widok dnia Screen2: Historia • ListView z datami • Zestawienie tygodnia • Średnia kroków • Odczyt z TinyDB • Wróć Archiwum treningów Screen3: Profil • Dzienny cel kroków • Długość kroku (m) • Waga użytkownika • Zapisz opcje • Wróć Konfiguracja i cel Czujniki, multimedia, gry i komunikacja (AI2) Slajd 45/55
Slajd 46/55
"Aktywny dzień" - liczenie kroków

Detekcja kroków z akcelerometru

  • Reagujemy na AccelerationChanged. Zdarzenie dostarcza wartości z trzech osi.
  • Wykrywamy szczyty wartości (przekroczenie progu). Próg odcina drobne drgania telefonu.
  • Stosujemy filtr: liczymy krok tylko wtedy, gdy minął odpowiedni czas od poprzedniego kroku. Unikamy liczenia drgań jako kroków.
  • Zwiększamy zmienną kroki. Każdy krok to jeden punkt do celu.
  • Prostota: próg i czas zapobiegają liczeniu drgań. Wystarczy kilka bloków warunkowych.
Prawdziwe krokomierze używają bardziej złożonych algorytmów - nasz jest uproszczony, ale działa.
Mechanizm detekcji kroku: Pedometer i Akcelerometr Wariant A: Dedykowany komponent Pedometer when Pedometer1 .SimpleStep (stepCount, distance) do Automatycznie odfiltrowuje drobne drgania i zlicza wyłącznie realne kroki. Wariant B: Własny algorytm z Akcelerometru (Wektor siły): wektor = sqrt ( x*x + y*y + z*z ) // Norma euklidesowa Gdy wektor przekracza próg 13.5 m/s² (faza odbicia stopy) -> zlicz krok! Wymaga histerezy czasowej (>300 ms), by nie liczyć podwójnie. Czujniki, multimedia, gry i komunikacja (AI2) Slajd 46/55
Slajd 47/55
"Aktywny dzień" - wykres postępów

Rysowanie na Canvas

  • Odczytujemy historię dni z TinyDB (lista wartości). Lista zawiera kroki z kolejnych dni.
  • Dla każdego dnia rysujemy słupek: wypełnioną figurą DrawShape lub linią DrawLine. Canvas nie ma metody DrawRect - prostokąt rysuje DrawShape.
  • Wysokość słupka proporcjonalna do liczby kroków. Dzielimy kroki przez cel, aby uzyskać skalę.
  • Podpisujemy dni (DrawText). Etykiety pod wykresem czytają kolejne dni.
  • Skala dostosowana do celu dziennego. Cel wyznacza maksymalną wysokość słupka.
Dynamiczny wykres postępu na Canvas Canvas: Pasek celu 7 500 z 10 000 kroków 75% celu Procedura: to rysujWykres call Canvas1 .Clear wysokosc = (kroki / cel) * maxH call Canvas1 .DrawRect (..., wysokosc) Słupek płynnie rośnie z każdym kolejnym krokiem! Czujniki, multimedia, gry i komunikacja (AI2) Slajd 47/55
Slajd 48/55
"Aktywny dzień" - grywalizacja

Motywowanie użytkownika

  • Cele dzienne i tygodniowe. Ustalają progi, od których przyznajemy nagrodę.
  • Odznaki za osiągnięcia (np. 7 dni z rzędu). Odznaki widoczne na ekranie osiągnięć.
  • Komunikaty motywacyjne (TextToSpeech lub Notifier). Notifier wyświetla komunikat, syntezator czyta go na głos.
  • Pasek postępu rysujemy na Canvas. AI2 nie ma natywnego ProgressBar - są tylko rozszerzenia.
  • Udostępnianie wyników znajomym (Sharing). Współzawodnictwo zwiększa motywację.
Grywalizacja zwiększa zaangażowanie - to sprawdzony mechanizm w aplikacjach fitness.
System motywacyjny: Grywalizacja i nagrody 🥉 Brązowa odznaka • 5 000 kroków • Start w aktywność • Dźwięk fanfar Podstawowy ruch 🥈 Srebrna odznaka • 10 000 kroków • Norma WHO • Alert sukcesu Zdrowy dzień 🥇 Złota odznaka • 15 000 kroków • Mistrz kondycji • Odblokowanie motywu Top forma Czujniki, multimedia, gry i komunikacja (AI2) Slajd 48/55
Slajd 49/55
"Aktywny dzień" - plan wykonania

Etapy budowy projektu

  1. Tydzień 1: interfejs wszystkich ekranów. Najpierw układ komponentów w Designerze.
  2. Tydzień 2: licznik kroków i zegar. Akcelerometr i Clock w akcji.
  3. Tydzień 3: zapis danych i ekran postępów. TinyDB i wykres na Canvas.
  4. Tydzień 4: grywalizacja i udostępnianie. Odznaki, cele i Sharing.
  5. Tydzień 5: testy, poprawki i budowa .apk. Końcowa kontrola przed instalacją.
Harmonogram budowy projektu: 4 fazy inżynierskie 1 Prototyp czujnika: Sprawdzenie działania komponentu Pedometer na żywym smartfonie. 2 Interfejs graficzny i Canvas: Zaprojektowanie ekranów, etykiet liczbowych i słupka postępu. 3 Trwałość danych w TinyDB: Zapisywanie osiągnięć pod kluczem daty i archiwizacja tygodniowa. 4 Testy polowe i kalibracja: Marsz 100 kroków na świeżym powietrzu i weryfikacja dokładności algorytmu. Czujniki, multimedia, gry i komunikacja (AI2) Slajd 49/55
Slajd 50/55
Etyka, prywatność i bezpieczeństwo

Odpowiedzialne tworzenie aplikacji

  • Dostęp do czujników i danych tylko za zgodą użytkownika. System prosi o zgodę przy pierwszym użyciu.
  • Nie zbieraj danych, których nie potrzebujesz. Im mniej danych, tym mniejsze ryzyko.
  • Nie wysyłaj danych osobowych bez wiedzy użytkownika. Lokalizacja i kontakty wymagają szczególnej ostrożności.
  • Wyjaśnij, do czego służą uprawnienia. Użytkownik ma prawo wiedzieć, co robi aplikacja.
  • Szanuj prywatność - to obowiązek twórcy aplikacji. Zaufanie to podstawa dobrej aplikacji.
Dobra aplikacja to nie tylko działający kod, lecz także zaufanie użytkownika.
Prywatność i uprawnienia aplikacji w systemie Android 1. Zasada minimalizmu danych Pobieraj wyłącznie te czujniki, które są niezbędne do działania deklarowanej funkcji programu. 2. Uprawnienia lokalizacji (GPS) Dane GPS są danymi wrażliwymi. Aplikacja musi pytać o zgodę w czasie działania (Runtime Permission). 3. Bezpieczeństwo TinyDB Dane w TinyDB są izolowane w piaskownicy (Sandbox) systemu Android – inne aplikacje nie mają do nich dostępu. 4. Zgodność z RODO / GDPR Aplikacje publikowane w sieci muszą posiadać link do jawnej Polityki Prywatności (Privacy Policy). Czujniki, multimedia, gry i komunikacja (AI2) Slajd 50/55
Slajd 51/55
Publikacja aplikacji

Od projektu do sklepu z aplikacjami

  • Budujemy plik .apk lub pakiet do Google Play. Menu Build oferuje .apk oraz pakiet .aab do sklepu.
  • Google Play wymaga konta deweloperskiego. To jednorazowa rejestracja i weryfikacja tożsamości.
  • Opis, ikona, zrzuty ekranu i polityka prywatności. Komplet materiałów wymagany przez sklep.
  • Wersjonowanie i aktualizacje. Użytkownicy pobierają nowsze wersje automatycznie.
  • Alternatywa: dystrybucja pliku .apk bezpośrednio. Bez sklepu - wysyłka pliku lub kodu QR.
Ścieżka publikacji w sklepie Google Play 1 Pakiet Android App Bundle (.aab): W menu Build wybierz format .aab wymagany przez Google Play. 2 Konto Google Play Console: Rejestracja konta programisty i opłata rejestracyjna (jednorazowa). 3 Materiały graficzne i opis: Ikona 512×512, zrzuty ekranu, grafika wyróżniająca i polityka prywatności. 4 Weryfikacja i publikacja: Po pomyślnym przeglądzie aplikacja jest dostępna dla miliardów użytkowników! Czujniki, multimedia, gry i komunikacja (AI2) Slajd 51/55
Slajd 52/55
Podsumowanie całego cyklu

Co osiągnęliśmy przez pięć prezentacji

  • Prezentacja 1: pojęcia aplikacji, programowania i algorytmów. Fundament wiedzy teoretycznej.
  • Prezentacja 2: środowisko App Inventor i programowanie blokowe. Praca z Designerem i blokami.
  • Prezentacja 3: osiem działających przykładów. Ćwiczenia na prostych aplikacjach.
  • Prezentacja 4: pełny, wieloekranowy program krok po kroku. Wzorzec struktury większej aplikacji.
  • Prezentacja 5: czujniki, multimedia, gry, komunikacja i projekt autorski. Pełnia możliwości platformy.
Od pustego ekranu do własnej aplikacji mobilnej - to cała droga, którą przebyliśmy.
Podsumowanie 5 wykładów: Kompletna ścieżka twórcy P1 Wprowadzenie: Ekosystem mobilny, Android, architektura urządzeń i rola AI2. P2 Środowisko App Inventor: Designer, Blocks, komponenty UI, paleta klocków i model zdarzeń. P3 Przykłady aplikacji: 8 mini-projektów: kalkulator, losowanie, listy, quiz i stoper. P4 Pełny program wieloekranowy: Architektura "Trener matematyczny", baza TinyDB, procedury i kompilacja APK. P5 Sensory, gry 2D i sieć: Fizyka Canvas, kolizje, Web API, integracja sprzętowa i publikacja. Czujniki, multimedia, gry i komunikacja (AI2) Slajd 52/55
Slajd 53/55
Pytania kontrolne

Sprawdź się

  1. Jakie wielkości mierzy akcelerometr i jak je wykorzystać?
  2. Do czego służy Canvas i czym jest Sprite?
  3. Jak wykryć zderzenie dwóch obiektów?
  4. Jak połączyć syntezator mowy z rozpoznawaniem mowy?
  5. Jaka jest różnica między TinyDB a TinyWebDB?
  6. Zadanie: zaprojektuj własną aplikację wykorzystującą jeden czujnik i uzasadnij wybór. W uzasadnieniu opisz, jaki problem użytkownika rozwiązuje czujnik.
Pytania kontrolne: Podsumowanie wiedzy z P5 Q1 Akcelerometr a orientacja: Czym różnią się pomiary z AccelerometerSensor od kątów z OrientationSensor? Q2 Fizyka w Canvas: Jak działa metoda Bounce i co oznacza wartość krawędzi -1 w EdgeReached? Q3 Komunikacja Web API: W jaki sposób blok JsonTextDecode zamienia surowy tekst odpowiedzi na słownik? Q4 Prywatność danych: Dlaczego aplikacja monitorująca zdrowie powinna przetwarzać dane lokalnie? Czujniki, multimedia, gry i komunikacja (AI2) Slajd 53/55
Slajd 54/55
Literatura i materiały

Źródła wiedzy

  • pam1.pdf - minimalne kompendium: aplikacja, program, zmienne, pętle. Podstawy do pierwszej prezentacji.
  • pam2.pdf - podstawy programowania: algorytmy, schematy blokowe. Wprowadzenie do myślenia algorytmicznego.
  • pam3.pdf - podstawy AI2: serwis, projekty, Designer, Blocks. Pierwsze kroki w App Inventor.
  • pam4.pdf - koncepcja programowania w AI2: komponenty, bloki, zdarzenia. Model zdarzeniowy platformy.
  • Serwis ai2.appinventor.mit.edu oraz appinventor.org. Oba serwisy działają - adresy sprawdzone.
  • Dokumentacja MIT App Inventor (ai2.appinventor.mit.edu/reference/components) i fora społeczności. Tam opisano właściwości i zdarzenia komponentów.
Literatura, dokumentacja i źródła wiedzy 🌐 Oficjalna dokumentacja MIT App Inventor appinventor.mit.edu - kompletny katalog komponentów, bloków i tutoriali. 📚 Książka: App Inventor 2 (D. Wolber, H. Abelson) Klasyczny podręcznik inżynierii oprogramowania mobilnego w modelu wizualnym. 👥 Społeczność MIT AI2 Community community.appinventor.mit.edu - forum wymiany wiedzy, darmowe rozszerzenia .aix. Czujniki, multimedia, gry i komunikacja (AI2) Slajd 54/55
Slajd 55/55
Zakończenie prezentacji 5 i całego cyklu

Dziękuję za uwagę

  • Poznaliśmy pełnię możliwości App Inventor. Od czujników po komunikację sieciową.
  • Umiemy wykorzystać czujniki, multimedia i komunikację. Te elementy tworzą praktyczne aplikacje.
  • Potrafimy zbudować grę i własną aplikację. Od pomysłu do działającego programu.
  • Zdobyta wiedza to solidny start do nauki programowania w językach tekstowych. Bloki odpowiadają strukturom typowych języków.

Powodzenia w tworzeniu własnych aplikacji mobilnych!

Ukończenie kursu: Dyplom twórcy aplikacji mobilnych Gratulacje! Ukończyłeś cały kurs! Poznałeś pełen cykl życia oprogramowania mobilnego: od projektowania UI, przez logikę zdarzeń i sensory, po publikację. Życzymy sukcesów w tworzeniu własnych projektów! Telefon w Twojej kieszeni to potężne narzędzie inżynierskie. Dziękujemy za uwagę i wspólne programowanie! Czujniki, multimedia, gry i komunikacja (AI2) Slajd 55/55