The goal of this project it to create an Arduino based OBD port module that can be used to enhance a vehicles capabilites. For example, if you want door locks to close when moving faster than 5mph or to invoke/emulate certain CANbus buttons automatically at start up.
Thankfully, I had a MIDI connector and a high-speed optocoupler at hand, and with these I could implement a MIDI in rather easily. After some investigation with Arduino Uno, it seemed quite simple to receive the serial MIDI bytes and dump them over Arduino serial (I’ll write another post about this later).
However, Arduino cannot become a USB MIDI device very easily, so here comes the really nice part: Teensy LC can, and the Teensyduino add-on included a working USB MIDI and also serial MIDI libraries!
What I wanted the LUFA library to do was pretty specific – the atmega16u2 should show up as a virtual serial port so that the computer can connect and read data from it like any other serial port. All of the other ways of communicating over USB eg HID etc wouldn’t do it. There was one example that came with LUFA that fit the bill – VirtualSerial. There were a few problems with getting this example to run on the atmega16u2 so I’ll document them and what the fix was.
This pictures show the PCB. As you can see there are pins labeled as RX,TX,GND,3.3V. I simply connected an USB-Serial converter to the pins. The two other pins are GND and GPIO0. If you set a jumper between this two pins, the controller starts in bootloader mode.
The chip above is a NXP HC245, a 3-state Octal bus transceiver. It is used to drive the N-channel MOSFETS (20N06L – 20 A, 60 V, N−Channel DPAK).
The power supply is a 2 stage design. A AOZ1212 3A Simple Buck Regulator to convert the input voltage to about 5V and an AMS1117 low dropout voltage regulator to get 3.3V.
Jesus Echavarria wrote a how-to on adding a USB power port to a switch:
I want to start some projects with Arduino and IoT, so the first things I need is an Arduino board, an Ethernet shield and a switch to connect it to the net. Also I need a power supply for the Arduino board, and I think that, better than a external USB AC wall adaptor or power supply, is modify the switch to add it a USB power port that can power the Arduino board. I’ve got at home a TP-Link TL-SF1008D, a simple 8 port 10/100 Mbps switch. So, let’s go to open it and add it the USB port!