
Base promicro
google/mozc-devices
Circuit diagrams and firmware source code for Gboard DIY keyboards

Système embarqué autonome d'extinction automatique de vidéoprojecteurs : rétro-ingénierie infrarouge (protocole NEC 38 kHz), mode Sniffer d'apprentissage, fusion multi-capteurs (PIR, mmWave, son, VGA) et PCB sur mesure sous KiCad 9 (Raspberry Pi Pico 2WH / MicroPython & C++).
BE Elec Projet Type Kicad is an open-source printed circuit board by AurelienCapron, from the AurelienCapron/autonomous-ir-projector-remote repository on GitHub. It is a 2-layer board of 75.4 × 53.3 mm with 30 parts on 39 nets, routed with 143 tracks and 0 vias.
Its parts include 6 resistors, 2 capacitors, 1 IC, 1 diode and 1 connector. It belongs with the sensors and measurement boards and the RP2040 boards of this library.
Conception matérielle (prototypage sur Arduino Uno puis PCB sur mesure sous KiCad 9), rétro-ingénierie de protocole infrarouge (standard NEC 38 kHz) et développement logiciel embarqué (MicroPython & C++) d'un boîtier autonome destiné à éteindre automatiquement les vidéoprojecteurs de la salle des conseils de Grenoble INP - Phelma lorsqu'elle est inoccupée. Ce système prévient l'usure prématurée des lampes (estimée à 1 250 h/an d'allumage inutile, soit 33 % de leur durée de vie) et réduit la consommation énergétique du bâtiment.
| Phase 1 : Prototypage sur breadboard (Arduino Uno) | Phase 2 : Conception PCB sur mesure (KiCad 9 — v1.2) |
|---|---|
![]() | ![]() |
Câblage initial sur plaque d'essai : Arduino Uno, 2 capteurs PIR, 4 LDR (A0–A3), récepteur et LED IR | Carte finale double face accueillant le Raspberry Pi Pico 2WH, l'étage LDO 5V et les connecteurs dédiés |
| Assemblage et soudure au laboratoire | Câblage interne dans le boîtier | Prototype final assemblé et testé |
|---|---|---|
![]() | ![]() | ![]() |
À l'issue des réunions en salle des conseils, les vidéoprojecteurs restent fréquemment allumés toute la nuit (environ 2 fois par semaine, soit $1,250\text{ h/an}$ sur une durée de vie totale de lampe de $3,000$ à $4,000\text{ h}$). Le système conçu répond à trois niveaux d'exigences fonctionnelles :
VGA1, VGA2) couplée à des photorésistances (PGM1201) afin de ne commander l'extinction que si l'appareil ciblé est effectivement sous tension.SBC-PIR), d'un radar de présence à ondes millimétriques (mmWave Gravity SEN0609) et d'un détecteur acoustique (SEN-14262).GPIO19).
La carte électronique double face ($135 \times 130\text{ mm}$) intègre un étage de régulation linéaire 5V (TLV1117-50 alimenté en 12V DC via J1) et centralise l'ensemble des capteurs et actionneurs autour du microcontrôleur Raspberry Pi Pico 2WH :
| Connecteur PCB | Signal / Label | Broche MCU | Rôle fonctionnel |
|---|---|---|---|
J_VGA1 / J_VGA2 | VGA1 / VGA2 | GPIO3 / GPIO2 | Lecture de l'état sous tension des vidéoprojecteurs 1 et 2 via leurs ports VGA. |
J_Photoresistance1/2 | ADC0 / ADC1 | GPIO26 / GPIO27 | Mesure analogique de luminosité (PGM1201) avec pont diviseur $10\text{ k}\Omega$ (R5, R6). |
RV1 | ADC2 | GPIO28 | Potentiomètre CMS Vishay TS53YL ($100\text{ k}\Omega$) d'ajustement dynamique du seuil. |
J_DETECTEUR_MOUVEMENT1 | SIG | GPIO16 | Entrée numérique du capteur de mouvement infrarouge passif (SBC-PIR). |
J_DETECTEUR_PRESENCE1 | VOUT | GPIO17 | Entrée numérique du capteur de présence radar mmWave (SEN0609). |
J_CAPTEUR_SONORE1/2 | ENVELOPE / GATE | GPIO20 / GPIO21 | Acquisition de l'enveloppe acoustique et du seuil binaire (SEN-14262). |
J_EMETTEUR1 / 2 | EMETTEUR1 / 2 | GPIO7 / GPIO14 | Commande PWM 38 kHz des 2 émetteurs IR (GT1087) via résistances $220\ \Omega$ (R3, R4). |
J_RECEPTEUR1 | S_OUT | GPIO18 | Réception et apprentissage (Sniffer) de trames infrarouges externes (GT1089). |
J_Bouton1 | BOUTON | GPIO19 | Bouton poussoir (R1381R, PULL_UP) activant le mode apprentissage après 3 s d'appui. |
J_LED1 / J_LED2 | Net-(GPIO0/1) | GPIO0 / GPIO1 | LED témoins en façade (Présence détectée sur GPIO0, Projecteur allumé sur GPIO1). |
| Composant | Référence | Quantité | Fonction |
|---|---|---|---|
| Microcontrôleur | Raspberry Pi Pico 2WH (SC1634) | 1 | Unité centrale de traitement, PWM 38 kHz et machine d'état |
| Régulateur LDO 5V | TLV1117-50 (SOT-223) | 1 | Régulation 12V → 5V (VCC) avec condensateurs CMS $10\ \mu\text{F}$ (C1, C2) |
| Détecteur sonore | SEN-14262 | 1 | Surveillance de l'activité sonore dans la salle des conseils |
| Radar de présence | mmWave Gravity SEN0609 | 1 | Détection fine de présence humaine statique ou en mouvement |
| Capteur PIR | SBC-PIR | 1 | Détection de mouvement thermique dans la salle |
| Photorésistances | PGM1201 | 4 | Détection optique complémentaire et sécurité de surchauffe |
| Émetteurs IR | GT1087 | 2 | Émission directionnelle des trames d'extinction à 38 kHz |
| Récepteur IR | GT1089 | 1 | Capture et clonage du signal de la télécommande d'origine |
| Bouton poussoir | R1381R | 1 | Déclenchement manuel du mode d'apprentissage infrarouge |
Le signal émis par la télécommande d'origine face au récepteur GT1089 a été capturé à l'oscilloscope numérique Tektronix et décodé via un banc Arduino Uno (firmware/arduino_ir_receiver), révélant une modulation NEC sur porteuse à 38 kHz de valeur hexadécimale brute 0x6F905583 (soit les 4 octets 0x83, 0x55, 0x90, 0x6F transmis LSB-first) :
mark(9000)) suivie d'un silence de $4,5\text{ ms}$ (space(4500)).0 : Impulsion de $562\ \mu\text{s}$ suivie d'un silence de $562\ \mu\text{s}$ (durée totale : $1,125\text{ ms}$).1 : Impulsion de $562\ \mu\text{s}$ suivie d'un silence long de $1,675\ \text{ms}$ (durée totale : $2,25\text{ ms}$).| Principe temporel du protocole NEC | Capture de la trame IR à l'oscilloscope Tektronix |
|---|---|
![]() | ![]() |
firmware/pico_main/main.py)Le firmware principal embarqué sur le Raspberry Pi Pico 2WH pilote simultanément les deux émetteurs IR (GPIO7 et GPIO14) via les générateurs PWM matériels cadencés à $38\text{ kHz}$ (rapport cyclique de 50 %, duty_u16(32768)) :
envoyer_code_nec_universel()) : Envoie 3 trames NEC consécutives espacées de $500\text{ ms}$ pour garantir la prise en compte de l'extinction (y compris sur les projecteurs exigeant une double confirmation).lancer_mode_apprentissage()) : Un appui de plus de 3 secondes sur le bouton GPIO19 place le boîtier en écoute sur le récepteur GT1089 (GPIO18), mesure à la microseconde les 67 fronts successifs (time.ticks_us()), discrimine les bits 1 ($> 1,200\ \mu\text{s}$) et 0, et met à jour dynamiquement en mémoire les 4 octets NEC_B1 à NEC_B4.Pour protéger la carte électronique de la poussière dans le faux plafond tout en intégrant les passages de câbles et l'interface utilisateur :
boxes.py, adapté en CAO 2D pour les perçages des connecteurs et fabriqué au FabLab de Phelma.| Modélisation 3D de la base | Modélisation 3D du couvercle | Plan 2D de découpe laser (boxes.py) |
|---|---|---|
![]() | ![]() | ![]() |
| Banc de démonstration lors de la soutenance finale |
|---|
![]() |
autonomous-ir-projector-remote/
├── .gitattributes # Détection KiCad / Python / C++ par GitHub Linguist
├── .gitignore
├── README.md
├── assets/
│ ├── arduino_breadboard_prototype.png # Câblage du prototype initial sur breadboard (Tinkercad)
│ ├── autonomous_remote_demo.mp4 # Vidéo de test d'extinction automatique en salle
│ ├── enclosure_3d_base.jpg # Modélisation CAO 3D du boîtier
│ ├── enclosure_3d_lid.jpg # Modélisation CAO 3D du couvercle
│ ├── ir_frame_oscilloscope.png # Acquisition Tektronix de la trame NEC 32 bits
│ ├── laser_cut_layout.jpg # Mise à plat 2D pour découpe laser
│ ├── nec_protocol_timing.png # Chronogramme du protocole NEC
│ ├── pcb_3d_render.png # Rendu 3D de la carte PCB sous KiCad 9 (v1.2)
│ ├── pcb_soldering_bench.jpg # Assemblage et soudure de la carte au laboratoire
│ ├── project_defense_setup.jpg # Démonstration lors de la soutenance
│ ├── prototype_assembled_box.png # Boîtier final assemblé et câblé
│ ├── prototype_inside_wiring.png # Vue intérieure du câblage (Raspberry Pi Pico 2WH)
│ ├── sysml_requirements_diagram.png # Diagramme des exigences SysML
│ └── system_architecture.svg # Schéma synoptique vectoriel de l'architecture
├── docs/
│ ├── arduino_prototype_schematic.pdf # Premier schéma électrique sur Arduino Uno
│ ├── bom_components.csv # Nomenclature initiale des composants (CSV)
│ ├── presentation_slides.pdf # Support de soutenance technique
│ └── project_report.pdf # Rapport technique du projet (Grenoble INP - Phelma)Projet réalisé à Grenoble INP - Phelma (Année universitaire 2025–2026 — Projet n°32) :
| Qty | Value | Footprint | References |
|---|---|---|---|
| 11 | Conn_01x02 | LIB_TR_PHELMA:PinHeader_1x02_P2.54mm_Vertical | J_Bouton1, J_CAPTEUR_SONORE1, J_CAPTEUR_SONORE2, J_EMETTEUR1, J_EMETTEUR2, J_LED1, J_LED2, J_Photoresistance1, J_Photoresistance2, J_VGA1, J_VGA2 |
| 4 | 220 | LIB_TR_PHELMA:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R1, R2, R3, R4 |
| 3 | Conn_01x03 | LIB_TR_PHELMA:PinHeader_1x03_P2.54mm_Vertical | J_DETECTEUR_MOUVEMENT1, J_DETECTEUR_PRESENCE1, J_RECEPTEUR1 |
| 2 | 10k | LIB_TR_PHELMA:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R5, R6 |
| 1 | 100K | LIB_CMS_PHELMA:Potentiometer_Vishay_TS53YL_Vertical | RV1 |
| 1 | 10u | LIB_CMS_PHELMA:CP_Elec_6.3x5.2 | C2 |
| 1 | 10u | LIB_CMS_PHELMA:C_1206_3216Metric_Pad1.42x1.75mm_HandSolder | C1 |
| 1 | 470 | LIB_CMS_PHELMA:R_1206_3216Metric_Pad1.42x1.75mm_HandSolder | RD1 |
| 1 | Barrel_Jack_Switch | LIB_CMS_PHELMA:BarrelJack_CLIFF_FC681465S_SMT_Horizontal | J1 |
| 1 | LED | LIB_CMS_PHELMA:LED_1206_3216Metric_Pad1.42x1.75mm_HandSolder | D1 |
| 1 | LOGO | LIB_TR_PHELMA:tata | G |
| 1 | LOGO | Logo:Phelma2 | G*** |
| 1 | RaspberryPi_Pico_W | Module:RaspberryPi_Pico_Common_THT | A1 |
| 1 | TLV1117-50 | LIB_CMS_PHELMA:SOT-223-3_TabPin2 | U1 |
It measures 75.4 × 53.3 mm and has 2 copper layers, 1.6 mm thick.
30 parts. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
From the AurelienCapron/autonomous-ir-projector-remote repository on GitHub, at the commit this page was made from: the board is hardware_kicad/BE-Elec-Projet-Type-Kicad.kicad_pcb and its schematic hardware_kicad/BE-Elec-Projet-Type-Kicad.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Its repository states no licence, so its author keeps all rights: ask AurelienCapron before reusing the design.

google/mozc-devices
Circuit diagrams and firmware source code for Gboard DIY keyboards


VoronDesign/Voron-Hardware
Cool Hardware designed by the Voron Design group

hoglet67/RGBtoHDMI
Bare-metal Raspberry Pi project that provides pixel-perfect sampling of Retro Computer RGB/YUV video and conversion to HDMI

tenderlove/initial-v
It's a BMW shifter converted to a Bluetooth Keyboard that you use with Vim

hackclub/OnBoard
💡 Join 1,000 teenagers and make your first PCB with a $100 grant!

