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)