Temperatursensorer, lyssensorer, avstandssensorer og analoge signaler.
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.
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.»
Kople ein TMP36 temperatursensor til Arduino og skriv eit program som måler og viser temperaturen. TMP36 gir ei spenning der °C.
- 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 for å få spenninga i volt.
3. TMP36-formelen: gir temperaturen i °C.
Ved romtemperatur (ca. 22 °C) vil TMP36 gi ca. 0,72 V, som gir analogRead ≈ 147.
Ein TMP36-sensor gir ei spenning på 0,75 V. Kva er temperaturen?
- 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Ω] --- GNDSpenninga på A0 avheng av forholdet mellom LDR-motstanden og den faste motstanden:
Meir lys → lågare → høgare → 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!
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.
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?
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:
der m/s (lydfart i luft ved 20 °C) og 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
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 for å få avstanden i cm.
Døme: Dersom objektet er 20 cm unna: µs. Programmet reknar ut: cm.
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 steg mellom 0 V og 5 V. Kvart steg svarar til:
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 °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.
| Sensor | Måler | Type | Tilkobling |
|---|---|---|---|
| TMP36 | Temperatur | Analog | A0–A5 |
| LDR | Lys | Analog (spenningsdelar) | A0–A5 |
| HC-SR04 | Avstand | Digital (puls) | Digitale pinnar |
| DHT11 | Temp. + fukt | Digital (protokoll) | Digital pinne |
| Potensiometer | Posisjon/vinkel | Analog | A0–A5 |
| Piezo | Vibrasjon/trykk | Analog | A0–A5 |
| IR-sensor | Nærleik/fjernkontroll | Digital | Digital pinne |
| Jordfukt | Vassinnhald i jord | Analog | A0–A5 |
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: °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
- der 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!
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».
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.