You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 9 Next »

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:

  • Digitale sensorer
  • Analoge sensorer

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. 

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:

Omregning fra spenning til temperatur
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

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

Omregning med map
int reading, temp;


void setup(){
}


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

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.

Under er en oppkoblet krets med trykknapp som vi bruker som eksempel her.

 

Her er både kretsskjema og breadboard view. Legg merke til at knappen har fire bein, hvor to og to er koblet sammen. De føttene som er "på samme side" er de som brytes. Motstanden gjør at du ikke kortslutter Arduinoen når du trykker på knappen, og at pinne 6 faktisk kan lese av en definert verdi når knappen ikke er trykket inn. En ekstra sikkerhet hadde vært å koble inn en ekstra motstand på 220 ohm mellom 5 volt ut og knappen. Dette hadde forsikret at hvis du trykker på knappen, og Arduinoen har definert pinne 6 som utgang med verdi lav, hadde det ikke oppstått kortslutning.

Eksempel med knapp
// Hvor vi har koblet til knappen.
const int buttonPin = 6;
// Husker den forrige verdien for å forhindre veldig mye utskrift
int oldVal = 0;

void setup() {
  Serial.begin(9600);
  // Definer knappen som en inngang
  pinMode(buttonPin, INPUT);
}

void loop () {
  // Les av den nåværende verdien
  int val;
  val = digitalRead(buttonPin);

  // Hvis verdien har endra seg
  if (val != oldVal) {

    // Oppdater gammel verdi
    oldVal = val;

    // Sjekk den nåværende verdien
    if (val == HIGH) {
      // Hvis knappen er trykket, fortell om dette
      Serial.println("Trykket paa knappen");
    } else if (val == LOW) {
      // Hvis knappen er sluppet, fortell om dette
      Serial.println("Slapp knappen");
    } else {
      // Hvis en ukjent verdi leses, fortell om dette. DETTE SKAL ALDRI SKJE, skjer det er det nok noe feil med Arduinoen din.
      Serial.println("Ukjent verdi lest");
    }
  }

  // Vent litt for å ha sensor stabilitet
  delay(1);
}

Når du kobler opp og prøver dette eksempelet, kan det skje når du trykker på knappen at du får flere linjer utskrift. Dette er et kjent fenomen, og kan ganske enkelt forhindres. Det er en tutorial på Arduino sine hjemmesider som omhandler nettopp dette.

Koden kan finnes på GitHub kontoen vår, under Examples/ButtonExample.

  • No labels