Relais

Een relais is een schakelaar, waarmee je met een klein signaal een groot vermogen kunt schakelen. Bijna alle relais kunnen 230 volts apparaten aan- of uitschakelen. Meestal bestaat een relais uit een spoel, die een contact opent of juist sluit. Omdat de spoel veel stroom trekt, moet je deze nooit op een programmeerbare pin van de Arduino aansluiten. Het kan het meestal wel tussen VCC en GND, maar beter is het om een externe voeding te gebruiken. De derde pin sluit je wel aan op een pin van de Arduino, want daarmee bestuur je dan de schakelaar. Doorgaans is 3,3 volt ruim genoeg om te schakelen dus kun je ook 3,3 volts Arduino's of de nodeMCU zonder problemen gebruiken.
Veel relais hebben aan de vermogenskant drie (schroef)aansluitingen, waarvan je er doorgaans maar twee zult gebruiken. De drie aansluitingen geven je de mogelijkheid een schakelaar te maken die normaal open staat (normally open: NO) of juist een die normaal dicht staat (normally closed: NC). Als de opschriften NO en NC ontbreken, ga er dan vanuit dat de middelste aansluiting gemeenschappelijk is. Met een ohmmeter kun je eenvoudig meten welke van de andere twee uitgangen hiermee verbonden is als er geen spanning op het relais staat. Dat is dan de NC schakelaar. Soms zie je een schakelschema bij de uitgang(en) staan.
Duidelijke markeringen bij uitgangen viervoudig relais
In het voorbeeld hiernaast is dat zo. Je ziet direct dat bij elk relais het linker paar aansluitingen normaal dicht is en het rechter paar normaal open. Het is de bedoeling dat je de keuze voor NO of NC zo maakt, dat als de voeding wegvalt er geen gevaarlijke of rare situaties kunnen ontstaan.

Een voorbeeld van wat u met de Arduino en een relais zou kunnen doen:
U wilt zodra het donker wordt buiten een heleboel lampen laten aangaan. U zou dan een lichtgevoelige weerstand kunnen gebruiken. Als de weerstand hiervan boven een bepaalde waarde komt zou u het signaal op het relais omhoog kunnen laten gaan, zodat alle lampen aangaan. Bij dit soort toepassingen moet u wel altijd een hysterese toepassen. Dat wil zeggen dat uw programma pas moet uitschakelen bij een hogere weerstand dan u voor het inschakelen hebt gebruikt. Als u dat niet doet dan zal het relais een tijdlang steeds in- en uitschakelen.
Als u spanningen van meer dan 24 volt wilt aansluiten op het relais dan moet u het relais deugdelijk afschermen, bijvoorbeeld door er een kastje omheen te bouwen. Daarnaast moet u de kabels van een trekontlasting voorzien. Als u een 12 volt accu gebruikt dan hoeft dat niet - al kan het geen kwaad i.v.m. mogelijk kortsluiting.
Tip: voordat u iets aansluit kunt u uw programma testen, door te luisteren. Als het relais schakelt is dat goed te horen. Vaak brandt er een led op het relais dat aangeeft dat het relais "aan" is. Wat ook mogelijk is dat u tijdelijk een ohmmeter gebruikt om het inschakelen te verifiëren.

Een enkel relais

Bij dit relais kon ik met moeite aflezen wat NO en NC is, maar met een ohmmeter weet je het zo. Op de Arduino kant zijn met moeite een minteken en een plusteken te zien. Die gaan dus naar GND en VCC. De andere pin kan worden aangesloten op elke gewenste pin van de Arduino. Ik gebruik hiervoor digitale pin D2. Voor het testen van een relais heb ik het blink programma (met lange pauzes) gebruikt, zoals je hieronder ziet. Na enige tijd zal het geluid van het relais wel gaan storen. Maar in een praktijksituatie zal meestal veel minder geschakeld worden. Dit relais schakelt zoals je zou verwachten: HIGH is aan en LOW is uit, maar dat is vaak andersom (zie hieronder bij meer dan een relais).
#define Relais 2
void setup() {
  pinMode(Relais, OUTPUT);
}

void loop() {
  digitalWrite(Relais, HIGH); // zet het relais aan
  delay(3000);
  digitalWrite(Relais, LOW);  // zet het relais uit
  delay(3000);
}

Meer dan één relais

Vier relais in één
Een voordeel van meerdere relais op één bordje is dat je VCC maar een keer hoeft aan te sluiten. Als er veel relais tegelijk gebruikt worden, moet er veel stroom geleverd worden. Gebruik hier liever een externe voeding voor dan de Arduino. Mijn beide relais hebben een jumper. Als je die eraf haalt dan kun je alles testen zonder dat er feitelijk iets geschakeld wordt. De lampjes blijven wel werken.
Normaal sluit je alle signaalpinnen aan op verschillende pinnen van de Arduino. Als alle relais gelijktijdig moeten schakelen dan kun je wel dezelfde pin nemen. Een denkbare toepassing is dat lampen in verschillende ruimtes op een verschillend tijdstip moeten aangaan. Ik testte een duo relais en een viervoudig relais. Het werk allemaal probleemloos.

Ik heb dit keer een testprogramma gemaakt waarmee je de relais erg goed kunt testen. Je typt het nummer in, in de Seriële monitor en het betreffende relais schakelt om. Stel hiervoor de Seriële monitor in op 9600 baud en geen regeleindes.
Het programma ziet er wat ingewikkeld uit. Dat komt doordat er allerlei nummeringen door elkaar lopen. De relais zijn genummerd vanaf 1; de pinnen vanaf 2 omdat je pin 1 niet kunt gebruiken en de ASCII waarde 49 komt overeeen met het cijfer 1. Het array relais begint op 0, maar voor de leesbaarheid en efficiëntie van het programma gebruik ik element 0 domweg niet. De index van het array is dan het relais-nummer.

Als je meerdere relais tegelijk wil aansturen zend dan iets op als 1234.
monitorInvoer en uitvoer
Zowel mijn dubbele als mijn viervoudige relais gaan AAN (spoel bekrachtigd) als de pin LOW is. Dat is bij veel relais zo. Alleen als je HIGH als UIT beschouwt kloppen de aanduidingen normally Open en Normally Closed op het relais. Je zou zeggen dat dit een probleem is: als de verbinding naar de pin los zou schieten dan kan het gevaarlijk zijn als bepaalde apparatuur aangaat. Dat gebeurt gelukkig ook niet: een losse pin wordt automatisch naar VCC getrokken. Misschien is het goed om het even samen te vatten: als er helemaal geen spanning staat op het relais dan blijft Normally Open open en Normally Closed dicht. Als er wel spanning op het relais staat dan gebeurt hetzelfde als de betreffende pin los niet is aangesloten of hoog is.
// Relais testprogramma voor een willekeurig aantal relais
#define Aantal 6 // Zet hier het aantal relais dat je gebruikt (maximaal 9). Sluit de relais aan op pin D2, D3, enz.
boolean relais[Aantal + 1]; // Dit array houdt bij of het relais aan of uit staat; plaats 0 wordt niet gebruikt
void setup() {
  for (byte Nr = 1; Nr <= Aantal; Nr++) {
    pinMode(Nr + 1, OUTPUT);
    digitalWrite(Nr + 1, HIGH); // Begin met alle relais uit (HIGH = uit; LOW = aan)
    relais[Nr] = HIGH;
  }
  Serial.begin(9600); // Stel de Seriële monitor in op geen regeleinde
}

void loop() {
  if (Serial.available()) {
    byte Nr = Serial.read();
    if ( (Nr > 48) && (Nr <= 48 + Aantal) ) {
      Nr -= 48; // Vertaal naar een getal tussen 1 en Aantal
      relais[Nr] = !relais[Nr]; // Bewaar de nieuwe stand van het relais
      Serial.print("Relais "); Serial.print(Nr); Serial.print(" is ");
      if (relais[Nr]) Serial.println("uit."); else Serial.println("aan.");
      digitalWrite(Nr + 1, relais[Nr]); // En zet het relais in de nieuwe stand
    }
    else Serial.println("Niet bestaand relais.");
  }
}