Introduction: RemoteJack: Arduino Awaits in Ambush to Thwart Unwanted TV Channel Changes

About: Did I unplug the solder iron?
WARNING: An Instructables bug keeps removing the name of the IRremote.h library surrounded by <> following the #include statement in my RemoteJack code at the bottom of the guide. Please remember to put it back before you compile and upload to Arduino. 

INTRODUCTION

For those of you who are still struggling with powerful siblings over TV channel selections, I give you the RemoteJack.

This Arduino contraption sits somewhere in between the TV and the holder of the remote control. While inactive, you can change channels all  you want. But once you activate RemoteJack, it just waits in ambush for any remote control signal. Once it intercepts one, it will sends a random remote control code (which you select) to the TV, cable box, satellite receiver, etc that's guaranteed to drive those who unjustly changed the channel mad.



CREDIT

The RemoteJack project is based on Ken Shirriff's IR remote library


PARTS
  • Arduino Uno
  • 38KHz IR receiver (3-pin)
  • IR transmitter LED
  • 100 Ohms resistor
  • Breadboard
  • Jumper wires

PROCEDURE
  1. Build the RemoteJack circuit
  2. Decode your remote buttons: Upload to your Arduino the IRrecvDump.ino  then capture the remote button codes you wish to use with the RemoteJack. This is the remote button code that RemoteJack will transmit at random whenever RemoteJack detects any incoming remote signal, such as a channel change.  For example, you can choose your remote's on/off button or the channel increment/decrement button as the button code you want RemoteJack to transmit at random.  You decide what command the RemoteJack should send to your TV or device. With the IRrecvDump.ino loade into your Arduino, open the Arduino serial monitor and point the remote at the RemoteJack IR receiver. Click any remote control button of choice to display its code in the serial monitor window in HEX. Save the codes for the buttons you wish to use in the RemoteJack. Also, this sketch will tell you which remote vendor-specific library method  to use. My remote controls were detected by the sketch as NEC remotes. There is an IR send and receive method in the IR remote library for various manufacturers such as Sony, NEC, etc. You have to use the method/function that matches your remote. Out of the box, Ken's IR remote library supports NEC, SONY , RC5, RC6 remote control standards and can also decode/transmit many non-standard remote control codes.
  3. Type the remote button code(s) you selected from above step in my RemoteJack.ino sketch (below) then upload the sketch to the Arduino.
  4. With the RemoteJack located somewhere between  the TV and the remote control path, give it a shot. Press any button on the remote and watch the TV (or any target device) behave erratically. Make sure the tip of the IR LED is pointing in the direction of the TV receiver. This is important for good IR transmission.

Remember this is just for fun so please don't go too far. Do this at your own risk.

----------------------------------------------------------------------------

/*
  RemoteJack: Intercepts any remote control signal then adds to it
  preselected remote button codes in random numbers simulating random
  remote button clicks. You need to replace my remote button code and method with yours.
  Remixed by: Hazim Bitar (techbitar)
  Contact: techbitar at gmail dot com
  LICENSE: IRremote library copyright by Ken Shirriff http://arcfn.com
  Everything else is in the public domain.
*/

#include

int STATUS_PIN = 13;
int BUTTON_PIN = 12;
int RECV_PIN = 11;


IRrecv irrecv(RECV_PIN);
IRsend irsend;

decode_results results;

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
  pinMode(BUTTON_PIN, INPUT);
  pinMode(STATUS_PIN, OUTPUT); 
  randomSeed(analogRead(0)); 
}

void loop() {
  if (irrecv.decode(&results)) {
    digitalWrite(STATUS_PIN, HIGH);
    Serial.println(results.value, HEX);
    for (int i = 0; i < random(3,10) ; i++) {
// Change the method below and its two parameters based on the output of the
IRrecvDump.ino sketch.
irsend.sendNEC(0x80BF4BB4, 32);

    // sendNEC(unsigned long data, int nbits)
    // sendSony(unsigned long data, int nbits)
    // sendRC5(unsigned long data, int nbits)
    // sendRC6(unsigned long data, int nbits)
       delay(100);
    }   
    digitalWrite(STATUS_PIN, LOW);
    irrecv.enableIRIn();
    irrecv.resume();
  } 
}