Tilbake
4.5
Mikrokontrollere og Arduino

4.5 Mikrokontrollere og Arduino

Arduino-plattformen, oppbygning og grunnleggende bruk.

35 min
5 oppgaver
ArduinoMikrokontrollerDigitale pinnerAnaloge pinner
Du leser den tradisjonelle versjonen
Din fremgang i kapitlet
0 / 5 oppgaver

Mikrokontrollarar og Arduino

Hittil har vi jobba med passive og aktive elektroniske komponentar, men vi har styrt krinsane manuelt – med brytarar, potensiometer og faste koplingar. No skal vi ta det store steget: å bruke ein mikrokontrollar til å styre elektronikken med programkode.

Ein mikrokontrollar er ein liten datamaskin på éin einaste brikke. Han kan lese signal frå sensorar, ta avgjerder basert på programmet vi skriv, og styre aktuatorar som lys, motorar og høgtalarar. Den mest populære plattforma for læring og prototyping er Arduino.

I dette kapittelet lærer du kva ein mikrokontrollar er, korleis Arduino-plattforma er bygd opp, og korleis du skriv og lastar opp ditt første program.

Mikrokontrollar

Ein mikrokontrollar (forkorta MCU – Microcontroller Unit) er ein liten, integrert datamaskin på éin einaste brikke. Han inneheld:

- Prosessor (CPU): Utfører instruksjonar frå programmet
- Flash-minne: Lagrar programmet (blir teke vare på når straumen er av)
- RAM: Mellombels arbeidsminne for data under køyring
- I/O-pinnar: Digitale og analoge inn- og utgangar for kommunikasjon med omverda
- Klokke: Styrer farten på prosessoren (typisk 8–16 MHz for Arduino)

Til skilnad frå ein vanleg datamaskin er ein mikrokontrollar designa for å køyre eitt einaste program i ei uendeleg løkkje, og han har svært avgrensa minne og prosessorkraft – men han er billig, liten og energieffektiv.

Mikrokontrollarar i kvardagen

Du er omgitt av mikrokontrollarar utan å tenkje over det. Dei finst i:

- Kvitevarer: Vaskemaskin, oppvaskmaskin, mikrobølgjeomn
- Transport: Motorstyringa i bilen, ABS-bremsar, airbag
- Underhaldning: Fjernkontrollar, spelkontrollarar, LED-strips
- Helse: Digitale termometer, blodtrykksmålarar, insulinpumper
- Heimeautomatisering: Smarte lyspærer, termostat, dørlåsar

Ein moderne bil kan innehalde over 100 mikrokontrollarar som samarbeider!

Arduino
Arduino er ei open kjeldekode-plattform for elektronikk og programmering. Plattforma består av:

1. Maskinvare: Eit utviklingskort med ein mikrokontrollar (vanlegvis ATmega328P), USB-tilkopling, spenningsregulator og tilgjengelege pinnar.
2. Programvare (IDE): Eit gratis utviklingsmiljø der du skriv kode, kompilerer og lastar opp til kortet via USB.
3. Programmeringsspråk: Basert på C/C++ med forenkla funksjonar for å styre maskinvara.

Det mest brukte kortet for nybyrjarar er Arduino Uno, som har:
- 14 digitale I/O-pinnar (av desse støttar 6 PWM)
- 6 analoge inngangar (A0–A5)
- 5 V driftsspenning
- USB-tilkopling for programmering og straumforsyning
- 32 KB flash-minne for programmet

✏️Eksempel: Oppbygginga av Arduino Uno

Skildre dei viktigaste delane på eit Arduino Uno-kort og kva dei blir brukte til.

Eit Arduino Uno-kort har følgjande hovuddelar:

Straum og tilkopling:
- USB-port: Blir kopla til PC for programmering og kan gi 5 V straum
- Ekstern strauminngang (barrel jack): 7–12 V DC for frittståande drift
- 5 V og 3.3 V utgangar: Gir regulert spenning til eksterne komponentar
- GND-pinnar: Jordtilkopling (referansepunkt for spenning)

Digitale pinnar (0–13):
- Kan setjast som INPUT (lese) eller OUTPUT (skrive)
- Opererer med to nivå: HIGH (5 V) og LOW (0 V)
- Pinne 0 og 1 blir òg brukte til seriell kommunikasjon (TX/RX)
- Pinnar merkte med ~ (3, 5, 6, 9, 10, 11) støttar PWM-utgang

Analoge pinnar (A0–A5):
- Les analoge spenningar frå 0 til 5 V
- Konverterer til digitalverdi mellom 0 og 1023 (10-bits oppløysing)
- Kan òg brukast som digitale pinnar ved behov

Mikrokontrollaren (ATmega328P):
- Sjølve «hjernen» – køyrer programmet ditt
- 16 MHz klokkefrekvens, 32 KB flash, 2 KB RAM

📝Oppgave 1

Kva inneheld IKKJE ein mikrokontrollar?

Digitale pinnar
Digitale pinnar på Arduino kan ha to tilstandar:

- HIGH = 5 V (logisk 1)
- LOW = 0 V (logisk 0)

Pinnane kan konfigurerast som:
- OUTPUT: Arduino sender eit signal ut (t.d. tenne ein LED)
- INPUT: Arduino les eit signal inn (t.d. lese ein knapp)
- INPUTPULLUP: Som INPUT, men med ein innebygd pull-up-motstand som held pinnen HIGH når ingenting er tilkopla

Funksjonar for digitale pinnar:
- pinMode(pin, mode) – Set pinnen som INPUT, OUTPUT eller INPUT
PULLUP
- digitalWrite(pin, value) – Skriv HIGH eller LOW til ein utgangs-pinne
- digitalRead(pin) – Les tilstanden (HIGH eller LOW) frå ein inngangs-pinne

Analoge pinnar
Analoge inngangar (A0–A5) bruker ein analog-til-digital-omformar (ADC) for å lese spenningar mellom 0 V og 5 V.

ADC-en har 10-bits oppløysing, som tyder:
- 0 V → verdien 0
- 5 V → verdien 1023
- Oppløysing: 5,0 V10244,9 mV\displaystyle \frac{5{,}0 \text{ V}}{1024} \approx 4{,}9 \text{ mV} per steg

Funksjon:
- analogRead(pin) – Returnerer ein heiltalsverdi frå 0 til 1023

Eksempel: Dersom ein sensor gir 2,5 V, les Arduino:
verdi=2,55,0×1023512\text{verdi} = \frac{2{,}5}{5{,}0} \times 1023 \approx 512

Merk: Arduino Uno har ikkje ein ekte analog utgang. Funksjonen analogWrite() bruker i staden PWM (pulsbreiddemodulasjon) på dei digitale pinnane merkte med ~.

✏️Eksempel: Blink – ditt første Arduino-program

Skriv eit program som blinkar den innebygde LED-en (pinne 13) på Arduino-kortet: 1 sekund på, 1 sekund av.

Her er det klassiske «Blink»-programmet som alle Arduino-nybyrjarar startar med:

// Blink – Ditt første Arduino-program
// Blinkar den innebygde LED-en på pinne 13

void setup() {
  // setup() blir køyrd éin gong ved oppstart
  pinMode(13, OUTPUT);  // Sett pinne 13 som utgang
}

void loop() {
  // loop() blir køyrd om og om igjen, i det uendelege
  digitalWrite(13, HIGH);  // Tenn LED-en (5 V)
  delay(1000);             // Vent 1000 ms = 1 sekund
  digitalWrite(13, LOW);   // Sløkk LED-en (0 V)
  delay(1000);             // Vent 1 sekund
}

Forklaring av programstrukturen:
- setup(): Blir køyrd éin gong ved oppstart. Her initialiserer vi pinnar og innstillingar.
- loop(): Blir køyrd i ei uendeleg løkkje etter setup(). Her legg vi hovuddelen av programmet.
- pinMode(13, OUTPUT): Konfigurerer pinne 13 som utgang.
- digitalWrite(13, HIGH): Set pinne 13 til 5 V (LED lyser).
- delay(1000): Pausar programmet i 1000 millisekund (1 sekund).

Resultatet: LED-en blinkar med 0,5 Hz – éin gong per 2 sekund.

📝Oppgave 2

I eit Arduino-program blir setup()-funksjonen køyrd:

✏️Eksempel: Styre LED med knapp

Skriv eit program som les ein trykknapp kopla til pinne 2 (med innebygd pull-up-motstand) og tenner LED-en på pinne 13 når knappen er trykt ned.

// Knapp-styrt LED
// Knapp på pinne 2 (INPUT_PULLUP), LED på pinne 13

void setup() {
  pinMode(13, OUTPUT);          // LED som utgang
  pinMode(2, INPUT_PULLUP);     // Knapp med innebygd pull-up
}

void loop() {
  int knappStatus = digitalRead(2);  // Les knappen

  if (knappStatus == LOW) {
    // LOW tyder at knappen er trykt (pull-up inverterer logikken)
    digitalWrite(13, HIGH);     // Tenn LED
  } else {
    digitalWrite(13, LOW);      // Sløkk LED
  }
}

Viktige detaljar:
- Med INPUT_PULLUP er pinnen HIGH (5 V) når knappen ikkje er trykt.
- Når knappen blir trykt, blir pinnen kopla til GND, og han blir LOW (0 V).
- Difor er logikken invertert: LOW = knappen er trykt.

Kopling:
- Knapp: Éi side til pinne 2, andre side til GND
- Ingen ekstern motstand nødvendig (den innebygde pull-up-motstanden tek seg av det)

📝Oppgave 3

Arduino Uno har 6 analoge inngangar med 10-bits oppløysing. Kor mange ulike verdiar kan analogRead() returnere?

Seriell kommunikasjon – sjå kva Arduino-en «tenkjer»

Ein viktig funksjon for feilsøking og datalogging er seriell kommunikasjon. Arduino kan sende tekst og tal til PC-en via USB-kabelen, som du kan lese i Serial Monitor i Arduino IDE.

void setup() {
  Serial.begin(9600);     // Start seriell kommunikasjon med 9600 baud
  Serial.println("Arduino klar!");
}

void loop() {
  int sensorVerdi = analogRead(A0);  // Les analog sensor
  Serial.print("Sensorverdi: ");
  Serial.println(sensorVerdi);       // Skriv verdien til PC
  delay(500);                         // Vent 0,5 sekund
}

- Serial.begin(9600): Startar kommunikasjonen med ein fart på 9600 baud (bits per sekund).
- Serial.print(): Skriv tekst utan linjeskift etter.
- Serial.println(): Skriv tekst med linjeskift etter.

Serial Monitor er uvurderleg for å forstå kva programmet gjer, og for å lese sensordata i sanntid.

Oppsummering – Mikrokontrollarar og Arduino

Mikrokontrollar:
- Liten datamaskin på éin brikke (CPU, minne, I/O)
- Køyrer eitt program i ei uendeleg løkkje
- Finst overalt i moderne teknologi

Arduino-plattforma:
- Open kjeldekode maskinvare og programvare
- Arduino Uno: 14 digitale pinnar, 6 analoge inngangar, 5 V, USB
- Blir programmert i C/C++ via Arduino IDE

Programstruktur:
- setup() blir køyrd éin gong ved start
- loop() blir køyrd i uendeleg løkkje
- pinMode(), digitalWrite(), digitalRead(), analogRead()

Digitale pinnar: HIGH (5 V) eller LOW (0 V) – to tilstandar
Analoge inngangar: 0–1023 (10-bits ADC) – måler spenning 0–5 V
Seriell kommunikasjon: Send data til PC for feilsøking og datalogging

I neste kapittel skal vi kople sensorar til Arduino-en og byrje å måle den verkelege verda!

📝Oppgave 4

Du vil lage eit «trafikklys» med tre LED-ar (raud på pinne 8, gul på pinne 9, grøn på pinne 10). Skriv eit Arduino-program som gjennomfører ein trafikklys-syklus: grønt i 5 sekund → gult i 2 sekund → raudt i 5 sekund → raudt og gult saman i 1 sekund → grønt igjen (og så vidare i loop).

📝Oppgave 5

Forklar med eigne ord skilnaden mellom digitale og analoge pinnar på Arduino. Gi eit eksempel på ein komponent du ville kopla til kvar type pinne, og forklar kvifor.

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.