Spisu treści:

STONE LCD z inteligentnym domem: 5 kroków
STONE LCD z inteligentnym domem: 5 kroków

Wideo: STONE LCD z inteligentnym domem: 5 kroków

Wideo: STONE LCD z inteligentnym domem: 5 kroków
Wideo: Sterowniki do ogrzewania podłogowego montaż krok po kroku. Inteligentny dom. Smart home. 2024, Lipiec
Anonim
KAMIEŃ LCD z inteligentnym domem
KAMIEŃ LCD z inteligentnym domem

Dzisiaj mam wyświetlacz napędu portu szeregowego STONE, który może komunikować się przez port szeregowy MCU, a projekt logiki interfejsu użytkownika tego wyświetlacza można zaprojektować bezpośrednio za pomocą oprogramowania VGUS dostarczonego na oficjalnej stronie STONE, co jest dla nas bardzo wygodne. Planuję więc wykorzystać go do wykonania prostego sterownika urządzeń, który obejmuje sterowanie różnymi światłami (salon, kuchnia, pokój dziecięcy, łazienka). Jednocześnie można zbierać temperaturę wewnętrzną i zewnętrzną, wilgotność i jakość powietrza. To jest tylko proste demo i możesz przeprowadzić wtórny rozwój za pomocą dostarczonego przeze mnie kodu. Podstawowy samouczek dotyczący ekranu STONE można znaleźć na stronie:

Na stronie znajdują się różnorodne informacje dotyczące modelu, użytkownika i dokumentacji projektowej, a także filmy instruktażowe. Nie będę tu wdawał się zbytnio w szczegóły.

Krok 1: Projektowanie interfejsu użytkownika

Projektowanie interfejsu użytkownika
Projektowanie interfejsu użytkownika
Projektowanie interfejsu użytkownika
Projektowanie interfejsu użytkownika
Projektowanie interfejsu użytkownika
Projektowanie interfejsu użytkownika
Projektowanie interfejsu użytkownika
Projektowanie interfejsu użytkownika

Photoshop

Zaprojektowałem następujące dwie strony interfejsu użytkownika z Photoshopem:

Ten projekt ma w sumie dwie powyższe strony. „Światło” i „Czujnik” w prawym górnym rogu to przyciski przełączników tych dwóch stron.

Na stronie „Światło” możesz sterować wszystkimi rodzajami oświetlenia w swoim domu. Na stronie "Czujnik" możesz sprawdzić wartości wykryte przez różne czujniki.

Po zaprojektowaniu powyższych dwóch stron, możemy przeprowadzić projekt logiki przycisków za pomocą oprogramowania STONE TOOL dostępnego na oficjalnej stronie internetowej STONE.

Warto zauważyć, że źródłem zegara używanym do wyświetlania czasu jest tutaj źródło zegara ekranu wyświetlacza, a nie źródło zegara MCU.

Efekt przełączania stron TAB

W oprogramowaniu STONE TOOL nie znaleziono żadnego komponentu do przełączania stron TAB, więc pomyślałem o innej metodzie osiągnięcia efektu przełączania stron TAB.

Dzięki obserwacji, którą dostarczam, można znaleźć dwa obrazy UI, że dwa powyższe obrazy to tekst „Światło” i „Czujnik”, różnica polega na tym, że ich rozmiar w pikselach jest inny, więc musimy tylko umieścić pozycję dwóch pikseli na ten sam tekst, a następnie przez lewy górny róg godziny i daty w celach informacyjnych, możesz osiągnąć TAB, aby przełączyć efekt.

Logika przycisku

Jako przykład weźmy przycisk „Pokój dzienny”. Kiedy użytkownik naciśnie ten przycisk, ekran wyświetlacza portu szeregowego STONE wyśle odpowiednie instrukcje protokołu przez port szeregowy. Po otrzymaniu tej instrukcji MCU użytkownika przeanalizuje protokół, aby kontrolować stan przełączania świateł połączonych z MCU.

Akwizycja czujnika

Weźmy na przykład „jakość powietrza”: jeśli chcemy uzyskać jakość powietrza w pomieszczeniu, musimy mieć MCU do zbierania jakości powietrza, czujnik jakości powietrza, gdy dane liczbowe MCU są zbierane za pomocą algorytmu porównującego zalety i wady jakości powietrza, a następnie MCU wysyłane przez port szeregowy w celu wyświetlenia obszaru przechowywania „Dobry” lub „Zły”, aby zmienić zawartość wyświetlacza „Zmienna tekstowa0”, a następnie użytkownik może intuicyjnie zobaczyć zalety kontroli jakości. Zostały one wyjaśnione w dalszej części kodu MCU.

Krok 2: Komunikacja MCU

Komunikacja MCU
Komunikacja MCU
Komunikacja MCU
Komunikacja MCU
Komunikacja MCU
Komunikacja MCU
Komunikacja MCU
Komunikacja MCU

STM32 to MCU, który wszyscy znają i jest to powszechny model MCU na arenie międzynarodowej. Dlatego konkretny model MCU STM32, którego użyłem w tym projekcie to STM32F103RCT6.

Istnieje wiele serii STM32, które mogą sprostać różnym wymaganiom rynku. Jądro można podzielić na cortex-m0, M3, M4 i M7, a każde jądro można podzielić na główne, o wysokiej wydajności i niskim zużyciu energii.

Czysto z perspektywy nauki można wybrać F1 i F4, F1 reprezentuje typ podstawowy, oparty na jądrze cortex-m3, główna częstotliwość to 72MHZ, F4 reprezentuje wysoką wydajność, oparty na jądrze cortex-m4, główny częstotliwość wynosi 180M.

Jeśli chodzi o F1, F4 (seria 429 i wyższe), oprócz różnych jąder i poprawy częstotliwości głównej, oczywistą cechą aktualizacji jest kontroler LCD i interfejs kamery, obsługa SDRAM-u, ta różnica będzie traktowana priorytetowo przy wyborze projektów. Jednak z punktu widzenia nauczania uniwersyteckiego i początkowego uczenia się użytkowników seria F1 jest nadal pierwszym wyborem. Obecnie STM32 serii F1 ma największą ilość materiałów i produktów na rynku.

O instalacji środowiska programistycznego STM32 SCM i metodzie pobierania programu nie będę robił wstępu.

Inicjalizacja GPIO

W tym projekcie użyliśmy łącznie 4 GPIO, z których jednym jest pin wyjściowy PWM. Przyjrzyjmy się najpierw inicjalizacji trzech zwykłych portów GPIO:

Ta funkcja inicjalizuje PB0\PB1\PB2 STM32F103C8 jako pin wyjściowy i wywołuje go z funkcji głównej. Po inicjalizacji musimy mieć logikę do sterowania stanem wyjścia, wysokim i niskim poziomem tego GPIO, więc napisałem funkcję jak poniżej:

Jest to funkcja, którą można intuicyjnie zrozumieć po nazwie zmiennej.

Inicjalizacja portu szeregowego

Część inicjująca portu szeregowego znajduje się w uart.c:

Następnie wywołaj uart_init w funkcji main, aby zainicjować szybkość transmisji portu szeregowego 115200. Piny używają PA9/PA10

Inicjalizacja PWM

Konkretne kroki:

1. Ustaw zegar RCC;

2. Ustaw zegar GPIO; tryb GPIO powinien być ustawiony na GPIO_Model_AF_PP lub na funkcję GPIO_PinRemapConfig(), jeśli wymagana jest zmiana mapowania pinów.

3. Ustaw odpowiednie rejestry timera TIMx;

4. Ustaw rejestr związany z PWM timera TIMx;

A. Ustaw tryb PWM

B. Ustaw cykl pracy (obliczanie wzoru)

C. Ustaw polaryzację porównania wyjścia (wcześniej wprowadzona)

D. Co najważniejsze, włącz stan wyjściowy TIMx i włącz wyjście PWM TIMx; Po zakończeniu odpowiednich ustawień licznik czasu TIMx jest włączany przez TIMx_Cmd (), aby uzyskać wyjście PWM. Wywołaj to TIM3_PWM_Init z funkcji main.

Krok 3: Pisanie kodu logicznego

Zapisywanie kodu logicznego
Zapisywanie kodu logicznego
Zapisywanie kodu logicznego
Zapisywanie kodu logicznego
Zapisywanie kodu logicznego
Zapisywanie kodu logicznego

Wyświetl definicję adresu komponentu

Elementy wyświetlacza mają osobne adresy, a tutaj napisałem je wszystkie jako definicje makr: Odbiór danych szeregowych

Patrząc na informacje o wyświetlaczu STONE widać, że po naciśnięciu przycisku port szeregowy na wyświetlaczu wysyła protokoły w odpowiednim formacie, które MCU użytkownika może odbierać i analizować. Po naciśnięciu przycisku port szeregowy na wyświetlaczu wysyła dziewięć bajtów danych, w tym dane użytkownika. Odbiór danych szeregowych jest zapisywany w Handler: Odebrane dane są przechowywane w tablicy "USART_RX_BUF". W tym projekcie długość odbioru jest stała. Gdy długość odbioru jest większa niż 9 bajtów, oceniany jest koniec odbioru.

Kontroluj stan przełączania lampy!

W głównej funkcji napisałem jakiś kod logiczny do sterowania stanem przełącznika lampy: Jak widzimy, kod najpierw określa, czy dane portu szeregowego są odbierane, a kiedy dane portu szeregowego są odbierane, określa, który przycisk użytkownik naciśnięcia na ekranie wyświetlacza. Różne przyciski na wyświetlaczu mają różne adresy, które można zobaczyć w oprogramowaniu STONE TOOL: Gdy użytkownik naciśnie przycisk „Pokój dzienny”, czwarty i piąty bit danych wysłany przez port szeregowy ekranu wyświetlacza to adres przycisku. Ponieważ czwarty bit ze wszystkich tutaj ustawionych przycisków to 0x00, możemy ocenić, który przycisk naciśnie użytkownik, bezpośrednio oceniając dane piątego bitu. Po uzyskaniu przycisku wciśniętego przez użytkownika, musimy ocenić dane użytkownika otrzymane po naciśnięciu przycisku, co stanowi ósmą cyfrę danych przesyłanych z ekranu wyświetlacza. Dlatego wykonujemy następującą kontrolę: wpisujemy parametr adresu przycisku i dane użytkownika do funkcji „Light_Contral”, aby sterować stanem włączenia-wyłączenia światła. Jednostka funkcji Light_Contral jest następująca: Jak widać, jeśli adres przycisku to „Pokój dzienny”, a dane użytkownika to „LightOn”, to pin PB0 MCU jest ustawiony na wyjście wysokiego poziomu, a światło jest włączone. Pozostałe trzy przyciski są podobne, ale nie będę tutaj kontynuował.

Wyjście PWM

W zaprojektowanym przeze mnie UI znajduje się suwakowy regulator, który służy do sterowania jasnością światła „Pokoju Dziecka”. MCU jest realizowany przez PWM. Pin wyjściowy PWM to PB5. Kod jest następujący: Przesuwny regulator jest ustawiony na minimalną wartość 0x00 i maksymalną wartość 0x64. Podczas przesuwania port szeregowy ekranu wyświetlacza wyśle również odpowiednie adresy i dane, a następnie ustawi współczynnik wypełnienia wyjścia PWM, wywołując następującą funkcję:

Krok 4: Akwizycja czujnika

Akwizycja czujnika
Akwizycja czujnika
Akwizycja czujnika
Akwizycja czujnika
Akwizycja czujnika
Akwizycja czujnika

Na stronie „Sensor” ekranu wyświetlacza znajdują się cztery dane czujnika.

Dane mają również adres przechowywania na wyświetlaczu i możemy zmienić rzeczywistą zawartość, po prostu zapisując dane pod te adresy przez port szeregowy MCU.

Tutaj wykonałem prostą implementację kodu:

Dane na wyświetlaczu są aktualizowane co 5 sekund, a napisałem tylko proste demo odpowiedniej funkcji zbierania czujników, ponieważ nie mam tych czujników w ręku.

W rzeczywistym rozwoju projektu czujniki te mogą być danymi zebranymi przez ADC lub danymi zebranymi przez interfejsy komunikacyjne IIC, UART i SPI. Wszystko, co musisz zrobić, to zapisać te dane do odpowiedniej funkcji jako wartość zwracaną.

Krok 5: rzeczywisty efekt działania

Zalecana: