Controlling a relay with a microcontroller (e.g., Arduino, ESP32, Raspberry Pi Pico) is a fundamental skill for switching high-voltage devices (like lights, motors, or appliances) safely. Here’s a step-by-step guide:
1. Key Components
- Microcontroller (Arduino Uno, ESP32, etc.)
- Relay Module (Optically isolated, e.g., 5V or 3.3V compatible)
- Power Supply (For the high-voltage side, if needed)
- Load (Bulb, fan, etc.)
- Breadboard & Jumper Wires
2. Relay Wiring
Most relay modules have:
- Control Pins: VCC, GND, IN (signal)
- Load Pins: COM (common), NO (Normally Open), NC (Normally Closed)
Connections
Load Wiring
COM → High-voltage power (e.g., 120V AC)
NO → Load (e.g., bulb) → Return to neutral
https://i.imgur.com/JQ8WzVl.png
(Always keep high-voltage wiring insulated!)
3. Example Code (Arduino)
cpp
const int relayPin = 2; // GPIO D2
void setup() {
pinMode(relayPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
// Turn relay ON (closes circuit)
digitalWrite(relayPin, HIGH);
Serial.println("Relay ON - Circuit CLOSED");
delay(2000);
// Turn relay OFF (opens circuit)
digitalWrite(relayPin, LOW);
Serial.println("Relay OFF - Circuit OPEN");
delay(2000);
}
4. Example Code (ESP32/ESP8266 - MicroPython)
python
from machine import Pin
import time
relay = Pin(2, Pin.OUT) # GPIO2
while True:
relay.value(1) # ON
print("Relay ON")
time.sleep(2)
relay.value(0) # OFF
print("Relay OFF")
time.sleep(2)
5. Important Considerations
A. Relay Module Types
Active LOW vs. Active HIGH:
- Some relays trigger when IN is LOW (LOW = ON). Check your module’s datasheet.
- Adjust code: digitalWrite(relayPin, LOW) to turn ON.
B. Power Isolation
- Use an optocoupler-based relay module to protect your microcontroller from high-voltage noise.
- Avoid sharing GND between high-voltage and microcontroller circuits.
C. Flyback Diode
If controlling inductive loads (motors, solenoids), add a diode across the relay coil to prevent voltage spikes.
6. Advanced Control
A. PWM Control (For Solid-State Relays)
cpp
analogWrite(relayPin, 128); // 50% duty cycle (for SSR)
B. WiFi/Bluetooth Control (ESP32)
python
# ESP32 with Web Server (MicroPython)
import network
import socket
from machine import Pin
relay = Pin(2, Pin.OUT)
sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
sta_if.connect("WiFi_Name", "Password")
def web_page():
html = """<html><body>
<a href="/on"><button>ON</button></a>
<a href="/off"><button>OFF</button></a>
</body></html>"""
return html
s = socket.socket()
s.bind(('0.0.0.0', 80))
s.listen(5)
while True:
conn, addr = s.accept()
request = conn.recv(1024)
if "/on" in request:
relay.value(1)
elif "/off" in request:
relay.value(0)
conn.send(web_page())
conn.close()
7. Troubleshooting
Safety Tips
- Never touch high-voltage terminals when powered.
- Use insulated wires for AC connections.
- Double-check wiring before powering on.
Applications
- Home automation (lights, fans).
- Industrial control systems.
- DIY projects (coffee maker timer, etc.).
Top comments (0)