Arduino termometer

Fra HTX Arduino
Spring til navigation Spring til 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

Digitale Opgaver
Kombinatorisk Logik Opgave 1a - Opgave 1b - Opgave 2 - Opgave 3 - Opgave 4 - Opgave 5 - Opgave 6 - Opgave 7 - Opgave 8 - Opgave 9 - Opgave 10
Sekvensiel Logik Opgave 11 - Opgave 12 - Opgave 13 - Opgave 14
Analoge Opgaver
Modstande og Ohms lov Modstands Opgave 1 - Modstands Opgave 2 - Modstands Opgave 3 - Modstands Opgave 4 - Modstands Opgave 5 - Modstands Opgave 6 - Modstands Opgave 7 - Modstands Opgave 8 - Modstands Opgave 9 - Modstands Opgave 10
Kondensator og Spole Kondensator opgaver 1 - Kondensator DC opgave 1 - Kondensator AC opgave 1 - Spolen 1 - Seriekobling og parallelkobling - Spolen 2 - Beregning af spoleværdier (selvinduktionen) - Spolen 3 - Tidskonstant for RL-led - Spolen 4 - Beregning af induktiv-reaktansen
Operationsforstærker Opamp Opgave 1 - Opamp Opgave 2 - Opamp Opgave 3
Diverse Opgaver Opgaver Diagram - Opgaver Transformator - Transistor opgave - Zenerdiode Opgave 1
Programmerings Opgaver
Arduino Arduino Blink - Arduino Opgave 01 - Blink - Arduino Button - Analog Out - Arduino StateChangeDetection - Arduino termometer - Arduino termostat - Arduino udgangsforstærkning
PIC PIC Opgave 1 - Blink - PIC Opgave 2 - Gates - PIC Opgave 3 - Udvidet blink - PIC Opgave 4 - Kombinatorik - PIC Opgave 5 - Flip-flops - PIC Opgave 6 - Løbelys - PIC Opgave 6a - kontakt - PIC Opgave 7 - Udvidet løbelys - PIC Opgave 8 - Sekventielle kredsløb - PIC Opgave 9 - Multivibratorer - PIC Opgave 10 - Samtidighed - PIC Opgave 11 - Tastatur - PIC Opgave 12 - Display - PIC Opgave 13 - A-D converter - PIC Opgave 14 - Interrupt - PIC Opgave 15 - Seriel komm - PIC Opgave 16 - Lyskryds - PIC Opgave 17 - Tyverialarm
PIC Opgave Løsninger PIC Opg 1 Løsning - PIC Opg 2 Løsning - PIC Opg 3 Løsning - PIC Opg 4 Løsning - PIC Opg 5 Løsning