Zakres materiału:

  1. biblioteki arduino – link
  2. interfejs komunikacyjny UART – biblioteka Serial
  3. biblioteka do LCD – LiquidCrystal
  4. czujnik temperatury “DS18b20” – biblioteka
  5. 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.

Schemat podłączenia czujnika DS18b20.

 

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,

 

 

Ankieta do kursu 2024