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

Mikrokontrollere er små datamaskiner på én brikke som styrer alt fra vaskemaskiner til droner. I dette kapitlet skal vi lære å programmere Arduino - en av de mest populære mikrokontroller-plattformene for læring og prototyping.

Arduino gjør det enkelt å koble sammen sensorer (som måler temperatur, lys eller avstand) og aktuatorer (som LED, motorer og releer) for å lage interaktive prosjekter. Vi skal lære grunnleggende programmering, hvordan vi leser fra sensorer og hvordan vi styrer aktuatorer.

Arduino-plattformen
Arduino er en åpen kildekode mikrokontroller-plattform med både hardware og software.

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

Andre modeller:
- Arduino Nano: Mindre, breadboard-vennlig
- Arduino Mega: 54 digitale pins, 256 KB minne

Arduino IDE: Gratis programmeringsmiljø med editor, eksempelkode, seriemonitor for debugging, og bibliotekbehandling. Lastes ned fra arduino.cc.

✏️Arduino Uno spesifikasjoner

Hva betyr det at Arduino Uno har "14 digitale I/O pins hvorav 6 kan gjøre PWM"?

Digitale I/O pins:
- 14 pins som kan være INPUT (lese) eller OUTPUT (skrive)
- Digital betyr bare to tilstander: HIGH (5V) eller LOW (0V)
- Brukes til å lese knapper, styre LED-er, kommunisere med andre komponenter

PWM (Pulse Width Modulation) på 6 av pinnene:
- Pins merket med ~ (3, 5, 6, 9, 10, 11)
- Kan simulere analoge verdier ved å slå av/på veldig raskt
- Brukes til å dimme LED-er eller kontrollere motorhastighet
- 256 nivåer (0-255) i stedet for bare av/på

I praksis: Du kan koble 14 ting som bare trenger av/på (LED, relé, knapp), men bare 6 av dem kan ha variabel styrke.

📝Oppgave 1

Hvilken Arduino-modell er best egnet for et prosjekt som trenger 40 digitale utganger?

Arduino-programmering: setup() og loop()

Arduino programmeres i C/C++. Hver skisse har to hovedfunksjoner:

setup() - Kjører én gang ved oppstart:
- Initialiserer pins med pinMode()
- Starter seriell kommunikasjon
- Setter startverdier

loop() - Kjører i det uendelige:
- Hovedprogrammet
- Leser sensorer, tar beslutninger, styrer aktuatorer

Viktige funksjoner:

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 millisekunder

✏️Blinkende LED - Arduino "Hello World"

Skriv et Arduino-program som blinker en 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() starter på nytt automatisk

Forklaring:
1. setup() kjører én gang og setter pin 13 som OUTPUT
2. loop() kjører i det uendelige:
- Slår på LED → venter 1s → slår av LED → venter 1s → gjentar

📝Oppgave 2

Forklar forskjellen på setup() og loop() i en Arduino-skisse.

📝Oppgave 3

Skriv Arduino-kode som blinker en LED på pin 8 hvert annet sekund (1 sekund på, 1 sekund av).

Analog I/O og PWM
analogRead(pin) - Leser analog spenning:
- Returnerer verdi 0-1023
- 0 = 0V, 1023 = 5V
- Oppløsning: 5V/1024 ≈ 4.9mV per enhet
- Brukes med analoge sensorer (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)
- Kun på PWM-pins (~3, 5, 6, 9, 10, 11)

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

✏️Lese potmeter og styre LED-lysstyrke

Lag et program som leser et potmeter på A0 og bruker verdien til å styre lysstyrken på en 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 trenger ikke 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 forsinkelse
}

Forklaring:
- analogRead() gir 0-1023, men analogWrite() tar 0-255
- Vi deler på 4 for å konvertere: 1023/4 ≈ 255
- Når potmeteret vris, endres LED-lysstyrken jevnt

📝Oppgave 4

Hva returnerer analogRead(A0) på Arduino Uno hvis spenningen på pinnen er 2.5V?

📝Oppgave 5

Forklar hva PWM er og hvordan analogWrite() bruker det til å dimme en LED.

Vanlige sensorer for Arduino
Temperatursensor (DHT11/DHT22):
- Måler temperatur og fuktighet
- Digital kommunikasjon, krever bibliotek
- DHT11: ±2°C nøyaktighet, DHT22: ±0.5°C

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

Lysensor (LDR - Light Dependent Resistor):
- Motstand endres med lysnivå
- Kobles som spenningsdeler til analog pin
- Høy verdi = mye lys (eller motsatt, avhengig av kobling)

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

✏️Lese knapp og styre LED

Skriv kode som leser en knapp på pin 2 og slår på LED på pin 13 når knappen trykkes.

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 = trykket med pull-up
    digitalWrite(ledPin, HIGH);
  } else {
    digitalWrite(ledPin, LOW);
  }
}

Forklaring med INPUT_PULLUP:
- Intern pull-up motstand holder pinnen HIGH når knappen ikke er trykket
- Når knappen trykkes, kobles pinnen til GND (LOW)
- Derfor: buttonState == LOW betyr "knappen er trykket"
- Dette unngår behov for ekstern motstand

📝Oppgave 6

Skriv Arduino-kode som leser en knapp på pin 2 og slår på LED på pin 13 når knappen trykkes. Bruk INPUT_PULLUP.

Aktuatorer for Arduino
LED: Enkleste aktuator. Styres med digitalWrite() for av/på eller analogWrite() for dimming.

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

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

DC-motor: Krever motor driver (L298N) fordi Arduino-pins bare gir 40mA/5V, mens motorer trenger 1-5A og ofte høyere spenning.

Relé: Bruker lavstrøm-signal til å slå av/på høyere spenning/strøm. Kan styre 230V apparater med 5V signal fra Arduino.

✏️Styre servomotor

Skriv kode som beveger en servo fra 0 til 180 grader og tilbake.

#include <Servo.h>

Servo myservo;

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

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

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

Forklaring:
- Servo-biblioteket håndterer PWM-signalet servoen trenger
- myservo.write(vinkel) setter posisjonen
- delay(15) gir servoen tid til å bevege seg før neste posisjon

📝Oppgave 7

Hvorfor trenger vi en motor driver (som L298N) for å styre en DC-motor fra Arduino?

📝Oppgave 8

Beskriv tre ulike aktuatorer som kan styres fra Arduino, og forklar kort hvordan hver av dem brukes.

Oppsummering

I dette kapitlet har vi lært grunnleggende Arduino-programmering:

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

Programstruktur:
- setup() kjører én gang ved oppstart
- loop() kjører i det uendelige
- pinMode(), digitalWrite(), digitalRead() for digitale pins
- analogRead() (0-1023), analogWrite() (0-255) for analog I/O

Sensorer og aktuatorer:
- Sensorer: Knapper, temperatursensorer, lyssensorer, avstandsmålere
- Aktuatorer: LED, servomotorer, DC-motorer (via driver), releer
- PWM simulerer analoge verdier med raske av/på-pulser

Arduino er et kraftig verktøy for å lære elektronikk og programmering, og kan brukes til alt fra enkle LED-prosjekter til komplekse roboter og IoT-løsninger.

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.