Tilbake
4.6
Sensorer og målinger

4.6 Sensorer og målinger

Temperatursensorer, lyssensorer, avstandssensorer og analoge signaler.

30 min
5 oppgaver
SensorerTemperaturLysAvstandAnalog-digital
Du leser den tradisjonelle versjonen
Din fremgang i kapitlet
0 / 5 oppgaver

Sensorar og målingar

Ein mikrokontrollar åleine kan ikkje gjere noko nyttig – han treng inndata frå omverda. Det er her sensorar kjem inn. Ein sensor er ein komponent som registrerer ei fysisk storleik (temperatur, lys, avstand, trykk, fukt) og omdannar henne til eit elektrisk signal som mikrokontrollaren kan lese.

I dette kapittelet skal du lære om nokre av dei vanlegaste sensorane som blir brukte med Arduino: temperatursensor, lyssensor, avstandssensor og potensiometer. Du lærer korleis dei blir kopla til, korleis du les av verdiane, og korleis du konverterer rå sensordata til meiningsfulle fysiske verdiar.

Sensor

Ein sensor (òg kalla givar eller transducer) er ein komponent som konverterer ei fysisk storleik til eit elektrisk signal.

Sensorar kan delast i to hovudtypar ut frå signaltypen:

Analoge sensorar:
- Gir ei kontinuerleg spenning proporsjonal med den fysiske storleiken
- Blir lesne med analogRead() (0–1023)
- Døme: TMP36 (temperatur), LDR (lys), potensiometer

Digitale sensorar:
- Gir data som digitale verdiar via ein kommunikasjonsprotokoll
- Brukar eigne bibliotek for avlesing
- Døme: DHT11 (temperatur + fukt), DS18B20 (temperatur), HC-SR04 (avstand)

Overføringsfunksjonen til sensoren skildrar samanhengen mellom den fysiske storleiken og det elektriske signalet, til dømes: «TMP36 gir 10 mV per °C med ein offset på 500 mV.»

✏️Døme: Temperaturmåling med TMP36

Kople ein TMP36 temperatursensor til Arduino og skriv eit program som måler og viser temperaturen. TMP36 gir ei spenning der T=(U0,5)×100T = (U - 0{,}5) \times 100 °C.

Kobling:
- TMP36 har tre bein: Vcc (5 V), Vout (signal), GND
- Kople Vcc til 5 V, GND til GND, og Vout til A0

Programkode:

// Temperaturmåling med TMP36
// Vout tilkoblet analog pinne A0

void setup() {
  Serial.begin(9600);
  Serial.println("Temperaturmåling med TMP36");
}

void loop() {
  int raVerdi = analogRead(A0);        // Les analog verdi (0-1023)

  // Konverter til spenning
  float spenning = raVerdi * (5.0 / 1024.0);

  // Konverter til temperatur (TMP36-formel)
  float temperatur = (spenning - 0.5) * 100.0;

  Serial.print("Rå verdi: ");
  Serial.print(raVerdi);
  Serial.print("  Spenning: ");
  Serial.print(spenning, 2);
  Serial.print(" V  Temperatur: ");
  Serial.print(temperatur, 1);
  Serial.println(" °C");

  delay(1000);  // Mål hvert sekund
}

Forklaring av konverteringa:
1. analogRead(A0) gir ein verdi 0–1023.
2. Multipliser med 5,0/10245{,}0 / 1024 for å få spenninga i volt.
3. TMP36-formelen: T=(U0,5)×100T = (U - 0{,}5) \times 100 gir temperaturen i °C.

Ved romtemperatur (ca. 22 °C) vil TMP36 gi ca. 0,72 V, som gir analogRead ≈ 147.

📝Oppgave 1

Ein TMP36-sensor gir ei spenning på 0,75 V. Kva er temperaturen?

Lyssensor – LDR (Light Dependent Resistor)
Ein LDR (lysavhengig motstand) er ein sensor der motstanden endrar seg med lysintensiteten:

- Mykje lys: Låg motstand (typisk nokre hundre ohm)
- Mørke: Høg motstand (typisk fleire hundre kilohm)

For å lese ein LDR med Arduino lagar vi ein spenningsdelar med ein fast motstand:

5V --- [LDR] --- A0 --- [10 kΩ] --- GND

Spenninga på A0 avheng av forholdet mellom LDR-motstanden og den faste motstanden:
UA0=5,0×RfastRLDR+RfastU_{A0} = 5{,}0 \times \frac{R_{\text{fast}}}{R_{\text{LDR}} + R_{\text{fast}}}

Meir lys → lågare RLDRR_{\text{LDR}} → høgare UA0U_{A0} → høgare analogRead-verdi.

Bruksområde for lyssensorar

Lyssensorar blir brukte i mange kvardagslege bruksområde:

- Gatelys: Blir tende automatisk når det blir mørkt
- Smarttelefonar: Justerer skjermlysstyrken etter omgivnadene
- Solcellesystem: Sporar posisjonen til sola for optimal vinkel
- Tryggleikssystem: Lysbom som registrerer når noko bryt lysstrålen
- Veksthus: Styrer kunstig belysning basert på naturleg lys

Med Arduino kan vi enkelt lage slike system sjølve!

✏️Døme: Automatisk nattlys med LDR

Skriv eit program som les ein LDR kopla til A0 og tenner ein LED på pinne 9 når det er mørkt (låg analogverdi).

// Automatisk nattlys med LDR og LED
// LDR med spenningsdeler på A0, LED på pinne 9

const int LDR_PIN = A0;
const int LED_PIN = 9;
const int MORK_GRENSE = 300;  // Juster etter forholdene

void setup() {
  pinMode(LED_PIN, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  int lysVerdi = analogRead(LDR_PIN);

  Serial.print("Lysverdi: ");
  Serial.println(lysVerdi);

  if (lysVerdi < MORK_GRENSE) {
    // Det er mørkt – tenn LED
    digitalWrite(LED_PIN, HIGH);
    Serial.println("Mørkt → LED PÅ");
  } else {
    // Det er lyst – slukk LED
    digitalWrite(LED_PIN, LOW);
    Serial.println("Lyst → LED AV");
  }

  delay(500);
}

Forklaring:
- analogRead(A0) gir ein verdi frå 0 (heilt mørkt) til ~1000 (sterkt lys), avhengig av spenningsdelaren.
- Vi samanliknar med ein terskelverdi (MORK_GRENSE) og slår på LED-en når verdien er under terskelen.
- Terskelverdien 300 er eit utgangspunkt – han må kalibrerast for dei faktiske lysforholda i rommet.

📝Oppgave 2

I ein spenningsdelar med ein LDR og ein 10 kΩ motstand: kva skjer med spenninga som Arduino les på analoginngangen når det blir lysare?

Ultralydsensor – HC-SR04
HC-SR04 er ein populær avstandssensor som brukar ultralyd til å måle avstand:

Verkemåte:
1. Sensoren sender ut ei kort ultralydbølgje (40 kHz)
2. Bølgja treffer ein gjenstand og blir reflektert tilbake
3. Sensoren måler tida det tek før ekkoet kjem tilbake
4. Avstanden blir rekna ut frå tida og lydfarten

Formelen:
d=vt2d = \frac{v \cdot t}{2}

der v=343v = 343 m/s (lydfart i luft ved 20 °C) og tt er tida for tur-retur.

Vi deler på 2 fordi lyden reiser fram og tilbake.

Tilkobling:
- VCC → 5 V
- Trig → Digital pinne (f.eks. pinne 7) – sender triggersignal
- Echo → Digital pinne (f.eks. pinne 6) – tek imot ekko
- GND → GND

Måleområde: 2 cm – 400 cm

✏️Døme: Avstandsmåling med HC-SR04

Skriv eit Arduino-program som måler avstand med ein HC-SR04-sensor og skriv resultatet til Serial Monitor.

// Avstandsmåling med HC-SR04
// Trig på pinne 7, Echo på pinne 6

const int TRIG_PIN = 7;
const int ECHO_PIN = 6;

void setup() {
  pinMode(TRIG_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);
  Serial.begin(9600);
  Serial.println("Avstandsmåling med HC-SR04");
}

void loop() {
  // Send en 10 µs puls på Trig
  digitalWrite(TRIG_PIN, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG_PIN, LOW);

  // Mål varigheten av Echo-pulsen (i mikrosekunder)
  long varighet = pulseIn(ECHO_PIN, HIGH);

  // Beregn avstand i cm
  // Lydhastighet ≈ 343 m/s = 0,0343 cm/µs
  // Avstand = (tid × hastighet) / 2
  float avstand = varighet * 0.0343 / 2.0;

  Serial.print("Avstand: ");
  Serial.print(avstand, 1);
  Serial.println(" cm");

  delay(200);
}

Forklaring:
1. Vi sender ein kort puls (10 µs) på Trig-pinnen for å starte målinga.
2. pulseIn(ECHO_PIN, HIGH) måler kor lenge Echo-pinnen er HIGH – dette er tur-retur-tida i mikrosekund.
3. Vi konverterer med d=t×0,0343/2d = t \times 0{,}0343 / 2 for å få avstanden i cm.

Døme: Dersom objektet er 20 cm unna: t=2×20/0,03431166t = 2 \times 20 / 0{,}0343 \approx 1166 µs. Programmet reknar ut: 1166×0,0343/220,01166 \times 0{,}0343 / 2 \approx 20{,}0 cm.

📝Oppgave 3

Ein HC-SR04-sensor måler at ultralydbølgja brukar 1160 µs (tur-retur). Lydfarten er 343 m/s. Kor langt er det til objektet?

Analog-til-digital-konvertering og presisjon

Når vi les analoge sensorar med Arduino, skjer det ei analog-til-digital-konvertering (ADC). Det er viktig å forstå avgrensingane:

Oppløysing:
Arduino Uno har 10-bits ADC som gir 210=10242^{10} = 1024 steg mellom 0 V og 5 V. Kvart steg svarar til:
ΔU=5,0 V10244,9 mV\Delta U = \frac{5{,}0 \text{ V}}{1024} \approx 4{,}9 \text{ mV}

For TMP36: Sensoren gir 10 mV/°C, men oppløysinga til ADC-en er ca. 4,9 mV. Det tyder at den minste temperaturendringa vi kan registrere er om lag 0,490{,}49 °C – altså ca. ein halv grad.

Støy og midling: Analoge avlesingar kan variere nokre steg på grunn av elektrisk støy. For meir stabile avlesingar kan vi ta gjennomsnittet av fleire målingar:

int lesStabil(int pin, int antall) {
  long sum = 0;
  for (int i = 0; i < antall; i++) {
    sum += analogRead(pin);
    delay(10);
  }
  return sum / antall;
}

Å ta gjennomsnittet av f.eks. 10 målingar gir vesentleg meir stabile resultat.

Oppsummering – Sensorar og målingar

Sensorar konverterer fysiske storleikar til elektriske signal:
- Analoge sensorar (TMP36, LDR, potensiometer) gir varierande spenning → analogRead()
- Digitale sensorar (HC-SR04, DHT11) kommuniserer med eigne protokollar

Temperatursensor (TMP36):
- Gir 10 mV/°C med 500 mV offset
- Formel: T=(U0,5)×100T = (U - 0{,}5) \times 100 °C

Lyssensor (LDR):
- Motstanden endrar seg med lysintensiteten
- Blir kopla i spenningsdelar med fast motstand
- Meir lys → lågare motstand → høgare analogRead-verdi

Avstandssensor (HC-SR04):
- Brukar ultralyd (lydbølgjer) til å måle avstand
- d=vt/2d = v \cdot t / 2 der v=343v = 343 m/s
- Rekkjevidd 2–400 cm

ADC-avgrensingar:
- 10-bits oppløysing: 4,9 mV per steg
- Midling av fleire målingar reduserer støy

I neste kapittel skal vi sjå på aktuatorar – komponentane som lèt Arduino-en påverke den fysiske verda!

📝Oppgave 4

Du byggjer ein enkel vêrstasjon med Arduino. Du har ein TMP36 temperatursensor (kopla til A0) og ein LDR med 10 kΩ motstand (kopla til A1). Skriv eit program som les begge sensorane kvart 2. sekund og skriv resultata til Serial Monitor i formatet: «Temperatur: XX.X °C | Lysverdi: XXX».

📝Oppgave 5

ADC-en til Arduino har 10-bits oppløysing (0–1023) og referansespenning 5,0 V. a) Rekn ut spenninga per ADC-steg. b) TMP36 gir 10 mV per °C. Kva er den minste temperaturendringa Arduino kan registrere? c) Forklar éin metode for å betre presisjonen utan å byte maskinvare.

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.