• Lærebøker
  • Python
  • GeoGebra
  • Hoderegning
  • Test deg selv

Søk i Skolesaga

Søk etter lærebøker, kapitler, trinn og verktøy

Gratis interaktive lærebøker for norsk skole.

Lærebok
PersonvernVilkår

© 2025 Skolesaga · Alle rettigheter forbeholdt

Deler av innholdet er utviklet med hjelp av AI-verktøy

Elektro og datateknologi VG1Tilbake
3.6 Mikrokontrollere og Arduino
Mikrokontrollere og Arduino

3.6 Mikrokontrollere og Arduino

Alle fag for VG1

Introduksjon til Arduino-plattformen, maskinvare og utviklingsmiljø.

60 min
8 oppgaver
ArduinoMikrokontrollereArduino IDEDigitale pinnerAnaloge pinner
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.

``cpp
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.

``cpp
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.

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

void setup() {
pinMode(buttonPin, INPUTPULLUP); // 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 INPUTPULLUP:
- 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 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.

``cpp
#include

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.