Table des matières:
- Étape 1: L'idée
- Étape 2: Création du contrôleur
- Étape 3: Personnalisation du contrôleur
- Étape 4: Outils pour simplifier la confection
Vidéo: Tomber dans Stm32 : Télécommande pour Home Media Center : 4 étapes (avec photos)
2024 Auteur: John Day | [email protected]. Dernière modifié: 2024-01-30 09:09
Il s'agit d'un prototype complet de télécommande de centre multimédia domestique basé sur un microcontrôleur smt32, stm32f103c8t6 connu sous le nom de carte "bluepill". Supposons que vous utilisiez un PC pour home media center. C'est une solution très flexible, qui vous permet de placer une énorme bibliothèque de vidéos sur le disque dur interne, ou vous pouvez lire des vidéos à partir du réseau, par exemple youtube ou autre, vous n'avez aucun problème avec les codecs ou la lecture de vidéos, car c'est très facile de mettre à jour le lecteur logiciel à tout moment. Le principal inconvénient de cette solution est que vous devez utiliser la souris et le clavier pour contrôler votre lecture. La télécommande IR est très pratique pour cela.
Dans cet article, je vais montrer comment créer sa propre télécommande à l'aide de la carte à puce bluepill.
Étape 1: L'idée
L'idée principale est très simple: la carte bluepill a un port USB intégré et peut servir de clavier USB HID. Si nous attachons le récepteur IR à la carte, il pourrait traduire la commande de votre télécommande IR en « pression de touche » du clavier virtuel. Aucun pilote supplémentaire n'est requis !
Il existe de nombreux protocoles IR dans le monde qui nous entoure. Chaque téléviseur du fournisseur de VCS a son propre protocole IR. Mais tous ces protocoles ont quelque chose en commun: ils utilisent la modulation d'impulsions pour coder le signal. Habituellement, il y a un préambule: une longue impulsion avant le premier bit du paquet. Ensuite, le contrôle IR transmet le paquet entier avec 0 et 1 et finalise la transmission avec une impulsion longue de finition. Pour décoder le bit, nous devons mesurer la longueur d'impulsion et la longueur du pic. Habituellement, la longueur de crête de la logique 0 et de la logique 1 est la même, la différence se situe dans la longueur d'impulsion complète.
Les microcontrôleurs stm32 ont une fonction intégrée pour capturer le signal PWM. Presque chaque minuterie du microcontrôleur peut être placée dans la « capture de signal PWM plus » lorsque les variables de canal de la minuterie enregistrent la longueur totale de l'impulsion et sa longueur de crête. Ici, je dois souligner le petit détail: lorsque le récepteur IR capte le signal, la tension sur sa broche de travail devient 0 et à l'état de repos, la tension dans la broche de travail est de 5 ou 3,3 volts selon la tension d'alimentation du récepteur IR. C'est-à-dire que le récepteur "inverse" le signal.
Avec le mode de capture PWM, le microcontrôleur stm32 peut être facilement transformé en un traducteur à distance IR de la télécommande IR aux codes du clavier. Ensuite, vous pouvez démarrer votre logiciel de visualisation préféré, par exemple Kodi de VLC pour lire votre film préféré sur le media center.
Étape 2: Création du contrôleur
Pour programmer le microcontrôleur stm32, je voudrais recommander le logiciel gratuit de STM: system workbench (aka ac6) et l'outil de configuration de carte cubeMX. Pour télécharger le logiciel dans le microcontrôleur, le clone de puce de l'adaptateur ST-Link V2 peut être utilisé. Les fichiers de projet du plan de travail système attachés à cette étape, le fichier F1-IR_remote.zip.
L'outil de configuration de carte simplifie le processus de configuration matérielle initiale de notre microcontrôleur.
Si vous utilisez l'outil System Workbench, vous pouvez simplement utiliser le projet téléchargé. Mais si vous souhaitez étudier le projet plus en détail, vous pouvez créer la configuration de la carte dans le cubeMX:
- Créez un nouveau projet et sélectionnez la carte stm32f103c8
- Sélectionnez 'Crystal/Ceramic Resonator' pour l'élément 'High Speed Clock (HSE)' dans le menu RCC.
- Sélectionnez 'Serial Wire' pour l'élément 'Debug' dans le menu SYS.
-
Configurez le timer #2 (menu TIM2) en mode capture PWM comme indiqué sur l'image:
- Mode Esclave -> Mode Réinitialisation
- Source de déclenchement -> TI1FP1
- Source de l'horloge -> Horloge interne
- Canal 1 -> Mode direct de capture d'entrée
- Cochez la case 'Périphérique (FS) dans le menu USB
- Sélectionnez l'élément de menu déroulant "Classe de périphérique d'interface humaine (HID)" dans l'élément "Classe d'IP FS" du menu USB_DEVICE
- Dans le panneau de configuration de l'horloge, assurez-vous de fournir 72 MHz au temporisateur #2 car nous avons besoin d'un compte de temporisateur à chaque 1 mks.
- Dans le panneau de configuration, configurez le périphérique USB comme indiqué sur l'image
-
Dans le panneau de configuration, configurez la minuterie n°2 comme suit:
- Precaller - 71 (de 0 à 71) - 1 micro seconde tick !
- Mode compteur - Haut
- Période du compteur - 39999 (nous devrions pouvoir mesurer l'impulsion longue)
- Canal de capture d'entrée 1 - Front descendant (rappelez-vous que le signal du récepteur IR est inversé)
En mode de capture PWM, la minuterie n°2 fonctionnerait comme suit:
Lorsque le front descendant était détecté, le compteur de minuterie serait enregistré dans le registre du canal 1 et le compteur de minuterie serait réinitialisé à 0. Ensuite, la minuterie continuerait à compter vers le haut. Ainsi, nous pouvons facilement mesurer la durée d'impulsion en microsecondes.
Par défaut, la classe STM32 USB HID simule la souris USB. Vous trouverez ici les instructions pour transformer le contrôleur en clavier.
Étape 3: Personnalisation du contrôleur
Le projet fonctionne avec la télécommande Panasonic et le centre multimédia Kodi. Pour adapter le projet à votre propre contrôleur, vous devez ajouter le tableau de codes pour votre télécommande comme je l'ai fait pour la télécommande Panasonic (panasonicCode) à l'en-tête Inc/code.h. Comme vous pouvez le voir, chaque commande a un ID unique (dans l'énumération IRcommmand). Il y a 24 commandes (0-23) reconnues par le projet. Les commandes sont triées par pertinence.
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 } IRcommand;
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 };
Ensuite, vous devez ajouter votre propre télécommande dans la méthode init() dans le IR.cpp avec la fonction addRemote(). Les arguments de la fonction sont:
- Nombre de bits dans le paquet
- La longueur de l'en-tête du paquet
- Longueur de bits « zéro »
- "Un" bit de longueur
- Pointeur vers le tableau de code
- Nombre d'éléments du tableau
void IRcmd::init(void) { addRemote(48, 5252, 902, 1755, panasonicCode, sizeof(panasonicCode)/sizeof(uint32_t));
}
Le fichier contient également une autre table pour convertir les commandes en codes clavier. Le tableau kbdr_kodi contient les codes clés du centre multimédia Kodi. Vous pouvez ajouter un autre tableau pour votre propre programme de centre multimédia, par exemple, vlc player. Si vous ajoutiez une autre table d'application Media Center, vous créeriez un autre objet KBD et l'initialiseriez dans le fichier main.cpp.
Étape 4: Outils pour simplifier la confection
Il y a deux autres projets dans le référentiel
- Investigation IR - permettant de mesurer les paramètres de synchronisation des signaux de votre télécommande.
- IR_capture - permettant de capturer les codes HEX de votre télécommande.
Il suffit de charger le projet d'enquête IR et de connecter le port USB de la carte bluepill à votre ordinateur. Ensuite, lancez n'importe quel programme de terminal sur le périphérique de port série virtuel, correspondant à la carte stm32. Pendant que vous appuyez sur les boutons de votre télécommande, le programme mesure les impulsions reçues et imprime les temps moyens pour différentes impulsions. Il devrait simplifier la détection de la longueur d'impulsion pour l'en-tête du paquet, les bits zéro et un.
Dans le projet d'investigation IR, la minuterie n° 2 fonctionne en mode de capture PWM avec deux canaux: le canal 1 capture la longueur d'impulsion entière et le canal 2 capture la longueur de crête. Lorsque le front descendant du signal est détecté, la valeur du temporisateur est enregistrée dans le registre du canal 1 et le temporisateur est réinitialisé à 0. Lorsque le front montant du signal est détecté, le compteur du temporisateur est enregistré dans le registre du canal 2.
Pour capturer les codes des boutons de votre propre télécommande, le projet IR_capture peut être utilisé. Dans le fichier main.c, vous devez ajouter la définition distante comme celle-ci:
IRcode panasonic = {.hdr = 5252,.bits = 48,.zero = 902,.one = 1755,.dev = 60 };
- .hdr - la longueur de l'en-tête en mks
- .bits - le nombre de bits dans le paquet
- .zero - la longueur du bit zéro
- .one - la longueur un le bit
- .dev - l'écart (la différence de temps qui peut être acceptée). Habituellement, c'est 1/10 de la plus petite longueur.
Ajoutez ensuite votre télécommande à la liste des télécommandes prises en charge:
const IRcode* remote[2] = {&panasonic, &pioneer};
Conseillé:
La télécommande TV devient une télécommande RF -- Tutoriel NRF24L01+ : 5 étapes (avec photos)
La télécommande TV devient une télécommande RF || Tutoriel NRF24L01+ : Dans ce projet, je vais vous montrer comment j'ai utilisé le populaire IC RF nRF24L01+ pour régler la luminosité d'une bande LED sans fil à l'aide de trois boutons inutiles d'une télécommande de téléviseur. Commençons
Télécommande sans fil utilisant le module 2.4Ghz NRF24L01 avec Arduino - Nrf24l01 4 canaux / 6 canaux émetteur-récepteur pour quadrirotor - Hélicoptère Rc - Avion Rc utilisant Arduino: 5 étapes (avec photos)
Télécommande sans fil utilisant le module 2.4Ghz NRF24L01 avec Arduino | Nrf24l01 4 canaux / 6 canaux émetteur-récepteur pour quadrirotor | Hélicoptère Rc | Avion Rc utilisant Arduino: Pour faire fonctionner une voiture Rc | Quadricoptère | Drone | Avion radiocommandé | Bateau RC, nous avons toujours besoin d'un récepteur et d'un émetteur, supposons que pour RC QUADCOPTER nous ayons besoin d'un émetteur et d'un récepteur à 6 canaux et que ce type de TX et RX soit trop coûteux, nous allons donc en faire un sur notre
1981 VCR portable Raspberry PI Media Center : 12 étapes (avec photos)
1981 VCR portable Raspberry PI Media Center : Il s'agit d'un magnétoscope portable Sharp VC-2300H du début des années 80 que j'ai converti - il a maintenant un Raspberry Pi en son cœur, exécutant l'excellent logiciel de centre multimédia Raspbmc. D'autres améliorations incluent une horloge élégante basée sur un arduino et un fil EL "ruban"
Convertissez votre télécommande IR en télécommande RF : 9 étapes (avec photos)
Convertissez votre télécommande IR en télécommande RF : dans Instructable d'aujourd'hui, je vais vous montrer comment vous pouvez utiliser un module RF générique sans microcontrôleur, ce qui nous conduira éventuellement à créer un projet dans lequel vous pourrez convertir une télécommande IR de n'importe quel appareil en RF À distance. Le principal avantage de convertir un
Contrôleur numérique pour suspension pneumatique à l'aide d'Arduino et d'une télécommande pour smartphone : 7 étapes (avec photos)
Contrôleur numérique pour suspension pneumatique à l'aide d'Arduino et d'une télécommande pour smartphone : Bonjour à tous. c'est aussi mon tout premier instructable donc supporter w