Introduksjon til Arduino-plattformen, maskinvare og utviklingsmiljø.
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 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.
Kva tyder det at Arduino Uno har "14 digitale I/O pins der 6 kan gjere PWM"?
- 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.
Kva Arduino-modell er best eigna for eit prosjekt som treng 40 digitale utgangar?
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 millisekundSkriv 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 automatiskForklaring:
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
Forklar skilnaden på setup() og loop() i ei Arduino-skisse.
Skriv Arduino-kode som blinkar ein LED på pin 8 kvart anna sekund (1 sekund på, 1 sekund av).
- 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.
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
Kva returnerer analogRead(A0) på Arduino Uno dersom spenninga på pinnen er 2.5V?
Forklar kva PWM er og korleis analogWrite() bruker det til å dimme ein LED.
- 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)
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
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.
Servomotor: Posisjonerer seg 0-180 grader. Krev Servo-biblioteket.
#include <Servo.h>
Servo myservo;
myservo.attach(pin);
myservo.write(vinkel); // 0-180 graderDC-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.
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
Kvifor treng vi ein motor driver (som L298N) for å styre ein DC-motor frå Arduino?
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.