
Controlling a 16-channel relay module using Arduino
Controlling a 16-Channel Relay Module with Arduino
This project demonstrates how to individually control each relay on a 16-channel relay module using an Arduino Uno. This setup allows you to manage various AC or DC loads, making it suitable for applications like controlling lights, fans, heaters, or other electrical appliances. This guide provides a comprehensive walkthrough of the hardware, wiring, and code required to get your project up and running.
Hardware/Components
- Arduino Uno (Mega is also compatible, Nano and Mini are not recommended due to limited pins unless using a modified approach as demonstrated in a separate video.) (in video at 08:53)
- 16-Channel Relay Module (in video at 00:04)
- External Power Supply (capable of handling at least 1.5A) (in video at 02:12)
- Connecting Wires
- Loads (e.g., lights, fans, etc.)
Wiring Guide
The 16-channel relay module requires an external power supply to drive the relays. Connect the positive and ground of the external power supply to the VCC and GND pins of the relay module, respectively (in video at 12:55). The module's ground pin must also be connected to the Arduino's GND. Each relay channel on the module corresponds to a pin, numbered 1 through 16. These pins should be connected to the Arduino's digital pins as defined in the code (pins 2 through 12 and A0 through A4). (in video at 09:03) If you wish to power the Arduino from the same external power supply, connect the positive terminal to the Arduino's VIN pin. (in video at 13:24)
%%WIRING%%Code Explanation
The provided Arduino code controls the 16-channel relay module. It defines the pins connected to the relay channels, the relay's trigger type (LOW in this case), and a loop delay. The core functionality lies in the channelControl()
function, which allows you to turn a specific relay ON or OFF for a defined duration.
const int controlPin[16] = {2,3,4,5,6,7,8,9,10,11,12,A0,A1,A2,A3,A4}; // define pins
const int triggerType = LOW;// your relay type
Change triggerType
to HIGH
if your relay is high-triggered. (in video at 09:48)
void channelControl(int relayChannel, int action, int t)
{
// ... (code omitted for brevity)
digitalWrite(controlPin[relayChannel], state);
// ...
}
To control a specific relay, call the channelControl()
function with the relay channel (0-15), the desired action (1 for ON, 0 for OFF), and the duration in milliseconds. For instance, to turn relay 6 on for 2 seconds (in video at 11:53):
channelControl(6, 1, 2000); // turn relay 7 ON for 2 seconds
To control multiple relays simultaneously, use individual `digitalWrite` commands within the `loop()` function as shown below (in video at 09:03):
digitalWrite(controlPin[5], LOW); // relay 6 ON
digitalWrite(controlPin[2], LOW); // relay 3 ON
digitalWrite(controlPin[12], LOW); // relay 13 ON
Live Project/Demonstration
The demonstration (in video at 14:17) shows each relay activating sequentially. The serial monitor displays the status and activation time of each relay. You can modify the code to control specific relays based on your project requirements, such as turning on a heater when the temperature exceeds a certain threshold (in video at 16:24).
Video Chapters
- Introduction: 00:00
- Hardware Explained: 01:20
- How Much Load to Connect?: 05:37
- Relay Voltage Explained: 06:46
- Code Explained: 08:45
- Wiring Explained: 12:53
- Demonstration: 14:17
Images

Controlling 16 channel relay module using Arduino
Related Links
- How to use this relay with four wires
- How to use 5V Relay with Arduino to turn ON and OFF AC bulb or DC load
- Purchase 16 Channel relay module from eBay
- Purchase 16 Channel relay module from Amazon
- Purchase 16 Channel 5V, 12V or 24V relay module from AliExpress
- Purchase 16 Channel relay module from Banggood
- DIP 4-pin photocoupler
- ULN2803A Darlington transistor arrays
- LM2596 step-down voltage regulator
- 16-Channel Relay Module Schematic Diagram
- Solving a wiring problem with this module (YouTube video)
Comments will be displayed here.