Temperatursensor

Beskrivelse
En temperatursensor for bruk sammen med en mikrokontroller registrerer temperaturen og sender ut spenning som er proporsjonal med temperaturen. Dette gjøres ved at temperaturføleren endrer motstand ut fra variasjoner i temperatur, noe Arduinoen kan lese.
Utforminga av temperaturføleren skiller seg fra en transistor ved at den ene sida er avrunda.
Bruksområder
Temperatursensorer brukes i mange ulike komponenter, som elektroniske termometere eller i termostater for å regulere en varmeovn. Vi kan også bruke dem for å beskytte elektronikk, ved at strømmen brytes når temperaturen stiger over et maksimalt nivå. Har du for eksempel noen gang opplevd at mobiltelefonen din har skrudd seg av på grunn av for høy temperatur?
Som eksempel vil temperatursensoren TMP36 øke spenninga med 10 mV per grad celsius. Ved 0 °C er spenninga 0,5 V, og temperatursensoren kan måle mellom -55 °C og 150 °C.

Kopling
Når du skal kople en temperatursensor sammen med en Arduino, må du benytte analog port for lesing av temperaturen.
Temperatursensoren har tre bein, der beina har tilkoplingene 5V (pluss), GND (jording) og en analog utgang som må koples til en analog inngang på Arduinoen. Denne analoge verdien er en spenning fra 0 til 5 volt, og omgjøres digitalt til en verdi mellom 0 og 1023.

Koplingsskjema
I dette eksempelet er det kopla en temperatursensor og tre lysdioder til en Arduino.
Oppgaven her er å få en temperatursensor til å lese temperaturen og at Arduinoen skal avgjøre hvilke lysdioder som lyser.

Programmering
I dette programeksempelet skal Arduinoen lese av en temperatur og deretter aktivere tre lysdioder ut fra verdien den leser av.
Her settes en grenseverdi til 40 grader. Hvis temperaturen er lavere enn 40 grader, lyser ingen dioder. Hvis temperaturen er mellom 40 og 49 grader lyser en diode, fra 50 til og med 59 grader lyser to dioder, og fra og med 60 grader lyser alle tre diodene. Hvis temperaturen bli 70 grader eller høyere, vil fortsatt alle lysdiodene lyse, og i tillegg vil rød diode blinke.
Variabelen vi benytter, er en int, altså et heltall. Vi trenger ikke så detaljert avlesing her at vi trenger å bruke desimaler.
I tillegg skriver programmet temperaturen i celsius og fahrenheit i serial monitor.
Du kan endre verdiene i programmet hvis du ønsker visning knyttet til andre verdier. Du kan også velge å gi variablene andre navn hvis du synes det er mer oversiktlig.
int baselineTemp = 0; //Lag en variabel som heter baselineTemp
int celsius = 0; //Lag en variabel som heter celsius
int fahrenheit = 0; //Lag en variabel med fahrenheit
void setup()
{
pinMode(A0, INPUT); //Sett pinne A0 til inngang
Serial.begin(9600); //Aktiver seriell kommunikasjon
pinMode(2, OUTPUT); //Sett pinne 2 til utgang
pinMode(3, OUTPUT); //Sett pinne 3 til utgang
pinMode(4, OUTPUT); //Sett pinne 4 til utgang
}
void loop()
{
// Sett grenseverdier for å aktivere LED-er
baselineTemp = 40;
// Mål temperatur i celsius
celsius = map(((analogRead(A0) - 20) * 3.04), 0, 1023, -40, 125);
// Regn om verdien til fahrenheit
fahrenheit = ((celsius * 9) / 5 + 32);
Serial.print(celsius); //Skriv verdien som er lagra i variabelen celsius
Serial.print(" C, "); //Skriv tegnet C i serial monitor
Serial.print(fahrenheit); //Skriv verdien som er lagra i variabelen fahrenheit
Serial.println(" F"); //Skriv tegnet F i serial monitor
// Her brukes avleste verdier for å velge om dioder skal lyse
if (celsius < baselineTemp) {
digitalWrite(2, LOW); //Under 40, ingen lysdioder lyser
digitalWrite(3, LOW);
digitalWrite(4, LOW);
}
if (celsius >= baselineTemp && celsius < baselineTemp + 10) {
digitalWrite(2, HIGH); //Mellom 40 og 49, en lysdiode lyser
digitalWrite(3, LOW);
digitalWrite(4, LOW);
}
if (celsius >= baselineTemp + 10 && celsius < baselineTemp + 20) {
digitalWrite(2, HIGH); //Mellom 50 og 59, to lysdioder lyser
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
}
if (celsius >= baselineTemp + 20 && celsius < baselineTemp + 30) {
digitalWrite(2, HIGH); //Mellom 60 og 69, tre lysdioder lyser
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
}
if (celsius >= baselineTemp + 30) {
digitalWrite(2, HIGH); //Over 70, tre lysdioder lyser
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
delay(1000);
digitalWrite(4, HIGH);
delay(1000);
}
delay(1000); // Vent i 1000 millisekunder før neste avlesning
}