Innholdsfortegnelse:

Falling in Stm32: Remote Control for Home Media Center: 4 Steps (with Pictures)
Falling in Stm32: Remote Control for Home Media Center: 4 Steps (with Pictures)

Video: Falling in Stm32: Remote Control for Home Media Center: 4 Steps (with Pictures)

Video: Falling in Stm32: Remote Control for Home Media Center: 4 Steps (with Pictures)
Video: When Student use phone in class #shortsyoutube #shorts #students #comedy #jennyslectures 2024, Juli
Anonim
Falling in Stm32: Remote Control for Home Media Center
Falling in Stm32: Remote Control for Home Media Center

Dette er en komplett prototype for fjernkontroll til hjemmemediasenter basert på smt32 mikrokontroller, stm32f103c8t6 kjent som "bluepill" -kort. Anta at du bruker en PC for hjemmemediasenter. Det er en veldig fleksibel løsning, som lar deg plassere et stort videobibliotek på den interne harddisken, eller du kan spille av video fra nettverket, for eksempel youtube eller så, du har ingen problemer med kodeker eller videoavspilling i det hele tatt, fordi det er veldig enkelt å oppdatere programvarespilleren når som helst. Den største ulempen med denne løsningen er at du bør bruke mus og tastatur for å kontrollere avspillingen. IR -fjernkontrollen er mye praktisk for dette.

I denne artikkelen vil jeg vise hvordan du lager din egen fjernkontroll ved hjelp av chip bluepill board.

Trinn 1: Ideen

Ideen
Ideen
Ideen
Ideen

Hovedideen er veldig enkel: bluepill -kortet har innebygd usb -port og kan fungere som USB HID -tastatur. Hvis vi kobler IR -mottakeren til brettet, kan det oversette kommandoen fra IR -fjernkontrollen til 'tastetrykk' på det virtuelle tastaturet. Ingen ekstra drivere er nødvendig!

Det er mange IR -protokoller i verden rundt oss. Hver TV til VCS -leverandøren har sin egen IR -protokoll. Men alle disse protokollene har noe felles: de bruker pulsmodulasjon for å kode signalet. Vanligvis er det en innledning: lang impuls før den første biten i pakken. Deretter sender IR -kontroll hele pakken med 0 og 1 og fullfører overføringen med lang puls. For å dekode biten må vi måle lengdepulsen og lengden på toppen. Vanligvis er topplengden til logikk 0 og logikk 1 den samme, forskjellen er i hele pulslengden.

Stm32 mikrokontrollere har innebygd funksjon for å fange PWM -signal. Nesten hver tidtaker på mikrokontrolleren kan settes inn i "PWM -signalfangst mer" når kanalvariablene til timeren lagrer pulslengden og topplengden. Her må jeg markere den lille detaljen: Når IR -mottakeren fanger signalet, blir spenningen på arbeidspinnen 0 og i hviletilstand er spenningen i arbeidspinnen 5 eller 3,3 volt avhengig av IR -mottakerens forsyningsspenning. Det vil si at mottakeren 'inverterer' signalet.

Med PWM -fangstmodus kan stm32 -mikrokontrolleren enkelt gjøres om til en IR -fjernoversetter fra IR -fjernkontroll til tastaturkodene. Deretter kan du starte din favoritt visualiseringsprogramvare, for eksempel Kodi fra VLC for å spille av favorittfilmen din på mediesenteret.

Trinn 2: Opprette kontrolleren

Opprette kontrolleren
Opprette kontrolleren
Opprette kontrolleren
Opprette kontrolleren
Opprette kontrolleren
Opprette kontrolleren
Opprette kontrolleren
Opprette kontrolleren

For å programmere stm32 mikrokontroller vil jeg anbefale gratis programvare fra STM: system arbeidsbenk (aka ac6) og brettkonfigurasjonsverktøyet cubeMX. For å laste opp programvaren til mikrokontrolleren kan chipklonen til ST-Link V2-adapteren brukes. Systemarbeidsbenkprosjektfilene som er vedlagt dette trinnet, F1-IR_remote.zip-filen.

Kortkonfigurasjonsverktøyet forenkler prosessen med den første maskinvarekonfigurasjonen til mikrokontrolleren vår.

Hvis du bruker systembenkverktøyet, kan du bare bruke det nedlastede prosjektet. Men hvis du ønsker å undersøke prosjektet i flere detaljer, kan du opprette brettkonfigurasjonen i cubeMX:

  • Opprett nytt prosjekt og velg brett stm32f103c8
  • Velg 'Crystal/Ceramic Resonator' for elementet 'High Speed Clock (HSE)' i RCC -menyen.
  • Velg 'Serial Wire' for 'Debug' -elementet i SYS -menyen.
  • Konfigurer tidtaker 2 (TIM2 -meny) i PWM -fangstmodus som vist på bildet:

    • Slave Mode -> Reset Mode
    • Utløserkilde -> TI1FP1
    • Klokkekilde -> Intern klokke
    • Channel1 -> Input Capture direkte modus
  • Sett av i avmerkingsboksen 'Enhet (FS) i USB -menyen
  • Velg rullegardinmenyelementet 'Human Interface Device Class (HID)' i elementet 'Class of FS IP' i USB_DEVICE-menyen
  • I klokkekonfigurasjonspanelet må du sørge for å gi 72 MHz til tidtaker 2 fordi vi trenger tidtelling for hver 1 miks.
  • I konfigurasjonspanelet konfigurerer du USB -enheten som vist på bildet
  • I konfigurasjonspanelet konfigurerer du timer 2 som følger:

    • Prescaller - 71 (fra 0 til 71) - 1 mikro sekunders kryss!
    • Tellermodus - opp
    • Tellerperiode - 39999 (vi bør kunne måle den lange pulsen)
    • Input capture channel1 - Falling Edge (husk at signalet fra IR -mottakeren er invertert)

I PWM -fangstmodus fungerer timeren#2 som følger:

Når den fallende fronten ble oppdaget, ville tidtelleren blitt lagret i kanal1 -registeret og tidtelleren ble tilbakestilt med 0. Deretter fortsatte timeren å telle opp retningen. Så vi kan enkelt måle pulslengden i mikrosekunder.

Som standard simulerer STM32 USB HID -klassen USB -musen. Her finner du instruksjonene for å gjøre kontrolleren til tastatur.

Trinn 3: Skreddersy kontrolleren

Prosjektet fungerer med Panasonic fjernkontroll og Kodi mediesenter. For å skreddersy prosjektet for din egen kontroller, bør du legge til kodearrayet for fjernkontrollen som jeg gjorde for panasonic fjernkontroll (panasonicCode) til Inc/code.h -overskriften. Som du kan se, har hver kommando en unik ID (i IRcommmand enum). Det er 24 kommandoer (0-23) som gjenkjennes av prosjektet. Kommandoen er sortert etter relevans.

typedef enum {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} IRkommando;

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};

Deretter bør du legge til din egen fjernkontroll i init () -metoden i IR.cpp med addRemote () -funksjonen. Funksjonsargumentene er:

  • Antall biter i pakken
  • Pakken Header lengde
  • 'Null' bitlengde
  • "En" bitlengde
  • Peker til kodesettet
  • Nummerelementer i matrisen

void IRcmd:: init (void) {addRemote (48, 5252, 902, 1755, panasonicCode, sizeof (panasonicCode)/sizeof (uint32_t));

}

Filen inneholder også en annen tabell for å konvertere kommandoer til tastaturkoder. Kbdr_kodi -matrisen inneholder nøkkelkodene for Kodi mediasenter. Du kan legge til en annen matrise for ditt eget mediesenterprogram, for eksempel vlc -spiller. Hvis du vil legge til en annen mediesenter -applikasjonstabell, vil du opprette et annet objekt KBD og initialisere det i main.cpp.

Trinn 4: Verktøy for å forenkle skreddersøm

Verktøy for å forenkle skreddersy
Verktøy for å forenkle skreddersy
Verktøy for å forenkle skreddersy
Verktøy for å forenkle skreddersy

Det er to andre prosjekter i depotet

  • IR -undersøkelse - gjør det mulig å måle tidsparametere for signalene til fjernkontrollen.
  • IR_capture - gjør det mulig å fange HEX -kodene på fjernkontrollen.

Bare last IR -undersøkelsesprosjektet og koble USB -porten på bluepill -kortet til datamaskinen. Start deretter et hvilket som helst terminalprogram på den virtuelle serielle portenheten, som tilsvarer stm32 -kortet. Mens du trykker på knappene på fjernkontrollen, vil programmet måle de mottatte pulser og skrive ut gjennomsnittstiden for forskjellige pulser. Det bør forenkle å oppdage pulslengden for pakkehodet, null og en bit.

I IR -undersøkelsesprosjektet jobber timeren #2 i PWM -fangstmodus med to kanaler: kanal én registrerer hele pulslengden og kanal2 fanger topplengden. Når den fallende signalkanten ble oppdaget, ble tidsverdien lagret i kanal 1 -registeret og timeren ble tilbakestilt med 0. Når signalets stigende kant ble oppdaget, ble timertelleren lagret i kanal 2 -registeret.

For å fange knappekodene på din egen fjernkontroll, kan IR_capture -prosjektet brukes. I main.c -filen bør du legge til den eksterne definisjonen som denne:

IRcode panasonic = {.hdr = 5252,.bits = 48,.zero = 902,.one = 1755,.dev = 60};

  • .hdr - topplengden i mks
  • .bits - antall biter i pakken
  • .zero - lengden på nullbiten
  • .one - lengden en bit
  • .dev - avviket (forskjellen i tider som kan aksepteres). Vanligvis er det 1/10 av den minste lengden.

Legg deretter til fjernkontrollen i listen over støttede fjernkontroller:

const IRcode* remote [2] = {& panasonic, & pioneer};

Anbefalt: