- Wskazywanie czasu i daty.
- Uwzględnienie roku przestępnego i zmiany czasu.
- Pomiar temperatury, wilgotności względnej oraz ciśnienia atmosferycznego powietrza.
- Zakres pomiaru temperatury -40…+85°C z rozdzielczością 0,1°C.
- Zakres pomiaru wilgotności 20…90% z rozdzielczością 1%.
- Zakres pomiaru ciśnienia 950…1050 hPa z rozdzielczością 0,1 hPa.
- Częstotliwość odświeżania pomiarów 0,5 Hz.
- Rejestracja parametrów i prezentacja w postaci wykresu z 24 godzin.
- Zasilanie 5 V/200 mA, złącze mikro USB.
- Wymiary 65 mm×35 mm×45 mm (szerokość × wysokość × głębokość).
Urządzenie odmierza czas nawet przy odłączonym zasilaniu. Na wyświetlaczu nie ma wtedy żadnej treści, ale zegar stale „tyka”. Odpowiada za to niezależny układ RTC z podtrzymaniem bateryjnym. Dzięki takiemu rozwiązaniu nie ma potrzeby ustawiania zegara po każdej przerwie w zasilaniu – po ponownym załączeniu zasilania czas będzie aktualny.
Sercem urządzenia jest jedno z młodszych „dzieci” firmy NXP – niewielki, ale dobrze wyposażony mikrokontroler typu LPC824. Razem z kolorowym wyświetlaczem o przekątnej 1,8 cala tworzy mikrosystem, którego możliwości nie kończą się na wyświetlaniu czasu.
Dodatkową funkcją urządzenia jest pomiar parametrów powietrza – temperatury, wilgotności i ciśnienia. Wyświetlane są aktualne wartości tych parametrów oraz wykresy ich zmian z ostatnich 24 godzin.
Obsługa
Urządzenie jest bardzo proste w użytkowaniu i obsłudze. Wymaga zasilania o napięciu 5 V i wydajności przynajmniej 0,2 A dołączonego do gniazda typu mikro-USB, doskonale nadaje się do tego np. ładowarka do smartfona. Obsługa urządzenia ogranicza się do ustawienia czasu i to tylko po pierwszym uruchomieniu. W tym celu należy wcisnąć i przytrzymać ok. 2 s środkowy przycisk. Na wyświetlaczu zostanie oznaczona wartość, którą można edytować – w tym przypadku wartość godzin. Górny i dolny przycisk służą do zwiększania i zmniejszania edytowanej wartości. Przyciśnięcie środkowego przycisku powoduje przejście do następnej wartości – minut, sekund a następnie do elementów daty. Nie ma możliwości ustawienia dnia tygodnia – jest automatycznie obliczany na podstawie daty. Po elementach daty ukaże się informacja o automatycznej zmianie czasu, tak jak poprzednio ustawienie można zmienić przy pomocy przycisków górnego i dolnego i ustawić funkcję aktywną lub wyłączoną. Kolejne przyciśnięcie środkowego przycisku spowoduje wyjście z trybu ustawiania czasu i powrót do normalnej pracy. Nowa wartość czasu i daty zostanie przepisana do pamięci układu RTC po ok. 3 sekundach od zakończenia ustawiania.
Ostatnią funkcją, którą można ustawić za pomocą przycisków jest sposób wyświetlania informacji na wyświetlaczu. Krótkie wciśnięcie środkowego przycisku zmienia tryb wyświetlania pomiędzy trybem automatycznym i manualnym. W trybie automatycznym treść wyświetlacza zmienia się co kilka sekund, wyświetlając po kolei czas i parametry powietrza. W trybie manualnym wyświetlana treść jest wybierana przy pomocy górnego i dolnego przycisku i nie zmienia się samoczynnie. Tryb manualny pozwala dodatkowo wyświetlić stronę informacyjną, która zawiera podstawowe informacje o projekcie.
Na fotografiach 1…4 pokazano wskazania czasu i parametrów w kolejności ich zmian. Czas i zmierzone parametry przedstawiane są jako cztery niezależne widoki, widoczne na fotografiach 1...4. Widok zegara (fotografia 1) nie wymaga wyjaśnień, w górnej części, dużą czcionką wyświetlane są godziny i minuty, poniżej mniejszą czcionką wyświetlany jest pełny czas i data. Widoki pozostałych parametrów są do siebie podobne, ale różnią się kolorystyką. Na samej górze ekranu wyświetlana jest nazwa parametru i jednostka pomiarowa.
Poniżej, dużą czcionką prezentowana jest aktualna wartość parametru. Następnie umieszczony jest wykres zmian parametru z naniesioną siatką punktów a na samym dole ekranu umieszczone są informacje o wykresie.
Oś X wykresu odwzorowuje upływający czas, prawa strona odpowiada aktualnej chwili i zawiera wynik ostatniego pomiaru, lewa strona odpowiada chwili sprzed 24 godzin. Siatka punktów dzieli oś na 12 części, czyli punkty wskazują odcinki dwugodzinne. Oś Y przyjmuje zakres wartości dynamicznie – skala i zakres wartości wyznaczane są na podstawie zebranych pomiarów i ustalane, aby optymalnie zobrazować wykres. Pod wykresem umieszczona jest informacja w postaci:
Pierwszy parametr mówi o zakresie wartości z wykresu – dotyczy dolnej i górnej granicy na siatce wykresu. Nie jest to minimalna i maksymalna wartość mierzonego parametru. Drugi parametr to skala – mówi o wielkości zmian pomiędzy punktami siatki w osi Y.
Budowa
Schemat ideowy zegara pokazano na rysunku 5. Można na nim wyróżnić kilka bloków funkcjonalnych. Układ IC3 typu PCF8563 to zegar RTC z niezależnym taktowaniem i podtrzymaniem bateryjnym. Komunikuje się poprzez interfejs I²C. Przy każdym uruchomieniu urządzenia następuje odczytanie wartości czasu z tego układu. Ponadto, odpowiada za to, aby czas był odmierzany nawet przy odłączonym zasilaniu urządzenia. W trakcie działania urządzenia dostarcza sygnału prostokątnego o częstotliwości dokładnie 1 Hz. Mikrokontroler wykorzystuje ten sygnał jako sprzętowe przerwanie i na jego podstawie odmierza czas.
Układ IC2 typu FT230 to kontroler USB device, emulujący port szeregowy. W trakcie normalnej pracy urządzenie nie wymaga połączenia z komputerem, a port USB służy przede wszystkim do zasilania. Jednak wyniki pomiarów wraz z wartością czasu mogą być odczytane przez USB przy pomocy programu typu terminal. Kontroler USB spełniał ważną rolę w trakcie tworzenia i testowania oprogramowania sterującego, ponieważ umożliwia programowanie pamięci mikrokontrolera i spełnia funkcje nieskomplikowanego debuggera.
Urządzenie jest zasilane napięciem 5 V, ale większość bloków, z mikrokontrolerem włącznie, wymaga niższego napięcia. Stabilizowanego napięcia 3,3 V dostarcza układ IC2 typu MCP1703-3.3, jego dużą zaletą jest bardzo mały prąd własny. Napięcie 5 V jest doprowadzane tylko do wyświetlacza, ale analizując jego budowę łatwo zauważyć, że ma własny stabilizator, również o wyjściu z napięciem napięciu 3,3 V.
Jako wyświetlacz zastosowany został gotowy moduł – ekran przytwierdzony do niewielkiej płytki drukowanej, która zawiera kilka elementów niezbędnych do jego prawidłowej pracy oraz wyprowadzenia w postaci szpilek goldpin. Wyświetlacz posiada matrycę RGB o rozdzielczości 160×128 pikseli. Barwa każdego piksela określana jest 16 bitową wartością, która odpowiada kolorom RGB według schematu 5-6-5. Łatwo zauważyć, że przesłanie treści całego wyświetlacza wymaga przesłania ponad 40 kB danych. Dlatego wyświetlacz został wyposażony w kontroler typu ST7735S z szybkim interfejsem SPI. Podświetlanie wyświetlacza doprowadzone jest poprzez tranzystor T1 sterowany sygnałem PWM z mikrokontrolera, wartość wypełnienia jest stała, wynosi ok. 80%.
Na schemacie nie widać czujników odpowiedzialnych za pomiar parametrów powietrza, dlatego, że zastosowano gotowe moduły. Takie rozwiązanie pozwoliło ominąć problem montażu skomplikowanych, miniaturowych podzespołów. Co ciekawe – kosztują mniej niż same czujniki. Moduły dołączane do odpowiednich złącz w tylnej części zegara (fotografia 6).
Pomiary parametrów powietrza
Pomiar temperatury i ciśnienia dokonywany jest przy pomocy czujnika BMP280. Jest to czujnik produkcji firmy Bosch Sensortec, zamknięty w nietypowej, miniaturowej obudowie o wymiarach ok. 2 mm×2,5 mm×1 mm. Komunikacja z czujnikiem odbywa się poprzez interfejs I²C. Czujnik pozwala uzyskać pomiary o stosunkowo dużej rozdzielczości, ale skonfigurowanie czujnika oraz proces otrzymywania wyniku nie należą do najprostszych. Dokumentacja czujnika jest bardzo pomocna – oprócz opisu znaczenia poszczególnych parametrów, podaje przykłady ustawień, od konfiguracji Ultra low power do Ultra low precision oraz przykłady konfiguracji dla różnych zastosowań np. w urządzeniu przenośnym, monitorze pogodowym czy module wykrywającym zmianę piętra w systemie sterowania windą. W opisywanym urządzeniu zastosowano konfigurację uśrednioną, a kod odpowiedzialny za inicjalizację czujnika przedstawia listing 1.
void BmpInit ( void ){
uint8_t id = 0 ;
bmpData . status = BMP280_STATUS_ERR ;
if ( BmpChipIdGet () == BMP280_CHIPID ){
BmpResetSet ();
MyDelayMs ( 10 );
BmpCalibDataGet ();
BmpConfigSet ( POWERMODE_NORMAL, P_OVERSAMPLE_X4, T_OVERSAMPLE_X1, FILTER_4, STANDBYTIME_125);
} else {
SerialDebugMessage ( “BMP280 error - invalid ID” );
}
}
Czujniki BMP280 posiadają zestaw parametrów ustalanych na etapie produkcji i kalibracji, w dokumentacji określane są „Trimming parameter”. Wartości te są niezbędne do obliczenia wyniku pomiaru. Wewnątrz procedury inicjalizującej następuje odczytanie tych parametrów. Odpowiada za to funkcja BmpCalibDataGet() – strukturę tych danych przedstawia listing 2.
typedef struct{
uint16_t dig_T1;
int16_t dig_T2;
int16_t dig_T3;
uint16_t dig_P1;
int16_t dig_P2;
int16_t dig_P3;
int16_t dig_P4;
int16_t dig_P5;
int16_t dig_P6;
int16_t dig_P7;
int16_t dig_P8;
int16_t dig_P9;
} BMP280_CALIB_DATA_T;
Uzyskanie wartości mierzonych parametrów wymaga odczytania sześciu bajtów danych pomiarowych oraz przeprowadzenia na nich kilku obliczeń, uwzględniających parametry kalibracyjne. Ważne, aby dokonać obliczenia wartości temperatury, przed obliczeniem wartości ciśnienia, ponieważ ciśnienie jest obliczane z uwzględnieniem temperatury.
Pomiar wilgotności wykonywany jest za pomocą popularnego czujnika DHT11. Ten element nie sprawiłby problemów z montażem, ale zastosowanie oddzielnego modułu, umieszczonego w pewnym oddaleniu od płyty głównej ma tę zaletę, że czujnik jest w mniejszym stopniu narażony na czynniki zakłócające pomiar – czyli głownie na ciepło wydzielane przez elementy płyty głównej. Komunikacja z czujnikiem odbywa się poprzez jednoprzewodowy interfejs Single wire, który nie jest kompatybilny z interfejsem 1Wire. Sposób komunikacji jest prosty, najpierw urządzenie nadrzędne ustawia stan niski o czasie trwania co najmniej 18 ms a następnie czujnik przesyła 16 bitów wartości wilgotności, 16 bitów wartości temperatury i na koniec 8 bitów kontrolnych, pozwalających zweryfikować poprawność danych.
Montaż i uruchomienie
Do budowy urządzenia w głównej mierze zastosowano elementy montowane powierzchniowo. Elementy bierne w obudowach SMD 1206 nie powinny sprawić kłopotu w czasie montażu, natomiast układy scalone w obudowach TSSOP mają gęsto rozmieszczone wyprowadzenia i mogą być trudne w montażu dla osób z niewielkim doświadczeniem.
Schemat montażowy płytki zegara pokazano na rysunku 7. Pomocne w montażu będą fotografie 8 i 9 przedstawiające zmontowaną płytkę bez zamontowanego wyświetlacza i czujników. Gniazdo USB, baterię i złącza czujników należy zamontować na tylnej stronie płytki.
Dla czujnika wilgotności przewidziano dwa złącza 3-pinowe oraz jedno 4-pinowe, przystosowane do różnych wersji modułów. Należy zamontować tylko to, które będzie odpowiednie dla posiadanego czujnika.
Po zmontowaniu i skontrolowaniu poprawności montażu należy dołączyć wyświetlacz oraz czujniki jak na fotografii 6. Mikrokontroler w zestawie AVT będzie już zaprogramowany, więc urządzenie powinno „ożyć” tuż po włączeniu zasilania.
Gdyby zaszła potrzeba ponownego zaprogramowania mikrokontrolera to urządzenie daje taką możliwość, bez jego wylutowywania. Należy wtedy trzymać wciśnięty przycisk SW1 w trakcie podłączania do urządzenia przewodu USB. Mikrokontroler uruchomi się w trybie bootloadera i za pomocą aplikacji FlashMagic możliwe będzie zaprogramowanie jego pamięci.
KS
- R1: 3,3 Ω
- R2, R3, R9...R14: 47 Ω
- R4...R8: 3,3 kΩ
- C1, C2, C4, C5, C7, C8, C10…C12: 100 nF (SMD 1206)
- C3, C6: 220 µF/6,3 V (SMD „C”)
- C9: 10 pF (SMD 1206)
- D1, D2: MBR0540
- T1: BC856
- IC1: FT230XS
- IC2: MCP1703-3,3V
- IC3: PCF8563
- IC4: LPC824
- IC5: TFT RGB 160×128 (KAMAMI: modTFT18)
- L1: 1...10 µH (SMD 1206)
- X1: 32768 kHz (rezonator kwarcowy)
- BAT: CR2032 do wlutowania, pionowa
- SW1...SW3: przyciski miniaturowe SMD, ok. 13 mm
- CON1: złącze micro USB
- CON2: gniazdo goldpin 1×6
- CON3, CON3’: gniazdo goldpin 1×3, 1×4
- IC5: gniazda goldpin 1×8 i 1×4
- DHT11: moduł z czujnikiem DHT11 (AVT: ARD-8608)
- BMP280: moduł z czujnikiem BMP280 (AVT: ARD-7206)