Raspberry Pi CarPlay Touchscreen
Incorporate a touch screen, navigation, and entertainment system into a 2007 Tacoma while maintaining current sound system
Goals and Requirements
Intuitive UI
Touch screen
Wireless Apple CarPlay
Integrate with Camera and Sensor System
Re-use current stereo components
Smooth and seamless functionality to avoid distractions or other safety concerns
Visually appealing; not obviously DIY
Before (Standard Double-DIN Stereo)
Finished Installation
Design Considerations
Although Spotify and navigation apps are possible on Raspbian OS, CarPlay is much better to use
Without CarPlay, many of the functions are less possible due to a current lack of support for ARM devices
Carlinkit wireless CarPlay dongle works with LineageOS, so that seems to be the best option available for CarPlay purposes
Current build of KonstaKANG LineageOS has issues with camera support, which prevents the use of this Pi for the camera system
Sensor integration is possible using GPIO with scripting in LineageOS, but it is not well documented
For proof-of-concept build and ease of construction, it may be best to have one Pi with LineageOS to run CarPlay, and a separate Pi to handle sensor communication and the camera system
Double-DIN stereo can be disassembled and reduced in size to tuck behind the touch screen in the dash board
Audio can be primarily bluetooth, enabling steering wheel controls to remain functional
Full Build Process
Components
Sunfounder 10.1" USB Touch Screen
Raspberry Pi 4 running LineageOS
Carlinkit USB CarPlay Dongle
DC-DC 12V Buck Converter to supply a constant clean 12V supply
Mausberry 4 Amp Car Supply for safe shutdown of Pi
Kenwood DBX500BT Stereo
LineageOS build developed by KonstaKANG
Raspberry Pi and CarPlay Dongle
Sunfounder 10.1" Touch Screen
Initial Testing
Initially attempted to use Raspbian OS
Spotify web application was made possible with some Python workarounds
Although navigation apps are available, the Pi would need standalone GPS functionality and would likely not have a very developed or user-friendly interface
CarPlay
Install LineageOS for the Raspberry Pi
Install the APK for Carlinkit dongle
CarPlay functionality extremely simple and plug and play
Connect Pi to the USB touchscreen with USB and HDMI
Pi is powered by the touchscreen power output during testing
Stereo
Double-DINStereo is much too large to hide behind the touch screen with the other components needed
With the CD player removed, the face plate control PCB is unable to move due to the orientation of the edge connectors
After hours of researching to attempt to find a similar connector, I found that it is likely a proprietary connector not available
With some careful Dremel work, I removed one plastic wall of the connector to allow for a flat orientation as opposed to 90 degrees, and stabilized the faceplate in position with standoffs
Disconnected the rotary encoder volume/control knob to be relocated below the touch screen
Dismantled Stereo with CD Player Removed
Modified Face Plate Connector
Stereo with Re-oriented Face Plate
Testing
Crude temporary mount made from scrap sheet metal from other projects for proof of concept
Spliced the buck-boost converter into a DC car charger to power the system
First System Test
Proof of Concept Mounting Plate
Proof of Concept Power Supply and Mounting Plate
Final Assembly
Modified the dashboard double-DIN face plate with some less careful dremeling to mount the touch screen
Mounted the touch screen to the face plate with standoffs
Mounted the buck-boost converter and touch screen PCB to fit inside dash
Added dual fan cooling case to Pi to prevent overheating
Dash Removed to Route Cables for Pi and for Electrical System Work
Modified Dash Face Plate to Mount Touch Screen
Touch Screen and Buck Boost ConverterMounted to Dash Face Plate
Pi and Dongle Hidden Below Console False Bottom
Future Improvements
Replace physical brightness adjustment buttons with transistors and photoresistor to auto-adjust brightness relative to ambient conditions*
Model and 3D print dash faceplate for embedded screen rather than floating screen*