Temperatursensor

Beskriving
Ein temperatursensor for bruk saman med ein mikrokontrollar registrerer temperaturen og sender ut spenning som er proporsjonal med temperaturen. Dette blir gjort ved at temperaturfølaren endrar motstand ut frå variasjonar i temperatur, noko Arduinoen kan lese.
Utforminga av temperaturfølaren skil seg frå ein transistor ved at den eine sida er avrunda.
Bruksområde
Temperatursensorar blir brukte i mange ulike komponentar, som elektroniske termometer eller i termostatar for å regulere ein varmeomn. Vi kan òg bruke dei for å verne elektronikk, ved at straumen blir broten når temperaturen stig over eit maksimalt nivå. Har du til dømes nokon gong opplevd at mobiltelefonen din har skrudd seg av på grunn av for høg temperatur?
Som døme vil temperatursensoren TMP36 auke 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 ein temperatursensor saman med ein Arduino, må du nytte analog port for lesing av temperaturen.
Temperatursensoren har tre bein, der beina har tilkoplingane 5V (pluss), GND (jording) og ein analog utgang som må koplast til ein analog inngang på Arduinoen. Denne analoge verdien er ei spenning frå 0 til 5 volt, og blir gjord om digitalt til ein verdi mellom 0 og 1023.

Koplingsskjema
I dette dømet er det kopla ein temperatursensor og tre lysdiodar til ein Arduino.
Oppgåva her er å få ein temperatursensor til å lese temperaturen og at Arduinoen skal avgjere kva lysdiodar som lyser.

Programmering
I dette programdømet skal Arduinoen lese av ein temperatur og deretter aktivere tre lysdiodar ut frå verdien han les av.
Her blir ein grenseverdi sett til 40 gradar. Viss temperaturen er lågare enn 40 gradar, lyser ingen diodar. Viss temperaturen er mellom 40 og 49 gradar lyser ein diode, frå 50 til og med 59 gradar lyser to diodar, og frå og med 60 gradar lyser alle tre diodane. Viss temperaturen bli 70 gradar eller høgare, vil framleis alle lysdiodane lyse, og i tillegg vil raud diode blinke.
Variabelen vi nyttar, er ein int, altså eit heiltal. Vi treng ikkje så detaljert avlesing her at vi treng å bruke desimalar.
I tillegg skriv programmet temperaturen i celsius og fahrenheit i serial monitor.
Du kan forandre verdiane i programmet viss du ønsker visning knytt til andre verdiar. Du kan òg velje å gi variablane andre namn viss du synest det er meir oversiktleg.
int baselineTemp = 0; //Lag ein variabel som heiter baselineTemp
int celsius = 0; //Lag ein variabel som heiter celsius
int fahrenheit = 0; //Lag ein variabel med fahrenheit
void setup()
{
pinMode(A0, INPUT); //Set pinne A0 til inngang
Serial.begin(9600); //Aktiver seriell kommunikasjon
pinMode(2, OUTPUT); //Set pinne 2 til utgang
pinMode(3, OUTPUT); //Set pinne 3 til utgang
pinMode(4, OUTPUT); //Set pinne 4 til utgang
}
void loop()
{
// Set grenseverdiar for å aktivere LED-ar
baselineTemp = 40;
// Mål temperatur i celsius
celsius = map(((analogRead(A0) - 20) * 3.04), 0, 1023, -40, 125);
// Rekn om verdien til fahrenheit
fahrenheit = ((celsius * 9) / 5 + 32);
Serial.print(celsius); //Skriv verdien som er lagra i variabelen celsius
Serial.print(" C, "); //Skriv teiknet C i serial monitor
Serial.print(fahrenheit); //Skriv verdien som er lagra i variabelen fahrenheit
Serial.println(" F"); //Skriv teiknet F i serial monitor
// Her blir avlesne verdiar brukte for å velje om diodar skal lyse
if (celsius < baselineTemp) {
digitalWrite(2, LOW); //Under 40, ingen lysdiodar lyser
digitalWrite(3, LOW);
digitalWrite(4, LOW);
}
if (celsius >= baselineTemp && celsius < baselineTemp + 10) {
digitalWrite(2, HIGH); //Mellom 40 og 49, ein lysdiode lyser
digitalWrite(3, LOW);
digitalWrite(4, LOW);
}
if (celsius >= baselineTemp + 10 && celsius < baselineTemp + 20) {
digitalWrite(2, HIGH); //Mellom 50 og 59, to lysdiodar lyser
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
}
if (celsius >= baselineTemp + 20 && celsius < baselineTemp + 30) {
digitalWrite(2, HIGH); //Mellom 60 og 69, tre lysdiodar lyser
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
}
if (celsius >= baselineTemp + 30) {
digitalWrite(2, HIGH); //Over 70, tre lysdiodar lyser
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
delay(1000);
digitalWrite(4, HIGH);
delay(1000);
}
delay(1000); // Vent i 1000 millisekund før neste avlesing
}