One situation that comes up time and time again is the limited output voltage and current of the Arduino. It is rated at 5V and 40mA, but some versions (Due, Teensy LC/3.1/3.2) have only 3.3V outputs. Rated current for the Teensy LC is only 5mA. Many common devices require higher voltage or current in order to operate. An example is the typical power MOSFET, which may have a gate threshold voltage of over 4V. Devices requiring higher current might include small relays or optically-coupled Solid State Relays.
One solution is to use an external Darlington array, such as the ULN2003A, or the ULQ2803A, to drive the high current device. Since they are open-collector transistors, you can pull the outputs up to any voltage you need within the 50V output voltage range. An example is driving a power MOSFET having a gate threshold voltage of around 4V, but requiring up to 12V to fully turn on.
In this design, R1 prevents the MOSFET from turning on when the power comes up. Without it the MOSFET will turn on as soon as power is applied, and won't get turned off until the Arduino sets the pin to output and sets it high. In practice this is not noticeable, especially with a relay load, as the transistor will only be on for a few microseconds. It bears mentioning, though.
Another application is a relay driven load that uses a 12V relay to control a higher current load. In this case, the relay is driven by the ULQ2803A and the load is driven by the relay. The load could be anything, such as a large motor contactor (relay), or an irrigation solenoid valve. The circuit powers up with the relay off, so no special initialization is required.
The advantage to the relay is that AC loads may be controlled, whereas with the MOSFET only DC loads may be driven. The relay coil must not draw more than 500mA, the dissipation of the pin on the ULQ2803A must not exceed 1W, and the total power dissipation must not exceed 2.5W. Diode D1 protects the ULQ2803A from the inductive kick-back of the relay coil. The device has built in "free-wheeling" diodes, but my experience is that the device can still be damaged by the kick-back from a relay coil. The overvoltage from the inductive kick-back is absorbed by the power supply, and all of the current generated goes through those diodes.
For larger relays it might be practical to combine the two circuits, with the MOSFET driving the relay. The output of the 12VDC power supply must be enough to supply all of the relays that will be energized at the same time. Small PC mount relays typically draw around 35 to 70mA @ 12VDC so plan accordingly. You can, of course, use any relay having a coil voltage less than the rated voltage of the MOSFET.
With load currents of more than a few hundred mA, a heatsink should be used on the MOSFET to keep it from overheating. An example board utilizing some of these circuits is shown below. It drives 5 SSRs and 5 MOSFETS. The MOSFETS drive 12VDC PC mount relays at 50mA each. A touch of the power switch starts a power-up sequence that turns one SSR on every 2 seconds to limit the total inrush current to the system.
These are not the only ways to interface an Arduino, but they are common, and are suitable for many projects which require higher power than the Arduino can manage. For reference, the ULN2003A and ULQ2803A pinouts. The only difference is the number of transistors. The ULQ2803A has 8 Darlingtons, while the ULN2003A has 7.
See also: Relays for a bit about the boards available.