Indholdsfortegnelse:

Falling in Stm32: Fjernbetjening til Home Media Center: 4 trin (med billeder)
Falling in Stm32: Fjernbetjening til Home Media Center: 4 trin (med billeder)

Video: Falling in Stm32: Fjernbetjening til Home Media Center: 4 trin (med billeder)

Video: Falling in Stm32: Fjernbetjening til Home Media Center: 4 trin (med billeder)
Video: wifi пульт для IR и RF кодов Broadlink RM4C Pro, работа в Home Assistant - управляем кондиционером 2024, November
Anonim
Falling in Stm32: Remote Control for Home Media Center
Falling in Stm32: Remote Control for Home Media Center

Dette er en komplet prototype til fjernbetjening til hjemmemediacenter baseret på smt32 mikrocontroller, stm32f103c8t6 kendt som 'bluepill' -kort. Antag, at du bruger en pc til hjemme mediecenter. Det er en meget fleksibel løsning, som giver dig mulighed for at placere et enormt videobibliotek på den interne harddisk, eller du kan afspille video fra netværket, f.eks. Youtube eller deromkring, du har slet ingen problemer med codecs eller videoafspilning, fordi det er meget let at opdatere softwareafspilleren når som helst. Den største ulempe ved denne løsning er, at du skal bruge mus og tastatur til at styre din afspilning. IR -fjernbetjeningen er meget praktisk til dette.

I denne artikel vil jeg vise, hvordan du opretter din egen fjernbetjening ved hjælp af chip bluepill board.

Trin 1: Idéen

Ideen
Ideen
Ideen
Ideen

Hovedideen er meget enkel: bluepill -kortet har indlejret usb -port og kan fungere som USB HID -tastatur. Hvis vi tilslutter IR -modtager til kortet, kan det oversætte kommandoen fra din IR -fjernbetjening til 'tastetryk' på det virtuelle tastatur. Der kræves ingen ekstra drivere!

Der er mange IR -protokoller i verden omkring os. Hvert tv hos VCS -leverandører har sin egen IR -protokol. Men alle disse protokoller har en ting fælles: de bruger pulsmodulation til at kode signalet. Normalt er der en indledning: lang impuls før den første bit i pakken. Derefter sender IR -kontrol hele pakken med 0 og 1 og afslutter transmissionen med finish lang puls. For at afkode bit skal vi måle længdepulsen og længden af toppen. Normalt er spidslængden for logik 0 og logik 1 den samme, forskellen er i hele pulslængden.

Stm32 -mikrokontrollerne har indlejret funktion til at fange PWM -signal. Næsten hver timer på mikrokontrolleren kan sættes i 'PWM signal capture more', når kanalvariablerne i timeren gemmer den samlede længde af pulsen og dens maksimal længde. Her skal jeg fremhæve den lille detalje: Når IR -modtageren fanger signalet, bliver spændingen på dens arbejdsstift 0 og i inaktiv tilstand er spændingen i arbejdsstiften en 5 eller 3,3 volt afhængigt af IR -modtagerens forsyningsspænding. Det vil sige, at modtageren 'inverterer' signalet.

Med PWM -optagelsestilstand kan stm32 -mikrocontrolleren let omdannes til en IR -fjernoversætter fra IR -fjernbetjening til tastaturkoder. Derefter kan du starte din foretrukne visualiseringssoftware, f.eks. Kodi fra VLC for at afspille din yndlingsfilm på mediecenteret.

Trin 2: Oprettelse af controlleren

Oprettelse af controlleren
Oprettelse af controlleren
Oprettelse af controlleren
Oprettelse af controlleren
Oprettelse af controlleren
Oprettelse af controlleren
Oprettelse af controlleren
Oprettelse af controlleren

For at programmere stm32 mikro controller vil jeg gerne anbefale den gratis software fra STM: system workbench (aka ac6) og board konfigurationsværktøjet cubeMX. For at uploade softwaren til mikrocontrolleren kan chipklonen i ST-Link V2-adapteren bruges. Systemarbejdebænkprojektfiler knyttet til dette trin, F1-IR_remote.zip-fil.

Kortets konfigurationsværktøj forenkler processen med den indledende hardwarekonfiguration af vores mikrocontroller.

Hvis du bruger værktøjet til systemarbejdsbænk, kan du bare bruge det downloadede projekt. Men hvis du ønsker at undersøge projektet mere detaljeret, kan du oprette tavlekonfigurationen i cubeMX:

  • Opret nyt projekt, og vælg tavle stm32f103c8
  • Vælg 'Crystal/Ceramic Resonator' for punktet 'High Speed Clock (HSE)' i RCC -menuen.
  • Vælg 'Serial Wire' for elementet 'Debug' i SYS -menuen.
  • Konfigurer timeren #2 (TIM2 -menuen) i PWM -optagelsestilstand som vist på billedet:

    • Slave -tilstand -> Nulstil tilstand
    • Udløserkilde -> TI1FP1
    • Urkilde -> Intern ur
    • Channel1 -> Input Capture direkte tilstand
  • Indstil afkrydsningsfeltet 'Enhed (FS) i USB -menuen
  • Vælg rullemenuen 'Human Interface Device Class (HID)' i elementet 'Class of FS IP' i USB_DEVICE menuen
  • I urkonfigurationspanelet skal du sørge for at levere 72 MHz til timeren #2, fordi vi har brug for timertælling ved hver 1 mks.
  • Konfigurer USB -enheden i konfigurationspanelet som vist på billedet
  • Konfigurer timer#2 i konfigurationspanelet som følger:

    • Prescaller - 71 (fra 0 til 71) - 1 mikro sekund sekund!
    • Tællertilstand - op
    • Tællerperiode - 39999 (vi burde kunne måle den lange puls)
    • Input capture channel1 - Falling Edge (husk at signalet fra IR -modtageren er inverteret)

I PWM -indspilningstilstand fungerer timeren#2 følgende:

Når den faldende front blev registreret, ville timertælleren blive gemt i kanal1 -registret, og timertælleren ville blive nulstillet med 0. Derefter ville timeren fortsætte med at tælle retning. Så vi kan let måle pulslængden i mikrosekunder.

Som standard simulerer STM32 USB HID -klassen USB -musen. Her kan du finde vejledningen til at gøre controlleren til tastatur.

Trin 3: Tilpasning af controlleren

Projektet fungerer med Panasonic fjernbetjening og Kodi mediecenter. For at skræddersy projektet til din egen controller skal du tilføje kodearrayet til din fjernbetjening, ligesom jeg gjorde for panasonic -fjernbetjeningen (panasonicCode) til Inc/code.h -overskriften. Som du kan se, har hver kommando unikt ID (i IRcommmand enum). Der er 24 kommandoer (0-23) genkendt af projektet. Kommandoen er sorteret efter relevansen.

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

Derefter skal du tilføje din egen fjernbetjening i init () -metoden i IR.cpp med funktionen addRemote (). Funktionsargumenterne er:

  • Antal bits i pakken
  • Pakken Header længde
  • 'Nul' bitlængde
  • 'En' bit længde
  • Markør til kodearrayet
  • Nummerelementer i arrayet

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

}

Filen indeholder også en anden tabel til konvertering af kommandoer til tastaturkoder. Kbdr_kodi -arrayet indeholder nøglekoderne til Kodi mediecenter. Du kan tilføje endnu et array til dit eget mediecenterprogram, f.eks. Vlc -afspiller. Hvis du tilføjer en anden mediecenter -applikationstabel, ville du oprette et andet objekt KBD og initialisere det i main.cpp.

Trin 4: Værktøjer til at forenkle skræddersyning

Værktøjer til at forenkle skræddersyning
Værktøjer til at forenkle skræddersyning
Værktøjer til at forenkle skræddersyning
Værktøjer til at forenkle skræddersyning

Der er to andre projekter i depotet

  • IR -undersøgelse - gør det muligt at måle timingparametrene for signalerne på din fjernbetjening.
  • IR_capture - gør det muligt at fange HEX -koderne på din fjernbetjening.

Bare indlæs IR -undersøgelsesprojekt og tilslut USB -porten på bluepill -kortet til din computer. Start derefter et hvilket som helst terminalprogram på den virtuelle serielle portenhed, der svarer til stm32 -kortet. Mens du trykker på knapperne på din fjernbetjening, måler programmet de modtagne pulser og udskriver de gennemsnitlige tider for forskellige pulser. Det skulle forenkle at registrere pulslængden for pakkeoverskriften, nul og en bit.

I IR -undersøgelsesprojektet arbejder timeren #2 i PWM -optagelsestilstand med to kanaler: kanal én indfanger hele pulslængden og kanal2 indfanger spidslængden. Når den faldende signalkant blev registreret, gemtes timerværdien i kanal 1 -registret og timeren nulstilles med 0. Når signalets stigende kant blev registreret, gemtes timertælleren i kanal 2 -registeret.

For at fange knapkoderne på din egen fjernbetjening kan IR_capture -projektet bruges. I main.c -filen skal du tilføje fjerndefinitionen som denne:

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

  • .hdr - headerlængden i mks
  • .bits - antallet af bits i pakken
  • .zero - længden af nul -bit
  • .one - længden den ene bit
  • .dev - afvigelsen (forskellen i tidspunkter, der kan accepteres). Normalt er det 1/10 af den mindste længde.

Tilføj derefter din fjernbetjening til listen over understøttede fjernbetjeninger:

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

Anbefalede: