I have a project that (in part) will drive 3 LEDs where the LED anodes are at 12V. The thought is to drive each LED by connecting each cathode to a 650 ohm resistor, and connect that to an Arduino DIO pin which, when needed, is set to output LOW. Arduino VIN = same 12V with common ground. Am I going to have an Arduino problem of any sort?
No, what you propose will not work. And it risks damaging your Arduino.
Normally you would include a single transistor which the Arduino uses to control the power through the LEDs. This removes the 12V from the Arduino and turns the output into an actual switch.
The problem is that the Arduino's GPIO isn't just a single transistor. It is (amomgst other things):
- Two complimentary transistors (that's the C in CMOS) for HIGH and LOW switches
- ESD Diodes
- Input buffer
By just adding the one transistor like this:
the 12V is kept well away from the Arduino. Setting the output HIGH will turn on the transistor, allowing the current to flow to ground. Setting it LOW with turn it off, blocking the flow of current and switching the LEDs off.
Further: the Arduino's GPIO has a maximum sustained current of 25mA. Ideally you don't want to even come anywhere near this. By adding the transistor it acts as a buffer and allows you to deal with much higher currents - and hence more, and brighter, LEDs.
Incidentally, R1 in that schematic is there solely to keep the transistor off when the Arduino is not actively driving the output - e.g., when it's either unpowered or is running the bootloader - or you happen to have the GPIO in INPUT mode (as it defaults to).