Start Elkretssimulator Karnaughdiagram Quine McCluskey


Relä modul

Princip för ett relä

Ett relä fungerar som så att du styr en switch/omkopplare med hjälp av en elektromagnet. Du kopplar in en spänning till elektromagneten och då slår omkopplaren om. Du tar bort spänningen till elektromagneten och omkopplaren slår tillbaka. Poängen med detta är att du med en liten spänning på 12 volt till ditt relä kan styra en större spänning, t.ex. 220 volt, kopplat till relä'ets omkopplare. Med en liten spänning styr du en stor spänning. Det är vad du använder ett relä till.



Driva relä

För att driva ett relä från en utgång på en MCU så behövs en transistor som förstärker strömmen till relät. För att inte transistorn skall gå sönder behövs också en skyddsdiod över relä't. Detta därför att elektromagneten efter att den är laddad med ström (aktiv) kommer vilja behålla denna ström när du kopplar bort elektromagneten, dvs det kommer bli en strömrusning i motsatt riktning. Dioden kortsluter bort denna ström så att den inte hamnar i transistorn som då hade gått sönder. Mer utförligt hur drivsteg för relä funkar här.

Testa nedan krets i simulatorn.


Om man t.ex. kopplar in en lampa på 220 volt, så skulle det kunna se ut som nedan. Det är precis detta som också är poängen med ett relä - nämligen att med en liten spänning kunna slå av och på en stor spänning.



Prova ovanstående krets i simulatorn.

Schema för relämodulen

Det finns relämoduler med lite olika antal reläer. Den jag har här har 2 stycken reläer och schemat för modulen ser ut som nedan. I denna krets har en optokopplare lagts in mellan styrsignalerna och drivkretsen till relät. Detta gör att en MCU som driver reläet är galvaniskt separerad från relät. Inga strömmar bör leta sig bakåt och göra sönder MCUn.


Modulen

Till vänster nedan har vi anslutningar till de 2 reläerna. Till höger, överst, har vi styrsignalerna. Där skall också 5 V samt GND från MCUn (arduino t.ex.) in. Nedan har vi strömmen till reläerna. Man kan här alltså välja om reläer skall drivas med samma spänning som MCUn eller om drivspänningen skall komma från en separat källa. Att man gör såhär beror dels på att man vill ofta kunna isolera relä't helt från övrig elektronik eftersom relät kanske slår till eller från en hög spänning, t.ex. 220 volt (när allt kommer kring är det faktisk därför man använder reläer), och dels därför att ett mekaniskt relä består av en spole som skulle kunna ge störningar, vilken kan få elektroniken att bugga ur.

Observera att man såklart inte behöver en MCU för att styra relämodulen. Det räcker att man förser den med en spänning (5 volt), vilket t.ex. kan göras enligt nedan där vi tar spänningen från ett 9-voltsbatteri och kör det genom en 5V -spänningsstabilisator (behövs inga kondensatorer med batteri som källa) som tar ner spänningen till 5 volt. Sedan kopplar vi en knapp som ger styrsignal in på det relä vi vill slå på/av. Observera att signalen skall ner mot GND för att relät skall slå till (se kopplingsschema).


Nu blir ovanstående konstruktion lite overkill för att slå av/på en motor. Man hade såklart kunnat göra på följande sätt.


Men har vi att göra med en MCU så vill vi troligtvis använda relämodulen.

En fungerande inkoppling av relämodulen kan alltså vara enligt nedan. Vi kanske vill att signalen från en rörelsesensor skall starta en motor eller en lampa i ett rum. Då kan vi koppla såhär.


Observera i nedan kod att medans vi tänder lysdioden med en hög signal (vid signal från detektorn) på pinne 13, så slår vi till relät med en låg signal på pinne 12. Se kopplingschemat för relämodul, så blir det tydligt.

När vi får en signal från rörelsedetektorn så aktiveras relät i 1 minut, därefter stängs det av. Relät är sedan tillstaget 1 minut även efter att en rörelse i rummet försvunnit. Det måste alltså vara "fritt" under 1 minut för att återgå.

#define PIR_INPUT 2
#define ALARM_OUT 13
#define RELAY_OUT 12

long int timerCount = 0;

void setup() 
{
  Serial.begin(9600);
  pinMode(PIR_INPUT, INPUT); 
  pinMode(ALARM_OUT, OUTPUT); 
  pinMode(RELAY_OUT, OUTPUT);   
}

void loop() 
{ 
  delay(100); // vänta 0.1 s
  timerCount++;
  // 1 min = 600 tiondelars sekund
  if(timerCount>600)
  {
    digitalWrite(ALARM_OUT, LOW);
    digitalWrite(RELAY_OUT, HIGH);
  }
  
  if(digitalRead(PIR_INPUT))
  {
    timerCount = 0;
    digitalWrite(ALARM_OUT, HIGH);
    digitalWrite(RELAY_OUT, LOW);
  }    
  Serial.println(digitalRead(PIR_INPUT));
}