Spisu treści:

Oparty na Raspberry Pi system monitorowania klimatu w pomieszczeniach: 6 kroków
Oparty na Raspberry Pi system monitorowania klimatu w pomieszczeniach: 6 kroków

Wideo: Oparty na Raspberry Pi system monitorowania klimatu w pomieszczeniach: 6 kroków

Wideo: Oparty na Raspberry Pi system monitorowania klimatu w pomieszczeniach: 6 kroków
Wideo: Raspberry Pi 👉VNC👉Domoticz 👉Projekt👉Sterowania👉Monitoringu👉Open Source👉Jak to zrobić krok po kroku. 2024, Listopad
Anonim
Oparty na Raspberry Pi system monitorowania klimatu w pomieszczeniach
Oparty na Raspberry Pi system monitorowania klimatu w pomieszczeniach

Przeczytaj ten blog i zbuduj własny system, aby otrzymywać powiadomienia, gdy w Twoim pokoju jest zbyt sucho lub wilgotno.

Co to jest system monitorowania klimatu w pomieszczeniach i dlaczego go potrzebujemy?

Systemy monitorowania klimatu w pomieszczeniach zapewniają szybki wgląd w kluczowe statystyki związane z klimatem, takie jak temperatura i wilgotność względna. Możliwość przeglądania tych statystyk i otrzymywania alertów na telefonie, gdy pomieszczenie jest zbyt wilgotne lub suche, może być bardzo pomocne. Korzystając z alertów, możesz podjąć szybkie działania niezbędne do osiągnięcia maksymalnego komfortu w pomieszczeniu, włączając grzejnik lub otwierając okna. W tym projekcie zobaczymy jak wykorzystać Simulink do:

1) przenieś statystyki klimatyczne (temperatura, wilgotność względna i ciśnienie) z Sense HAT do Raspberry Pi

2) wyświetlaj zmierzone dane na matrycy LED 8x8 Sense HAT

3) zaprojektuj algorytm decydujący, czy wilgotność w pomieszczeniu jest „Dobra”, „Zła” lub „Brzydka”.

4) zarejestruj dane w chmurze i wyślij alert, jeśli dane są sklasyfikowane jako „brzydkie” (zbyt wilgotne lub suche).

Kieszonkowe dzieci

Raspberry Pi 3 Model B

Czapka Raspberry Pi Sense

Krok 1: Potrzebne oprogramowanie

Potrzebne oprogramowanie
Potrzebne oprogramowanie

Potrzebujesz MATLAB, Simulink i wybierz Add-Ons, aby śledzić i budować własny system monitorowania klimatu w pomieszczeniach.

Otwórz MATLAB z dostępem administratora (kliknij prawym przyciskiem myszy ikonę MATLAB i wybierz Uruchom jako administrator). Wybierz Dodatki z paska narzędzi MATLAB i kliknij Pobierz dodatki.

Wyszukaj tutaj pakiety wsparcia z ich nazwami wymienionymi poniżej i „Dodaj” je.

a. Pakiet wsparcia MATLAB dla sprzętu Raspberry Pi: Uzyskaj wejścia i wyślij wyjścia do płyt Raspberry Pi i podłączonych urządzeń

b. Pakiet wsparcia Simulink dla sprzętu Raspberry Pi: Uruchom modele Simulink na płytach Raspberry Pi

C. RPi_Indoor_Climate_Monitoring_System: Przykładowe modele potrzebne do tego projektu

Uwaga - Podczas instalacji postępuj zgodnie z instrukcjami wyświetlanymi na ekranie, aby skonfigurować Pi do pracy z MATLAB i Simulink.

Krok 2: Przenieś dane z czujnika do Raspberry Pi za pomocą Simulink

Przenieś dane z czujnika do Raspberry Pi za pomocą Simulink
Przenieś dane z czujnika do Raspberry Pi za pomocą Simulink

Dla tych, którzy nie znają Simulinka, jest to graficzne środowisko programistyczne, które służy do modelowania i symulacji systemów dynamicznych. Po zaprojektowaniu algorytmu w Simulink, możesz automatycznie wygenerować kod i osadzić go na Raspberry Pi lub innym sprzęcie.

Wpisz następujące polecenie w oknie poleceń MATLAB, aby otworzyć pierwszy przykładowy model. Wykorzystamy ten model do wprowadzenia danych dotyczących temperatury, ciśnienia i wilgotności względnej do Raspberry Pi.

>rpiSenseHatBringSensorData

Bloki LPS25H Pressure Sensor i HTS221 Humidity Sensor pochodzą z biblioteki Sense HAT w pakiecie wsparcia Simulink dla bibliotek sprzętowych Raspberry Pi.

Bloki zasięgu pochodzą z biblioteki Zlewy pod bibliotekami Simulink. Aby upewnić się, że Twój model jest poprawnie skonfigurowany, kliknij ikonę koła zębatego w modelu Simulink. Przejdź do Implementacja sprzętowa > Ustawienia płyty sprzętowej > Docelowe zasoby sprzętowe.

Uwaga – nie musisz konfigurować, jeśli postępowałeś zgodnie z instrukcjami instalacji podczas instalacji pakietu wsparcia Simulink dla Raspberry Pi. Adres urządzenia zostanie automatycznie wypełniony adresem twojego Pi.

Upewnij się, że adres urządzenia tutaj odpowiada adresowi IP, który słyszysz podczas uruchamiania Pi. Być może będziesz musiał ponownie zasilić Pi za pomocą słuchawek podłączonych do gniazda, aby usłyszeć adres urządzenia.

Kliknij OK i naciśnij przycisk Uruchom, jak pokazano poniżej. Upewnij się, że Twoje Pi jest fizycznie podłączone do komputera za pomocą kabla USB lub znajduje się w tej samej sieci Wi-Fi, co Twój komputer.

Po naciśnięciu przycisku Uruchom w trybie zewnętrznym Simulink automatycznie generuje kod C odpowiadający Twojemu modelowi i pobiera plik wykonywalny do Raspberry Pi. Oba bloki zakresu są skonfigurowane do otwierania po uruchomieniu modelu. Gdy Simulink zakończy wdrażanie kodu na Raspberry Pi, zobaczysz dane dotyczące ciśnienia, temperatury i wilgotności względnej na oscyloskopach, jak pokazano poniżej.

Uwaga - kod działa na Raspberry Pi i oglądasz rzeczywiste sygnały przez bloki zakresu Simulink, tak jakbyś miał podłączony oscyloskop do samego sprzętu. Wartości temperatury z dwóch czujników różnią się nieznacznie od siebie. Zachęcamy do wyboru takiego, który dokładniej odzwierciedla rzeczywistą temperaturę w Twoim pomieszczeniu i wykorzystania go w kolejnych sekcjach. We wszystkich testach z Sense HAT, które przeprowadziliśmy, wartości temperatury czujnika wilgotności HTS221 były bliższe rzeczywistej temperaturze w pomieszczeniu. Dzięki temu poznaliśmy podstawy wprowadzania danych z czujników z Sense HAT do Raspberry Pi.

Krok 3: Wyświetl dane czujnika na matrycy LED 8x8

Wyświetlanie danych czujnika na matrycy LED 8x8
Wyświetlanie danych czujnika na matrycy LED 8x8
Wyświetlanie danych czujnika na matrycy LED 8x8
Wyświetlanie danych czujnika na matrycy LED 8x8

W tej sekcji zobaczymy, jak część wizualizacji tego projektu została dodana do ostatniego modelu. Elementy Sense HAT używane w tej sekcji to czujnik wilgotności (aby uzyskać wilgotność względną i temperaturę), czujnik ciśnienia, matryca LED i joystick. Joystick służy do wyboru czujnika, który chcemy wyświetlić.

Aby otworzyć kolejny przykładowy model, wpisz następujące polecenie w oknie poleceń MATLAB.

> rpiSenseHatWyświetlacz

Blok joysticka pochodzi z biblioteki Sense HAT. Pomaga nam przenieść dane joysticka do Raspberry Pi, podobnie jak w przypadku bloków czujników ciśnienia i wilgotności w poprzednim przykładzie. Na razie używamy bloku Test Comfort, aby wyświetlić „dobry” (gdy wartość bloku wynosi 1) na matrycy LED. Wyświetli „zła”, gdy wartość bloku wynosi 2 lub „brzydka”, gdy wartość wynosi 3 lub 4. W następnej sekcji zobaczymy rzeczywisty algorytm, który decyduje, czy wilgotność w pomieszczeniu jest dobra, zła czy brzydka. Przyjrzyjmy się blokowi Selector, klikając go dwukrotnie. Bloki funkcyjne MATLAB służą do integracji kodu MATLAB z modelem Simulinka. W tym przypadku wprowadzamy SelectorFcn podany poniżej.

funkcja [wartość, stan]= SelectorFcn(JoyStickIn, ciśnienie, wilgotność, temp, ihval)

trwały JoyStickCount

jeśli jest pusty (JoyStickCount)

Liczba JoyStick = 1;

kończyć się

jeśli JoyStickIn == 1

Liczba JoyStick = Liczba JoyStick + 1;

jeśli JoyStickCount == 6

Liczba JoyStick = 1;

kończyć się

kończyć się

przełącz JoyStickCount

przypadek 1 % Wyświetlanie temperatury w C

wartość = temp;

Stan = 1;

przypadek 2 % Wyświetlane ciśnienie w atm

wartość = ciśnienie/1013,25;

Stan = 2;

przypadek 3 % Wyświetl wilgotność względną w %

wartość = wilgotność;

Stan = 3;

przypadek 4 % Wyświetlanie temperatury w F

wartość = temp*(9/5)+32;

Stan = 4;

przypadek 5 % Wyświetlacz Dobry/Zły/Brzydki

wartość = ihval;

Stan = 5;

w przeciwnym razie % Nie wyświetlaj/Wyświetlaj 0

wartość = 0;

Stan = 6;

kończyć się

Instrukcje switch-case są zwykle używane jako mechanizm kontroli wyboru. W naszym przypadku chcemy, aby wejście joysticka było kontrolką wyboru i wybierało kolejne dane do wyświetlenia za każdym razem, gdy zostanie naciśnięty przycisk joysticka. W tym celu tworzymy pętlę if, która zwiększa zmienną JoyStickCount z każdym naciśnięciem przycisku (wartość JoyStickIn wynosi 1, jeśli jest naciśnięty przycisk). W tej samej pętli, aby upewnić się, że przełączamy się tylko między pięcioma opcjami podanymi powyżej, dodaliśmy kolejny warunek, który resetuje wartość zmiennej do 1. Używając tego, wybieramy, która wartość będzie wyświetlana na matrycy LED. Przypadek 1 będzie domyślny, ponieważ zdefiniujemy JoyStickCount, aby zaczynał się od 1, a to oznacza, że matryca LED będzie wyświetlać temperaturę w stopniach Celsjusza. Zmienna State jest używana przez blok danych Scroll do zrozumienia, która wartość czujnika jest aktualnie wyświetlana i jaka jednostka powinna być wyświetlana. Teraz, gdy wiemy, jak wybrać odpowiedni czujnik do wyświetlenia, przyjrzyjmy się, jak działa rzeczywisty wyświetlacz.

Wyświetlanie znaków i cyfr

Do wyświetlania na matrycy LED Sense HAT stworzyliśmy matryce 8x8 dla:

1) wszystkie liczby (0-9)

2) wszystkie jednostki (°C, A, % i °F)

3) kropka dziesiętna

4) alfabety od słów dobry, zły i brzydki.

Te macierze 8x8 zostały użyte jako dane wejściowe do bloku 8x8 RGB LED Matrix. Ten blok zapala diody LED odpowiadające tym elementom na matrycy, które mają wartość 1, jak pokazano poniżej.

Przewijanie tekstu

Blok danych Scroll w naszym modelu przewija ciągi, które mogą mieć do 6 znaków. Wybrano wartość 6, ponieważ jest to najdłuższy ciąg znaków, jaki wygenerujemy w tym projekcie, na przykład 23,8°C lub 99,1°F. Uwaga, tutaj °C jest uważany za jeden znak. Ten sam pomysł można rozszerzyć również na przewijanie ciągów o innych długościach.

Oto GIF, który pokazuje, jak to działa –

www.element14.com/community/videos/29400/l/gif

Aby wyświetlić ciąg 6 znaków każdy na matrycy 8x8, potrzebujemy obrazu o łącznej wielkości 8x48. Aby wyświetlić ciąg o maksymalnej długości 4 znaków, musimy stworzyć macierz 8x32. Teraz zobaczmy całą bezczynność, naciskając przycisk Uruchom. Domyślny wyświetlacz na matrycy LED to wartość temperatury w °C. Blok Zakres pokaże Stan i wartość z bloku Selektor. Naciśnij przycisk joysticka na Sense HAT i przytrzymaj przez sekundę, aby sprawdzić, czy wartość zmienia się na następne wyjście czujnika i powtarzaj ten proces, aż osiągnie wartość stanu 5. zmień wartość bloku Test Comfort na dowolną liczbę z zakresu od 1 do 4. Zwróć uwagę, jak zmiana wartości bloku w modelu Simulink natychmiast zmienia sposób, w jaki kod zachowuje się na sprzęcie. Może to być przydatne w sytuacjach, gdy chcemy zmienić zachowanie kodu ze zdalnej lokalizacji. Dzięki temu poznaliśmy kluczowe elementy związane z aspektem wizualizacji systemu monitoringu klimatu. W następnym rozdziale dowiemy się, jak skompletować nasz system monitoringu klimatu w pomieszczeniach.

Krok 4: Zaprojektuj algorytm w Simulinku, aby zdecydować, czy wilgotność w pomieszczeniu jest „dobra”, „zła” czy „brzydka”

Zaprojektuj algorytm w Simulinku, aby zdecydować, czy wilgotność w pomieszczeniu jest „dobra”, „zła” czy „brzydka”
Zaprojektuj algorytm w Simulinku, aby zdecydować, czy wilgotność w pomieszczeniu jest „dobra”, „zła” czy „brzydka”

Aby zrozumieć, czy pomieszczenie jest zbyt wilgotne/suche lub dowiedzieć się, jaki poziom wilgotności w pomieszczeniu jest uważany za komfortowy, istnieje kilka metod. Korzystając z tego artykułu, ustaliliśmy krzywą powierzchni, aby połączyć wilgotność względną w pomieszczeniu i temperaturę zewnętrzną, jak pokazano powyżej.

Każda wartość wilgotności względnej w tym obszarze oznacza, że pokój jest w komfortowym otoczeniu. Na przykład, jeśli temperatura zewnętrzna wynosi -30°F, dopuszczalna jest jakakolwiek wartość wilgotności względnej poniżej 15%. Podobnie, jeśli temperatura zewnętrzna wynosi 60°F, dopuszczalna jest wilgotność względna poniżej 50%. Aby sklasyfikować wilgotność w pomieszczeniu na maksymalny komfort (dobry), średni komfort (zły) lub zbyt wilgotno/sucho (brzydko), potrzebna jest temperatura zewnętrzna i wilgotność względna. Widzieliśmy, jak wprowadzić wilgotność względną do Raspberry Pi. Skupmy się więc na doprowadzeniu temperatury zewnętrznej. Wpisz następujące polecenie w oknie poleceń MATLAB, aby otworzyć model:

> rpiOutdoorWeatherData

Blok WeatherData służy do wprowadzenia temperatury zewnętrznej Twojego miasta (w K) za pomocą https://openweathermap.org/. Aby skonfigurować ten blok, potrzebujesz klucza API ze strony internetowej. Po utworzeniu bezpłatnego konta na tej stronie przejdź do strony swojego konta. Karta Klucze API pokazana poniżej zawiera klucz.

Blok WeatherData wymaga wprowadzenia nazwy miasta w określonym formacie. Odwiedź tę stronę i wprowadź nazwę swojego miasta, a następnie symbol przecinka, a następnie 2 litery oznaczające kraj. Przykłady – Natick, USA i Chennai, IN. Jeśli wyszukiwanie zwróci wynik dla Twojego miasta, użyj go w bloku WeatherData w tym konkretnym formacie. Jeśli twoje miasto jest niedostępne, użyj sąsiedniego miasta, którego warunki pogodowe są bliższe twoim. Teraz kliknij dwukrotnie blok WeatherData i wprowadź nazwę miasta oraz klucz API ze strony internetowej.

Naciśnij Uruchom na tym modelu Simulink, aby sprawdzić, czy blok może wprowadzić temperaturę Twojego miasta do Raspberry Pi. Zobaczmy teraz algorytm, który decyduje, czy wilgotność w pomieszczeniu jest dobra, zła czy brzydka. Wpisz następujące polecenie w oknie poleceń MATLAB, aby otworzyć następny przykład:

>rpisenseHatIHval

Być może zauważyłeś, że brakuje bloku Test Comfort z poprzedniego modelu, a nowy blok o nazwie FindRoom Comfort udostępnia blok ihval do Selector. Kliknij dwukrotnie ten blok, aby otworzyć i zbadać.

Używamy bloku WeatherData, aby wprowadzić temperaturę zewnętrzną. Podsystem limitów wilgotności reprezentuje wykres wilgotności względnej w funkcji temperatury zewnętrznej, który widzieliśmy powyżej. W zależności od temperatury zewnętrznej wyjdzie jaka powinna być maksymalna wartość graniczna wilgotności. Otwórzmy blok funkcyjny DecideIH MATLAB, klikając go dwukrotnie.

Jeśli wartość wilgotności względnej przekracza maksymalny limit wilgotności, znak będzie dodatni na podstawie sposobu odejmowania danych, co oznacza, że pomieszczenie jest zbyt wilgotne. Wyprowadzamy 3 (brzydkie) dla tego scenariusza. Powodem używania liczb zamiast ciągów jest łatwość wyświetlania na wykresach i tworzenia z nich alertów. Pozostałe klasyfikacje w funkcji MATLAB opierają się na arbitralnych kryteriach, które wymyśliliśmy. Gdy różnica jest mniejsza niż 10, oznacza to komfort maksymalny, a gdy jest mniejszy niż 20, jest to komfort średni, a powyżej jest zbyt suchy. Zapraszam do uruchomienia tego modelu i sprawdzenia poziomu komfortu w swoim pokoju.

Krok 5: Rejestruj dane o klimacie wewnętrznym i skategoryzowane dane w chmurze

Rejestruj dane o klimacie wewnętrznym i skategoryzowane dane w chmurze
Rejestruj dane o klimacie wewnętrznym i skategoryzowane dane w chmurze

W następnej sekcji zobaczymy, jak rejestrować dane w chmurze. Aby otworzyć ten przykład, wpisz następujące polecenie w oknie poleceń MATLAB.

> rpiSenseHatLogData

W tym modelu część wyświetlania z poprzedniego przykładowego modelu została celowo usunięta, ponieważ nie potrzebujemy, aby system monitorowania pokazywał statystyki podczas rejestrowania danych i wysyłania alertów. Używamy ThingSpeak, bezpłatnej platformy IoT o otwartym kodzie źródłowym, która obejmuje analitykę MATLAB, do aspektu rejestrowania danych. Wybraliśmy ThingSpeak, ponieważ istnieją bezpośrednie sposoby na zaprogramowanie Raspberry Pi i innych tanich płyt sprzętowych do wysyłania danych do ThingSpeak za pomocą Simulinka. Blok zapisu ThingSpeak pochodzi z pakietu wsparcia Simulink dla biblioteki sprzętowej Raspberry Pi i można go skonfigurować za pomocą klucza API zapisu z kanału ThingSpeak. Szczegółowe instrukcje dotyczące tworzenia kanału znajdują się poniżej. Aby stale rejestrować dane w chmurze, chcesz, aby Twoje Pi działało niezależnie od Simulinka. W tym celu możesz nacisnąć przycisk „Wdróż na sprzęcie” w swoim modelu Simulinka.

Stwórz własny kanał ThingSpeak

Osoby, które nie mają konta, mogą zarejestrować się na stronie ThingSpeak. Jeśli masz konto MathWorks, automatycznie masz konto ThingSpeak.

  • Po zalogowaniu się możesz utworzyć kanał, przechodząc do Kanały > Moje kanały i klikając Nowy kanał.
  • Wszystko czego potrzebujesz to nazwa kanału i nazwy pól, które zamierzasz rejestrować, jak pokazano poniżej.
  • Opcja Pokaż lokalizację kanału wymaga podania szerokości i długości geograficznej Twojego miasta i może pokazać lokalizację wewnątrz kanału na mapie. (Przykładowe wartości użyte tutaj dotyczą Natick, MA)
  • Następnie naciśnij Zapisz kanał, aby zakończyć tworzenie kanału.

4a. Ostrzegaj, jeśli dane są sklasyfikowane jako „brzydkie”

Aby uzupełnić nasz system monitorowania klimatu w pomieszczeniach, musimy zobaczyć, jak otrzymywać alerty na podstawie danych z chmury. Ma to kluczowe znaczenie, ponieważ bez tego nie będziesz w stanie podjąć niezbędnych działań, aby zmienić poziom komfortu w pomieszczeniu. W tej sekcji zobaczymy, jak otrzymać powiadomienie na telefon, gdy dane z chmury wskazują, że pomieszczenie jest zbyt wilgotne lub suche. Osiągniemy to za pomocą dwóch usług: IFTTT Webhooks i ThingSpeak TimeControl. IFTTT (skrót od If this, then that) to usługa online, która może obsługiwać zdarzenia i uruchamiać działania w oparciu o zdarzenia.

Kroki konfiguracji webhooków IFTTT

Uwaga: wypróbuj je na komputerze, aby uzyskać najlepsze wyniki.

1) Utwórz konto na ifttt.com (jeśli go nie masz) i utwórz nowy aplet ze strony Moje aplety.

2) Kliknij niebieski przycisk „ten”, aby wybrać usługę wyzwalania.

3) Wyszukaj i wybierz Webhooks jako usługę.

4) Wybierz opcję Odbierz żądanie sieciowe i podaj nazwę wydarzenia.

5) Wybierz utwórz wyzwalacz.

6) Wybierz "to" na następnej stronie i wyszukaj powiadomienia.

7) Wybierz wyślij powiadomienie z aplikacji IFTTT.

8) Wprowadź nazwę zdarzenia, którą utworzyłeś w kroku 2 IFTTT i wybierz akcję tworzenia.

9) Kontynuuj, aż dojdziesz do ostatniego kroku, przejrzyj i naciśnij Zakończ.

10) Przejdź do https://ifttt.com/maker_webhooks i kliknij przycisk Ustawienia u góry strony.

11) Przejdź do adresu URL w sekcji Informacje o koncie.

12) Wpisz tutaj nazwę wydarzenia i kliknij „Przetestuj”.

13) Skopiuj adres URL w ostatniej linii do wykorzystania w przyszłości (za pomocą klucza).

Kroki konfiguracji ThingSpeak TimeControl

1) Wybierz Aplikacje> Analiza MATLAB

2) Kliknij Nowy na następnej stronie i wybierz Uruchom e-mail z IFTTT i kliknij Utwórz.

Ważne elementy w kodzie szablonu to:

ID kanału – Wprowadź swój kanał ThingSpeak, który zawiera informacje o wartości wilgotności w pomieszczeniu.

IFTTTURL – Wpisz adres URL skopiowany z poprzedniej sekcji Krok 13.

readAPIKey – klawisz Enter sekcji ThingSpeak Channel. Action – ten, który działa na ostatniej wartości. Zmień go na następujący, aby wyzwalać alerty.

3) Na stronie ThingSpeak kliknij Aplikacje > Kontrola czasu.

4) Wybierz Cykliczne i wybierz częstotliwość czasową.

5) Kliknij Zapisz kontrolę czasu.

Teraz Analiza MATLAB uruchamia się automatycznie co pół godziny i wysyła wyzwalacz do usługi IFTTT Webhooks, jeśli wartość jest większa lub równa 3. Następnie aplikacja telefoniczna IFTTT ostrzeże użytkownika powiadomieniem, jak pokazano na początku tej sekcji.

Krok 6: Wniosek

Dzięki temu zobaczyliśmy wszystkie ważne aspekty budowania własnego systemu monitorowania klimatu. W tym projekcie zobaczyliśmy, jak Simulink można wykorzystać do:

  • zaprogramuj Raspberry Pi, aby pobierał dane z Sense HAT. Podświetlenie - Wizualizuj dane w Simulink, ponieważ kod nadal działa na Raspberry Pi.
  • zbuduj wizualny wyświetlacz systemu monitorowania klimatu w pomieszczeniach. Podświetl - Zmień sposób, w jaki twój kod zachowuje się na sprzęcie z Simulink.
  • zaprojektować algorytm systemu monitoringu klimatu wewnętrznego.
  • loguj dane z Raspberry Pi do chmury i twórz alerty na podstawie zarejestrowanych danych.

Jakie zmiany wprowadziłbyś w tym systemie monitorowania klimatu w pomieszczeniach? Podziel się swoimi sugestiami poprzez komentarze.

Zalecana: