Spisu treści:
- Krok 1: Pomysł
- Krok 2: Tworzenie kontrolera
- Krok 3: Dostosowywanie kontrolera
- Krok 4: Narzędzia ułatwiające krawiectwo
Wideo: Falling in Stm32: Pilot do Home Media Center: 4 kroki (ze zdjęciami)
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:31
Jest to kompletny prototyp pilota do domowego centrum multimedialnego opartego na mikrokontrolerze smt32, stm32f103c8t6, znanym jako płytka 'bluepill'. Załóżmy, że używasz komputera do domowego centrum multimedialnego. Jest to bardzo elastyczne rozwiązanie, które pozwala umieścić ogromną bibliotekę wideo na wewnętrznym dysku twardym lub odtwarzać wideo z sieci, na przykład youtube lub tak, nie masz żadnych problemów z kodekami lub odtwarzaniem wideo w ogóle, ponieważ jest bardzo łatwa aktualizacja odtwarzacza oprogramowania w dowolnym momencie. Główną wadą tego rozwiązania jest to, że do sterowania odtwarzaniem należy używać myszy i klawiatury. Pilot na podczerwień jest do tego wygodnym trybem.
W tym artykule pokażę jak stworzyć własny pilot przy użyciu płytki chipowej bluepill.
Krok 1: Pomysł
Główna idea jest bardzo prosta: płytka bluepill ma wbudowany port USB i może działać jako klawiatura USB HID. Jeśli podłączymy odbiornik IR do tablicy, może to przetłumaczyć polecenie z pilota IR na „naciśnięcie klawisza” wirtualnej klawiatury. Nie są wymagane żadne dodatkowe sterowniki!
W otaczającym nas świecie istnieje wiele protokołów IR. Każdy telewizor dostawcy VCS ma swój własny protokół IR. Ale wszystkie te protokoły mają jedną wspólną cechę: używają modulacji impulsowej do kodowania sygnału. Zwykle jest jakaś preambuła: długi impuls przed pierwszym bitem w pakiecie. Następnie sterowanie IR przesyła cały pakiet z 0 i 1 i kończy transmisję długim impulsem finish. Aby zdekodować bit, musimy zmierzyć długość impulsu i długość piku. Zwykle długość piku logicznego 0 i logicznego 1 jest taka sama, różnica polega na całkowitej długości impulsu.
Mikrokontrolery stm32 mają wbudowaną funkcję przechwytywania sygnału PWM. Prawie każdy zegar mikrokontrolera można umieścić w „przechwytywaniu sygnału PWM więcej”, gdy zmienne kanału zegara zapisują całkowitą długość impulsu i jego szczytową długość. Tutaj muszę podkreślić drobny szczegół: gdy odbiornik IR złapie sygnał, napięcie na jego pinie działającym wynosi 0, a w stanie spoczynku napięcie na pinie roboczym wynosi 5 lub 3,3 V w zależności od napięcia zasilania odbiornika IR. Czyli odbiornik „odwraca” sygnał.
Dzięki trybowi przechwytywania PWM mikrokontroler stm32 można łatwo przekształcić w zdalny tłumacz IR z pilota IR na kody klawiatury. Następnie możesz uruchomić swoje ulubione oprogramowanie do wizualizacji, na przykład Kodi z VLC, aby odtworzyć swój ulubiony film w centrum multimedialnym.
Krok 2: Tworzenie kontrolera
Do zaprogramowania mikrokontrolera stm32 polecam darmowe oprogramowanie firmy STM: system workbench (aka ac6) oraz narzędzie do konfiguracji płytki cubeMX. Do wgrania oprogramowania do mikrokontrolera można użyć klonu chipa adaptera ST-Link V2. Pliki projektu systemu workbench dołączone do tego kroku, plik F1-IR_remote.zip.
Narzędzie do konfiguracji płytki upraszcza proces wstępnej konfiguracji sprzętowej naszego mikrokontrolera.
Jeśli korzystasz z systemowego narzędzia workbench, możesz po prostu użyć pobranego projektu. Ale jeśli chcesz zbadać projekt bardziej szczegółowo, możesz utworzyć konfigurację płytki w cubeMX:
- Utwórz nowy projekt i wybierz tablicę stm32f103c8
- Wybierz „Rezonator kryształowy/ceramiczny” dla pozycji „Zegar wysokiej prędkości (HSE)” w menu RCC.
- Wybierz „Serial Wire” dla pozycji „Debug” w menu SYS.
-
Skonfiguruj timer #2 (menu TIM2) w trybie przechwytywania PWM, jak pokazano na rysunku:
- Tryb Slave -> Tryb resetowania
- Źródło wyzwalania -> TI1FP1
- Źródło zegara -> Zegar wewnętrzny
- Kanał1 -> tryb bezpośredniego przechwytywania wejścia
- Ustaw pole wyboru „Urządzenie (FS) w menu USB”
- Wybierz element menu rozwijanego „Human Interface Device Class (HID)” w pozycji „Class of FS IP” w menu USB_DEVICE
- W panelu konfiguracji zegara upewnij się, że do zegara nr 2 podałeś 72 MHz, ponieważ potrzebujemy licznika zegara co 1 mks.
- W panelu konfiguracyjnym skonfiguruj urządzenie USB, jak pokazano na rysunku
-
W panelu konfiguracyjnym skonfiguruj timer#2 w następujący sposób:
- Prescaller - 71 (od 0 do 71) - 1 mikrosekunda tiku!
- Tryb licznika - w górę
- Okres licznika - 39999 (powinniśmy być w stanie zmierzyć długi impuls)
- Input capture channel1 - Falling Edge (pamiętaj, że sygnał z odbiornika IR jest odwrócony)
W trybie przechwytywania PWM zegar nr 2 działałby następująco:
Po wykryciu spadającego frontu licznik timera zostanie zapisany w rejestrze kanału 1, a licznik timera zostanie zresetowany na 0. Następnie timer będzie kontynuował zliczanie w górę. Dzięki temu możemy z łatwością zmierzyć długość impulsu w mikrosekundach.
Domyślnie klasa STM32 USB HID symuluje mysz USB. Tutaj znajdziesz instrukcję, jak zmienić kontroler w klawiaturę.
Krok 3: Dostosowywanie kontrolera
Projekt współpracuje z pilotem Panasonic i centrum medialnym Kodi. Aby dostosować projekt do własnego kontrolera, należy dodać tablicę kodów dla pilota, tak jak w przypadku pilota Panasonic (panasonicCode) do nagłówka Inc/code.h. Jak widać, każde polecenie ma unikalny identyfikator (w wyliczeniu IRcommand). W projekcie są rozpoznawane 24 komendy (0-23). Polecenia są sortowane według trafności.
typedef wyliczenia {IR_play = 0 IR_stop, IR_pause, IR_forward, IR_rewind, IR_last_channel, IR_OSD, IR_prevous_menu, IR_left, IR_right, IR_up, IR_down, IR_enter, IR_chapter_next, IR_chapter_previous, IR_info, IR_subtitle, IR_nxt_subtitle, IR_pos_subtitle, IR_teletext, IR_zoom, IR_mark_watched, IR_playlist, IR_power, IR_unknown } Polecenie IR;
const uint16_t kbrd_kodi = {HID_KEY_P, HID_KEY_X, HID_KEY_SPACE, HID_KEY_F, HID_KEY_R, HID_KEY_0, HID_KEY_M, HID_KEY_BACKSPACE, HID_KEY_LEFT, HID_KEY_RIGHT, HID_KEY_UP, HID_KEY_DOWN, HID_KEY_ENTER, HID_KEY_DOT, HID_KEY_COMMA, HID_KEY_S, HID_KEY_I, HID_KEY_T, HID_KEY_L (uint16_t (HID_LEFT_CTRL) << 8)| HID_KEY_T, HID_KEY_V, HID_KEY_Z, HID_KEY_W, HID_KEY_C };
const uint32_t panasonicCode = {0xd00505d, 0xd00000d, 0xd00606d, 0xd00525f, 0xd00929f, 0x100eced, 0xd00101d, 0x1002b2a, 0x1007273, 0x100f2f3, 0x1005253, 0x100d2d3, 0x1009293, 0x1002c2d, 0x100acad, 0x1009c9d, 0x1008e8f, 0x1004e4f, 0x100cecf, 0x1000e0f, 0x180c041, 0x1801091, 0x180a021, 0xd00bcb1 };
Następnie należy dodać własny pilot w metodzie init() w IR.cpp z funkcją addRemote(). Argumentami funkcji są:
- Liczba bitów w pakiecie
- Długość nagłówka pakietu
- „Zerowa” długość bitu
- „Jeden” bit długości
- Wskaźnik do tablicy kodów
- Liczba elementów tablicy
void IRcmd::init(void) { addRemote(48, 5252, 902, 1755, panasonicCode, sizeof(panasonicCode)/sizeof(uint32_t));
}
Plik zawiera również kolejną tabelę do konwersji poleceń na kody klawiatury. Tablica kbdr_kodi zawiera kody kluczy dla centrum multimedialnego Kodi. Możesz dodać kolejną macierz do własnego programu centrum multimedialnego, na przykład odtwarzacz vlc. Jeśli chcesz dodać kolejną tabelę aplikacji centrum multimedialnego, utworzysz kolejny obiekt KBD i zainicjujesz go w main.cpp.
Krok 4: Narzędzia ułatwiające krawiectwo
W repozytorium są jeszcze dwa inne projekty
- Badanie IR - pozwala zmierzyć parametry czasowe sygnałów twojego pilota.
- IR_capture - umożliwia przechwytywanie kodów HEX pilota.
Wystarczy załadować projekt IR i podłączyć port USB płytki bluepill do komputera. Następnie uruchom dowolny program terminalowy na urządzeniu wirtualnego portu szeregowego, odpowiadający płycie stm32. Podczas naciskania przycisków na pilocie program mierzy odebrane impulsy i drukuje średnie czasy dla różnych impulsów. Powinno to uprościć wykrywanie długości impulsu dla nagłówka pakietu, zero i jeden bit.
W projekcie badawczym IR zegar #2 pracuje w trybie przechwytywania PWM z dwoma kanałami: kanał pierwszy przechwytuje całą długość impulsu, a kanał 2 przechwytuje długość szczytu. Po wykryciu opadającego zbocza sygnału wartość timera zapisywana jest w rejestrze kanału pierwszego, a timer resetuje się na 0. Po wykryciu narastającego zbocza sygnału licznik timera zapisywany jest w rejestrze kanału 2.
Aby przechwycić kody przycisków własnego pilota, można użyć projektu IR_capture. W pliku main.c należy dodać zdalną definicję taką jak ta:
IRcode panasonic = {.hdr = 5252,.bits = 48,.zero = 902,.one = 1755,.dev = 60 };
- .hdr - długość nagłówka w mks
- .bits - ilość bitów w pakiecie
- .zero - długość bitu zerowego
- .one - długość jeden bit
- .dev - odchylenie (możliwa do zaakceptowania różnica czasów). Zwykle jest to 1/10 najmniejszej długości.
Następnie dodaj pilota do listy obsługiwanych pilotów:
const IRcode* remote[2] = {&panasonic, &pioneer};
Zalecana:
Magiczny przycisk 4k: 20 USD BMPCC 4k (lub 6k) Bezprzewodowy pilot zdalnego sterowania: 4 kroki (ze zdjęciami)
Magiczny przycisk 4k: bezprzewodowy pilot zdalnego sterowania BMPCC 4k (lub 6k) za 20 USD: Wiele osób prosiło mnie o udostępnienie szczegółów dotyczących mojego bezprzewodowego kontrolera do BMPCC4k. Większość pytań dotyczyła sterowania bluetooth, więc wspomnę kilka szczegółów na ten temat. Zakładam, że znasz środowisko Arduino ESP32
Kontynuacja: Advanced Media Center z Odroid N2 i Kodi (obsługa 4k i HEVC): 3 kroki
Kontynuacja: Advanced Media Center z Odroid N2 i Kodi (obsługa 4k i HEVC): Ten artykuł jest kontynuacją mojego poprzedniego, całkiem udanego artykułu o budowaniu wszechstronnego centrum multimedialnego, opartego początkowo na bardzo popularnym Raspberry PI, ale później, ze względu na brak wyjścia zgodnego z HEVC, H.265 i HDMI 2.2, został przełączony
Raspberry PI Media Center, OSMC DAC/AMP: 3 kroki
Raspberry PI Media Center, OSMC DAC/AMP: weź Raspberry pi, dodaj DAC i wzmacniacz, a otrzymasz bardzo ładne centrum multimedialne za niewielkie pieniądze. Po pierwsze muszę powiedzieć „DUŻY”; dziękuję ludziom z GearBest za wysłanie mi tego przedmiotu do wypróbowania. A jeśli chcesz go zdobyć
1981 Przenośny magnetowid Raspberry PI Media Center: 12 kroków (ze zdjęciami)
1981 Przenośny magnetowid Raspberry PI Media Center: Jest to przenośny magnetowid Sharp VC-2300H z początku lat 80., który przekonwertowałem - teraz ma Raspberry Pi w sercu i działa z doskonałym oprogramowaniem Raspbmc dla centrum multimedialnego. Inne ulepszenia obejmują odlotowy zegar oparty na arduino i „taśmę” z drutu EL
Arduino UNO CO-pilot (Auto-pilot): 6 kroków
Arduino UNO a CO-pilot (Autopilot): Witam wszystkich, zamieszczam mały system autopilota dla samolotu RC ze stałymi skrzydłami (Sky surfer V3), ponieważ sky surfer v3 jest szybowcem z napędem, możemy używać tego systemu autopilota podczas ślizga się, a nawet gdy jest zasilany. Przed rozpoczęciem mojego pomysłu na auto