UWAGA. Oceny wyliczamy wg. algorytmu:
  1. liczymy średnią arytmetyczną z laboratoriów, projektu, kolokwium
    -> brak oceny z kolokwium jest równoznaczny z oceną "2"
  2. średnią zaokrąglamy do najbliższej oceny w kierunku oceny z projektu, np.:
    -> średnia: 4,17, ocena z projektu: 5 = ocena ostateczna 4,5
    -> średnia: 4,17, ocena z projektu: 4 = ocena ostateczna 4

Systemy wbudowane

Jest to przedmiot składający się z dwóch form dydaktycznych: wykładu oraz laboratoriów. Dodatkowo na przestrzeni semestru studenci przygotowują projekt. Ostateczna ocena jest wynikiem średniej arytmetycznej punktów z każdej z części, przy czym punktacja jest następująca:
  • wykład (kolokwium): 0-5 pkt, czysta kartka na kolokwium: 2 punkty;
  • laboratorium: zaliczenie list podstawowych: 4; poprawna realizacja projektu: 4,5 - 5;
  • projekt: 0-5.
W przypadkach ułamkowych decydujące znaczenie na zaokrąglanie będzie miała jakość oddanych projektów: zaokrąglam w stronę oceny z projektu.

Wykład

Wykład odbywa się w czwartki, w sali 1.28/C13 o godzinie 9:15.
Termin kolokwium: 13.06.2019. OCENY .

  • 28.02: wprowadzenie do wykładu; waga procesu planowania; omówienie projektu
  • 7.02: proces projektowy systemu, wymagania, specyfikacja, cykl życia produku.
    Prezentacja koncepcji PWM jako uzupełnienie materiału na laboratorium.
  • 14.02: specyfikacja: forma, precyzja opisu, state charts
    SDR i układ RTL8202, oprogramowanie Dump1090
  • 21.02: magistrala CAN: protokół MAC, mechanizmy tolerancji błędów
    Smart Vehicles, Technologies and Main Applications in Vehicular Ad hoc Networks, A.M.Vegni, M.Biagi, R.Cusani
  • UART, USART
  • SPI, ONE-WIRE
  • I2C, profibus
  • Przegląd komponentów systemu
  • RTOSy (1)
  • RTOSy (2)
  • Logika programowalna, VHDL, CMOS
  • Baterie i bateryjki

Projekt

Oceny . Jeśli brakuje czyjejś oceny, proszę o kontakt.

Projekt należy wykonywać w grupach 2-3 osobowych, bez względu na przynależność do grup laboratoryjnych.

Zadaniem projektowym jest stworzenie dokumentacji uprzednio wybranego i skonsultowanego z prowadzącym systemu wbudowanego. Zakres opracowania powinien obejmować:
  • Opis środowiska działania systemu i problemów z tym związanych.
  • Analizę zapotrzebowania na funkcjonalności w systemie.
  • Przedstawienie działania systemu (diagram UML itp.) ze szczególnym uwzględnieniem wygody użytkowania systemu, jego ergonomii, kompletności i tzw. "dobrych praktyk" (tj. logicznych rozwiązań).
  • Zestawienie komponentów systemu oraz ich wzajemne interakcje.
W szczególności, opis projektu powinien obejmować następujące dwa zagadnienia:
  1. Części składowe systemu. Opis komponentów pod kątem ich funkcjonalności (co robią), połączeń (zasilanie, interfejsy we/wy) oraz rodzaju przyjmowanych poleceń i generowanych danych (jakiego typu, jak często, itp.). Ta część powinna też zawierać opis wzajemnej komunikacji między tymi komponentami.
    Przykład: "Waga elektroniczna o rozdzielczości 0,5 g i maksymalnym obciążeniu 2500 g. Sygnały wejściowe (logika TTL): DataRequest, Reset, Tara (aktywne HIGH), sygnały wyjściowe: komunikacja równoległa, 8-bitowa, postać ramek: (...)"
  2. Logika działania. Opis stanów, w jakich system może się znaleźć, mechanizmy przejścia pomiędzy tymi stanami, inne założenia dotyczące np. czasu trwania w każdym z nich.
Konkretne nazwy układów wykonawczych nie są potrzebne, ani precyzyjny schemat połączeń elektrycznych. Opis powinien utrzymywać poziom ogólności diagramu blokowego.

Projekt należy przesłać drogą mailową (plik pdf) prowadzącemu do końca maja (31.05, godz. 23:59) -- Niedotrzymanie terminu powoduje niezaliczenie tej części przedmiotu (0 punktów).

Przybliżona całkowita liczba stron raportu: 10-15.

Oceniana będzie precyzja i czystość opisu, logika działania systemu.

Laboratoria

Zajęcia odbywają się w sali 317.3 budynku D1.

Prowadzący:

  • Patryk Kozieł - PN 13-15, 17-19
  • Przemysław Kobylański - SR 9-11, 11-13
  • Maciej Gębala - PN 15-17
  • Marcin Słowik - SR 7-9, PT
  • Przemysław Błaśkiewicz - CZW 11-13, 13-15

Przewiduje się dwa rodzaje list: ćwiczeniowe (7-10) oraz jedna projektowa. Listy ćwiczeniowe przypadające na każdy tydzień laboratoriów pojawiają się na stronie. Listy te przedstawiają zestaw ćwiczeń do wykonania na zajęciach. Prowadzący laboratoria ocenia pracę studenta na bieżąco. Zaliczenie laboratoriów w danym tygodniu następuje decyzją prowadzącego.
Początkowe tygodnie (do maja) zajęć polegają na wykonywaniu list przypadających na dane zajęcia. W przypadku niezaliczenia laboratoriów w przypadającym im terminie istnieje możliwość ich odrobienia po wykonaniu wszystkich list ćwiczeniowych.

Po zaliczeniu wszystkich list ćwiczeniowych student otrzymuje punkty za laboratorium (4), które może powiększyć, wykonując w listę projektową, omówioną z prowadzącym. Lista projektowa polega na samodzielnym zaplanowaniu, opracowaniu i wdrożeniu rozwiązania z wykorzystaniem mechanimzów poznanych podczas wykonywania list ćwiczeniowych. Termin wykonania tego zadania ustala się indywidualnie z prowadzącym (sugerowany jest przedostatni/ostatni tydzień semestru).

  1. Obejrzyj dokładnie płytkę Arduino UNO oraz dostępne Ci inne podzespoły pojazdu. Wykorzystaj opis płytki w sieci, aby zidentyfikować: główny mikrokontroler, piny we/wy (jakie mają funkcje?), diodę LED (ile ich jest? do czego służą?), zasilanie, reset.
  2. Uruchom środowisko programistyczne Arduino (możesz uruchomić na swoim laptopie). Połącz płytkę arduino przewodem USB z komputerem. Upewnij się, że w menu Narzędzia/Płytka oraz Narzędzia/Port wybrane są, odpowiednio, "Arduino/Genuino Uno" oraz port w stylu /dev/ttyACM0. Możesz sprawdzić, czy wszystko działa za pomocą Narzędzia/Pobierz informacje o płytce.
  3. Uruchom przykład Przykłady/Basics/Blink i zapoznaj się z kodem oraz samouczkiem. Zajrzyj też do odnośników z rozdziału "Learn more".
  4. Skompiluj kod (znaczek "ptaszka" z lewej strony belki menu). Sprawdź, jakie informacje o skompilowanym kodzie otrzymasz. Przeanalizuj je. Następnie wgraj (przycisk obok) kod na płytkę przyglądając się temu, co się z nią w tym czasie dzieje (wgrywanie możesz powtórzyć, żeby się upewnić). Sprawdź, czy Twoje domysły na temat kodu i faktyczne jego działanie są zbieżne. Jeśli nie - rozwiąż konflikt :)
  5. Pobierz ten kod i otwórz w środowisku. Ponownie przeanalizuj kod, postaw tezę co do tego, co on robi. Skompiluj i wgraj na płytkę. Wybierz Narzędzia/Monitor portu szeregowego (Ctrl+Shift+M), ustaw odpowiedni baudrate i zweryfikuj swoje domysły co do programu.
  6. Korzystając z dwóch przedstawionych programów, napisz swój, który:
    1. pobierze literę przez port szeregowy,
    2. wymruga ją za pomocą diody w kodzie Morse'a.
UWAGA! Od ubiegłych zajęć nastąpiła zmiana w autkach:
  1. Pojawiło się zasilanie bateryjne, podłączone do silników. Mogą one obracać kołami, w związku z tym, aby nie spowodować niekontrolowanego ruszenia pojazdu stojącego na biurku, przed włączeniem zasilania należy ustawić pojazd na podstawie z gąbki! Dostępny jest wyłącznik główny, odcinający zasilanie bateryjne. Jeśli Arduino podłączone jest przez kabel USB, to nadal będzie zasilane (ale tylko płytka).
Ta lista poświęcona jest sterowaniu silnikami. Pojazd wyposażony jest w dwa niezależne silniki napędzające przednie koła. W jaki sposób sterować silnikiem? Oczywiście przez podanie napięcia na jego dwa bieguny (są też inne silniki, posiadające więcej wejść, ale o tych innym razem). Chcielibyśmy, aby to Arduino sterowało silnikiem, podobnie jak w poprzednim tygodniu sterowało diodą (włącz/wyłącz). Jednakże nie można podłączyć silnika bezpośrednio do któregoś z pinów Arduino, o czym szerzej na wykładzie. Dlatego też w autku zamontowany jest moduł z układem L298, który będzie pośredniczył pomiędzy Arduino a silnikiem i odpowiednio włączał/wyłączał zasilanie pobierane bezpośrednio z baterii.
  1. Układ N298. Pobierz specyfikację układu. Przeanalizuj schemat na pierwszej stronie. Potraktuj obecne tam tranzystory NPN jako elektronicznie włączniki: jeśli na bazie (B) jest „HIGH”, to tranzystor przewodzi między emiterem (E) a kolektorem (C). Przeanalizuj, co się stanie, jeśli na „In1”, „In2”, „EnA” pojawią się różne kombinacje stanów LOW i HIGH. (W tym schemacie zasilanie z baterii podłączane jest do „+Vs” (na środku u góry) i do wspólnej „ziemi” -- symbol krótkiej, grubej, poziomej kreski np. na dole schematu). Silnik podłączany jest do wyjść „OUT1” i „OUT2”. Spróbuj wyobrazić sobie, jak za pomocą tego układu można sterować kierunkiem obracania się kół.
  2. Programowanie ruchu. Na autku znajdziesz taśmę 6 przewodów, które „pod pokładem” są połączone jak na powyższej fotografii. Uwaga. Autka w wersji 2.0 mogą mieć odwrócone kolory taśmy! Korzystając z dotychczas osiągniętych wyników, spróbuj podłączyć te przewody do pinów 2-13 na Arduino tak, by móc sterować jazdą w przód i do tyłu silnikami po prawej i lewej stronie. (Podpowiedź: przewody biały i żółty [wejścia „EnA” i „EnB” układu N298] podłącz do pinów zasilania „+5V” w okolicach baterii. Po podłączeniu pozostałych przewodów możesz na nich ustawiać stany „HIGH” i „LOW” tak, jak w przypadku świecenia diodą LED.)
  3. Sterowanie prędkością. Odłącz teraz przewody żółty i biały od zasilania „+5V” i podłącz je do pinów Arduino oznaczonych falką (~), są to: 3, 5, 6, 9, 10, 11. Są to piny, na których można wykonać operację analogWrite(), co spowoduje, że średnie napięcie na tym pinie można zmieniać pomiędzy 0V („LOW”) a 5V („HIGH”). [Więcej o tej technice, zwanej PWM - Pulse Coded Modulation na wykładzie.] Przetestuj, jak kręcą się koła dla różnych wartości zapisywanych do pinów En1 i En2 (zapisanie za niskich wartości może sprawić, że koła nie będą się poruszać).
  4. Rozbudowa biblioteki. Pobierz archiwum, rozpakuj i otwórz w środowisku Arduino. Przeanalizuj kod i uruchom go ustawiwszy uprzednio autko na podstawce! Dopisz do klasy Wheels metodę goForward(int cm) oraz goBack(int cm), której wywołanie spowoduje, że autko przemieści się o liczbę centymetrów podaną jako parametr.
Przypomnij sobie pierwsze laboratoria (mruganie diodą): interwał pomiędzy przełączeniem diody był określany przez delay(). Ta sama funkcja definiowała okres między rozpoczęciem jazdy i zatrzymaniem się (drugie laboratoria). Stąd powstaje problem: jeśli procesor ma „nie robić nic”, gdy auto jedzie, to jak go zmusić do mrugania diodą? W idealnym świecie rozwiązaniem byłyby wątki (sprzętowe lub jako mechanizm systemu operacyjnego), ale kontroler w Arduino nie posiada takich dóbr. Posiada natomiast typowe dla mikrokontrolerów mechanizmy: liczniki i system przerwań. Do wykonania poniższych zadań pobierz kod.
  1. Zadanie polega na usprawnieniu pojazdu tak, by przy jeździe wstecz robił „bip-bip”, tak jak porządna ciężarówka. Dodatkowo należy modyfikować częstotliwość „bipów” w zależności od prędkości. Mamy do wykorzystania tylko kilka głośniczków, jeśli Tobie zabraknie - możesz użyć diody LED (pin 13). Otwórz szkic "beepInterrupt". Przeanalizuj kod (przeczytaj dokumentację dla TimerOne!) i uruchom go na płytce. Obserwując działanie (bipy lub mruganie diody) modyfikuj okres działania. Wyślij też dłuższy ciąg (dowolnych) znaków z konsoli (odczytaj je przez Serial) na płytkę: czy okres mrugania uległ zaburzeniu?
    Wykorzystując ten program, zrealizuj zadanie główne - zaktualizuj metodę back() tak, by auto mrugało/bipało przy jeździe wstecz.
  2. Teraz zadanie polega na udoskonaleniu metod moveForward(), moveBack(), które powstały na poprzednich laboratoriach.
    Uwaga. W każdym miejscu, gdzie używasz obiektu Serial spróbuj też wykorzystać obiekt LCD z listy 2. -- zobacz, czy odczyty obrotów (o tym już za chwilę) są różne, gdy wykorzystujesz komunikację z komputerem i bezpośrednie wyświetlanie na ekranie.
       W autkach na osiach przednich kół zostały zamontowane kółka z wyciętymi szczelinami (do wglądu u prowadzącego), oraz czujniki szczelinowe. Idea ich działania jest prosta: jeśli czujnik „widzi” szczelinę w kółku, to jego wyjście DO jest równe HIGH. Jeśli nie, to DO jest LOW.
    Szczegóły podłączenia:
       prawy sensor: VCC - brązowy, GND - czerwony, DO - pomarańczowy;
       lewy sensor: VCC - szary, GND - fioletowy, DO - niebieski.
    Musimy więc umożliwić Arduino reagowanie na zmianę poziomu DO, ale tak, by nie kolidowało to z innymi zadaniami mikrokontrolera (np. rozmowa przez UART, obliczenia, etc.). Wykorzystamy do tego przerwania zewnętrzne, a w szczególności przerwanie wywoływane przez zmianę stanu pinu (Pin Change Interrupt - PCI). Wykorzystamy piny A0 i A1 - po jednym na czujnik. Przeanalizuj obrazek. Tym pinom przypisane są, odpowiednio, przerwania PCINT8 i PICINT9. Spróbujmy uruchomić mechanizm przerwań dla tych pinów. Jest wiele sposobów na zakodowanie tego, my pójdziemy edukacyjną (trudniejszą) drogą, a potem prostszą.
    Trudniejsza: będziemy pracować ze specyfikacją ATmega328P (strony od 71.). Odnośny kod znajdziesz w szkicu "wheelSensorHard".
    • Spójrz najpierw na rejestr PCICR i opisy jego poszczególnych bitów. To bit PCIE1 uruchamia przerwania dla PCINT8 i PCINT9 (oraz kilku innych). Ustawmy go w kodzie: PCICR = 0x02.
    • Druga rzecz, którą trzeba ustawić, to dla którego spośród pinów, dla których PCIE1 uruchamia przerwanie - ma być wywołana procedura obsługi. Dalsza analiza specyfikacji (punkt 10.2.7) wykazuje, że jest za to odpowiedzialny rejestr PCMSK1. Chcemy uruchomić przerwania dla PCINT8 i PCINT9, a zatem: PCMSK1 = 0x03. Uwaga. Możliwe jest też wykonanie operacji: PCMSK1 |= (1 << PCINT8) | (1 << PCINT9); z tym samym skutkiem.
    • Za każdym razem, gdy coś się zmieni na A0 i A1 (bo to Pin Change), zostanie wywołana obsługa przerwania ISR(PCINT1_vect). To, co ta procedura wykona, zależy już od konkretnego zadania, jakie ma obsłużyć, ale regułą jest nie używanie operacji buforowanych i o nieznanych czasach wykonania (np. operacji we/wy). Zwykłe zwiększenie licznika jest OK (pamiętaj, że taka zmienna musi być zadeklarowana jako volatile. UWAGA. Wywołanie obsługi przerwania w naszym wypadku oznacza, że któryś z pinów A0, A1 zarejestrował zmianę. Określenie który to z nich - wymaga po prostu sprawdzenia ich stanu.
    Łatwiejsza: użyjemy gotowej biblioteki PinChangeInterrupt. Przykładowy kod znajdziesz w szkicu "wheelSensorEasy".
    • Otwórz szkic i w razie potrzeby zainstaluj bibliotekę (Narzędzia -> Zarządzaj bibliotekami).
    • Cała reszta jest prosta i czysta, jeśli wersja "trudna" jest dla Ciebie zrozumiała. Porównaj jednak rozmiary kodów wynikowych w wersji trudniejszej i prostszej. Którą wersję wybierzesz dla jakich przypadków?
    Problem. Zauważ, że w przypadku wykorzystania procedury ISR(PCINT1_vect) w takiej formie, jak podałem w przykładowym kodzie powoduje, że liczniki dla obu stron „rozjeżdżają” się, i to znacznie! Przepisz procedurę na taką:
    ISR(PCINT1_vect){
     if( (PINC & (1 << PC0)) ) 
     cnt0++;
    
     if( (PINC & (1 << PC1)) )
     cnt1++;
    }
    
    i sprawdź, czy coś się poprawiło. Jak myślisz, dlaczego?

    Mając dwa sposoby na zliczanie impulsów z tarczy na osiach kół, rozbuduj bibliotekę Wheels o udoskonaloną wersję poruszania się o daną odległość i możliwości skrętu.
  3. (Jako wisienka na torcie) Dysponując możliwością kontroli rzeczywistej prędkości poruszania się autka - narysuj wykres zależności prędkości od parametru funkcji Wheels::setSpeed(int).
Dotychczas autko przemierzało świat "na ślepo". Najwyższa pora umożliwić mu patrzenie na świat.
Echolokacja to mechanizm określania odległości od przedmiotów odbijających fale dźwiękowe na podstawie czasu przelotu w obie strony (ang. Time of Travel - ToT) impulsu. Prędkość dźwięku dla naszych potrzeb i dokładności możemy przyjąć jako 340 m/s.

Trivia: dlaczego odległość od uderzenia pioruna można określić, licząc sekundy między błyskiem a grzmotem?

Typowymi użytkownikami tej technologii są delfiny i nietoperze. W autku realizacją tego mechanizmu zajmie się moduł HC SR-04.
  1. Zapoznaj się ze specyfikacją modułu. Dlaczego wysyłane jest kilka impulsów?
  2. Otwórz kod prezentacyjny do tego laboratorium. Zidentyfikuj w nim obsługę sygnałów, o których mowa w specyfikacji HC SR-04.
  3. Aby umożliwić autku rozglądanie się, sonar umieściłem na serwomomechanizmie SG-90 micro. Zapoznaj się z krótkim artykułem-kursem na temat działania tego typu urządzeń.
  4. Uruchom program pokazowy, zaobserwuj, czy wyniki prezentowane na konsoli odpowiadają rzeczywistości.
  5. Napisz program, który pozwoli autku:
    • wyświetlać dane z sonaru (kąt patrzenia, odległość do przeszkody) na ekranie LCD;
    • zatrzymywać się przed przeszkodą;
    • podejmować decyzję co do sposobu jej ominięcia;
    • kontynuować jazdę (autka niestety jeszcze nie skręcają za dobrze, ale jeśli przestawisz je ręcznie tak, że przeszkoda zniknie, to może podjąć dalszą drogę).
W trakcie zabawy z sonarem możesz wykorzystać narzędzie "Kreślarka" (Narzędzia->Kreślarka) - jest to wygodny sposób rysowania danych liczbowych wyświetlanych na konsoli w dziedzinie czasu.
Pora ułatwić sobie życie, tym bardziej, że autko powoli zaczyna stawiać samodzielne pierwsze kroki...
Dołączymy mu moduł LCD 2x 16 znaków oparty na kontrolerze HD44780U. Żeby zaoszczędzić piny na płytce Arduino, skorzystamy z konwertera I2C-LCD.
  1. Zapoznaj się z biblioteką LiquidCrystal I2C (autor: Marco Schwartz). UWAGA! Jest wiele klonów, które dodają różne funkcjonalności - jeśli chcesz, to możesz użyć innej (ale support tu się kończy :)). Jeśli to potrzebne, ściągnij pliki tej biblioteki do swojego środowiska.
  2. Uruchom program pokazowy. Poeksperymentuj z nim -- co jest nie tak? Zaproponuj zmiany.
    Uwaga 1. Musisz poszukać, jak podłączyć konwerter do płytki -- oznaczenia na konwerterze są jasne, co do Arduino - zachęcam do szukania w dokumentacji.
    Uwaga 2. Jeśli program pokazowy nie działa, sprawdź, czy adres urządzenia I2C jest poprawny. Użyj skanera (Plik->Przykłady->Wire->i2c_scanner).
    Uwaga 3. Jeśli na wyświetlaczu w obu liniach widzisz tylko prostokąty, użyj potencjometru z tyłu (niebieska kostka), by zmienić kontrast.
  3. Uzupełnij swój kod autka tak, by w sposób ciągły wyświetlał na LCD pomiar odległości, którą auto ma jeszcze przejechać (podawanej jako argument do poprzednio napisanego goForward()/goBack()).
  4. Wykorzystując drugą linię wyświetlacza, zbuduj "deskę rozdzielczą" -- na dwóch końcach linii wyświetlaj, co aktualnie autko robi z silnikami (prawa-lewa: przód/tył/stop a na środku linii -- zaproponuj animację wskazującą jazdę (przód/tył). (Uwaga. Gdy koła kręcą się w tył, ich prędkość powinna być wyświetlana jako ujemna.)
W autko "dorobiło się" możliwości patrzenia i zapewne już nieźle umiesz z tego korzystać. Masz więc teraz całkiem sporo możliwości porszania się. Zanim przejdziemy do ręcznego sterowania, pora na podsumowanie jego umiejętności. Wykonaj jedno z poniższych zadań. Programując ruch nie korzystaj z odliczonych wartości czasu ruchu - polegaj na dostępnych przyrządach.
  • Zaimplementuj mechanizm płynnego omijania przeszkody. Autko, napotkawszy na swojej drodze przeszkodę (np. plecak), powinno spróbować ją ominąć bez zatrzymania się, tj. nie wykonując operacji "stop-skręć w miejscu-jedź". Po ominięciu przeszkody pojazd powinien kontynuować jazdę w mniej więcej tym samym kierunku, jak przed rozpoczęciem omijania. Wskazówka: pomyśl, jak osoba niewidoma omijałaby przeszkodę korzystając z laski. Możesz w ten sposób wykorzystać obracający się na serwomotorze sonar jako "próbnik".
  • "Wyprowadź" autko na samodzielny spacer: ustaw je metr przed wyjściem z sali 317.3 w kierunku korytarza. Auto powinno po wyjechaniu z sali skręcić w lewo i jechać w kierunku serwerowni. UWAGA! Kontroluj osoby wychodzące z sali 317.4! Po dotarciu do ściany, auto powinno skręcając w prawo podjechać do ściany z oknami i ponownie skręcić w prawo. Następnie powinno jechać tak długo, aby móc skręcić i wrócić do sali 317.3. Po przejechaniu progu powinno się zatrzymać.
  • Zaprojektuj model sprężyny, wykorzystując prawo Hooke'a. Model działania możesz obejrzeć tutaj. Auto jest masą. Zamiast rozciągnięcia/ściśnięcia sprężyny użyj odległości autka od przeszkody. Sprężyna jest "twarda" - nie oscyluje.
    Autko ma podjechać do ruchomej przeszkody i powoli się przed nią zatrzymać w odległości ok 100 cm (moment zerowej energii). Zbliżając się, ma kontrolować względny ruch przeszkody i odpowiednio przyspieszać (gonić ją), jeśli przeszkoda się oddala, lub zwalniać (zawracać!), jeśli się przybliża. Po zatrzymaniu się przed przeszkodą, ma utrzymywać od niej stałą odległość tak, aby zawsze znajdować się w punkcie "minimum energii".
Załóżmy, że pół semestru walki z kabelkami i odpadającymi kołami dało wystarczające doświadczenie, że można spróbować własnych sił...
  • Korzystając z dostępnych modułów (lista poniżej), należy zaprojektować i zrealizować konkretną funkcjonalność autka. W szczególności należy:
    1. Przedstawić sposób podłączenia układów.
    2. Stworzyć dobrze zredagowany i poprawnie działający kod.
    3. Opisać środowisko testowe, w którym funkcjonalność może byś sprawdzona.
    4. Zrobić prezentację swojego rozwiązania.
  • Przykładowe tematy:
    • badanie labiryntu;
    • sterowanie klaskaniem;
    • mapowanie przestrzeni (odczyty temperatury, naświetlenia).
  • Propozycję tematu należy skonsultować z prowadzącym zajęcia.
  • Lista przeznaczona jest do wykonania w parach (bądź trójkach), na laboratoriach do końca semestru.
Lista dostępnych komponentów
Akcelerometr 3-osiowy MPU-6050 /GY-521 - żyroskop na I2C 
Bluetooth HC-05 - master/slave - moduł do APM i AlexMos - Arduino 
Czujnik drgań HDX-2801 - czujnik wibracji - Arduino 
Czujnik dźwięku na LM393 - detektor hałasu do Arduino - RobotLinking 
Czujnik HC-SR04 - ultradźwiękowy pomiar odległości 2-400 cm 
Czujnik natężenia światła GY-302 - BH1750 - wyjście I2C - Arduino 
Czujnik płomienia - detektor ognia na LM393 do Arduino 
Czujnik ruchu micro PIR HC-SR505 - detektor ruchu do Arduino 
Moduł śledzenia linii - 5-drożny tracker sensor do robotów Arduino - TCRT5000L 
Pilot IR - 17 przycisków z odbiornikiem podczerwieni 
Wyświetlacz LCD 2x16 HD44780 - Yellow - alfanumeryczny LCD QC1602B
Konwerter I2C do wyświetlacza LCD HD44780
Kompas DA 5883 na QMC5883L - 3-osiowy cyfrowy kompas magnetometr

Materiały pomocnicze w sieci i na papierze

  • Kurs Arduino na forbot.pl podstawy Arduino i środowisko oraz następne
  • Jedno z możliwych połączeń dla kompletnego autka:
    silnik: 10 - biały, 9 - fioletowy, 8 - szary, 6 - żółty, 5 - zielony, 4 - niebieski
    serwo: 3
    infra red: 2