Temperatursensorer, lyssensorer, avstandssensorer og analoge signaler.
Å gi maskinen sanser
En Arduino alene er litt som et menneske uten sanser -- den kan tenke, men ikke oppfatte noe. For å gjøre noe nyttig trenger den inndata fra omverdenen, og det er her sensorer kommer inn. En sensor registrerer en fysisk størrelse, som temperatur, lys eller avstand, og omdanner den til et elektrisk signal mikrokontrolleren kan lese.
I dette kapittelet skal du bli kjent med noen av de vanligste Arduino-sensorene: en temperatursensor, en lyssensor og en avstandssensor. Du lærer hvordan de kobles til, hvordan du leser verdiene, og -- kanskje viktigst -- hvordan du gjør om rå sensortall til meningsfulle fysiske verdier.
Sensoren som måler temperatur
En sensor -- også kalt giver eller transducer -- konverterer en fysisk størrelse til et elektrisk signal. Vi deler dem grovt i to. Analoge sensorer gir en kontinuerlig spenning proporsjonal med størrelsen, og leses med analogRead(); eksempler er temperatursensoren TMP36, lyssensoren LDR og potensiometeret. Digitale sensorer gir data via en kommunikasjonsprotokoll og bruker egne bibliotek; eksempler er avstandssensoren HC-SR04 og fuktighetssensoren DHT11. Hver sensor har en overføringsfunksjon som beskriver sammenhengen mellom det fysiske og det elektriske.
La oss se på TMP36, en typisk analog temperatursensor. Den har tre bein: Vcc til 5 V, GND til jord, og Vout til en analog inngang som A0. Overføringsfunksjonen er enkel: temperaturen finnes ved °C, der er spenningen sensoren gir. For å lese den må vi gjøre om i to steg. Først leser analogRead(A0) en verdi mellom 0 og 1023, som vi gjør om til spenning ved å gange med . Deretter bruker vi TMP36-formelen. Gir sensoren for eksempel 0,75 V, blir temperaturen °C. Ved romtemperatur på rundt 22 °C gir sensoren cirka 0,72 V, som tilsvarer en analogRead-verdi på omtrent 147.
Lys og avstand
En LDR, eller lysavhengig motstand, er en sensor der selve motstanden endrer seg med lyset: mye lys gir lav motstand, mørke gir høy motstand. Men Arduino kan ikke lese motstand direkte -- den leser spenning. Derfor lager vi en spenningsdeler ved å koble LDR-en i serie med en fast motstand, gjerne 10 kΩ, og lese spenningen mellom dem. Spenningen følger formelen . Nøkkelinnsikten er denne: mer lys gir lavere LDR-motstand, som gir høyere spenning og dermed høyere analogRead-verdi. Dette utnyttes i gatelys som tenner seg når det blir mørkt, og i mobilskjermer som dimmer seg selv. Vil du lage et automatisk nattlys, leser du LDR-en, sammenligner med en terskelverdi, og tenner en LED når verdien faller under -- men terskelen må kalibreres for det faktiske rommet.
For å måle avstand bruker vi gjerne HC-SR04, en ultralydsensor. Den fungerer som en flaggermus: den sender ut en kort ultralydbølge på 40 kHz, bølgen treffer en gjenstand og reflekteres, og sensoren måler tiden før ekkoet kommer tilbake. Avstanden regnes ut med , der m/s er lydhastigheten i luft. Vi deler på 2 fordi lyden reiser frem og tilbake. Sensoren har en Trig-pinne som starter målingen og en Echo-pinne som mottar ekkoet, og måleområdet er fra 2 cm til 4 meter. Måler sensoren at bølgen brukte 1160 µs tur-retur, blir avstanden m, altså 20 cm.
Når tallene ikke er helt presise
Når vi leser en analog sensor, skjer det en analog-til-digital-konvertering, og det er viktig å forstå begrensningene -- ellers stoler vi blindt på tall som ikke er så nøyaktige som de ser ut.
Arduino Uno har 10-bits oppløsning, altså 1024 steg mellom 0 og 5 V. Hvert steg tilsvarer mV. Det høres lite ut, men det setter en grense. TMP36 gir 10 mV per grad, mens et ADC-steg er 4,9 mV. Det betyr at den minste temperaturendringen Arduino kan registrere, er omtrent grad. Vil du måle finere enn det, må du gjøre noe spesielt.
I tillegg kommer støy: analoge avlesninger varierer ofte noen få steg fra gang til gang på grunn av elektriske forstyrrelser. Den enkleste motgiften er midling -- å ta gjennomsnittet av flere målinger. Tar du for eksempel snittet av ti avlesninger, jevner du bort mye av den tilfeldige støyen og får et langt mer stabilt resultat. Ved å midle mange avlesninger, gjerne 64, kan du til og med øke den effektive oppløsningen, fordi den tilfeldige støyen lar deg se mellom stegene. Dette er et viktig prinsipp i all måleteknikk: én enkelt måling er sjelden hele sannheten, men gjentatte målinger forteller deg både verdien og hvor mye den varierer.
Oppsummering
Vi har sett at sensorer konverterer fysiske størrelser til elektriske signaler, og at de kan være analoge, lest med analogRead(), eller digitale, lest via en protokoll. TMP36 måler temperatur med formelen . LDR måler lys gjennom en spenningsdeler, der mer lys gir høyere verdi. Og HC-SR04 måler avstand med ultralyd via .
Til slutt så vi at ADC-en har begrenset oppløsning -- rundt 4,9 mV per steg, som setter en grense på omtrent en halv grad for TMP36 -- og at vi kan dempe støy og forbedre presisjonen ved å midle flere målinger. Det er et viktig prinsipp: gjentatte målinger forteller mer enn én enkelt avlesning.
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.