Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Selbstbau TV-Fernbedienung: Arduino UNO, batteriebetrieben, 3D-gedrucktes Gehäuse

Komponenten und Zubehör

Arduino UNO × 1
9 V Blockbatterie × 1
9 V auf Hohlstecker-Adapter × 1
IR-Sender (generic) × 1
Maschinenschraube M3 × 4
Maschinenschraube M2,5 × 3
M3 Mutter × 4
M2,5 Mutter × 3
Durchsteckwiderstand 47 Ω × 2
Lochrasterplatine 2,54 mm × 1
PCB-Taster × 6
Pinheader 36-polig 1-reihig (lang) × 1

Benötigte Werkzeuge und Maschinen

Über dieses Projekt

Einführung

Die TV-Fernbedienung meiner Freundin ging kaputt. Statt billigen Ersatz zu kaufen, dachten wir: Wir sind beide Ingenieure – bauen wir unsere eigene! Eine schöne, lehrreiche Beschäftigung im Lockdown, um zu verstehen, wie Alltagstechnik funktioniert. Unser kleiner 3D-Drucker kam auch zum Einsatz.

Funktionsweise

Minimale Befehlsmenge: Wir definierten 6 essenzielle Befehle: Ein/Aus (Toggle), Quelle, Kanal+, Kanal−, Lautstärke+, Lautstärke−.

Tastenabfrage

Keine externen Pullup-Widerstände nötig – Nutzung der internen Pullups des Arduino. Solange nicht im Sleep-Mode, wird jeder Taster pro Loop-Zyklus gepollt. Entprellung via millis() (40 ms Wartezeit).

Infrarot-Sendeprotokoll

Bibliothek IRremote.h übernimmt Protokoll-Handling. Protokoll für den jeweiligen TV-Hersteller einstellen (jeder hat eigenes Protokoll). HEX-Codes für gewünschte Befehle googeln und Buttons zuordnen. Wichtig: IR-LED muss an Arduino PWM-Pin 3 angeschlossen sein.

Code unterstützt 3 TV-Typen per #define (LG, Samsung, Sony) – auskommentieren/aktivieren.

Stromsparen

Mehrere Strategien via avr/sleep.h und avr/power.h:

Aufbau

Elektronik-Montage

Gesamte Schaltung auf Lochrasterplatine, passend für Arduino UNO Pinheader. Taster per Lötkolben an Endpositionen verlöten. Unterseite: Zwei 47 Ω Widerstände parallel → gewünschter IR-LED-Strom. Leiterbahnen per Lötzinn auf Lochraster gezogen, Taster-Pins und IR-LED an Pinheader angeschlossen. → Platine wirkt wie Shield, wird auf Arduino aufgesteckt.

Gehäuse: CAD & CAM

Gehäuse fasst Batterie, Arduino + Lochraster-Platine. Nur Tasten (oben) und IR-LED (vorn) sichtbar.

Zweiteilig, designed in SolidWorks, gesliced mit Ultimaker Cura, gedruckt in PLA (Anycubic Mega Zero).

Arduino mit 3 M2,5-Schrauben in Basis fixiert (Ausrichtungsbohrungen innen). IR-LED ragt aus Lochraster, aligniert mit Gehäuseloch; 3 Mini-Stege fixieren LED-Drähte lateral. 9 V Block per Pressfit in Batteriefach.

Deckel exponiert nur Tasten, neben jeder ein graviertes Symbol für Funktion.

Basis + Deckel per 4 M3-Schrauben verschraubt.

Fotogalerie

Selbstbau TV-Fernbedienung: Arduino UNO, batteriebetrieben, 3D-gedrucktes Gehäuse
Selbstbau TV-Fernbedienung: Arduino UNO, batteriebetrieben, 3D-gedrucktes Gehäuse
Selbstbau TV-Fernbedienung: Arduino UNO, batteriebetrieben, 3D-gedrucktes Gehäuse
Selbstbau TV-Fernbedienung: Arduino UNO, batteriebetrieben, 3D-gedrucktes Gehäuse

Code

TV_remote.ino

Arduino

#include <IRremote.h>
#include <avr/sleep.h>
#include <avr/power.h>

// Pin-Definitionen
// IR-LED MUSS an Arduino PWM Pin 3
#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 // Nur Pin 2 oder 3 auf Uno

// TV-Modell wählen
//#define LG_TV
//#define SAMSUNG_TV
#define SONY_TV

// HEX-Codes pro TV
#ifdef LG_TV
unsigned long on_off_code = 551489775;    // 0x20DF10EF
unsigned long vol_plus_code = 551502015;  // 0x20DF40BF
unsigned long vol_minus_code = 551534655; // 0x20DFC03F
unsigned long ch_plus_code = 551485695;   // 0x20DF00FF
unsigned long ch_minus_code = 551518335;  // 0x20DF807F
unsigned long source_code = 551538735;    // 0x20DFD02F
#endif

#ifdef SAMSUNG_TV
unsigned long on_off_code = 3772793023;   // 0xE0E040BF
unsigned long vol_plus_code = 3772833823; // 0xE0E0E01F
unsigned long vol_minus_code = 3772829743; // 0xE0E0D02F
unsigned long ch_plus_code = 3772795063;  // 0xE0E048B7
unsigned long ch_minus_code = 3772778743; // 0xE0E008F7
unsigned long source_code = 3772809343;   // 0xE0E0807F
#endif

#ifdef SONY_TV
unsigned long on_off_code = 2704;   // 0xA90
unsigned long vol_plus_code = 1168; // 0x490
unsigned long vol_minus_code = 3216; // 0xC90
unsigned long ch_plus_code = 144;   // 0x090
unsigned long ch_minus_code = 2192; // 0x890
unsigned long source_code = 2640;   // 0xA50
#endif

//#define DEBUG

IRsend irsend;
unsigned long debounce_time;
unsigned long last_time;

void setup() {
  analogWrite(13, 0); // Onboard LED aus
  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);

  // Power saving
  power_adc_disable();
  power_spi_disable();
  power_timer1_disable();
  power_usart0_disable();
  power_twi_disable();

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

void loop() {
  // 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
  }
  }

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

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

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

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

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

  // Sleep nach 5 s Inaktivität
  if (millis() - last_time > 5000) {
#ifdef DEBUG Serial.println("Going to sleep...");
#endif
    going_to_sleep();
#ifdef DEBUG Serial.println("Waking up...");
#endif
  }
}

void going_to_sleep() {
  sleep_enable();
  attachInterrupt(digitalPinToInterrupt(Interrupt_Pin), wake_up, LOW); // Interrupt Pin als WIRED NOR
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);
  sleep_cpu();
}

void wake_up() {
  sleep_disable();
  detachInterrupt(digitalPinToInterrupt(Interrupt_Pin));
}

Custom Parts & Enclosures

3D-Druckdateien (SolidWorks Quelle) – auf Anfrage / im Projektverzeichnis.

Schaltpläne

Selbstbau TV-Fernbedienung: Arduino UNO, batteriebetrieben, 3D-gedrucktes Gehäuse

Fritzing-Datei: remote_sketch_r4f8a47oWX.fz

Herstellungsprozess

  1. Integriertes QR-, RFID- und Temperatur-Verifikations-Zugangskontrollsystem
  2. IR-Fernbedienungsbefehle auf Raspberry Pi ohne LIRC erfassen: Python UART-Ansatz
  3. PiCy: Eigenen winzigen Raspberry-Pi-betriebenen Roboter bauen
  4. Echtzeit-Gyroskop-Spiel mit Arduino Nano & MPU-6050
  5. ESP32-CAM Bewegungserkennungs-Kamera für Discord
  6. Smartes Sparschwein: Münzprüfer mit Arduino Nano steuern
  7. Unopad: Nahtloser Arduino MIDI-Controller für Ableton Live
  8. LED per Bluetooth mit Arduino steuern – Einfache DIY-Anleitung
  9. Millport SmartLathez 1740 CNC-Drehmaschine – Präzision & Power
  10. 5 Schlüsselvorteile der ferngesteuerten Produktionskontrolle für die moderne Industrie