Sensorer er innretninger som kan gi Arduino signal om en tilstand i den fysiske verden. For eksempel en temperatursensor. Vi har allerede snakket om noen typer sensorer: brytere og potmetere, men vi skal også si litt mer om brytere her. Vi kan dele sensorer inn i to hovedgrupper:

En digital sensor gir et signal om at noe enten er av eller på, som for eksempel en trykkbryter. Det kan være brytere som en bruker trykker på, eller brytere som blir aktivert av en mekanisk bevegelse. Det kan også være brytere som aktiveres av andre ting som for eksempel en termostat som slås på ved en viss temperatur, eller reed-bryter som reagerer på magnetisme. 

Vi har i biblioteket et basiseksempel for lesning av analoge verdier, og et basiseksempel for lesning av digitale verdier.

Analoge sensorer, som for eksempel et potmeter, gir et variabelt signal. Analoge sensorer måler kontinuerlige verdier, og gir Arduino et signal som varierer mellom 0V og 5V. Det finnes også avanserte analoge sensorer som kommuniserer med Arduino digitalt, men det kommer vi tilbake til senere. Noen analoge sensorer er ferdig tilpasset Arduino, dvs at de gir 0-5V ut av boksen. Andre sensorer krever at de kobles opp i en krets for å kunne gi riktig signal. Når vi bruker analoge sensorer må vi ofte regne om verdiene som leses av til den størrelsen vi ønsker. For eksempel kan vi ha en temperaturmåler som opererer i området -100°C til +100°C og gir et signal som varierer mellom 0V og 5V. Siden det vi leser av i programmet er en spenning, må vi regne om til temperatur på denne måten:

float reading, voltage, temp;


void setup(){
}


void loop(){
  reading=analogRead(A0);          // Leser av spenningen på A0 
  voltage=reading/204.6;          // Regner om avlesning til spenning
  temp=( voltage * 40 ) - 100;    // Tallet 40 er 200/5 som tilsvarer antall grader per volt
}                                   // Vi må trekke fra 100 siden 0V tilsvarer -100°C

GitHub: Examples/GeneralSensors/NaiveCalculation/NaiveCalculation.ino Denne koden går ut over det vi har lagt til i biblioteket vårt.

 

Dette kan gjøres mye enklere med funksjonen map som gjør omregningen for oss:

int reading, temp;


void setup(){
}


void loop(){
  reading = analogRead(A0);
  temp = map( reading, 0, 1023, -100, 100);
}        

GitHub: Examples/GeneralSensors/MapCalculation/MapCalculation.ino Denne koden går ut over det vi har lagt til i biblioteket vårt.

Trykknapper

Noen av de enkleste digitale sensorene er trykknapper. De trykknappene du har fått utdelt har to bein koblet sammen. Under er et bilde som viser en slik knapp fra undersiden. Hvilke bein som er koblet sammen er tegnet inn.

Bilde av knapp sett nedenfra med inntegnet kretsskjema.

I biblioteket vårt har vi lagt til en del eksempler som viser bruk av knapper. Vi har også lagt til bibliotek som forhindrer prell (engelsk: bounce).

Oppkobling for eksemplene

ButtonPullup, ButtonTwoBlinks, ToggleNoDebounce:

 

PressedEvent:

 

PushButtonToggle_v2:

 

PushButtonTwoToggles_v2: