Arduino Uno · Relæstyring

Styr et 4-kanals relæmodul med Arduino

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.

Det skal du bruge

  • Arduino Uno (klon eller original) + USB-kabel.
  • 4-kanals 5V relæmodul (typisk aktiv LOW på IN1–IN4).
  • Jumperledninger (han→han) + evt. breadboard.
  • Ekstern DC-forsyning til belastningen (fx 12V laboratorieforsyning).
  • Belastning (fx DC-motor / viskermotor) og ledninger til stærkstrømsiden.
Strømforbrug og forsyning
Hvert relætræk bruger ca. 72 mA. Fire relæer ~ ~300 mA inkl. status-LED’er. Forsyn Arduino med net-adapter ved relæbrug – USB alene er ofte ikke nok.

Hvad er et relæ?

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).

Symbol for relæ med coil-terminaler og kontaktsæt C/NC/NO
Figur 1. Relæsymbol: 2 coil-terminaler (styring) og 3 kontaktterminaler (C/NC/NO).

Når relæet ikke er aktiveret, er C forbundet til NC. Når relæet aktiveres, skifter forbindelsen til C↔NO.

Galvanisk adskillelse

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.

Eksempel
Når Arduino sætter IN1 = LOW, løber en lille strøm gennem relæspolen (typisk 70 mA ved 5 V). Magnetfeltet lukker kontakten, så fx en 12 V motor får strøm. Arduinoens signal og motorens strøm er helt adskilt.

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.

4-kanals relæmodul: stik og logik

4-kanals relæmodul: stærkstrømsskrueterminaler, jumper, Vcc/GND/IN1–IN4
Figur 2. Relæ 1’s forbindelser
Rød foroven: stærkstrømsside (NC/C(midten)/NO),
Rød til højre: jumper (Vcc-Vcc)
samt Grøn: Vcc/GND/IN-ben til styring.
  • Grøn: Vcc → 5V, GND → 0V, IN1–IN4 → hver sin digital Arduino-pin.
  • Typisk Grøn: aktiv LOW: IN1 = LOW aktiverer relæ 1, IN1 = HIGH deaktiverer. (Samme for IN2–IN4).
  • Rød øverst: Kontaktsæt pr. relæ: op til ca. 10 A (tjek altid dit modul).

Tilslutninger (oversigt)

Arduino 5VVcc (relæmodul)
Arduino GNDGND (relæmodul)
Arduino D7..D10IN1..IN4 (ét pr. relæ)
Ekstern forsyning +12Vtypisk til C (kan være til NO (afhængigt af ønsket logik))
Ekstern forsyning 0VBelastning / GND

Arduino-pins leverer kun få mA → de driver relæmodulets indgange; selve belastningen får strøm fra den eksterne forsyning.

Eksempel 1 · DC-motor via relæ

Ekstern laboratorieforsyning koblet sammen med relæmodul
Figur 3. Ekstern DC-forsyning bruges sammen med relæ til belastningen.
DC-motor koblet til relæ; NC giver 0V/0V, aktiveret relæ giver 12V/0V → rotation
Figur 4. DC-motor koblet til C/NO/NC. Deaktiveret (NC): motor står stille (0V på begge terminaler). Aktiveret: 12V på den ene terminal → motor kører.
Drejeretning
Den viste kobling giver én drejeretning. Ønsker du begge retninger, brug et H-bridge modul i stedet.

Eksempel 2 · 12V viskermotor

12V viskermotor på laboratorieforsyning, relæ tænder/slukker
Figur 5. 12V viskermotor forsynes fra laboratorieforsyning; tænd/sluk via relæ.

Kode: styr relæer (aktiv LOW)

// 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);
}
Logiktest uden belastning
Sæt midlertidigt en LED + 330Ω fra Vcc til INx. Når relæet aktiveres (INx = LOW), bør den indikator-LED slukke (pull-down).

Eksempel 3 · 2xAAA batteri + LED + R

Svagstrømsforsøg med batteri, led og resistor
Figur 6. Svagstrømsforsøg med batteri, led og resistor

Fejlfinding og sikkerhed

  • Relæ klikker ikke: Tjek at 5V og GND er korrekt forbundet til modulet, og at du sætter INx til LOW.
  • Arduino genstarter: Strømforbrug for højt – brug net-adapter til Arduino, ikke kun USB.
  • Motor kører ikke: Tjek C/NO/NC-klemmer, og at ekstern forsyning er tilsluttet og indstillet korrekt.
  • Støj fra motor: Brug ledningsføring i korte stræk, del GND-reference, og overvej snubber/TVS på stærkstrømssiden hvis nødvendigt.
Vigtigt
Denne vejledning dækker DC-belastninger. Arbejd ikke med netspænding, medmindre du er kvalificeret og har korrekt udstyr.

Pin-oversigt (hurtigt overblik)

D0–D1: Serial (undgå til relæindgange) D2–D13: Digitale styringspins GND: Fælles jord (Arduino ↔ relæmodul ↔ ekstern forsyning) 5V: Forsyning til relæmodul (Vcc)