顯示具有 English 標籤的文章。 顯示所有文章
顯示具有 English 標籤的文章。 顯示所有文章

2015年1月24日 星期六

[Arduino] Make a IR translator to translate IR code of Panasonic TV to Kbro TV box

[Arduino] 製作紅外線遙控轉換器 IR translate Panasonic 電漿電視轉 Kbro 凱擘 (Chinese)

Base on last article [Arduino] Use IRrepeator to capture IR raw code of kbro TV box's remote control, the real purpose is make a device to transfer/translate Tivo IR code to be the code of Kbro TV box. Then I just need setup Lotactionfree client to control Tivo, IR translator will transfer Tivo IR code and emit Kbro IR code for controlling Kbro TV box. The same approach is useful to let Sony Locatoinfree remote control any non-supported machines. (Please look at the video record in the end of this article if you want.)

The same situation, I make this device to transfer the IR code of Panasonic remote control to be the Kbro code. Due to my Panasonic TV provides the features of Skype, Youtube and screen size changing, so using the original Panasonic remote control is more convenient to me:


Looks the type of Panasonic remote control is N20AYB:

The IR codes of Panasonic remote control captured by IRrecvDump as following. Due to Arduino IR library could not recognize type of the code, so it prints Unknow type. The length of following raw data are 100, the hash codes are useful to put into program for comparing the received signatures, so I put all raw data in the note of this article:

Channel UP: Unknown encoding: 4DE74847 (32 bits)
Channel DOWN: Unknown encoding: B8781EF (32 bits)
ONE 1: Unknown encoding: F7283C77 (32 bits)
TWO 2: Unknown encoding: 757FB4DF (32 bits)
THREE 3: Unknown encoding: B33B4597 (32 bits)
FOUR 4: Unknown encoding: 3C03E507 (32 bits)
FIVE 5: Unknown encoding: E705551F (32 bits)
SIX 6: Unknown encoding: A4A58EC7 (32 bits)
SEVEN 7: Unknown encoding: E2E45F7F (32 bits)
EIGHT 8: Unknown encoding: 6BACFEEF (32 bits)
NINE 9: Unknown encoding: E88E91F (32 bits)
ZERO 0: Unknown encoding: 7D168BCF (32 bits)
OK: Unknown encoding: BB0ED9E1 (32 bits)
RETURN: Unknown encoding: D28EF217 (32 bits)
POWER: Unknown encoding: F61E2A57 (32 bits)

After Kbro TV box setup by cable company, I need use this specific remote control to watch TV. I really don't like that because I already have 2 remote control, Panasonic TV and Tivo. So my plan is do not use it, put it to drawer.

Due to Arduino IRremote library also could not recognize the code type of the above Kbro remote control, so I need raw data to be the source of emitting IR signature. The same, I list the raw data of Kbro IR codes in the end of this article, the length is 18.

Then is the hardware part, it's fully the same with IR repeater in my laster article:

The architecture is really simple, connect IR LED power pin to D3 of Arduino Pro mini. And, IR receiver data pin connect to D11 pin of Arduino Pro mini.

The components list:

Arduino mini pro, IR LED, IR receiver (PL-IRM0101-3, datasheet), USB male plugUSB. The total cost of components almost $130 NTD (around $4.5 USD):


IR receiver, I bought PL-IRM0101-3, please note different model has different define of 3 pins. Please check appropriate datasheet. There have 3 pins: Vcc, Vout and GND. Connect Vout to D11 of Arduino pro mini:

USB male plug used to connect 5V DC input to Arduino mini pro, connect the power pin on USB male to Vcc pin:

The leading role, Arduino mini pro, 70 NTD (around $2.2 USD). The cost is OK for DIY but still expensive for production:

Arduino pro mini need a USB program upload, take a picture of it:

Connect with upload:

The connection hint of DuPont lines
upload  connect Arduino mini pro
       DTR connect DTR
       RXI  connect TXO
       TXO connect RXI
       VCC connect VCC
       GND connect GND  


After connected by DuPont lines, then using Arduino IDE to complier and upload.

As description in last article, I already tested circuit by breadboard. So I start create use single side matrix board to layout. My design is put IR receiver behind of Arduino, the IR LED put on the side near the IR receive window of Kbro TV box:

The relative position between the USB port of Kbro box and IR window:

Paste a picture of the final position to see the IR LED status:

The layout of welding as following picture:

The left side, welded IR LED, the LED turn toards to IR receive window of Kbro box:

The right side, I welded female pin slot. It give the option to us for removing Arudino mini pro to other purpose:

The end of board, IR receiver is behind Arduino:

The front of Arduino has USB male, it used to get the 5V DC power:

Ya! Done! It's easier than my another project of reform the x61 IR UltraBase dock. Next is testing:

Of course not just hardware, we need upload program:
https://github.com/smallbeetw/arduinosketch/blob/master/Panasonic2KbroIRtrans/Panasonic2KbroIRtrans.ino

The program is easy, we make a mapping table that's used to map Panasonic IR hash code with kbro raw codes. The program compares the IR code that's received by  IR receiver with the Panasonic hash code in mapping table,   then it emits appropriate kbro raw code when found that match.

After a couple of testing, I modified the part of program is delay time, using 30 got the best result.

This is the video record of result:

The same device can used to transfer the Tivo IR code emitted by Locationfree to be Kbro IR code, so don't need worry for any IR codes didn't support by Locationfree. The approach can applied on SlingBox to solve the problem of non-supported IR code because those kind of devices almost supported Tivo IR code. Just need base on Tivo IR code to transfer to the codes that's we want. Then we can continue to use our expensive Locationfree or SlingBox.


2014-12-12 add:
The original program doesn't binding the power button of Kbro remote control with the power button of Panasonic TV. So I need set my Kbro box always power ON, otherwise I will need use Kbro remote control to power on TV box:

The default setting is auto-shutdown after 24 hours didn't control by human:

So I updated the program to binding power button. Due to my TV box put in TV cabinet, there have a distance between IR receive window of TV. It not always synchronous when power on. So I bind the power button of TV box to DTV/TV button on Panasonic remote control. Please check my code.

After power power binding, then I set the auto-shutdown time to 12 hours:

2014-12-20 add:
Today I used simple USB power meter to measure:

The USB slot on Kbro box looks fine to provide 5V output:

The ampere value smaller than the minimum resolution:


2015-01-10 add:
Add some pictures of USB male pin fore reference how to get 5V input to Arduino:




more: [Arduino] 以 nRF24L01+ 和 RF24 library 製作無線電端點



Notes:
Raw data of Panasonic remote control:

Channel UP:
Unknown encoding: 4DE74847 (32 bits)
3450,1750,450,400,450,1300,450,400,450,400,450,450,400,450,450,400,450,450,400,450,450,400,450,450,400,450,450,400,450,1300,450,400,450,400,450,450,450,400,450,400,450,450,400,450,450,400,450,450,400,1300,450,450,400,450,450,400,450,450,400,450,450,400,450,400,450,450,450,400,450,400,450,1300,450,400,450,1300,450,1300,400,450,450,400,450,450,400,450,450,1300,400,450,450,1250,450,1300,450,400,450,1300,450,

Channel DOWN:
Unknown encoding: B8781EF (32 bits)
3400,1750,450,400,450,1300,450,400,450,400,450,450,450,400,450,400,450,450,450,400,450,400,450,450,400,450,450,400,450,1300,450,400,450,450,400,450,450,400,450,400,450,450,450,400,450,400,450,450,450,1250,450,450,450,400,450,400,450,450,400,450,450,400,450,450,400,450,450,1300,400,450,450,1250,450,450,450,1250,450,1300,450,400,450,450,450,1250,450,450,400,1300,450,450,400,1300,450,1300,450,400,450,1300,450,

ONE 1:
Unknown encoding: F7283C77 (32 bits)
3400,1750,450,450,450,1250,450,450,400,450,450,400,450,450,400,450,450,400,450,400,450,450,450,400,450,400,450,450,450,1250,450,450,450,400,450,400,450,450,450,400,450,400,450,450,400,450,450,400,450,1300,450,400,450,400,450,450,450,400,450,400,450,450,450,400,450,400,450,450,450,400,450,400,450,450,450,1250,450,450,400,450,450,400,450,450,400,450,450,400,450,400,450,1300,450,400,450,450,450,1250,450,

TWO 2:
Unknown encoding: 757FB4DF (32 bits)
3450,1750,400,450,450,1300,400,450,450,400,450,400,450,450,450,400,450,400,450,450,450,400,450,400,450,450,450,400,450,1300,400,450,450,400,450,450,400,450,450,400,450,450,400,450,450,400,450,400,450,1300,450,400,450,450,450,400,450,400,450,450,450,400,450,400,450,450,400,1300,450,450,400,450,450,400,450,1300,450,400,450,400,450,450,450,1250,450,450,450,400,450,400,450,1300,450,400,450,450,400,1300,450,

THREE 3:
Unknown encoding: B33B4597 (32 bits)
3400,1750,450,450,400,1300,450,450,400,450,450,400,450,400,450,450,450,400,450,400,450,450,450,400,450,400,450,450,450,1250,450,450,400,450,450,400,450,450,400,450,450,400,450,450,400,450,450,400,450,1300,450,400,450,400,450,450,450,400,450,400,450,450,450,400,450,400,450,450,400,1300,450,450,400,450,450,1300,400,450,450,400,450,400,450,450,450,1250,450,450,450,400,450,1300,450,400,450,400,450,1300,450,

FOUR 4:
Unknown encoding: 3C03E507 (32 bits)
3400,1750,450,400,450,1300,450,400,450,450,400,450,450,400,450,400,450,450,450,400,450,400,450,450,450,400,450,400,450,1300,450,400,450,450,400,450,450,400,450,450,400,450,450,400,450,400,450,450,450,1250,450,450,450,400,450,400,450,450,450,400,450,400,450,450,400,450,450,1300,400,1300,450,450,400,450,450,1250,450,450,450,400,450,400,450,1300,450,1300,450,400,450,400,450,1300,450,400,450,450,400,1300,450,

FIVE 5:
Unknown encoding: E705551F (32 bits)
3400,1750,450,400,450,1300,450,400,450,450,450,400,450,400,450,450,450,400,450,400,450,450,400,450,450,400,450,450,400,1300,450,450,400,450,450,400,450,400,450,450,450,400,450,400,450,450,450,400,450,1300,450,400,450,400,450,450,400,450,450,400,450,450,400,450,450,400,450,450,400,450,450,1250,450,450,450,1250,450,450,450,400,450,400,450,450,450,400,450,1300,400,450,450,1300,400,450,450,400,450,1300,450,

SIX 6:
Unknown encoding: A4A58EC7 (32 bits)
3400,1750,450,400,450,1300,450,400,450,450,450,400,450,400,450,450,450,400,450,400,450,450,400,450,450,400,450,450,400,1300,450,450,400,450,450,400,450,400,450,450,450,400,450,400,450,450,450,400,450,1300,450,400,450,400,450,450,400,450,450,400,450,450,400,450,450,400,450,1300,450,400,450,1300,450,400,450,1300,450,400,450,400,450,450,450,1250,450,450,400,1300,450,450,400,1300,450,450,400,450,450,1250,450,

SEVEN 7:
Unknown encoding: E2E45F7F (32 bits)
3400,1750,450,400,450,1300,450,400,450,400,450,450,450,400,450,400,450,450,450,400,450,400,450,450,450,400,450,400,450,1300,450,400,450,450,400,450,450,400,450,450,400,450,450,400,450,450,400,450,450,1250,450,450,450,400,450,400,450,450,450,400,450,400,450,450,450,400,450,400,450,1300,450,1300,400,450,450,1250,450,450,450,400,450,400,450,450,450,1250,450,1300,450,400,450,1300,450,400,450,450,400,1300,450,

EIGHT 8:
Unknown encoding: 6BACFEEF (32 bits)
3450,1750,400,450,450,1300,400,450,450,400,450,400,450,450,450,400,450,400,450,450,450,400,450,400,450,450,450,400,450,1300,400,450,450,400,450,450,400,450,450,400,450,450,400,450,450,400,450,400,450,1300,450,400,450,450,450,400,450,400,450,450,450,400,450,400,450,450,450,1250,450,1300,450,1300,400,450,450,1250,450,450,450,400,450,400,450,1300,450,1300,450,1250,450,450,450,1250,450,450,400,450,450,1300,400,

NINE 9:
Unknown encoding: E88E91F (32 bits)
3400,1750,450,400,450,1300,450,400,450,450,400,450,450,400,450,450,400,450,450,400,450,450,400,450,450,400,450,400,450,1300,450,400,450,450,450,400,450,400,450,450,450,400,450,400,450,450,450,400,450,1300,400,450,450,400,450,450,400,450,450,400,450,400,450,450,450,400,450,400,450,450,450,400,450,1300,450,1250,450,450,450,400,450,400,450,450,400,450,450,400,450,1300,450,1300,400,450,450,400,450,1300,450,

ZERO 0:
Unknown encoding: 7D168BCF (32 bits)
3400,1750,450,400,450,1300,450,400,450,400,450,450,450,400,450,400,450,450,450,400,450,400,450,450,450,400,450,400,450,1300,450,400,450,450,400,450,450,400,450,450,400,450,450,400,450,400,450,450,450,1250,450,450,450,400,450,400,450,450,450,400,450,400,450,450,400,450,450,1300,400,450,450,400,450,1300,450,1300,400,450,450,400,450,400,450,1300,450,400,450,450,450,1250,450,1300,450,400,450,450,400,1300,450,

OK:
Unknown encoding: BB0ED9E1 (32 bits)
Raw (100): -27668 3450 -1750 450 -400 450 -1300 450 -400 450 -400 450 -450 450 -400 450 -400 450 -450 400 -450 450 -400 450 -450 400 -450 450 -400 450 -1300 450 -400 450 -400 450 -450 450 -400 450 -400 450 -450 450 -400 450 -400 450 -450 400 -1300 450 -450 400 -450 450 -400 450 -400 450 -450 450 -400 450 -400 450 -450 450 -1250 450 -450 450 -400 450 -1300 400 -450 450 -400 450 -1300 450 -400 450 -1300 450 -400 450 -400 450 -1300 450 -400 450 -450 450 -1250 450 -1300 450

RETURN:
Unknown encoding: D28EF217 (32 bits)
Raw (100): -20988 3450 -1700 450 -450 400 -1300 450 -450 400 -450 450 -400 450 -400 450 -450 450 -400 450 -400 450 -450 450 -400 450 -400 450 -450 400 -1300 450 -450 400 -450 450 -400 450 -450 400 -450 450 -400 450 -450 400 -450 450 -400 450 -1300 450 -400 450 -400 450 -450 450 -400 450 -400 450 -450 400 -450 450 -400 450 -1300 450 -1300 400 -1300 450 -400 450 -1300 450 -1300 450 -400 450 -400 450 -1300 450 -1300 400 -1300 450 -450 400 -1300 450 -1300 450 -400 450 -1300 450

POWER:
Unknown encoding: F61E2A57 (32 bits)
Raw (100): -15610 3400 -1750 450 -450 450 -1250 450 -450 400 -450 450 -400 450 -450 400 -450 450 -400 450 -450 400 -450 450 -400 450 -450 400 -450 450 -1250 450 -450 450 -400 450 -400 450 -450 400 -450 450 -400 450 -450 400 -450 450 -400 450 -1300 450 -400 450 -450 400 -450 450 -400 450 -400 450 -450 450 -400 450 -400 450 -1300 450 -400 450 -1300 450 -1300 400 -1300 450 -1300 450 -400 450 -400 450 -1300 450 -400 450 -1300 450 -1300 400 -1300 450 -1300 450 -400 450 -1300 450


The Raw data of Kbro remote control (already removed the first number of serial, length is 18-1=17):

Channel up:
250,850,250,1000,250,700,250,750,200,750,250,2450,250,750,200,750,250

Channel Down
250,850,250,850,250,750,200,750,250,700,250,2600,250,750,200,750,250

POWER:
250,850,250,700,250,750,200,750,250,750,200,2750,250,750,200,750,200

ONE 1:
250,850,250,2650,200,750,200,750,250,750,200,900,200,750,200,750,250,

TWO 2:
250,850,250,2450,250,750,200,750,250,700,250,1000,250,750,200,750,200,

THREE 3:
200,900,200,2400,200,750,200,750,250,750,200,1150,200,750,250,750,200,

FOUR 4:
200,900,200,2250,200,750,200,750,250,750,200,1300,200,750,250,700,250,

FIVE 5:
250,850,250,2100,200,750,250,700,250,750,200,1400,250,750,200,750,250,

SIX 6:
250,850,250,1950,200,750,250,750,200,750,200,1600,200,750,200,750,250

SEVEN 7:
200,900,200,1850,200,750,250,750,200,750,200,1700,250,700,250,750,200,

EIGHT 8:
250,850,250,1650,250,750,200,750,250,750,200,1800,250,750,200,750,250,

NINE 9:
200,900,250,1550,200,750,200,750,250,750,200,1950,250,750,200,750,200

ZERO 0:
200,900,200,2800,200,750,200,750,250,750,200,750,200,750,250,750,200

OK:
250,850,250,1800,250,750,200,750,200,1050,200,1450,200,750,200,750,250

RETURN:
250,850,250,1300,200,750,200,750,250,1000,200,2000,200,750,200,750,250

2015年1月13日 星期二

[Arduino] Use IRrepeator to capture IR raw code of kbro TV box's remote control

[Arduino] 用 IRrepeater 抓取 kbro 凱擘遙控器的 IR raw code (Chinese)

Due to Sony Locationfree already stop supported by Sony. My kbro TV box's remote control IR code set didn't in out-of-box IR code set of Locatoinfree, that causes I can not using Locationfree to control TV box. And, the Locationfree LF-BOX1's out-of-box IR code set is also limited, except it doesn't support kbro TV box, some buttons of Tivo's remote control also doesn't work.

So I want using Arduino to make a IR translator. To translate the Tivo IR code that emitted by Locationfree to be the IR code of kbro box. Then Locationree can support any new TV box through this Arduino translator. The same feature is also useful on Slingbox, you don't need worry for how to create the Slingbox bin file for new IR code.

Before making IR translator, grab the IR codes of remote control of Tivo and kbro is the most important preliminary work. This article introduces how to capture IR code by Arduino. The traditional method is using IRrecvDump in IR remote library of Arduino to capture IR codes. But, it doesn't work to kbro's remote control. I will introduce another useful way to grab the IR code, that's using IRreperter program.

First, I still using the most popular program, IRrecvDump to capture code. The following picture is my wire layout of breadboard: I used 3 pin stereo connector to connect to IR receiver. The red wire connected to 5v output pin of Arduino nano, black wire connect to GND pin, white wire connect to digital 11 pin for data input:



More detail: Red wire to 5V, Black wire to GND, White wire to D11

Runing Arduino IDE, select Arduino Nano w/ ATmega328 in "Board" selection:

More detail steps please google, there have bunch of articles introduced that. Please remember copy IRremote library to libraries folder in Sketchbook then Arduino IDE can find it when restart.

Please open IRrecvDump example in IRremote library, compiler and upload to Arduino. Then please launch Serial monitor to watch the IR code that captured. The printing result as following:

Decoded NEC: A10C7807 (32 bits)
Raw (68): -23088 8950 -4450 550 -1650 550 -550 550 -1650 550 -550 550 -550 550 -550 550 -550 550 -1650 550 -550 550 -550 550 -500 600 -500 550 -1650 550 -1650 550 -550 550 -550 550 -550 550 -1650 550 -1650 550 -1650 550 -1600 600 -500 550 -550 550 -550 550 -550 550 -550 550 -550 550 -550 550 -550 550 -1650 550 -1650 550 -1650 550
A10C7807

If program parser IR code type success, it will print out the type like the above NEC words, and follow a hash number of raw code and raw code data. You can using IR type and hash number, or direct using raw code. If it didn't parser out type, you still can using raw code with raw length to emit IR code. Please write down those codes.

When using Raw code, plesae remove the first number. As the above example, -23088 should discarded, please don't paste to your IRsend program. Then please modify all negative number to positive number, the whole length is 68-1. Then you can paste whole raw numbers to IRsend code to be a unsigned int array for testing. As the above example, it will be like:

8950 4450 550 1650 550 550 550 1650 550 550 550 550 550 550 550 550 550 1650 550 550 550 550 550 500 600 500 550 1650 550 1650 550 550 550 550 550 550 550 1650 550 1650 550 1650 550 1600 600 500 550 550 550 550 550 550 550 550 550 550 550 550 550 550 550 1650 550 1650 550 1650 550

Paste those numbers to program to be array, please remember add comma between 2 numbers. The code like this:
https://github.com/smallbeetw/arduinosketch/blob/master/Panasonic2KbroIRtrans/Panasonic2KbroIRtrans.ino#L50

The following are IR coddes of Tivo's Channel up/down button. I do not list raw code because Arduino captured the NEC type has no problem:

TIVO
    Channel up:        NEC: A10C7807 (32 bits)
    Channel down:    NEC: A10CF807 (32 bits)
Remote control of Tivo like this:



After got IR odes, then we cn try to using IR LED to emit IR code for receiving by devices (TV or set-top box). If devices done corresponding action after received IR code, that menas the code is correct. The layout of breadboard is really simple. Just connect the long pin of IR LED to D3, the short pin to GND:




Here is s stupid story of me.  The first time I try IR LED, I direct connect the long pin to 5v ouptut fro Arduino, then LED blasted immediately. That's my first time saw the LED blasted, it's dangerous to my eyes.
As you see in the above picture, I didn't add resistance in long pin because current didn't continue output through D3 pin, so should not like direct connect to 5v pin. But, add resistance is still a better idea for safety

The sofeware of emit IR code is easier than dump, just need jsing IRsendDemo in Arduino IDE. Modify the code type and hash number. Compiler and upload to Arduino, open Serial Monitor and key-in any character to trigger IR code emitting.  Waiting the reopnse of set-top box to verify the code correct.

if you wan to check does IR LED really work. Due to infrared ray could not see by human being. You can using a digital camera to monitor it.

The above steps is the popular way from internet to capture IR code through IRrecvDump. But this way doesn't always work, some remote control's codes are hard to capture by IRrecdump. I don't know why, maybe that has problem in IR remote library. I am not a IR expert, and I am no oscilloscope to check that.

Unfortunately,the remote control of kbro TV box on my hand is this kind of thing:



For grab the IR code of kbro remote control, I spend whole day until 2 am. Finally I find the way to capture IR code more easily. I modified my IR repeater program, add codes for print out IR raw code:
https://github.com/smallbeetw/arduinosketch/blob/master/IRrepeator/IRrepeator.ino

The advantage of this program is like merged IRreceDump and IRsend. That means Arduino grab the raw code then emit immediately through sendRaw() from IR LED. So, I call it IRreperter. This kind of device sale on many store on internet. It's useful to extend the IR receive window on device. e.g. if the IR receive window of TV covered by speaker, or DVD player put in cabinet. Then this device is useful to repeat IR code to other direction or space.

The breadboard layout as following, just put IR receiver and IR LED on the same board:

The simply circuit as following:



The benefit of IRrepeater is for some remote control that Arudino SOMETIME can capture IR code, but the success rate is not too high. Then we can just put button continuously, IRrepeater will emit IR code to set-top box continuously until we saw box response the code. Then we can confirm the code is valid and write it down.

Simply say, when using IRreperter, user can test the raw code immediately. Don't like the IRreceDump, need paste raw code to IRsend program to check, then using IRrecvDump capture again if the code invalid.

Through this way, I captured raw code of the channel up/down button, I will post other keys when I have time. (found the fail rate is really high for grab the code of kbro remote control):

KBRO
  Channel UP:         250,850,250,1000,250,700,250,750,200,750,250,2450,250,750,200,750,250
  Channel DOWN:   250,850,250,850,250,750,200,750,250,700,250,2600,250,750,200,750,250

I used 
sendRaw(sendRawCodes,17,38), and add delay(40). Confirm the above codes are available. Some information from internet say the 38 hz for IR is because this frequency does not use in the nature, it can avoid too many noise.

Except the way to use IRreperter to grab the remote control for SOMETIME work. Some other solutions may worth to try: like some Sony remote control used 40 hz, or Samsung's raw code length sometimes longer then the default size of RAWBUF 100 (Please modify the RAWBUF length define in IR remote library from 100 to 400). And set a longer delay when testing, using 1000 to avoid too fast to emit next code of next cycle. The above are some hints from internet that can try when IRrecDump doesn't work to you.

In this time, I also capture the IR codes of Sony Locationfree LF-Box1's RM-Box1 remote control. This remote control is special and not easy to find on market. So, list the IR codes here for reference:



RM-BOX1
  UP:                    Decoded SONY: 4EB31 (20 bits)
  DOWN:             Decoded SONY: CEB31 (20 bits)
  LEFT:                 Decoded SONY: AEB31 (20 bits)
  RIGHT:               Decoded SONY: 2EB31 (20 bits)
  決定:                  Decoded SONY: 6EB31 (20 bits)
  畫面xxx:             Decoded SONY: 14B31 (20 bits)
  右下:                   Decoded SONY: 34B31 (20 bits)
  左上:                   Decoded SONY: ACB31 (20 bits)
  戾xxx:                  Decoded SONY: 54B31 (20 bits)
  電源:                   Decoded SONY: A8B31 (20 bits)
  入力切換:           Decoded SONY: A4B31 (20 bits)
  畫面表示:           Decoded SONY: 44B31 (20 bits)
  設定:                   Decoded SONY: 4B31 (20 bits)
  XXX電源:           Decoded SONY: A90 (12 bits)
  入力切換(左上): Decoded SONY: A50 (12 bits)
  音量(+):               Decoded SONY: 490 (12 bits)
  音量(-):                Decoded SONY: C90 (12 bits)
  消音:                    Decoded SONY: 290 (12 bits)

more: 
[Arduino] Make a IR translator to translate IR code of Panasonic TV to Kbro TV box