Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Télécommande TV Arduino Personnalisée – Alimentation Batterie, Boîtier Imprimé 3D

Composants et Fournitures

ComposantQuantité
Arduino UNO1
Batterie 9V (générique)1
Connecteur 9V vers Jack Barrel1
Émetteur IR (générique)1
Vis Machine M34
Vis Machine M2.53
Écrou M34
Écrou M2.53
Résistance Traversante 47 Ω2
Plaque de Prototypage 2.54 mm1
Bouton Poussoir PCB6
Connecteur Mâle 36 Positions 1 Rangée Long (0.1")1

Outils et Machines Nécessaires

À Propos du Projet

Introduction

La télécommande de ma copine a cessé de fonctionner. Elle aurait pu en acheter une bon marché en magasin, mais elle a pensé : nous sommes tous les deux ingénieurs, faisons la nôtre ensemble !

Comme nous avons des compétences complémentaires, c'était une façon différente et amusante de passer du temps pendant le confinement et d'apprendre comment fonctionne cette technologie quotidienne.

Et avoir une petite imprimante 3D à la maison a aussi joué un rôle.

Fonctionnement

Lecture des Boutons

Pour éviter des résistances supplémentaires, le design repose sur les résistances de pull-up internes de l'Arduino. Si la télécommande n'est pas en mode veille (voir ci-dessous), l'état de chaque bouton est scruté à chaque cycle de boucle. Pour éviter les comptages multiples, une routine de débouncing simple est implémentée exploitant la fonction millis().

Envoi des Signaux Infrarouges

La communication infrarouge est gérée par la bibliothèque IRremote.h (bravo aux développeurs !). Il suffit de configurer le protocole pour notre TV (chaque fabricant a son propre protocole) et de chercher sur Google les codes HEX des différentes commandes souhaitées pour les associer aux boutons. Côté circuit, pour que les commandes de la bibliothèque pilotent effectivement la LED IR, celle-ci doit être connectée à la broche 3 de l'Arduino UNO (PWM).

Actuellement, le code est écrit pour trois types de TV différents, sélectionnables en commentant/décommentant une directive #define au début du code.

Économie de Batterie

Pour réduire la consommation, plusieurs stratégies sont implémentées, exploitant les commandes des bibliothèques avr/sleep.h et avr/power.h.

Construction

Assemblage Électronique

Tout le circuit est embarqué sur une plaque de prototypage conçue pour s'adapter sur les connecteurs de l'Arduino UNO. Au fer à souder, les boutons ont été soudés en tenant compte de leur position finale sur la télécommande. Sur la face inférieure, les deux résistances 47Ω ont été soudées en parallèle pour obtenir le courant souhaité dans la LED IR.

Avec le fil à souder, des pistes ont été faites sur la plaque pour connecter les broches des boutons et la LED IR aux connecteurs mâles.

Ainsi, la plaque ressemble à un shield qui s'emboîte sur l'Arduino UNO via les connecteurs, assurant toutes les connexions correctes.

Boîtier : CAO et FAO

Le boîtier a été conçu pour contenir la batterie, l'assemblage Arduino UNO + plaque de prototypage, n'exposant que les boutons sur le dessus et la LED IR sur la face avant.

Le boîtier se compose de deux parties, conçues avec SolidWorks, pré-traitées avec Ultimaker Cura et imprimées en 3D en PLA sur une Anycubic Mega Zero.

L'Arduino UNO est fixé à la base par 3 vis M2.5 qui s'insèrent dans des trous d'alignement extrudés depuis l'intérieur de la base. Une fois l'Arduino fixé, la LED IR dépassera de la plaque de prototypage pour s'aligner avec le trou prévu. Pour la maintenir en position lors de l'assemblage des deux parties, trois mini-poteaux sont ajoutés pour éviter les mouvements latéraux des pattes de la LED. La batterie est insérée par pression dans son emplacement dédié.

Le couvercle est conçu pour n'exposer que les boutons, et à côté de chacun, un symbole est gravé dans le couvercle pour indiquer la fonction de chaque bouton.

Base et couvercle sont assemblés avec 4 vis M3.

Galerie Photos

Photos du montage, boîtier, électronique, assemblage final.

Code

TV_remote.ino (Arduino)


#include 
#include 
#include 

// Définition des broches
// Une LED IR doit être connectée à la broche PWM 3 de l'Arduino
#define OnOff 1
#define Source 0
#define CH_plus 4
#define CH_minus 5
#define Vol_plus 6
#define Vol_minus 7
#define Interrupt_Pin 2 // Seules broches 2 ou 3 sur Arduino Uno

// Définition modèle TV
//#define LG_TV
//#define SAMSUNG_TV
#define SONY_TV

// Définition des codes
#ifdef LG_TV
  unsigned long on_off_code = 551489775;     // HEX 20DF10EF
  unsigned long vol_plus_code = 551502015;   // HEX 20DF40BF
  unsigned long vol_minus_code = 551534655;  // HEX 20DFC03F
  unsigned long ch_plus_code = 551485695;    // HEX 20DF00FF
  unsigned long ch_minus_code = 551518335;   // HEX 20DF807F
  unsigned long source_code = 551538735;     // HEX 20DFD02F
#endif

#ifdef SAMSUNG_TV
  unsigned long on_off_code = 3772793023;    // HEX E0E040BF
  unsigned long vol_plus_code = 3772833823;  // HEX E0E0E01F
  unsigned long vol_minus_code = 3772829743; // HEX E0E0D02F
  unsigned long ch_plus_code = 3772795063;   // HEX E0E048B7
  unsigned long ch_minus_code = 3772778743;  // HEX E0E008F7
  unsigned long source_code = 3772809343;    // HEX E0E0807F
#endif

#ifdef SONY_TV
  unsigned long on_off_code = 2704;          // HEX A90
  unsigned long vol_plus_code = 1168;        // HEX 490
  unsigned long vol_minus_code = 3216;       // HEX C90
  unsigned long ch_plus_code = 144;          // HEX 090
  unsigned long ch_minus_code = 2192;        // HEX 890
  unsigned long source_code = 2640;          // HEX A50
#endif

// Activer Debug
//#define DEBUG

IRsend irsend; // Création objet IR
unsigned long debounce_time;
unsigned long last_time;

void setup() {
  analogWrite(13, 0); // Éteindre LED intégrée
  pinMode(OnOff, INPUT_PULLUP);
  pinMode(Source, INPUT_PULLUP);
  pinMode(CH_plus, INPUT_PULLUP);
  pinMode(CH_minus, INPUT_PULLUP);
  pinMode(Vol_plus, INPUT_PULLUP);
  pinMode(Vol_minus, INPUT_PULLUP);
  pinMode(Interrupt_Pin, INPUT_PULLUP);

  // Économie d'énergie
  power_adc_disable();     // Désactiver ADC
  power_spi_disable();     // Désactiver SPI
  power_timer1_disable();  // Désactiver timer 1 (0 pour millis(), 2 pour irremote.h)
  power_usart0_disable();  // Désactiver série
  power_twi_disable();     // Désactiver TWI

#ifdef DEBUG
  Serial.begin(9600);
#endif
}

void loop() {
  // Vérifier OnOff
  if (!digitalRead(OnOff)) {
    debounce_time = millis();
    while (millis() - debounce_time < 40) { ; }
    if (!digitalRead(OnOff)) {
#ifdef LG_TV
      irsend.sendNEC(on_off_code, 32);
#endif
#ifdef SAMSUNG_TV
      irsend.sendSAMSUNG(on_off_code, 32);
#endif
#ifdef SONY_TV
      irsend.sendSony(on_off_code, 12);
#endif
      last_time = millis();
#ifdef DEBUG
      Serial.println("OnOff");
#endif
    }
  }

  // Vérifier Source
  if (!digitalRead(Source)) {
    debounce_time = millis();
    while (millis() - debounce_time < 40) { ; }
    if (!digitalRead(Source)) {
#ifdef LG_TV
      irsend.sendNEC(source_code, 32);
#endif
#ifdef SAMSUNG_TV
      irsend.sendSAMSUNG(source_code, 32);
#endif
#ifdef SONY_TV
      irsend.sendSony(source_code, 12);
#endif
      last_time = millis();
#ifdef DEBUG
      Serial.println("Source");
#endif
    }
  }

  // Vérifier CH_plus
  if (!digitalRead(CH_plus)) {
    debounce_time = millis();
    while (millis() - debounce_time < 40) { ; }
    if (!digitalRead(CH_plus)) {
#ifdef LG_TV
      irsend.sendNEC(ch_plus_code, 32);
#endif
#ifdef SAMSUNG_TV
      irsend.sendSAMSUNG(ch_plus_code, 32);
#endif
#ifdef SONY_TV
      irsend.sendSony(ch_plus_code, 12);
#endif
      last_time = millis();
#ifdef DEBUG
      Serial.println("CH+");
#endif
    }
  }

  // Vérifier CH_minus
  if (!digitalRead(CH_minus)) {
    debounce_time = millis();
    while (millis() - debounce_time < 40) { ; }
    if (!digitalRead(CH_minus)) {
#ifdef LG_TV
      irsend.sendNEC(ch_minus_code, 32);
#endif
#ifdef SAMSUNG_TV
      irsend.sendSAMSUNG(ch_minus_code, 32);
#endif
#ifdef SONY_TV
      irsend.sendSony(ch_minus_code, 12);
#endif
      last_time = millis();
#ifdef DEBUG
      Serial.println("CH-");
#endif
    }
  }

  // Vérifier Vol_plus
  if (!digitalRead(Vol_plus)) {
    debounce_time = millis();
    while (millis() - debounce_time < 40) { ; }
    if (!digitalRead(Vol_plus)) {
#ifdef LG_TV
      irsend.sendNEC(vol_plus_code, 32);
#endif
#ifdef SAMSUNG_TV
      irsend.sendSAMSUNG(vol_plus_code, 32);
#endif
#ifdef SONY_TV
      irsend.sendSony(vol_plus_code, 12);
#endif
      last_time = millis();
#ifdef DEBUG
      Serial.println("Vol+");
#endif
    }
  }

  // Vérifier Vol_minus
  if (!digitalRead(Vol_minus)) {
    debounce_time = millis();
    while (millis() - debounce_time < 40) { ; }
    if (!digitalRead(Vol_minus)) {
#ifdef LG_TV
      irsend.sendNEC(vol_minus_code, 32);
#endif
#ifdef SAMSUNG_TV
      irsend.sendSAMSUNG(vol_minus_code, 32);
#endif
#ifdef SONY_TV
      irsend.sendSony(vol_minus_code, 12);
#endif
      last_time = millis();
#ifdef DEBUG
      Serial.println("Vol-");
#endif
    }
  }

  // Mode veille après 5s d'inactivité
  if (millis() - last_time > 5000) {
#ifdef DEBUG
    Serial.println("Going to sleep...");
#endif
    going_to_sleep();
#ifdef DEBUG
    Serial.println("Waking up...");
#endif
  }
}

// Fonction Mode Veille
void going_to_sleep() {
  sleep_enable();
  attachInterrupt(digitalPinToInterrupt(Interrupt_Pin), wake_up, LOW);
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);
  sleep_cpu();
}

// Fonction Réveil
void wake_up() {
  sleep_disable();
  detachInterrupt(digitalPinToInterrupt(Interrupt_Pin));
}

Pièces Personnalisées et Boîtiers

Fichiers CAO SolidWorks pour boîtier 2 parties (base + couvercle) imprimés en PLA.

Schémas

Schéma de câblage : LED IR sur broche 3, 6 boutons sur broches 0,1,4,5,6,7 avec pull-up internes, 2 résistances 47Ω en parallèle pour LED IR, interrupteur réveil sur broche 2.

Processus de fabrication

  1. Système de contrôle d'accès intégré QR, RFID et vérification de température
  2. Capturer les commandes de télécommande IR sur Raspberry Pi sans LIRC : Approche Python UART
  3. PiCy : Construisez votre propre petit robot Raspberry Pi
  4. Construire un jeu gyroscopique temps réel avec Arduino Nano et capteur MPU-6050
  5. Caméra de sécurité ESP32 à détection de mouvement pour Discord
  6. Construire une Tirelire Intelligente : Contrôler un Accepteur de Pièces avec Arduino Nano
  7. Unopad : contrôleur MIDI Arduino fluide pour Ableton Live
  8. Tour CNC Millport SmartLathez 1740 – Précision et puissance
  9. 5 avantages clés du contrôle de production à distance pour l'industrie moderne