Hur man läser temperaturer med Arduino

Att läsa temperaturen med en Arduino är en extremt användbar funktion. Det är den typ av funktion som är avgörande för många projekt, allt från att bygga en egen hemtermostat för att skapa en väderstation. Dessutom är det enkelt att implementeras om några minuter med någon Arduino och bara två enkla komponenter.

I denna handledning visar jag dig hur du använder en Arduino för att läsa temperaturen från en termistor och skriva ut den på seriell port. En termistor är en enkel elektronisk komponent som ändrar motstånd baserat på temperaturen. Denna handledning fokuserar på det enklaste och billigaste sättet att läsa temperaturen. Längs vägen kommer du att lära dig ett enkelt, kärnbyggande block av elektronik som gör att du kan utforska en hel värld av sensorer med din Arduino.


Hur Arduino läser temperatur

Det finns flera sätt att läsa temperaturen med en Arduino. Några av dessa inkluderar:

  • I2C eller seriella sensorer - Det finns avancerade sensormoduler som ofta kan mäta barometertryck, temperatur, fuktighet och andra förhållanden allt i ett paket. Men dessa moduler är vanligtvis mycket dyrare och kräver användning av I2C eller seriellt protokoll att läsa. Dessa kan vara bra för ett mer avancerat väderprojekt.
  • Termisk analog sensor - En trepennkomponent som tar effekt, jord och matar ut en variabel spänning baserat på temperaturen genom att implementera en bandgapkärna i en enda komponent. Denna klass av komponent är användbar och jag kommer att undersöka detta i en framtida handledning.
  • termistor - Ett motstånd som förändrar motstånd baserat på omgivningstemperaturen.

Denna handledning fokuserar på att använda termistormetoden av flera anledningar. För det första svarar det snabbt på temperaturförändringar, för det andra är det billigt och äntligen är det lätt att använda.

Det finns också två väldigt viktiga begrepp att lära av denna handledning:

  1. Läser ett värde från en Arduino analog stift.
  2. Använda en spänningsdelningskrets för att läsa variabla motståndssensorer.

Variabla motståndssensorer är tillverkade för att mäta alla möjliga saker i den fysiska världen och möjligheten att läsa dessa sensorer med din Arduino kommer att vara en utmärkt grundläggande färdighet att behärska. Rotation, tryck, belastning, flex, ljus och värme är alla exempel på saker du kan mäta med hjälp av en analog stift och en spänningsdelare krets.


Samla delarna

För det här projektet behöver du

  • Bakbord
  • Arduino (En Uno används i mina exempel, men någon modell borde göra)
  • 10K ohm termistor
  • 10K ohm motstånd (brun, svart, orange)
  • Hookup Wires
  • Dator med Arduino IDE installerad (installation och användning av IDE omfattas inte av denna handledning)
  • USB-kabel (för att ansluta Arduino och PC)

Hur det fungerar

Arduino analoga stift läser en spänning som förväntas sträcka sig från 0V till 5V. Ett vanligt sätt att vrida motståndsförändring i en termistor till en spänningsbyte som Arduino analoga stift kan läsa är att skapa en spänningsdelare krets. Kretsen använder två motstånd i en krets med en känd spänning för att skapa ett matematiskt förutsägbart spänningsvärde: Vout.

Det är en mycket enkel krets som visas nedan. När R1-värdet (motståndet 1) ändras ändras Vout. I vår handledning kommer R1 att vara termistoren och dess värde kommer att förändras i förhållande till temperaturen. Vout är ansluten till vår analoga port på Arduino så vi kan övervaka den.

Spänningsdelare krets schematisk

Nog teori, låt oss gå vidare för att bygga upp brödbrädet och Arduino.


Inställning

Ställ in ditt brödbräda och Arduino bräda som detta diagram nedan. Diagrammet gjordes med Fritzing ett bra verktyg för att leda upp projekten logiskt innan de greppade ledningar och komponenter. Den övre grå komponenten är termistoren, eller R1, i diagrammet ovan. Detta är ett av många sätt att koppla upp kretsen, jag valde det eftersom det uppfyller några bra, grundläggande breadboarding metoder.

Breadboard layout med termistor och spänningsdelare krets

Programmering av Arduino

Att läsa den analoga pinnen på en Arduino är ganska enkel. Stiften A0 - A5 på Arduino är speciella stiften som när de läses med analogRead () funktionen returnerar värdet från 0 till 1023 där ingångsspänningen är från 0V till 5V. När värdet på R1, termistoren ändras baserat på temperaturen, kommer spänningen in i A0-stiftet att förutsäga mellan 0V och 5V.

Låt oss skriva upp en kod och trycka den över till Arduino.

  1. Anslut Ardunio till datorn med USB-kabeln
  2. Öppna Arduino IDE
  3. Kopiera och klistra in koden nedan
  4. tryck på Ladda upp knappen för att ladda koden i din Arduino
  5. Öppna seriekontrollen för Arduino IDE genom att trycka på CTRL SHIFT M eller Välja menyn Verktyg> Seriell bildskärm.
 void setup () // Den här funktionen kallas när Arduino startar Serial.begin (115200); // Denna kod ställer in seriell port vid 115200 baud rate void loop () // Denna funktion loopar medan arduino är driven int val; // Skapa en heltal variabel val = analogRead (0); // Läs den analoga porten 0 och lagra värdet i val Serial.println (val); // Skriv ut värdet till seriell portfördröjning (1000); // Vänta en sekund innan vi gör det igen

Tips: Se till att baudfrekvensen för seriell bildskärm matchar vad vi ställt in i inrätta() fungera. I det här exemplet: 115200.

Utgången ska se ut så här:

463
463
463
463
463
463

Om inte din brödbräda ligger i en mycket het ugn, är dessa värden inte meningsfulla. Det beror på att dessa bara är spänningsprover översatta till en skala från 0 till 1023. Därefter måste vi göra dessa till ett användbart temperaturvärde.


Konvertera analoga värden till temperatur

Ovan nämnde jag att använda termistorn skulle vara enkel, och det är för att vi kan stå på giganters axlar. Det finns en ekvation för att göra översättningen från samplingsvärde till temperatur som kallas Steinhart-Hart-ekvationen. (http://en.wikipedia.org/wiki/Thermistor) Steinhart-Hart-ekvationen har redan översatts för Arduino. Ett exempel på detta finns på playground.arduino.cc i en artikel av Milan Malesevic och Zoran Stupic. Jag har illustrerat sin funktion Termistor () nedan och lagt till kommentarer om hur man använder den.

  1. Kopiera och klistra in koden nedan i Arduino IDE som ersätter det ursprungliga exemplet
  2. Klicka på Ladda upp knappen för att trycka denna kod upp till din Arduino.
  3. Öppna Arduino Serial Monitor-fönstret igen, eftersom det har försvunnit när du laddade upp koden.
 #inkludera  // laddar de mer avancerade matematiska funktionerna void setup () // Denna funktion kallas när Arduino startar Serial.begin (115200); // Den här koden ställer in seriell port med 115200 baud-hastighet dubbel termister (int RawADC) // Funktion för att utföra den snygga matematiken för Steinhart-Hart-ekvationen dubbel Temp; Temp = log ((10240000 / RawADC) - 10000)); Temp = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * Temp * Temp)) * Temp); Temp = Temp - 273,15; // Konvertera Kelvin till Celsius Temp = (Temp * 9.0) / 5.0 + 32.0; // Celsius till Fahrenheit - kommentera den här raden om du behöver Celsius Return Temp;  tomrumsling () // Denna funktion loopar medan arduino är driven int val; // Skapa en heltal variabel dubbel temp; // Variabel för att hålla ett temperaturvärde val = analogRead (0); // Läs analog port 0 och lagra värdet i val temp = Termister (val); // Kör den snygga matematiken på det raka analoga värdet Serial.println (temp); // Skriv ut värdet till seriell portfördröjning (1000); // Vänta en sekund innan vi gör det igen

Nu ska produktionen se mycket mer ut så här:

69,22
69,07
69,22
69,22
70,33
72,07
72,86
73,34
74,13

Nu är det här meningsfullt. Min verkstad är faktiskt 69 grader Fahrenheit. Under det här exemplet rörde jag termistorens övre del med mitt finger och det kände av temperaturökningen som du kan se.

Försök att experimentera med din inställning för att bli mer bekväm med dessa nya färdigheter. Här är några förslag.

  • Minska fördröjningsvärdet i slingan för att se hur snabbt termistoren kan reagera på temperaturförändringar. (Jag föreslår inte att du ändrar detta under 50, eller du kan överfälla din seriella buffert.)
  • Försök ändra programmet för att få Celsius-värden (tips: läs kommentarerna i koden)
  • Ändra brödbräda och kod för att använda stift A1 istället för A0
  • Extra kredit: Konfigurera kretskortet för att använda ett 10K Ohm mini fotomotstånd och dokument analogRead () värden baserade på ljusförändringar (tips: använd första kodsegmentet)

Sammanfattning

Det är allt som finns där. Nu kan du gå och skapa något sätt av uppfinning med en mycket billig termistor.

  • Du har använt färdigheterna att bygga en breadboard-krets
  • Kompilera och ladda upp en skiss till din arduino

Dessutom från denna handledning har du lärt dig hur man:

  • läsa analoga värden från Arduino med analogRead ()
  • förstå och manipulera värdet som returneras från analogRead () fungera
  • använd en spänningsdelare krets för att läsa ändringar till en motståndsbaserad sensor som termistoren
  • omvandla analoga termistorvärden till temperaturvärden

Medan du i början programmerar din Arduino för att läsa och förstå världen runt det kan låta komplicerat, i verkligheten finns det en hel del enkla och billiga sensorer som gör det möjligt för dig att snabbt och enkelt få kontakt med den verkliga världen. Spänningsdelningskretsen och en viss enkel kod kan ge din nästa skapelse nya och kraftfulla sinnen.