Przedstawiony projekt realizuje proces zdalnego pomiaru temperatury oraz ciśnienia atmosferycznego w obiektach i dla terenów znacznie oddalonych od miejsca, z którego realizowane jest sterowanie. Aplikacja kontrolowana jest przez interfejs WWW, w związku z czym do zarządzania nią wystarczy przeglądarka internetowa.

Schemat elektroniczny został zaprojektowany przy użyciu programu Kicad, który jest dostępny na licencji open-source GNU GPL v2. Na rysunku 1 przedstawiono schemat hierarchiczny układu. Każdy blok funkcjonalny zaprojektowano jako niezależny moduł elektroniczny, wyposażony we własne wejścia i wyjścia oraz linie zasilające. Tak stworzone moduły zostały ze sobą połączone tworząc układ elektroniczny stacji pogodowej.

 

Rys. 1. Schemat hierarchiczny aplikacji

Rys. 1. Schemat hierarchiczny aplikacji

Moduł jednostki centralnej jest najważniejszym elementem całości, wynika to z faktu, że zawiera on układ mikrokontrolera kontrolującego całą aplikacją. To dzięki jego działaniu widoczne są efekty w postaci możliwości przeglądania wygenerowanych stron WWW w przeglądarce. Mikrokontroler zawiera większość niezbędnych peryferii, które wykorzystywane są do komunikacji stacji pogodowej z:

  • siecią LAN (interfejs MAC),
  • zegarem czasu rzeczywistego (magistrala I2C),
  • czujnikiem ciśnienia i temperatury (magistrala I2C).

W układzie został zastosowany mikrokontroler STM32F107RCT6 firmy STMicroelectronics, który dedykowany jest do aplikacji wymagających obsługi różnego rodzaju sieci, np.: LAN, CAN, LIN. Rdzeniem mikrokontrolera jest 32-bitowy ARM Cortex-M3. Zastosowany układ charakteryzuje się maksymalną częstotliwością taktowania 72 MHz i wydajnością 1,25 DMIPS/MHz. Mikrokontroler wyposażono w 256 kB pamięci Flash oraz w 64 kB pamięci RAM. Najważniejszym kryterium wyboru mikrokontrolera, jakim kierowano się przy wyborze, była pojemność pamięci RAM oraz Flash. Wynika to z faktu, że stworzony program dla mikrokontrolera używa pamięci RAM oraz Flash do generowania stron WWW oraz obsługa stosu TCP/IP.

Zastosowany blok zasilający systemu jest stosunkowo prostym obwodem elektronicznym. Zbudowany jest on z dwóch stabilizatorów liniowych (po jednym dla napięcia +3,3 V i +5 V) oraz kondensatorów filtrujących. Obwód zasilający przygotowany został do zasilania przy użyciu złącza jack 5 mm lub z portu USB. W celu zapewnienia poprawnej pracy przy jednoczesnym podłączeniu obu źródeł zasilania zastosowano diody prostownicze, które służą jako zabezpieczenie blokujące przepływ prądu w kierunku źródła zasilania.

Blok konwertera USB-UART wykorzystywany jest w komunikacji z komputerem lub innym urządzeniem, które może działać jako układ nadrzędny USB. W module zastosowano popularny układ firmy FTDI – FT232RL, który wymaga minimalnej liczby dodatkowych elementów do prawidłowego działania. Wejściem modułu jest gniazdo USB typu B, natomiast wyjścia układu podłączone są bezpośrednio do mikrokontrolera za pomocą linii komunikacyjnych: TXD, RXD, RTS oraz CTS. Transmisja wejściowa jak i wyjściowa jest monitorowana za pomocą dwóch diod LED.

Jako zegar czasu rzeczywistego (RTC) zastosowano układ firmy Maxim-Dallas Semiconductor DS1307 w wersji z zewnętrznym oscylatorem kwarcowym. Aplikacja tego układu jest prosta, ponieważ wymaga on podłączenia wyłącznie zewnętrznego oscylatora kwarcowego oraz baterii 3 V, która podtrzymuje zawartość pamięci RAM i działanie układu w przypadku braku zasilania głównego. Układ liczy czas oraz datę z uwzględnianiem liczby dni w miesiącu oraz lat przestępnych. Układ DS1307 posiada 56 B wolnej pamięci RAM. Względem producenta szacunkowy czas pracy na baterii podtrzymującej wynosi około dziesięciu lat (dla baterii o pojemności 48 mAh).

Moduł EthernetPhy przedstawia warstwę fizyczna interfejsu Ethernet (warstwa fizyczna modelu OSI, PHYsical layer). Układ zastosowano w domyślnej konfiguracji tzn. aktywowany jest za pomocą adresu 0x01, pierwszy tryb pracy diod LED oraz praca w trybie 100BASE-TX Half/Full Duplex. Konfiguracja ta ulega zmianie podczas ładowania systemu operacyjnego i konfiguracji interfejsu sieciowego. Układ do prawidłowej pracy wymaga zewnętrznego transformatora separującego oraz kilku elementów: rezystory konfigurujące, kondensatory przeciwzakłóceniowe oraz oscylatora kwarcowego lub bezpośredniego polaczenia do mikrokontrolera lub innego generatora sygnału zegarowego. W zależności od konfiguracji sygnał zegarowy powinien charakteryzować się następującą częstotliwością: 2,5 MHz dla prędkości transmisji 10 Mb/s oraz 25 MHz dla prędkości transmisji 100 Mb/s. W aplikacji zastosowano szybszy wariant. Ze względu na oszczędność miejsca oraz rozmiar płytki PCB zastosowano transformator sygnałowy wbudowany w gniazdo RJ-45. Układ z mikrokontrolerem komunikuje sie za pomocą magistrali w konfiguracji MII.

Moduł Station stacji pogodowej składa się jedynie z jednego czujnika, który mierzy temperaturę oraz ciśnienie atmosferyczne. Zastosowany czujnik to układ MPL115A2. Jest to układ typu MEMS firmy Freescale Semiconductor. Komunikacja z nim realizowana jest przy użyciu magistrali I2C. Czujnik charakteryzuje się pomiarem ciśnienia z zakresu od 50 kPa do 115 kPa z rozdzielczością 0,15 kPa. W temperaturze od –20°C do +85°C ciśnienie mierzone jest z dokładnością ±1 kPa. Natomiast zakres pomiaru temperatury wynosi od –40°C do 105°C. Układ można zasilać napięciami z zakresu od 2,375 V do 5,5 V, w aplikacji zastosowano napięcie 3,3 V. Układ jest dostępny w postaci modułu KAmodBAR-I2C oraz w wersji z magistralą SPI jako KAmodBAR-SPI.

Przy projektowaniu obwodu drukowanego starano się, aby stosowane elementy posiadały jak najmniejsze wymiary, lecz do tego stopnia, aby było możliwe ich lutowanie bez użycia specjalistycznego sprzętu. Dążono do tego by całkowity rozmiar zaprojektowanej płytki był też jak najmniejszy, Wszystkie zaprojektowane moduły umieszczono na wspólnej płytce. W przypadku czujnika stacji pogodowej, poza polem do przylutowania na płytce, umożliwiono także zewnętrzny montaż poprzez linie sygnałowe. Projekt płytki PCB zrealizowano przy użyciu programu Pcbnew, będącego częścią pakietu Kicad. Pakiet ten znakomicie ułatwia projektowanie obwodów drukowanych. Wynika to ze wspomaga użytkownika podpowiedziami pochodzącymi ze schematu. Ze względu na stopień złożenia układu, oraz dążenie do minimalnych rozmiarów płytki, wymogiem stało się zaprojektowanie płytki jako dwustronnej. Ostateczne wymiary płytki to 66 x 71 mm.

Elementem stworzonego oprogramowania dla mikrokontrolera jest system operacyjny czasu rzeczywistego – FreeRTOS, dla którego stworzone zostało przyjazne użytkownikowi API uniksopodobne (tzn. wszystkie urządzenia są widoczne jako pliki). Oprogramowanie to definiuje jednocześnie interfejs sterowników i aplikacji.

Możliwości zastosowanej platformy są olbrzymie, a czas wdrożenia gotowego programu stosunkowo krótki. Pakiet oprogramowania nazwano Tinix RTOS. Urządzeniem można sterować za pomocą terminala podłączonego za pośrednictwem komputera.

W aplikacji został zastosowany popularny stos TCP/IP – lwIP, który doskonale sprawdza się w układzie. W pamięci mikrokontrolera działa wirtualny system plików (VFS) dzięki, któremu możliwe jest bardzo elastyczne zarządzenia urządzeniami, zasobami oraz zewnętrznymi systemami plików. W celu bezpieczeństwa działania systemu, stos komunikacyjny TCP/IP posiada specjalnie odseparowaną pamięć operacyjną. Natomiast pamięć systemu operacyjnego, sterowników oraz aplikacji jest dynamicznie przydzielana co przekłada się na oszczędność użycia pamięci. Nieuruchomione aplikacje, wątki oraz nieużywane zmienne nie zajmują miejsca w pamięci układu. Na rysunku 2 przedstawiono uproszczone warstwy architektury oprogramowania.

Rys. 2. Uproszczony model warstw systemu

Rys. 2. Uproszczony model warstw systemu

Na rysunku 3 przedstawiono podłączone urządzenie do sieci LAN, komputera oraz zasilacza. Na rysunku oznaczono najważniejsze elementy:

  1. gniazdo zasilające,
  2. gniazdo RJ-45 sieci LAN/Internet wraz z zamontowanymi diodami sygnalizującymi stan interfejsu,
  3. przycisk resetu,
  4. bateria 3 V podtrzymująca zasilanie zegara układu DS1307,
  5. dioda sygnalizująca dane wysyłane z komputera do stacji pogodowej,
  6. dioda sygnalizująca dany wysyłane ze stacji pogodowej do komputera,
  7. złącze USB terminala.

Rys. 3. Podłączona stacja pogodowa

Rys. 3. Podłączona stacja pogodowa

Stację pogodową można zasilać za pomocą złącza zasilania lub portu USB. Zaleca się jednak, aby urządzenie było zasilane ze złączą zasilania, ponieważ napięcie +5 V portu USB jest nieco zaniżone przez obwód wejściowy zabezpieczenia, co wpływa na końcowe zasilanie układu napięciem +5 V. Procedura włączenia układu powinna rozpocząć się od podłączenia wtyczki RJ-45 interfejsu Ethernet, a następnie przewodu zasilającego. Teoretycznie nic nie stoi na przeszkodzie, aby procedura ta była wykonana odwrotnie, należy jednak pamiętać o tym, że układ zaraz po włożeniu wtyczki zasilającej rozpoczyna swoje działanie. Zanim urządzenie zostanie podłączone do sieci LAN procedura konfiguracji interfejsu Ethernet stacji pogodowej może być zakończona. Od tego momentu nie będzie możliwe ustanowienie połączenia ze stacją. Jedyną możliwością, jeśli nie udaje się połączyć ze stacją, jest wykonie resetu urządzenia za pomocą przycisku, wysłaniu komendy reboot w terminalu lub odłączenie zasilania i ponowne jego włączenie.

Aby skorzystać z terminala stacji pogodowej należy podłączyć stację do komputera za pomocą przewodu USB. Zaraz po tym jak stacja zostanie podłączoną, komputer wykryje wirtualny port szeregowy. W przypadku systemu Linux i podobnych w katalogu urządzeń /dev pojawi się urządzenie: /dev/ttyUSBx, gdzie x oznacza kolejny numer w zależności od liczby podłączonych tego typu urządzeń. Aby uchronić się od niejasności można skorzystać ze ścieżki adresującej urządzenie po ID układu, tzn.:

gdzie x oznacza numer seryjny podłączonego układu FTDI. Aby urządzenie działało poprawnie, w przypadku systemu linuksowego, nie są wymagane żadne sterowniki.

W systemie Windows zaraz po podłączeniu urządzenia pojawi się informacja z prośbą o zainstalowanie odpowiednich sterowników, które można pobrać ze strony producenta układu FTDI. Po zainstalowaniu sterowników w menadżerze urządzeń pojawi się kolejny port szeregowy – wirtualny port COM. W tym systemie należy upewnić się, który z portów jest stacją pogodową, a następnie skorzystać z wybranego portu.

Jeśli procedura odnalezienia poprawnego portu stacji pogodowej została zakończona to można skorzystać z terminala. W systemach POSIX można skorzystać z programu: minicom (powinien być dostępny w repozytoriach każdej dystrybucji), natomiast w systemach Windows można skorzystać z terminala PuTTY. Oczywiście można skorzystać z dowolnego innego programu terminala, jednak należy pamiętać, aby program był zgodny z terminalem VT100. W programie terminala należy ustawić port szeregowy, który odpowiada stacji pogodowej. Należy pamiętać także o jego poprawnej konfiguracji: prędkość transmisji 460800 b/s, 8 bitów danych, 1 bit stopu. Jeśli cała procedura zostanie zakończona pomyślnie, to na ekranie terminala powinien być widoczny tekst przedstawiony na rysunku 4.

 

Rys. 4. Okno terminala stacji pogodowej

Rys. 4. Okno terminala stacji pogodowej

Procedura startu systemu wymusza uruchomienie klienta DHCP, którego zadaniem jest pobranie adresu IP z lokalnego serwera DHCP. Jeśli procedura pobierania adresu zostanie zakończona poprawnie to w oknie terminala można zobaczyć informacje o adresie IP. Jeśli procedura została zakończona błędem, program mikrokontrolera domyślnie ustawi adres IP: 192.168.0.101.

Daniel Zorychta