Courtesy by Henrik Kristensen, aka HEK.
Relæ = kontakt styret af en lille strøm i en spole.
Brug Arduino til at tænde/slukke større DC-belastninger via et relæmodul.
Et relæ har en spole (coil) på lavstrømssiden og et kontaktsæt på stærkstrømssiden: C (common), NC (normally closed) og NO (normally open).
Når relæet ikke er aktiveret, er C forbundet til NC. Når relæet aktiveres, skifter forbindelsen til C↔NO.
Galvanisk adskillelse betyder, at der ikke er en direkte elektrisk forbindelse mellem to kredsløb — i stedet overføres styresignalet magnetisk eller optisk, så strøm ikke kan løbe frit mellem de to sider.
I et relæ sker denne adskillelse ved, at spolen (lavspændingssiden) og kontaktsættet (højstrømssiden) er fysisk adskilt. Spolen skaber et magnetfelt, der trækker en lille jernarmatur, som mekanisk lukker eller åbner kontaktsættet. Derved styres den store strøm kun indirekte — uden elektrisk forbindelse mellem Arduino og den kraftigere kreds.
Derfor er det sikkert: Den galvaniske adskillelse beskytter mikrokontrolleren og brugeren mod fejlstrømme, støj og potentielt farlige spændinger. Hvis noget går galt på belastningssiden — fx kortslutning eller spikes fra en motor — kan strømmen ikke løbe “tilbage” i Arduinoens kredsløb.
Nogle relæmoduler forstærker denne sikkerhed yderligere med en optokobler mellem Arduinoens indgang (IN1–IN4) og selve relæspolen. Optokobleren bruger lys i stedet for ledning til at overføre signalet, hvilket giver dobbelt galvanisk isolation.
Arduino-pins leverer kun få mA → de driver relæmodulets indgange; selve belastningen får strøm fra den eksterne forsyning.
// Relæmodul typisk aktiv LOW: LOW = træk/aktiver, HIGH = slip/deaktiver
const int RELAY1 = 7; // IN1
const int RELAY2 = 8; // IN2
const int RELAY3 = 9; // IN3
const int RELAY4 = 10; // IN4
void setup() {
pinMode(RELAY1, OUTPUT);
pinMode(RELAY2, OUTPUT);
pinMode(RELAY3, OUTPUT);
pinMode(RELAY4, OUTPUT);
// Start med alle relæer slukket (HIGH = deaktiveret for aktiv-LOW)
digitalWrite(RELAY1, HIGH);
digitalWrite(RELAY2, HIGH);
digitalWrite(RELAY3, HIGH);
digitalWrite(RELAY4, HIGH);
}
void loop() {
// Tænd/sluk en belastning på RELAY1 i 2 sek intervaller
digitalWrite(RELAY1, LOW); // aktiver
delay(2000);
digitalWrite(RELAY1, HIGH); // deaktiver
delay(2000);
}
// Sekvens over flere relæer
void step(int pin, unsigned on_ms, unsigned off_ms){
digitalWrite(pin, LOW); // aktiver
delay(on_ms);
digitalWrite(pin, HIGH); // deaktiver
delay(off_ms);
}
void loop(){
step(RELAY1, 800, 200);
step(RELAY2, 800, 200);
step(RELAY3, 800, 200);
step(RELAY4, 800, 800);
}