Arduino termometer

Fra Holstebro HTX Wiki
Skift til: navigering, søgning

Denne opgave lægger op til et lille projekt omkring Arduinoen, der skal ende med en Arduino termostat.

Software

Arduinoen skal i dette eksempel læse en analog værdi og sende noget til PC'en, som repræsenterer en temperatur.

I Arduino-programmet åbnes Fil - Eksempler - 01.Basic - AnalogReadSerial[1].

Virkemåde

Dette er den grundlæggende virkemåde af AnalogReadSerial.

I funktionen setup() sættes den serielle port op til at kommunikere med 9600 Baud.

I funktionen loop() afvikles den samme kode i en uendelig løkke, hvor der læses en analog værdi på ben A0 - dette giver et tal mellem 0 og 1023, der skrives ud på den serielle port.

Hardware

Der skal tilsluttes noget hardware for at kunne måle temperatur. Dette gør vi ved hjælp af en LM35 temperatur-føler, der sender spændingen ind på A0.

Temperaturføleren giver en spænding ud på 10mV pr. grad C, så ved 25 grader giver den 250 mV ud.

Der skal også tilsluttes et potentiometer, der kan justere spændingen ind på AREF-benet.

Det tilsluttede kan illustreres på følgende måde:
Arduino-temperatur.png
Diagram der illustrerer opkobling til temperatur-målingen


Test

Når programmet er ovre i Arduinoen skulle man gerne kunne måle den variation der kommer fra temperaturføleren, og spændingen skulle gerne kunne varieres ved at man opvarmer temperatur-føleren.

I den serielle konsol på PC'en kan vi se hvad Arduinoen skriver ud på den serielle port, og tallene skulle gerne være omkring 40 for 20 grader og omkring 50 for 25 grader.

Det skyldes at AD-konverteringen har en reference-spænding på 5V, så området i AD'en på 0-1023 giver et spændingsspring på 4,89 mV for hvert step i AD-udlæsningen.

De 4,89 mV svarer på LM35 til ca. 0,5 grads variation, hvilket vi ikke er tilfredse med i denne sammenhæng.

Ændring af referncespændingen

For at få den analoge indgang til at måle bedre, kunne man forstærke spændingen fra LM35 temperatur-føleren, men man kunne også ændre på referencespændingen, hvilket vi vælger.

Potentiometeret i diagrammet giver en variabel spænding ind på AREF benet på Arduinoen. Denne spænding skal indstilles til at være ca. 1,0 V - det kan gøres ved at måle med et multimeter.

Den næste betingelse for at referencespændingen virker er at programmet anvender denne spænding, i stedet for de 5V[2]. Det gør man ved at tilføje en ekstra kode i setup() som følger:

  analogReference(EXTERNAL);

Test

Ved at sende koden til arduinoen og læse i konsollen, så skulle tallene gerne ligge på ca. 200 for 20 grader og 250 for 25 grader.

Man kan se at tallet der skrives ud er 10 gange for stort, men at det ellers følger temperaturen nogenlunde.

Man kan ved at trimme lidt på potentiometeret få temperaturmålingen til at svare til den aktuelle temperatur (kontrolmål med et andet digitalt termometer placeret ved LM35).

Udvidelse 1

For at få en lidt mere korrekt visning af temperaturen kan man rette i linjen der skriver ud, så det er et decimal-tal der skrives ud. Decimaltal angives i typen float.

Koden der laver dette kan skrives som følger:

  float visning = float(sensorValue) / 10.0;
  Serial.print("Temperatur = ");
  Serial.println(visning);

Udvidelse 2

Målingen vi foretager er kun med 1 decimal, så det er lidt snyd med præcisionen at vi skriver ud med 2 decimaler. Dette kan løses ved at rette i udskriftslinjen til følgende:

  Serial.println(visning, 1);

Referencer