10/10/2010

Project DeepThought ($320 CarPC)

Backstory - 

Five years ago I had a 2003 Chevy Cavalier, and I was bound and determined to stuff a PC in it.  The first incarnation was beautiful in function, not in form.  I had a 7" in-dash motorized touchscreen LCD (that didn't quite fit in the console) and a Compaq E-42 mini PC (now being used in Project Musicbox) stuffed in the glove compartment (the door didn't shut, so the door had to go).  It worked beautifully, but eventually the LCD went out and the PC was never nearly powerful enough to do what I wanted it to.  It was around that time that we got a new car, and after the damage I did to the cavalier it took quite a bit of convincing for the wife to let me do it again.  The rules for the 2nd installation were simple:

1) Has to look like it belongs in the car.
2) Has to be quickly removable
3) Has to not look 'geeky'

So by the time I got around to this project my wife and I brought our little bundle of joy into the world.  With that, I had to add a forth condition to the list.

4) Cheap!!!

I easily spent over $600 on my last CarPC endeavor and now I had to try to cram function, form, and financial responsibility into an '02 Acura RSX

The Solution:


A quickly removable, simply controlled, fewest cords as possible CarPC (otherwise known as DeepThought).  This knob controlled system can play video, music, and launch external programs (such as GPS, SNES emulator, internet browser, etc).






(more after the break)




What You'll Need

  1. Acer Aspire Revo (Atom processor, 1.5 gb ram, 160gb HD, Nvidia Ion LE) - $199
    1. Software
      1. Windows 7 32bit
      2. Autohotkey
      3. XBMC (dharma edition)
        1. Ellipsis Skin
      4. TED (Torrent Episode Downloader)
      5. Utorrent
  2. IMO 7" USB Monitor - $99
  3. USB Control Wheel (homemade) - $20ish in parts


What I Did


The PC/Monitor combo is the easiest part of this build.  The USB monitor is automatically detected by windows 7 and the drivers also install automatically.  Set it as the primary (and only) display and you're done. YES!!!! VIDEO WITH ONLY ONE CORD!!!!!!

USB Control Wheel:

The control wheel is nothing new.  I've seen a couple different methods around the net but decided to go with my own method.  All you're doing is repurposing the scroll wheel and buttons of any (rotary) USB mouse.

Parts:
  1. The cheapest mouse you can find
  2. Some kind of enclosure
  3. 2x SPST buttons from Radioshack (THE REDDER, THE BETTER....everyone should have a big red button in their car)
  4. a knob
Assembly:

Excuse the picture quality (and quantity).  I've already sealed the working unit and this is just some extra parts laying around to demonstrate the method.

All this really comes down to is taking a part a mouse and using the scroll wheel (ROTARY, not OPTICAL) as the knob then rerouting the MIDDLE and RIGHT mouse buttons.

When you take apart a mouse, it should look something like this...

In red, you'll see the rotary scroll wheel
Desolder the scroll wheen (3 connections) and then resolder 3 wires.
Basically all you're doing is extending the connection so you can move the
wheel to a more equitable position.
Similarly, desolder the two buttons on the mouse (2 connections each)
and resolder 2 wires for each old button to your new buttons
Glue a metal post of some kind through the scroll wheel rotary dial (there's a
small hole where the orginal scroll wheel was) and assemble!













Now when you plug it into the computer will recognize it as a mouse and has scroll down, scroll up, middle button, and right button functionality.

This doesn't do alot by itself, but once you involve autohotkey and XBMC you can basically make it do whatever you want.

Autohotkey config:

The trick with AHK was to translate those mouse commands to something usable in XBMC (and JUST XBMC).



#InstallKeybdHook
#InstallMouseHook
#UseHook On




; Sometimes, you have to restart XBMC for whatever reason
mbutton & rbutton::
{
winclose, ahk_class XBMC
sleep, 3000


IfWinNotExist ahk_class XBMC
{
run, XBMC.exe -fs -p, c:\progra~1\XBMC\
return
}
return
}




; If XBMC is active, remap the buttons to the following:
; Wheel down = RIGHT
; Wheel up = LEFT
; Middle Button + Wheel Down = Down
; Middle Button + Wheel Up = Up
; Middle Button = ENTER
; Right Button  = TAB 
; Right Button + 1 sec = ESCAPE
; Right Button + 3 sec = Dial Bluetooth DUN connection to my phone
; Right Button + 5 sec = END (hibernate in XBMC)


#IfWinActive ahk_class XBMC
{


mbutton:: 
{
Send {enter}
return
}


wheeldown::
{
Send {Right}
return
}




wheelup::
{
Send {Left}
return
}

mbutton & WheelUp::
{
Send {up}
return
}


mbutton & WheelDown::
{
Send {down}
return
}










; ------------------
; Timer Registration
; ------------------
timerticks = 0
Rbutton::


if !(timerticks > 0)
{
  timerticks = 1
  SetTimer, ButtonHoldTimer, 1000
}
return








$rbutton UP::
if timerticks > 0
{
if timerticks > 5
  {
    SetTimer, ButtonHoldTimer, Off
    timerticks = 0
    run, rasdial.exe /disconnect
    sleep, 1000
    Send, {End}
    return    
 }  
else if timerticks > 3
  {
    SetTimer, ButtonHoldTimer, Off
    timerticks = 0
    run, rasdial.exe mobile     
    return
  }
    
else if timerticks > 1
  {
   SetTimer, ButtonHoldTimer, Off
   timerticks = 0
    Send, {escape}    
return
  }
else
  {
    SetTimer, ButtonHoldTimer, Off
    timerticks = 0
    Send, {tab}
    return
  }
ButtonHoldTimer:
timerticks += 1
return
}
return
}












XBMC config:

I used Dharma release because it performs SOOO much better than previous builds.  

Now that you have autohotkey sending the correct keys, you have to setup XBMC to dictate what you want those keys to do depending on what screen your in. For instance, on the main screen, Middle Button = ENTER, but while in fullscreen video Middle Button = PAUSE.

Edit your keyboard.xml file in \xbmc\system\keymaps, or use this one.
---------------------------------------------------------
keyboard.xml
-----------------------------------------------------





Here's some quick examples of what this accomplishes:

Global

  • Clockwise = Right
  • CounterClockwise = Left
  • Front Button + CW = Down
  • Front Button + CCW = Up
  • Front Button = Enter
  • Side Button
    • < 1 second = Back
    • 1 second = Escape
    • 3 seconds = connect to BT DUN model
    • 5 seconds = hibernate
Fullscreen Video

  • CW = Volume Up
  • CCW = Volume Down
  • Front Button + CW = Skip Forward
  • Front Button + CCW = Skip Backward