Electronics & Software
[Part of my Car Hacking project series]
I have a large and growing set of electronics -- audio and computer/carputer/Car PC gear -- in my car. Here's some information about it (its a Mazda MAZDASPEED3).
Car PC/Carputer Overview
- A fully custom setup, with most components in the hatch/trunk area and a touchscreen and control panel custom fabricated into the dash
- Based on Windows XP (for the sheer availability of software), augmented with custom code, skins, and configurations for the various apps I'm running), running on an Atom-based micro-ATX motherboard
- Tons of input capability; audio in, mics, webcam, OBDII hookup to the car, GPS, Space Navigator, arcade buttons, lots of free USB ports in convenient areas
- WiFi and 3G WAN connectivity for web browsing, Twitter clients, IM clients, VoIP, video chat, whatever
- maps and turn-by-turn navigation
- virtual gauges hooked directly to the car's ECU and OBDII bus
- all the media stuff -- video, audio, tons of file formats, visualizations, etc.
- A bash shell!
- voice recognition/command
- Direct-connected iPod/iPhone to both the head unit and the PC
- games, with a controller
- glovebox-stored wireless keyboard with built-in trackpad, as well as hard buttons in the center console, makes input easier when the touchscreen doesn't cut it
- system hibernates when car is turned off, comes up when its turned on, etc.
- can also be used for whatever other thing you want to use Windows for
About the install
Here's how everything is laid out:
- Main PC is mounted on a false floor in the trunk, along with the stereo amp, all the wiring, and the subwoofer box. I did it this way so I would have easy access and more room for stuff in the trunk, without having to take apart the dashboard every time I want to do something to the PC.
- There is a USB hub inside the dash, which supports the GPS receiver, the OBDII unit, a USB sound card, a webcam, and some external input ports; generally all the USB stuff needed toward the front of the car is buried in the dashboard. This is all wired back to the trunk area with a single 10' USB cable.
- There's also a USB hub in the hatch area, for the rest of the peripherals (including network adapters), as well as one in the center console
- The touchscreen is custom-mounted inside a double-din dash replacement piece that is available for the JDM version of the car (not in the US). The VGA and USB lines run along the center hump.
- A custom control panel is mounted in the center console, replacing a pair of cup holders, with a number of different input controls and an auxiliary LCD output
- The DC-DC power supplies (one in the trunk, one in the center console) power not only the PC but also the USB hubs, touchscreen, and LCD via 5 and 12V outputs; tons of wiring for this
- Steering wheel controls for the audio, controlling the Alpine head unit
- Lots of external inputs, USB, audio line, and iPhone jacks in the center storage console, expansion points in the trunk
- I use the AUX on my head unit for the PC audio, so I still have the standard FM capability/ease-of-use of a regular in-car OEM system (see the audio system
- Liliput 629GL-70NP 7" touchscreen
- Intel D945GCLF2 Atom micro-atx low-power motherboard
- M2-ATX DC-DC power supply
- Seagate 320GB 5400 RPM SATA 3.0 laptop drive
- 2G DDR2 SDRAM
- BU-353 GPS receiver
- Several small d-link 7-port USB hubs
- A shitload of 16 gauge wire, red and black
- LinkSys USB Wireless N adapter
- Adesso SlimTouch Wireless keyboard with integrated touchpad
- Logitech game controller
- Elmscan 5 USB OBDII transceiver
- Verizon 3G USB modem
- SWI-JACK steering wheel control module
- Space Navigator input device
- Arcade buttons with a MINI-PAC key encoder
- SparkFun 16x2 LCD
- Plus all the stuff in the audio system
As far as audio-only goes, I have a pretty-good aftermarket audio system, sounds great but didn't cost a ton:
- JL 10w3v3 subwoofer
- JL G4500 500W 4-ch amplifier
- CDT CL-61A 6.5" component speaker sand tweeters for the front
- Alpine IDA-X100 head unit (MP3/USB/iPod/AUX-only)
- KnuKonceptz power cabling (4 and 8 ga)and battery fuse block
- Rockford Fosgate power distribution in trunk
- StreetWires Zero Noise RCA interconnects, 1 4 channel cable and 1 2 channel cable
- Alpine IDA-X100 digital media head unit
The system gives me plenty of input options, except for a CD, by design, and I use it primarily with my Car PC on the AUX line (hard-wired from a USB sound card in the dash). The amp and power distribution is in the hatch, more details as part of my install overview.
In the top part of the dash, I took out the factory head unit and replaced it with a double-din-capable dash piece I got from a guy in Japan. I took apart the Liliput touchscreen and built it into the back of the double-din piece, which meant I was able to use the bezel that came with the screen, once cut up a little bit. It ended up coming out fairly well, as you can see in the pics.
I put the new Alpine head-unit in an area in the center console previously housing a lighter, coin tray, and other useless stuff, which required fabrication of a mount for the unit, and a plexiglass trim piece to frame it in. I also put a few turn-on switches here (one for the head unit and one for the PC). All of this involved some serious cutting up of the center console. I used plexiglass specifically to give it the gloss black look to match my piano black factory trim.
I made a panel to fit the opening in which a pair of cup holders sat originally, and replaced it with the Space Navigator, a pair of arcade buttons wired to a Mini-PAC key encoder, and an LCD screen. This bolts into the plastic and ends up sitting nicely in the center console down where it is easily accessible, just to the rear of the shift knob.
In the hatch area, I took out the floor and the spare tire and built a custom sub box and a false floor. The top of the sub box sits higher than the false floor, such that with the equipment mounted on the floor, the trim panel that forms a false floor on top of that (with 3-4 inches between) sits flush with the top of the sub. This gives an overall flat floor in the hatch, with a recessed sub cone and a recessed tray of sorts for all of the equipment. This gives me an area in which to mount the current as well as any future electronics in the trunk, in a nice and stable place with plenty of room for reconfiguration, new equipment, whatever. I intentionally set it up this way rather than cutting trim panels to fit specific equipment, as I am sure things will change with the install over time.
To connect all of this, I had the car completely apart and installed all of the wiring that way. And, through it all, I only ended up scuffing a few spots, nothing noticeable compared to the damage its possible to do when taking your car apart over and over again.
This thing is Windows XP. I debated this for a long time, having wanted to use MacOS or some kind of Linux flavor. In the end, though, there just isn't as much software available for the other platforms. Its nice to be able to write code and all, but unless you want to write a ton of stuff and make the coding a majority-time hobby as well, go with Windows (I already have enough coding side projects). The front-ends for Windows are definitely nicer.
The main software in my system is:
- Windows XP, the OS
- A custom app I call car-d (open-sourced on github)
- Centrafuse, the front-end to just about everything. More on my Centrafuse setup and customizations is on this page.
- DashCommand, for virtual gauges via OBDII connectivity to the car. More on my DashCommand setup and customizations is on this page.
- XPort, for managing virtual COM port connectivity across system hibernations
- SyncToy (sort of like rsync for Windows), for getting media moved around between the house and the car
Software Configuration & Setup
Getting the PC running the way I wanted it took more time than I thought it would, and I didn't even do a whole heck of a lot. Notable things:
- lots of time spent customizing basic windows setup to deal with having multiple network interfaces, doing auto-login (via TweakXP) so I can support Remote Desktop Connection, disabling as many Services as possible, and generally making sure things were clean and simple
- built two completely custom dashboards for DashCommand, to give me the custom gauges you see in various pictures and screenshots (read more/download)
- I tweaked a bunch of image files to give me good logo assets I could use in different places -- MAZDASPEED as well as standard Mazda "Flying M" logo. (read more/download)
- some various other graphics, sounds, fonts, what have you, to give it a little more of an OEM look (also here)
- Centrafuse on its own required a pretty decent amount of setup, both skin edits as well as the application config (read more/download)
- Using XPort for GPS serial port management was key to avoiding hibernation problems with my USB/serial devices
- I also by the way skinned my Alpine head unit, which was fun (read more/download)
The main things I may still do are modify the boot/hibernate/etc screens via some customization tool, and modify the BIOS logo. I haven't done this so far because I still have back-burner plans ot power the LCD on via a relay that would be triggered by FusionBrain on Windows startup, so you'd never see anything prior to the shell regardless.
So again, feel free to download any of the stuff mentioned here and on other pages
Main things I learned and need to remember, if they're helpful:
- I was nervous about my strategy of putting USB hubs in different areas (a star wiring thing), and even though it did result in a lot of cabling, I definitely don't have any problems at all now in terms of extensibility options -- I pretty much have a spare port of various kinds in whatever part of the car I could possibly want.
- I would definitely recommend taking th einterior out of the car, even the floor. It makes all the wiring so much easier and really only takes a few hours to get the car apart.
- Don't both with dynamat craziness; I have some placed on flexible spots, and the doors are important, but I think the folks that coat the entire frame are wasting time and money.
- Though they came in and out pretty easy, all the plastic pieces inside the car take up a lot of room once they are out of the car; be careful not to scratch or otherwise mess them up when they are floating around your garage.
- Breaking shit gets expensive (I broke a touchscreen trying to get its custom mount set up, by applying too much force on it). Be really careful doing fab when there are expensive electronics involved; even when its late and you are putzing around the garage when you really should be in bed but you just want to get that one last thing done...
- Label all wires, and use barrier strips and plugs that can disconnect and connect easily; it takes up some room but it makes everything much easier and more organized
- There is a decent amount of debate on this, but I do think having a headunit separate from the PC is the right way to go. You're not always in the mood to have the PC boot up when you are going to the store for less than a minute. The getinandgo you get with a standard head unit is hard to beat
As soon as things started looking normal again, I started realizing how much else I wanted to do. Things on the plate:
- remote starter to get the PC powered
- PC wired into the ignition (via fusionbrain or make controller) so I can start the car from it (note that with the above that means I can remote start the PC and then IM the car to start it ;-))
- some refinishing work on the trunk
- Maybe I'll try and do something about bluetooth phone audio at some point
Work-in-progress stuff is in my mp3car.com work-thread.
There are a bunch more pics of the exterior, interior, mid-install, and screenshots of the PC in MY FLICKR STREAM.