Tilbake
3.6
Mikrokontrollere og Arduino

3.6 Mikrokontrollere og Arduino

Introduksjon til Arduino-plattformen, maskinvare og utviklingsmiljø.

60 min
8 oppgaver
ArduinoMikrokontrollereArduino IDEDigitale pinnerAnaloge pinner
Du leser den tradisjonelle versjonen
Din fremgang i kapitlet
0 / 8 oppgaver

Introduksjon

Mikrokontrollarar er små datamaskiner på éin brikke som styrer alt frå vaskemaskiner til dronar. I dette kapittelet skal vi lære å programmere Arduino - ei av dei mest populære mikrokontrollar-plattformene for læring og prototyping.

Arduino gjer det enkelt å kople saman sensorar (som måler temperatur, lys eller avstand) og aktuatorar (som LED, motorar og relé) for å lage interaktive prosjekt. Vi skal lære grunnleggjande programmering, korleis vi les frå sensorar og korleis vi styrer aktuatorar.

Arduino-plattforma
Arduino er ei open kjeldekode mikrokontrollar-plattform med både hardware og software.

Arduino Uno (mest brukt):
- ATmega328P mikrokontrollar
- 14 digitale I/O pins (6 med PWM)
- 6 analoge inngangar
- 32 KB flash-minne, 16 MHz klokke
- USB-tilkopling for programmering

Andre modellar:
- Arduino Nano: Mindre, breadboard-vennleg
- Arduino Mega: 54 digitale pins, 256 KB minne

Arduino IDE: Gratis programmeringsmiljø med editor, eksempelkode, seriemonitor for debugging, og biblioteksbehandling. Blir lasta ned frå arduino.cc.

✏️Arduino Uno spesifikasjonar

Kva tyder det at Arduino Uno har "14 digitale I/O pins der 6 kan gjere PWM"?

Digitale I/O pins:
- 14 pins som kan vere INPUT (lese) eller OUTPUT (skrive)
- Digital tyder berre to tilstandar: HIGH (5V) eller LOW (0V)
- Blir brukt til å lese knappar, styre LED-ar, kommunisere med andre komponentar

PWM (Pulse Width Modulation) på 6 av pinnane:
- Pins merkte med ~ (3, 5, 6, 9, 10, 11)
- Kan simulere analoge verdiar ved å slå av/på veldig raskt
- Blir brukt til å dimme LED-ar eller kontrollere motorfart
- 256 nivå (0-255) i staden for berre av/på

I praksis: Du kan kople 14 ting som berre treng av/på (LED, relé, knapp), men berre 6 av dei kan ha variabel styrke.

📝Oppgave 1

Kva Arduino-modell er best eigna for eit prosjekt som treng 40 digitale utgangar?

Arduino-programmering: setup() og loop()

Arduino blir programmert i C/C++. Kvar skisse har to hovudfunksjonar:

setup() - Køyrer éin gong ved oppstart:
- Initialiserer pins med pinMode()
- Startar seriell kommunikasjon
- Set startverdiar

loop() - Køyrer i det uendelege:
- Hovudprogrammet
- Les sensorar, tek avgjerder, styrer aktuatorar

Viktige funksjonar:

pinMode(pin, OUTPUT/INPUT)  // Sett pin-modus
digitalWrite(pin, HIGH/LOW) // Skriv digital verdi
digitalRead(pin)            // Les digital verdi
analogRead(pin)             // Les analog (0-1023)
analogWrite(pin, 0-255)     // PWM utgang
delay(ms)                   // Vent millisekund

✏️Blinkande LED - Arduino "Hello World"

Skriv eit Arduino-program som blinkar ein LED på pin 13 med 1 sekunds intervall.

const int ledPin = 13;  // LED på pin 13

void setup() {
  pinMode(ledPin, OUTPUT);  // Sett pin 13 som utgang
}

void loop() {
  digitalWrite(ledPin, HIGH);  // Slå på LED (5V)
  delay(1000);                 // Vent 1 sekund (1000 ms)
  digitalWrite(ledPin, LOW);   // Slå av LED (0V)
  delay(1000);                 // Vent 1 sekund
}
// loop() startar på nytt automatisk

Forklaring:
1. setup() køyrer éin gong og set pin 13 som OUTPUT
2. loop() køyrer i det uendelege:
- Slår på LED → ventar 1s → slår av LED → ventar 1s → gjentek

📝Oppgave 2

Forklar skilnaden på setup() og loop() i ei Arduino-skisse.

📝Oppgave 3

Skriv Arduino-kode som blinkar ein LED på pin 8 kvart anna sekund (1 sekund på, 1 sekund av).

Analog I/O og PWM
analogRead(pin) - Les analog spenning:
- Returnerer verdi 0-1023
- 0 = 0V, 1023 = 5V
- Oppløysing: 5V/1024 ≈ 4.9mV per eining
- Blir brukt med analoge sensorar (temperatur, lys, potmeter)

analogWrite(pin, verdi) - PWM utgang:
- Verdi 0-255
- 0 = alltid av (0V gjennomsnitt)
- 255 = alltid på (5V gjennomsnitt)
- 128 = 50% duty cycle (2.5V gjennomsnitt)
- Berre på PWM-pins (~3, 5, 6, 9, 10, 11)

PWM (Pulse Width Modulation):
Digital pin blir slått raskt av/på for å simulere analog spenning. Forholdet mellom på-tid og av-tid (duty cycle) bestemmer gjennomsnittleg spenning.

✏️Lese potmeter og styre LED-lysstyrke

Lag eit program som les eit potmeter på A0 og bruker verdien til å styre lysstyrken på ein LED på pin 9.

const int potPin = A0;   // Potmeter på analog pin A0
const int ledPin = 9;    // LED på PWM-pin 9

void setup() {
  pinMode(ledPin, OUTPUT);
  // Analog pins treng ikkje pinMode
}

void loop() {
  int potValue = analogRead(potPin);    // Les 0-1023
  int brightness = potValue / 4;         // Konverter til 0-255
  analogWrite(ledPin, brightness);       // Sett LED-lysstyrke
  delay(10);                             // Liten forseinking
}

Forklaring:
- analogRead() gir 0-1023, men analogWrite() tek 0-255
- Vi deler på 4 for å konvertere: 1023/4 ≈ 255
- Når potmeteret blir vridd, endrar LED-lysstyrken seg jamt

📝Oppgave 4

Kva returnerer analogRead(A0) på Arduino Uno dersom spenninga på pinnen er 2.5V?

📝Oppgave 5

Forklar kva PWM er og korleis analogWrite() bruker det til å dimme ein LED.

Vanlege sensorar for Arduino
Temperatursensor (DHT11/DHT22):
- Måler temperatur og fukt
- Digital kommunikasjon, krev bibliotek
- DHT11: ±2°C nøyaktigheit, DHT22: ±0.5°C

Ultrasonisk avstandssensor (HC-SR04):
- Måler avstand 2-400 cm
- Sender ultralyd, måler tid til ekko
- Avstand = (tid × lydfart) / 2

Lyssensor (LDR - Light Dependent Resistor):
- Motstand endrar seg med lysnivå
- Blir kopla som spenningsdelar til analog pin
- Høg verdi = mykje lys (eller motsett, avhengig av kopling)

Knapp/brytar:
- Digital input: HIGH eller LOW
- Treng pull-up eller pull-down motstand
- Kan bruke intern pull-up: pinMode(pin, INPUT_PULLUP)

✏️Lese knapp og styre LED

Skriv kode som les ein knapp på pin 2 og slår på LED på pin 13 når knappen blir trykt.

const int buttonPin = 2;
const int ledPin = 13;

void setup() {
  pinMode(buttonPin, INPUT_PULLUP);  // Intern pull-up
  pinMode(ledPin, OUTPUT);
}

void loop() {
  int buttonState = digitalRead(buttonPin);

  if (buttonState == LOW) {  // LOW = trykt med pull-up
    digitalWrite(ledPin, HIGH);
  } else {
    digitalWrite(ledPin, LOW);
  }
}

Forklaring med INPUT_PULLUP:
- Intern pull-up motstand held pinnen HIGH når knappen ikkje er trykt
- Når knappen blir trykt, blir pinnen kopla til GND (LOW)
- Difor: buttonState == LOW tyder "knappen er trykt"
- Dette unngår behov for ekstern motstand

📝Oppgave 6

Skriv Arduino-kode som les ein knapp på pin 2 og slår på LED på pin 13 når knappen blir trykt. Bruk INPUT_PULLUP.

Aktuatorar for Arduino
LED: Enklaste aktuator. Blir styrt med digitalWrite() for av/på eller analogWrite() for dimming.

Servomotor: Posisjonerer seg 0-180 grader. Krev Servo-biblioteket.

#include <Servo.h>
Servo myservo;
myservo.attach(pin);
myservo.write(vinkel);  // 0-180 grader

DC-motor: Krev motor driver (L298N) fordi Arduino-pins berre gir 40mA/5V, medan motorar treng 1-5A og ofte høgare spenning.

Relé: Bruker lågstraum-signal til å slå av/på høgare spenning/straum. Kan styre 230V apparat med 5V signal frå Arduino.

✏️Styre servomotor

Skriv kode som rører ein servo frå 0 til 180 grader og tilbake.

#include <Servo.h>

Servo myservo;

void setup() {
  myservo.attach(9);  // Servo på pin 9
}

void loop() {
  // Sving frå 0 til 180 grader
  for (int pos = 0; pos <= 180; pos++) {
    myservo.write(pos);
    delay(15);  // Vent litt mellom kvar grad
  }

  // Sving tilbake frå 180 til 0 grader
  for (int pos = 180; pos >= 0; pos--) {
    myservo.write(pos);
    delay(15);
  }
}

Forklaring:
- Servo-biblioteket handterer PWM-signalet servoen treng
- myservo.write(vinkel) set posisjonen
- delay(15) gir servoen tid til å røre seg før neste posisjon

📝Oppgave 7

Kvifor treng vi ein motor driver (som L298N) for å styre ein DC-motor frå Arduino?

📝Oppgave 8

Beskriv tre ulike aktuatorar som kan styrast frå Arduino, og forklar kort korleis kvar av dei blir brukt.

Oppsummering

I dette kapittelet har vi lært grunnleggjande Arduino-programmering:

Arduino-plattforma:
- Mikrokontrollar-plattform med hardware og software
- Arduino Uno har 14 digitale og 6 analoge pins
- Arduino IDE er programmeringsmiljøet

Programstruktur:
- setup() køyrer éin gong ved oppstart
- loop() køyrer i det uendelege
- pinMode(), digitalWrite(), digitalRead() for digitale pins
- analogRead() (0-1023), analogWrite() (0-255) for analog I/O

Sensorar og aktuatorar:
- Sensorar: Knappar, temperatursensorar, lyssensorar, avstandsmålarar
- Aktuatorar: LED, servomotorar, DC-motorar (via driver), relé
- PWM simulerer analoge verdiar med raske av/på-pulsar

Arduino er eit kraftig verktøy for å lære elektronikk og programmering, og kan brukast til alt frå enkle LED-prosjekt til komplekse robotar og IoT-løysingar.

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.