Zakres materiału:
- biblioteki arduino – link
- interfejs komunikacyjny UART – biblioteka Serial
- biblioteka do LCD – LiquidCrystal
- czujnik temperatury “DS18b20” – biblioteka
- obsługa komunikacji bezprzewodowej IR na podstawie układu TSOP2236 – biblioteka IRremote
Zadanie 1 (ocena 3):
Utworzyć program, który cyklicznie dokonuje pomiaru temperatury i wyświetla jej wartość w stopniach Celsjusza na wyświetlaczu LCD.
Jako czujnik temperatury wykorzystać układ DS18b20. Do obsługi tego czujnika należy wykorzystać komunikację po interfejsie 1-wire. Można użyć biblioteki “DallasTemperature”. Podłączenie czujnika odbywa się na pinie “DS_conn” – złącze przy buzzerze “J11”, jest to pin “data/DQ” z czujnika. Schemat modułu czujnika na płytce EduTar przedstawiono poniżej.
Zadanie 2 (ocena 3.5):
Podłączyć czujnik TSOP2236 umieszczony na płytce edukacyjnej (pin “IR_TSSOP” na złączu “J31”) do mikrokontrolera. Zapoznać się z biblioteką do obsługi czujnika IR. Uruchomić przykładowy program i odczytać kody przycisków z pilota. Odczytane kody należy wyświetlać na terminalu komputera.
Jak działa taka transmisja? Jakie są jej wady i zalety? Gdzie można spotkać takie sterowanie na co dzień?
Zadanie 3 (ocena 4.5):
Napisać program, który będzie sterowany z poziomu pilota IR i będzie naśladował działanie klimatyzatora:
- podłączyć czujnik temperatury DS18B20, będzie służył do pomiaru temperatury w pokoju,
- podłączyć diodę LED, sygnalizacja chłodzenia,
- podłączyć diodę LED, dodatkowe wyjście sterowane zdalnie pilotem,
- urządzenie działa w dwóch trybach, tryb normalnej pracy i tryb czuwania,
- tryb czuwania:
- po podłączeniu zasilania jest to domyślny tryb,
- oczekuje na komendę uruchomienia z pilota,naciśnięcie przycisku czerwonego na pilocie – włącz/wyłącz
- inne funkcje nie działają, wyświetlacz LCD jest wyłączony (ekran wyczyszczony i wyłączone podświetlenie),
- w trybie normalnej pracy:
- po przejściu z trybu czuwania,program wyświetla przez 3 sekundy ekran powitalny i przechodzi do trybu normalnej pracy,
- mierzona jest temperatury rzeczywista za pomocą układu “DS18B20” i wyświetlana na wyświetlaczu LCD,
- za pomocą pilota można ustawić temperaturę chłodzenia, która tez jest wyświetlana na wyświetlaczu LCD,
- działa regulator temperatury (jaki regulator będzie najlepszy?), jeśli temperatura zadana jest niższa niż rzeczywista to uruchamia się chłodzenie (świeci dioda LED),
- w celu wyłączenia urządzenia (przejścia do trybu czuwania), należy wcisnąć przycisk włącz/wyłącz na pilocie,
- w czasie przejście z trybu normalnego, do trybu czuwania wyświetla się komunikat o zakończeniu pracy.
Zadanie 4 (ocena 5):
Dodać do programu klimatyzatora funkcję działania tylko jak jest słońce – “klimatyzator ekologiczny”. Za czujnik słońca/światła wykorzystać fotorezystor oznaczony “A_PHOTO”, próg działania można ustawić z pilota. Program działa jak w zadaniu 3 i posiada dodatkowe funkcje:
- w trybie normalnej pracy:
- dokonuje pomiaru jasności i wyświetla wartość na wyświetlaczu LCD,
- umożliwia ustawienie wartości progu zadziałania czujnika światła za pomocą pilota,
- jeśli jasność jest większa niż zadany próg to klimatyzator działa normalnie, jeśli mniejsza to na wyświetlaczu pojawia się odpowiedni komunikat i klimatyzator nie działa,
- w trybie czuwania:
- brak zmian
Zakres laboratorium 2017-2021 (nie aktualne)
Zajęcia stacjonarne:
- STM32
- FreeRtos
Zadanie 1
Utworzyć program, każdy punkt jako osobną funkcję który:
- mruga diodą LED z częstotliwością 1Hz,
- po naciśnięciu przycisku (symulacja przewodem), co każde 200ms zwiększa licznik globalny (zmienna int i=0;),
- wyświetla na ekranie/terminalu wartość licznika jeśli uległa ona zmianie.
jak zrobić taki program? Jak zrobić oczekiwanie/opóźnienie bez blokowania całego programu?
Zadanie 2
Dodać do programu system czasu rzeczywistego FreeRTOS (vTaskDelay).
Zmodyfikować poprzednie zadanie aby każda funkcja była osobnym wątkiem programu, jak działa teraz program?
Zadanie 3
Synchronizacja działania pomiędzy wątkami z wykorzystaniem semaforów (xSemaphoreCreateBinary).
Dodać do funkcji obsługującej przycisk ustawienie semafora kiedy nastąpi zmiana wartości.
Dodać do funkcji wyświetlania na ekranie aby wyświetlała tylko jeśli semafor jest ustawiony.
Zadanie 4
Problem producenta i konsumenta – wykorzystanie kolejek (xQueueCreate).
Utworzyć nowy program:
- Zadanie 4a
- utworzyć kolejkę 10 dwuelementową, przechowującą strukturę (uint8_t numerWatku, int krokWatku),
- utworzyć 3 wątki będące producentami, dodają elementy do kolejki, gdzie każdy ma swój unikatowy numer, i wykonuje dodaje wątku przy jednoczesnej inkrementacji licznika (krokWatku). Wątki dodają do kolejki, co 3 sekundy,
- jeśli kolejka jest pełna to wątki są blokowane,
- dodać wątek konsumenta, pobiera informacje z kolejki i wyświetla komunikat o pobranych danych na terminalu. Wątek działa, co w 2 sekundy, i pobiera tylko jedną dostępną pozycje kolejki,
- czy dojdzie do zablokowania kolejki? Kiedy?
Zadanie 4b
- zmienić czas wykonywania wątku konsumenta, tak aby pobierał natychmiast informacje z kolejki,
- czy dojdzie do zapełnienia kolejki?
- czy odbierane komunikaty są zawsze w takiej samej kolejności?
Zajęcia zdalne:
Zakres laboratorium:
- powtórzenie zakresu materiału z przedmiotu
- obsługa portów
- obsługa przetwornika A/D
- wykorzystanie układów licznikowych do generowania sygnału PWM
- komunikacja z zastosowaniem interfejsu UART
Zadania wykonujemy na płytce Arduino MEGA.
należy podłączyć:
- 8x dioda LED
- 8x przycisk typu “Switch (all)”
- 1x Servo
- 1x potencjometr zadający napięcie 0-5V
Każdy program po uruchomieniu wyświetla na terminalu (komunikacja UART) swoją nazwę i numer indeksu autora.
Zadanie 1 – ocena 3
Utworzyć program, który w zależności od stanu przycisku ustawia stan diody LED – program działa na 8 diodach LED. Dodatkowo każda zmiana stanu jest wyświetlana za pomocą terminala w postaci “Ustawiono: 00001001” – gdzie 1 to dioda świeci/przycisk wciśnięty, cyfra najbardziej po lewej stronie to dioda pierwsza.
Zadanie 2 – ocena 3,5
Uruchomić przetwornik A/D do pomiaru napięcia z potencjometru. Wykonywać pomiar co 1 sekundę i wysyłać wartość w woltach na terminal. Do odczytu napięcia wykorzystać funkcję “analogRead”.
Zadanie 3 – ocena 4
Podłączyć serwomechanizm do odpowiedniego wyjścia i napisać program do sterowania jego położeniem. Położenie powinno być zadawane z poziomu terminala w zakresie 0-100%. Można wykorzystać bibliotekę Arduino “Servo”
Zadanie 4 – ocena 5
Utworzyć jeden program integrujący zadania 1-3. Stworzyć menu do obsługi programu przy użyciu terminala.
- program po uruchomieniu wyświetla menu z opisem dostępnych funkcji,
- funkcje numerujemy od 1-4, gdzie 4 to funkcja wyświetlająca menu programu,
- funkcje 1-3 to podprogramy realizujące funkcjonalność zadań 1-3,
- wyjście z podprogramów odbywa się po przesłaniu znaku “c”.
Zadanie 5 – ocena 5.5
Podłączyć dodatkowo wyświetlacz LCD, przykładowe użycie wyświetlacza z Arduino link.
- zmodyfikować program z zadania 4, tak aby wyświetlał informacje o poszczególnych funkcjach na wyświetlaczu LCD:
- zadanie 1 – wyświetla stan przycisków w postaci “00001001”,
- zadanie 2 – wyświetla mierzone napięcie w woltach
- zadanie 3 – wyświetla stan serwomechanizmu- ustawioną pozycję
- zadanie 4 – dla wybrania opcji 4 wyświetla numer indeksu autora projektu,