1st Step: Power it on.

I found the connector for the power supply on the mother-board and soldered +/- wires to it.

The power button is on the daughter-board with 2 USB and a status LED.

It runs OpenElec like a charm once i figure out how to configure the HDMI sound output.

2nd Step: Enclosure.

This VHS player is an amazing piece of electronic. It Is sooo heavy, I was amazed from the amont of discretes components, and metal in this thing. My main goal is to hide the computer in an hold classic enclosure.

So, i took every thing out and glued some nuts to the bottom, so i can screw the MB in place. There is an IR sensor glued to the front behind the black glass. The screen was a PCB with lighnings filament that entlighted the segments, i couldn't use it with out too much reverse engeniering. so i just get the pcb out and glued a SMD white LED in the place.

3th Step: remote control.

This is the inerresting part of the build. I din't find any cheap or simple way to start the device with a remote. So i use an Arduino + IRLib + Keyboard.h

the Arduino shunt the power button with an optocoupler to power on/off the computer and read the state of the power LED with an optocoupler to dertine the state of the computer. Finally, it controlls the status LED in the front.

Problems :

- I used a "switch-case" conditon, wich is too slow on Arduino when compared to the "if" statement.

- i also compared the whole hex code (8bytes) received with every hex code correspoding to the button of the remote. I found that this take to much time, so that the arduino was not reponsive enougth for a remote. i compare just the 2 last bytes of the code, wich in my case is enougth.

#include <IRLib.h>
#include <Keyboard.h>

#define MY_PROTOCOL RC6 // Remote QNAP-IR002
IRrecv My_Receiver(3); //IR Sensor on Pin 3
IRdecode My_Decoder;
void setup()
{
  My_Receiver.enableIRIn(); // Start the receiver
  Keyboard.begin();
  pinMode(2, OUTPUT); //LED
  pinMode(4, OUTPUT); //OPTO
  pinMode(5, INPUT); // ON/OFF State
  My_Receiver.resume();
}
//============================================================================
void loop() 
{     
      if(!digitalRead(5)) // if the pc is on (! --> 'cause pull down resistor), then let the LED on, else off
      {
         digitalWrite(2, HIGH);
      }
      else
      {
         digitalWrite(2, LOW);
      }
      delay(40);
      if(My_Receiver.GetResults(&My_Decoder)) 
      {
              My_Decoder.decode();
              if(My_Decoder.decode_type==MY_PROTOCOL)
              {
                  unsigned long i = (unsigned long)(My_Decoder.value&0x00FF);
                  //===================================================================
                  if(i == 0x000C && !digitalRead(5)){led(); poweroff(); delay(900);}
                  else if(i == 0x000C && digitalRead(5)){led(); poweron(); delay(900);}
                  else if(i == 0x000F){Keyboard.write('I'); led(); delay(200);}  //I
                  
                  else if(i == 0x0020){Keyboard.write(0xD8); led(); delay(50);} //RIGHT
                  else if(i == 0x0021){Keyboard.write(0xD7); led(); delay(50);} //LEFT
                  else if(i == 0x0022){Keyboard.write(0xB0); led(); delay(350);}  // ↵ Enter
                  else if(i == 0x001E){Keyboard.write(0xDA); led(); delay(50);} //UP
                  else if(i == 0x001F){Keyboard.write(0xD9); led(); delay(50);} //DOWN
                  
                  else if(i == 0x005B){Keyboard.write(0xB1); led(); delay(250);}  // Esc
                  else if(i == 0x0023){Keyboard.write(0xB2); led(); delay(250);}  // ← Backspace
                  
                  else if(i == 0x0026){Keyboard.write('M'); led(); delay(300);}  // M
                  else if(i == 0x000E){Keyboard.write(0xC9); led(); delay(300);}  // F8
                  
                  else if(i == 0x0010){Keyboard.write('='); led(); delay(65);} // +
                  else if(i == 0x0011){Keyboard.write('-'); led(); delay(65);} // -
                  else ;
              }
           //===================================================================
           My_Receiver.resume();
      }
}
//============================================================================
void poweroff() //trigger the optocoupleur to shorten the power-switch and then turn ON/OFF the computer
{
    digitalWrite(4, HIGH);
    delay(1900);
    digitalWrite(4, LOW);
    for(int i = 20; i > 0; i--)
        {
          if(digitalRead(5)) break;
          digitalWrite(2, LOW);
          delay(120);
          digitalWrite(2,...
Read more »