Personal build
Arduino Volume Switch for My Car
My 2003 Acura RSX has no steering wheel controls, so I built a physical volume control out of a junkyard sunroof switch and an Arduino.
- My role
- Everything: design, wiring, and code
- Built with
- Arduino Nano clone (ATmega328P), factory sunroof switch, 12V to 5V buck converter, 1A inline fuse
Highlights
- Repurposed a 2003 Acura RSX sunroof switch (part M20778) and mounted it in the blank fog light switch cutout, since my car has no fog lights
- An Arduino Nano clone (ATmega328P) reads the switch inputs and sends volume up and down commands to the head unit's steering wheel control input
- Powered from the car's 12V cigarette lighter wiring through a buck converter that steps it down to 5V
Features
- Tap: volume up or down one step
- Long hold: continuous volume up or down
- Short hold, then release: next or previous track
- Double tap up: Siri
- Double tap down: mute
How it works
- Sunroof switchPress up or down, mounted where the fog light switch would go
- Pins D3 and D5Arduino Nano clone (ATmega328P)Reads the switch and decides which command to send
- Pin D7JVC KW-M560BTReceives the volume commands on its steering wheel remote wire
- Works with
- JVC KW-M560BT head unit
Technical deep dive
- Pin layout: switch down on D3, switch up on D5, signal out to the JVC on D7
- The timing and basic volume codes came from an AVForums thread. I found the rest by scanning all 128 codes (0x00 to 0x7F) on the head unit with a scanner tool, sending one code at a time and watching the screen. That found mute (0x0E), the voice assistant (0x1A), and CarPlay track skip forward and back (0x12 and 0x13), which the thread didn't cover for this model
- Mute needed a single-repeat send, otherwise it undid itself instantly. No scanned code pauses playback, so mute is the closest option
What I learned
- Reading signals from a rocker switch through an Arduino
- Improving my soldering skills
- Testing circuits with a multimeter