Motorer, servoer, reléer og styring av fysiske enheter.
Aktuatorar og styring
I førre kapittel lærte du å lese sensorar – å hente informasjon inn til mikrokontrollaren. No skal vi sjå på den andre sida: aktuatorar – komponentar som lèt mikrokontrollaren påverke den fysiske verda.
Ein aktuator er det motsette av ein sensor: han omdannar eit elektrisk signal til ei fysisk handling. LED-en du allereie har brukt er ein enkel aktuator (lys), men i dette kapittelet utforskar vi meir kraftfulle aktuatorar: motorar, servoar og relé. Vi lærer òg om PWM – ein teknikk som lèt Arduino-en styre fart og intensitet gradvis.
Ein aktuator er ein komponent som konverterer eit elektrisk signal til ei fysisk handling.
Vanlege aktuatorar i elektronikkprosjekt:
| Aktuator | Fysisk handling | Døme |
|---|---|---|
| LED | Lys | Statusindikator, belysning |
| DC-motor | Rotasjon (kontinuerleg) | Vifte, hjul på robot |
| Servomotor | Rotasjon (presis vinkel) | Robotarm, styring |
| Stepper-motor | Rotasjon (steg for steg) | 3D-printar, CNC |
| Relé | Brytar for høg spenning | Styre 230 V-apparat |
| Buzzer | Lyd | Alarm, melodi |
| Solenoid | Lineær rørsle | Dørlås, ventil |
Viktig: Dei fleste aktuatorane trekkjer meir straum enn Arduino kan levere frå pinnane sine (maks 20 mA per pinne). Vi treng derfor ofte driverkretsar – transistorar, motordrivarar eller relé – for å kople Arduino til større aktuatorar.
Nøkkelomgrep:
- Duty cycle: Delen av tida signalet er HIGH (i prosent)
- 0 % = alltid LOW (0 V effektivt)
- 50 % = halvparten HIGH, halvparten LOW (≈ 2,5 V effektivt)
- 100 % = alltid HIGH (5 V effektivt)
- Frekvens: PWM-frekvensen til Arduino er ca. 490 Hz (pinnane 3, 9, 10, 11) eller 980 Hz (pinnane 5, 6)
I Arduino brukar ein analogWrite(pin, verdi):
- verdi er mellom 0 og 255 (8-bit)
- 0 = 0 % duty cycle (av)
- 127 = ca. 50 % duty cycle
- 255 = 100 % duty cycle (full effekt)
Berre pinnane merkte med ~ (3, 5, 6, 9, 10, 11) støttar PWM!
Skriv eit program som gradvis aukar og senkar lysstyrken til ein LED kopla til pinne 9 (PWM-pinne), slik at han «pustar» – langsamt lyser opp og fadar ut.
// «Pustende» LED med PWM
// LED med forresistans på pinne 9
const int LED_PIN = 9;
void setup() {
pinMode(LED_PIN, OUTPUT);
}
void loop() {
// Øk lysstyrken gradvis (0 → 255)
for (int lysstyrke = 0; lysstyrke <= 255; lysstyrke++) {
analogWrite(LED_PIN, lysstyrke);
delay(10); // 10 ms mellom hvert steg
}
// Senk lysstyrken gradvis (255 → 0)
for (int lysstyrke = 255; lysstyrke >= 0; lysstyrke--) {
analogWrite(LED_PIN, lysstyrke);
delay(10);
}
}Forklaring:
- analogWrite(9, 0) = LED av (0 % duty cycle)
- analogWrite(9, 127) = halv lysstyrke (ca. 50 %)
- analogWrite(9, 255) = full lysstyrke (100 %)
Kvart steg tek 10 ms. Med 256 steg opp og 256 steg ned tek éin syklus ca. ms sekund.
PWM-signalet svitsjar så raskt (490 Hz) at auget oppfattar det som ei jamn, dimbar lysstyrke – ikkje blinking.
Kva gjer analogWrite(9, 127) på ein Arduino?
Ein servomotor (servo) er ein motor som kan dreie til ein spesifikk vinkel (vanlegvis 0°–180°) og halde seg der.
Oppbygging:
- DC-motor med gir (for dreiemoment)
- Potensiometer (for posisjonsmåling)
- Styrekrets (samanliknar ønskt og faktisk posisjon)
Styring frå Arduino:
- Brukar Servo-biblioteket (inkludert i Arduino IDE)
- Signal: PWM-puls med varierande breidd (typisk 1–2 ms)
- servo.write(vinkel) – dreier til oppgitt vinkel (0–180)
- servo.attach(pin) – koplar servoen til ein pinne
Kobling:
- Raud leidning: 5 V (straum)
- Brun/svart leidning: GND
- Oransje/gul leidning: Signal (digital pinne)
Viktig: Servoar kan trekkje mykje straum (opptil 500 mA). Ved bruk av fleire servoar bør du bruke ei ekstern straumforsyning i staden for 5 V-pinnen til Arduino.
Skriv eit program som brukar eit potensiometer (på A0) til å styre vinkelen på ein servomotor (på pinne 9). Når du dreier potensiometeret, skal servoen følgje etter.
// Servo styrt av potensiometer
// Potensiometer på A0, servo på pinne 9
#include <Servo.h>
Servo minServo;
void setup() {
minServo.attach(9); // Koble servo til pinne 9
Serial.begin(9600);
}
void loop() {
int potVerdi = analogRead(A0); // Les potensiometer (0-1023)
int vinkel = map(potVerdi, 0, 1023, 0, 180); // Konverter til vinkel
minServo.write(vinkel); // Drei servoen
Serial.print("Vinkel: ");
Serial.println(vinkel);
delay(20); // Kort pause for stabil drift
}Forklaring:
- analogRead(A0) gir ein verdi 0–1023 frå potensiometeret.
- map(potVerdi, 0, 1023, 0, 180) konverterer lineært frå området 0–1023 til 0–180.
- minServo.write(vinkel) dreier servoen til den utrekna vinkelen.
- map()-funksjonen er svært nyttig for å konvertere mellom ulike verdiområde.
Kvifor bør du bruke ei ekstern straumforsyning når du koplar fleire servoar til Arduino?
Eit relé er ein elektromekanisk brytar som lèt eit lågeffekts styresignal (f.eks. 5 V frå Arduino) kontrollere ein høgeffekts krets (f.eks. 230 V lysarmatur eller 12 V motor).
Verkemåte:
1. Arduino sender eit signal (HIGH/LOW) til relémodulen
2. Ein elektromagnet i reléet trekkjer til seg ein mekanisk brytar
3. Brytaren koplar eller bryt den eksterne kretsen
Typisk relémodul for Arduino:
- Styrespenning: 5 V (frå Arduino)
- Svitsjkapasitet: 10 A ved 250 V AC eller 30 V DC
- Inngangspinnar: VCC, GND, IN (styresignal)
- Utgangsterminalar: COM (felles), NO (normalt open), NC (normalt lukka)
NO (Normally Open): Kretsen er broten når reléet er av. Arduino slår han PÅ.
NC (Normally Closed): Kretsen er slutta når reléet er av. Arduino slår han AV.
ÅTVARING: Arbeid med nettspenning (230 V) er livsfarleg. Berre kvalifiserte personar bør kople til nettspenning!
Bruksområde for relé
Relé blir brukte når Arduino skal styre einingar som krev meir straum eller høgare spenning enn det Arduino sjølv kan levere:
- Belysning: Styre rombelysning basert på rørslesensor
- Varmeelement: Slå på/av ein varmeomn basert på temperatursensor
- Vasspumpe: Styre vatning av plantar basert på jordfukt
- Ventilasjon: Styre ei vifte basert på CO₂-nivå eller temperatur
- Dørlås: Opne ein elektrisk lås når rett kode blir tasta inn
Relémodular for Arduino er billige og enkle å bruke. Mange relémodular har ein innebygd LED som viser om reléet er aktivert, og ein optokoplar for å verne Arduino mot spenningstoppar.
Ein liten DC-motor trekkjer 150 mA ved 5 V – for mykje for ein Arduino-pinne (maks 20 mA). Vis korleis du brukar ein NPN-transistor som drivar, og skriv eit program som styrer motorfarten med PWM.
Arduino pinne 9 --- [1 kΩ] --- Basis (B)
Kollektor (C) --- Motor --- 5 V
Emitter (E) --- GNDLegg til ein frittgåande diode (flyback diode) parallelt over motoren for å verne mot spenningstoppar når motoren blir slått av.Programkode:
// Motorhastighet styrt med PWM via transistor
// Motor driver-transistor på pinne 9 (PWM)
const int MOTOR_PIN = 9;
void setup() {
pinMode(MOTOR_PIN, OUTPUT);
Serial.begin(9600);
}
void loop() {
// Stopp
Serial.println("Motor: STOPP");
analogWrite(MOTOR_PIN, 0);
delay(2000);
// Sakte (25 % hastighet)
Serial.println("Motor: SAKTE (25%)");
analogWrite(MOTOR_PIN, 64);
delay(3000);
// Medium (50 % hastighet)
Serial.println("Motor: MEDIUM (50%)");
analogWrite(MOTOR_PIN, 127);
delay(3000);
// Full fart (100 %)
Serial.println("Motor: FULL FART (100%)");
analogWrite(MOTOR_PIN, 255);
delay(3000);
}Forklaring:
- Arduino sender eit PWM-signal til basisen på transistoren via ein 1 kΩ motstand.
- Transistoren fungerer som ein «variabel brytar» som slepper gjennom straum proporsjonal med PWM-signalet.
- analogWrite(MOTOR_PIN, 64) gir ca. 25 % fart, 127 gir ca. 50 %, osv.
- Flyback-dioden er kritisk: Når ein motor blir slått av, genererer han ein spenningstopp som kan øydeleggje transistoren.
Kva er skilnaden mellom ein vanleg DC-motor og ein servomotor?
1. Straumavgrensing: Kople aldri ein motor direkte til ein Arduino-pinne. Bruk alltid ein transistor, motordrivar eller relé som mellomledd.
2. Flyback-diode: Bruk alltid ein diode parallelt over motorar og spolar (relé) for å fange opp spenningstoppar.
3. Ekstern straumforsyning: Motorar og servoar bør ha eiga straumforsyning med felles GND med Arduino.
4. Nettspenning: Arbeid ALDRI med 230 V utan godkjent utstyr og rettleiing av fagperson.
5. Mekanisk tryggleik: Motorar og servoar kan klemme og skade. Hald fingrane unna rørlege delar.
6. Varmeutvikling: Motordrivarar og transistorar kan bli varme. Sørg for tilstrekkeleg kjøling.
Oppsummering – Aktuatorar og styring
Aktuatorar omdannar elektriske signal til fysiske handlingar:
- LED: Lys (enklaste aktuator)
- DC-motor: Kontinuerleg rotasjon (vifte, hjul)
- Servomotor: Presis vinkel 0–180° (robotarm, styremekanisme)
- Relé: Brytar for høg spenning/straum (230 V apparat)
PWM (Pulsbreiddemodulasjon):
- Simulerer analog utgang på digitale pinnar
- analogWrite(pin, 0–255) styrer duty cycle
- Berre pinnar merkte ~ støttar PWM (3, 5, 6, 9, 10, 11)
Driverkretsar:
- Arduino-pinnar toler maks 20 mA
- Transistorar, motordrivarar og relé koplar Arduino til kraftige aktuatorar
- Flyback-diode vernar mot spenningstoppar frå motorar og spolar
Sensor + mikrokontrollar + aktuator dannar grunnlaget for alle styringssystem: les omgivnadene, ta avgjerder, utfør handlingar.
I neste kapittel samlar vi alt i eit komplett prosjekt!
Du vil byggje ei automatisk vifte som slår seg på når temperaturen overstig 25 °C. Du har ein TMP36-sensor (på A0), ein DC-motor kopla via transistor (på pinne 9), og ein LED for statusvising (på pinne 13). Skriv eit Arduino-program som: a) Les temperaturen kvart sekund. b) Slår på motoren og tenner LED-en når temperaturen er over 25 °C. c) Slår av motoren og slukkjer LED-en når temperaturen er 25 °C eller lågare. d) Skriv temperaturen og viftestatus til Serial Monitor.
Forklar med eigne ord kva PWM er og korleis det fungerer. Inkluder: a) Kva duty cycle tyder. b) Kvifor PWM kan brukast til å dimme ein LED, sjølv om signalet berre er 0 V eller 5 V. c) Kva analogWrite(9, 191) gjer – rekn ut duty cycle i prosent og gjennomsnittleg spenning.
Dette kapitlet er skrevet av Anthropics toppmodeller (Claude Opus og Claude Fable) og er foreløpig ikke manuelt gjennomgått — kvalitetskontrollen gjøres av uavhengige KI-agenter, og innmeldte feil rettes fortløpende. Funnet en feil? Meld fra, så retter vi den. Les mer om hvordan innholdet lages.