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.
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);
}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);
}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);
}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);
}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);
}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);
}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);
}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);
}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-sidenVidere 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.
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