Programmering

Programmering handler her ikke først og fremst om bare koding, men om å styre noe fysisk. Vi kobler sammen signaler, målinger, sensorer, aktuatorer og kode for å forstå hvordan små systemer virker.

Signal inn. Tolkning. Respons ut.

Når vi jobber med programmering, jobber vi samtidig med enkel elektro og styring. Et system kan lese en verdi, tolke den og gjøre noe som respons. Det kan være en knapp som tenner et lys, en sensor som aktiverer en summer, eller en måling som styrer en servo.

Målet er å forstå helheten: hvordan innganger, kode og utganger virker sammen i praksis.

Programmering, koding og språk

Det er nyttig å skille mellom selve tankearbeidet og språket vi bruker for å skrive instruksjonene.

Hva er programmering?

Programmering handler om å bestemme hva et system skal gjøre. Det kan være å lese et signal, tolke en verdi og sende ut en respons.

Hva er koding?

Koding er å skrive instruksjonene i et språk maskinen kan lese. Koding er en del av programmering, men ikke hele arbeidet.

Arduino

Arduino brukes til å styre elektronikk og fysiske systemer. Koden kjører på en mikrokontroller og brukes til innganger, utganger, målinger og styring.

Python

Python er et allsidig programmeringsspråk som brukes til alt fra enkle skript til dataanalyse, apper og automasjon.

HTML

HTML brukes til å bygge opp innholdet på nettsider. Det beskriver struktur og innhold, men er ikke et programmeringsspråk på samme måte som Arduino og Python.

Sentrale kodebegreper

Før vi bygger større systemer, må vi forstå hvordan et Arduino-program er bygd opp.

Variabler

En variabel er et navn på en verdi vi vil lagre og bruke i programmet. Den kan for eksempel holde på et pin-nummer, en tilstand eller en måleverdi.

  • int ledPin = 8;
  • int buttonState = 0;
  • int lysstyrke = 120;

Funksjoner

En funksjon er en avgrenset del av programmet som gjør en bestemt jobb. setup() og loop() er funksjoner. Du kan også lage egne funksjoner.

  • void setup()
  • void loop()
  • void kortBlink()

Hva betyr void?

void foran en funksjon betyr at funksjonen ikke returnerer en verdi. Den gjør en jobb, men sender ikke et resultat tilbake.

  • void setup()
  • void loop()
  • void trafikklysSekvens()

setup()

setup() kjører én gang når Arduino starter eller resettes. Her gjør vi klar programmet, setter opp pinner og starter ofte Serial Monitor.

  • pinMode(...)
  • Serial.begin(9600);

loop()

loop() kjører om og om igjen så lenge kortet har strøm. Her ligger den løpende styringen i programmet.

  • lese knapp
  • styre LED
  • måle sensor
  • vente med delay()

Biblioteker

Et bibliotek er ferdig kode som gir ekstra funksjoner. Det brukes når vi vil styre mer avanserte komponenter uten å skrive alt selv.

  • Servo.h
  • WiFi.h
  • LiquidCrystal.h

Grunnleggende begreper

Før vi bygger systemer, må vi forstå hva slags signaler vi jobber med, og hvorfor forskjellen på dem betyr noe.

Digitale signaler

Et digitalt signal har to tydelige tilstander: av eller på, 0 eller 1. Brytere, knapper og LED er gode eksempler når vi skal forstå digital logikk i praksis.

  • 0 eller 1
  • av / på
  • bryter
  • knapp
  • LED

Analoge signaler

Et analogt signal kan variere gradvis. I praksis betyr det at vi kan lese verdier som endrer seg over et område, for eksempel fra en lysføler, temperaturføler eller et potensiometer.

  • glidende verdi
  • måling
  • potensiometer
  • lys
  • temperatur

AC og DC

AC er vekselspenning, slik vi har i strømnettet. DC er likespenning, slik vi bruker i batterier, Arduino og mye lavspenningselektronikk. I denne delen jobber vi først og fremst med lav DC.

  • AC = vekselspenning
  • DC = likespenning
  • Arduino bruker DC
  • viktig for sikkerhet

Sensorer, aktuatorer og styring

Et lite programmerbart system består ofte av noe som registrerer, noe som tolker og noe som reagerer.

Sensorer

Sensorer gir informasjon inn til systemet. De registrerer noe i omgivelsene og sender et signal videre til mikrokontrolleren.

  • knapp
  • lyssensor
  • temperatursensor
  • avstandssensor

Aktuatorer

Aktuatorer gjør noe fysisk. De får et signal fra koden og utfører en handling.

  • LED
  • summer
  • servo
  • motor
  • rele

Styring

Koden kobler inngang og utgang sammen. Den leser signaler, tolker dem og bestemmer hva som skal skje videre.

  • if-setninger
  • terskelverdier
  • tidsstyring
  • måling og respons

Sensor → signal → kode → respons → aktuator

Arduino-opplegg med kode

Her ligger oppgaver som passer til en praktisk progresjon fra oppstart og enkle utganger til sekvenser, logikk og styring.

Start

Hello World i Serial Monitor

Første test for å kontrollere at kommunikasjonen mellom Arduino og PC virker.

Lærer: Laste opp program og bruke Serial Monitor

Utstyr: Arduino UNO, USB-kabel, Arduino IDE

void setup() {
  Serial.begin(9600);
}

void loop() {
  Serial.println("Hello World");
  delay(1000);
}
Nivå 1

LED på med Arduino

En enkel øving der LED kobles til en digital pinne og styres fra Arduino.

Lærer: Digital utgang, pinMode() og digitalWrite()

Utstyr: Arduino UNO, LED, motstand, breadboard, ledninger

int ledPin = 8;

void setup() {
  pinMode(ledPin, OUTPUT);
}

void loop() {
  digitalWrite(ledPin, HIGH);
}
Nivå 1

Blinkende LED

LED slås av og på i en løkke. Her ser vi hvordan loop() kjører hele tiden.

Lærer: Tidsstyring med delay()

Utstyr: Arduino UNO, LED, motstand, breadboard, ledninger

int ledPin = 8;

void setup() {
  pinMode(ledPin, OUTPUT);
}

void loop() {
  digitalWrite(ledPin, HIGH);
  delay(1000);
  digitalWrite(ledPin, LOW);
  delay(1000);
}
Nivå 1

Blink med endret hastighet

Samme grunnidé som blinkende LED, men eleven endrer tidene og ser hva som skjer.

Lærer: Endre verdier og teste forskjell

Utstyr: Arduino UNO, LED, motstand, breadboard, ledninger

int ledPin = 8;

void setup() {
  pinMode(ledPin, OUTPUT);
}

void loop() {
  digitalWrite(ledPin, HIGH);
  delay(200);
  digitalWrite(ledPin, LOW);
  delay(800);
}
Nivå 2

Flere LED

Her brukes flere pinner og flere utganger i samme program.

Lærer: Flere utganger og enkel sekvensstyring

Utstyr: Arduino UNO, 2 LED, motstander, breadboard, ledninger

int led1 = 8;
int led2 = 9;

void setup() {
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
}

void loop() {
  digitalWrite(led1, HIGH);
  digitalWrite(led2, LOW);
  delay(500);

  digitalWrite(led1, LOW);
  digitalWrite(led2, HIGH);
  delay(500);
}
Nivå 2

Trafikklys

En klassisk oppgave der flere LED styres i rekkefølge for å lage et enkelt trafikklys.

Lærer: Sekvens, flere utganger og struktur i kode

Utstyr: Arduino UNO, rød LED, gul LED, grønn LED, 3 motstander, breadboard, ledninger

int redLed = 8;
int yellowLed = 9;
int greenLed = 10;

void setup() {
  pinMode(redLed, OUTPUT);
  pinMode(yellowLed, OUTPUT);
  pinMode(greenLed, OUTPUT);
}

void loop() {
  digitalWrite(redLed, HIGH);
  digitalWrite(yellowLed, LOW);
  digitalWrite(greenLed, LOW);
  delay(2000);

  digitalWrite(redLed, LOW);
  digitalWrite(yellowLed, HIGH);
  digitalWrite(greenLed, LOW);
  delay(1000);

  digitalWrite(redLed, LOW);
  digitalWrite(yellowLed, LOW);
  digitalWrite(greenLed, HIGH);
  delay(2000);

  digitalWrite(greenLed, LOW);
  digitalWrite(yellowLed, HIGH);
  delay(1000);
}
Nivå 3

SOS-beacon

En oppgave der en lager et blinkemønster og arbeider mer bevisst med tid og rekkefølge.

Lærer: Mønster, repetisjon og timing

Utstyr: Arduino UNO, LED, motstand, breadboard, ledninger

int ledPin = 8;

void kortBlink() {
  digitalWrite(ledPin, HIGH);
  delay(200);
  digitalWrite(ledPin, LOW);
  delay(200);
}

void langtBlink() {
  digitalWrite(ledPin, HIGH);
  delay(600);
  digitalWrite(ledPin, LOW);
  delay(200);
}

void setup() {
  pinMode(ledPin, OUTPUT);
}

void loop() {
  kortBlink();
  kortBlink();
  kortBlink();
  langtBlink();
  langtBlink();
  langtBlink();
  kortBlink();
  kortBlink();
  kortBlink();
  delay(1000);
}
Nivå 3

Fade med PWM

Her kan lysstyrke kan styres gradvis med et digitalt signal, ikke bare av og på.

Lærer: Analog utgang med PWM og variabler

Utstyr: Arduino UNO, LED, motstand, breadboard, ledninger

int ledPin = 9;
int lysstyrke = 0;
int endring = 5;

void setup() {
  pinMode(ledPin, OUTPUT);
}

void loop() {
  analogWrite(ledPin, lysstyrke);
  lysstyrke = lysstyrke + endring;

  if (lysstyrke <= 0 || lysstyrke >= 255) {
    endring = -endring;
  }

  delay(30);
}
Nivå 3

Knapp styrer LED

Her kobles inngang og utgang sammen i samme program.

Lærer: Digital inngang og enkel logikk

Utstyr: Arduino UNO, knapp, LED, motstander, breadboard, ledninger

int buttonPin = 2;
int ledPin = 8;
int buttonState = 0;

void setup() {
  pinMode(buttonPin, INPUT);
  pinMode(ledPin, OUTPUT);
}

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

  if (buttonState == HIGH) {
    digitalWrite(ledPin, HIGH);
  } else {
    digitalWrite(ledPin, LOW);
  }
}

Litt elektro må med

For å jobbe trygt og forståelig med programmering av fysiske systemer, må vi ha kontroll på noen enkle elektriske begreper.

Grunnbegreper

  • spenning (V)
  • strøm (A)
  • motstand (Ω)
  • seriekobling og parallellkobling
  • hvorfor LED trenger motstand

Viktig i praksis

  • vi jobber først med lav likespenning
  • kobling må stemme med koden
  • feil polaritet kan gi feil resultat
  • mål gjerne signaler med multimeter
  • sikkerhet kommer alltid først

Ohms lov

Når vi jobber med Arduino, LED, motstander og enkle elektriske kretser, kommer vi raskt inn på sammenhengen mellom spenning, strøm og motstand. Ohms lov er derfor et viktig bindeledd mellom programmering, elektro og matematikk.

Hva er Ohms lov?

Ohms lov viser sammenhengen mellom spenning (V), strøm (I) og motstand (R). Den skrives ofte slik:

U = R × I

Denne sammenhengen er nyttig når vi skal forstå hvorfor vi bruker motstander til LED, hvordan strømmen i en krets påvirkes, og hvordan vi kan regne på enkle koblinger.

Videre til matematikk

På matematikk-siden ligger en egen gjennomgang av Ohms lov. Der kan du gå videre dersom du vil se mer på utregning, symboler og bruk i enkle oppgaver.

Gå til Ohms lov på matematikk-siden

Videre arbeid: WiFi, IoT og større systemer

Når grunnlaget sitter, kan arbeidet bygges videre mot nettverk, datalogging, fjernstyring og oppkoblede systemer.

WiFi

Noen mikrokontrollere har innebygd WiFi. Da kan enheten kobles til nettverk og sende eller motta data.

IoT

IoT betyr Internet of Things. Det handler om fysiske enheter som er koblet til nettverk og kan overvåkes eller styres digitalt.

Videre prosjekter

Neste steg kan være servo, sensorer, alarm, auto light, ESP32, dashboard og datalogging.

Ressurser og videre lenker

Her er noen lenker til ressurser som kan lære deg mye mer.

Programmering med Tobias

Python-ressurs laget av Tobias Melbø. Passer godt som videre spor når elevene skal gå fra fysisk styring til mer generell programmering.

DFRobot Beginner Kit for Arduino Tutorial

Kursopplegg for settet dere bruker. Gir naturlig progresjon videre fra blink og trafikklys til alarm, auto light, servo og mer.

Arduino Documentation

Offisiell dokumentasjon for språk, funksjoner, bibliotek, kort og videre arbeid med Arduino.

Hvordan vi jobber

Programmering i praksis handler like mye om arbeidsmåte som om kode.

Test én ting om gangen.
Endre små deler av koden før du tester på nytt.
Se etter sammenheng mellom kobling og kode.
Bruk målinger og observasjoner aktivt.
Les feilmeldinger og prøv å forstå hva de betyr.
Dokumenter hva som virker og hva som ikke virker.

Videre arbeid

Denne siden vil etterhvert bygges videre med flere sensorer, trådløs styring, ESP32, robotikk, automasjon og kobling mot større prosjekter.

Python og videre programmering

Arduino gir en praktisk inngang til styring og elektronikk. Python er et naturlig neste steg når vi vil jobbe videre med generell programmering, data og større programmer.

Programmering med Tobias

Tobias Melbø, lærer på Rud vgs. har laget en nettbok i Python. Den inneholder grunnleggende Python, avansert Python, dataanalyse og flere fagspesifikke moduler.

Gå til Python-boka