Slik leser du temperaturer med Arduino

Å lese temperaturen med en Arduino er en ekstremt nyttig funksjon. Det er den typen funksjon som er viktig i mange prosjekter, alt fra å bygge din egen hjemme termostat for å skape en værstasjon. I tillegg er det enkelt nok å implementeres om noen få minutter med noen Arduino og bare to enkle komponenter.

I denne veiledningen vil jeg vise deg hvordan du bruker en Arduino til å lese temperaturen fra en termistor og skrive den ut på seriell port. En termistor er en enkel elektronisk komponent som endrer motstand basert på temperaturen. Denne opplæringen fokuserer på den enkleste og minst kostbare måten å lese temperaturen på. Underveis lærer du en enkel, kjerneblokk av elektronikk som gjør at du kan utforske en hel verden av sensorer med Arduino.


Hvordan Arduino leser temperatur

Det er flere måter å lese temperatur med en Arduino på. Noen av disse inkluderer:

  • I2C eller serielle sensorer - Det finnes avanserte sensormoduler som ofte kan måle barometertrykk, temperatur, fuktighet og andre forhold i en pakke. Men disse modulene er vanligvis mye dyrere og krever bruk av I2C eller seriell protokoll for å lese. Disse kan være flotte for et mer avansert værsensorprosjekt.
  • Termisk analog sensor - En tre-pin-komponent som tar kraft, jord og gir en variabel spenning basert på temperaturen ved å implementere en båndgapskjerne i en enkelt komponent. Denne klassen av komponent er nyttig, og jeg vil undersøke dette i en fremtidig veiledning.
  • termistor - En motstand som endrer motstand basert på omgivelsestemperaturen.

Denne opplæringen fokuserer på å bruke termistormetoden av flere grunner. For det første reagerer det raskt på temperaturendringer, for det andre er det billig og til slutt er det enkelt å bruke.

Det er også to svært viktige konsepter å lære av denne opplæringen:

  1. Leser en verdi fra en Arduino analog pin.
  2. Bruke en spenningsdeler krets for å lese variabel motstand sensorer.

Variabel motstandssensorer er produsert for å måle alle slags ting i den fysiske verden, og evnen til å lese disse sensorer med Arduino vil være en utmerket grunnleggende ferdighet å mestre. Rotasjon, trykk, belastning, flex, lys og varme er alle eksempler på ting du kan måle ved hjelp av en analog pinne og en spenningsdeler krets.


Samle delene

For dette prosjektet trenger du

  • bread~~POS=TRUNC
  • Arduino (En Uno brukes i mine eksempler, men noen modell skal gjøre)
  • 10K ohm termistor
  • 10K ohm motstand (brun, svart, oransje)
  • Hookup Wires
  • Datamaskin med Arduino IDE installert (installering og bruk av IDE er ikke dekket i denne opplæringen)
  • USB-kabel (for å koble Arduino og PC)

Hvordan det fungerer

Arduino analoge pinner leser en spenning som forventes å variere fra 0V til 5V. En standard måte å slå motstandsendring i en termistor inn i en spenningsendring som Arduino analogpinnen kan lese, er å skape en spenningsdelerkrets. Kretsen bruker to motstander i en krets med en kjent spenning for å skape en matematisk forutsigbar spenningsverdi: Vout.

Det er en veldig enkel krets som vist nedenfor. Når R1-verdien (motstand 1) endres, endres Vout. I vår veiledning vil R1 være termistoren og verdien vil endres i forhold til temperaturen. Vout er koblet til vår analoge port på Arduino, slik at vi kan overvåke den.

Spenningsdeler krets skjematisk

Nok teori, la oss fortsette å bygge opp brødbrettet og Arduino.


Setter opp

Sett opp ditt brødbrett og Arduino bord som dette diagrammet nedenfor. Diagrammet ble laget med Fritzing et flott verktøy for å koble opp prosjekter logisk før du tar ledninger og komponenter. Den øverste grå komponenten er termistoren, eller R1, i diagrammet ovenfor. Dette er en av mange måter å binde opp kretsen, jeg valgte den fordi den overholder noen gode, grunnleggende breadboarding-praksis.

Brødbrettoppsett med termistor og spenningsdeler krets

Programmering av Arduino

Å lese den analoge pinnen på en Arduino er ganske enkel. Pinnene merket A0 - A5 på Arduino er spesielle pinner som når de leses med analogRead () funksjonen returnerer verdien fra 0 til 1023 hvor inngangsspenningen er fra 0V til 5V. Som verdien av R1, endres termistoren basert på temperaturen, vil spenningen i A0-pin forandres forutsigbart mellom 0V og 5V.

La oss skrive opp noen kode og skyve den over til Arduino.

  1. Koble Ardunio til datamaskinen med USB-kabelen
  2. Åpne Arduino IDE
  3. Kopier og lim inn koden nedenfor
  4. trykk Laste opp knappen for å laste koden inn i din Arduino
  5. Åpne Serial Monitor for Arduino IDE ved å trykke CTRL SHIFT M eller Velge menyen Verktøy> Seriell skjerm.
 tomt oppsett () // Denne funksjonen blir kalt når Arduino starter Serial.begin (115200); // Denne koden setter opp seriell porten ved 115200 baud rate void loop () // Denne funksjonen slår mens arduino er drevet int val; // Opprett en heltallvariabel val = analogRead (0); // Les analog port 0 og lagre verdien i val Serial.println (val); // Skriv ut verdien til seriell portforsinkelse (1000); // Vent et sekund før vi gjør det igjen

Tips: Kontroller at baudfrekvensen til seriell skjerm samsvarer med det vi har satt inn i setup () funksjon. I dette eksemplet: 115200.

Utgangen skal se slik ut:

463
463
463
463
463
463

Med mindre brødbrettet er i en veldig varm ovn, er disse verdiene ikke fornuftige. Det er fordi disse bare er spenningsprøver oversatt til en skala fra 0 til 1023. Deretter må vi gjøre disse til en brukbar temperaturverdi.


Konvertere analoge verdier til temperatur

Ovenfor nevnte jeg at bruk av termistoren ville være enkel, og det er fordi vi kan stå på gigantens skuldre. Det er en ligning for å gjøre oversettelsen fra samplet verdi til temperatur kalt Steinhart-Hart-ligningen. (http://en.wikipedia.org/wiki/Thermistor) Steinhart-Hart-ligningen er allerede oversatt for Arduino. Et eksempel på dette finnes på playground.arduino.cc i en artikkel av Milan Malesevic og Zoran Stupic. Jeg har illustrert deres funksjon Termistor () nedenfor og lagt til kommentarer om hvordan du bruker den.

  1. Kopier og lim inn koden under i Arduino IDE som erstatter det opprinnelige eksemplet
  2. Klikk på Laste opp knappen for å trykke denne koden opp til din Arduino.
  3. Åpne vinduet Arduino Serial Monitor igjen, da det har forsvunnet når du lastet opp koden.
 #inkludere  // laster de mer avanserte matematiske funksjoner ugyldig oppsett () // Denne funksjonen blir kalt når Arduino starter Serial.begin (115200); // Denne koden setter opp seriell porten ved 115200 baud rate double Termister (int RawADC) // Funksjon for å utføre den fancy matte av Steinhart-Hart-ligningen dobbel Temp; Temp = log ((10240000 / RawADC) - 10000)); Temp = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * Temp * Temp)) * Temp); Temp = Temp - 273,15; // Konverter Kelvin til Celsius Temp = (Temp * 9.0) / 5.0 + 32.0; // Celsius til Fahrenheit - kommentere denne linjen hvis du trenger Celsius retur Temp;  tomromsløyfe () // Denne funksjonen sløyfes mens arduino er drevet int val; // Opprett et heltall variabel dobbelt temp; // Variabel for å holde en temperaturverdierval = analogRead (0); // Les analog port 0 og lagre verdien i val temp = Termister (val); // Kjører fancy matematikk på den raske analogverdien Serial.println (temp); // Skriv ut verdien til seriell portforsinkelse (1000); // Vent et sekund før vi gjør det igjen

Nå skal utgangen se mye mer ut som dette:

69.22
69,07
69.22
69.22
70.33
72,07
72.86
73,34
74.13

Nå er dette fornuftig. Mitt verksted er faktisk 69 grader Fahrenheit. Under dette eksempelet rørte jeg på toppen av termistoren med fingeren og det registrerte temperaturøkningen som du kan se.

Prøv å eksperimentere med oppsettet ditt for å bli mer komfortabel med disse nye ferdighetene. Her er noen forslag.

  • Reduser forsinkelsesverdien i løkken for å se hvor raskt termistoren kan reagere på temperaturendringer. (Jeg foreslår ikke at du endrer dette under 50, eller du kan overgå seriellbufferen din.)
  • Prøv å endre programmet for å få Celsius-verdier (hint: les kommentarene i koden)
  • Endre breadboard og kode for å bruke pin A1 i stedet for A0
  • Ekstra kreditt: Konfigurer kretsen til å bruke en 10K Ohm mini fotomodstand og -dokument analogRead () verdier basert på lysendringer (hint: bruk det første kodesegmentet)

Sammendrag

Det er alt der er til det. Nå kan du gå og skape noen måte av oppfinnelse ved hjelp av en veldig billig termistor.

  • Du har ansatt ferdighetene til å bygge en breadboard krets
  • Kompilere og laste opp en skisse til din arduino

I tillegg fra denne opplæringen har du lært å:

  • les analoge verdier fra Arduino bruker analogRead ()
  • forstå og manipulere verdien returnert fra analogRead () funksjon
  • bruk en spenningsdeler krets for å lese endringer i en motstandsbasert sensor som termistoren
  • konverter analoge termistorverdier til temperaturverdier

Mens du for første gang programmerer din Arduino for å lese og forstå verden rundt, kan det hende at det er komplisert. I virkeligheten er det en rekke enkle og billige sensorer tilgjengelig som gjør at du raskt og enkelt kan grensesnittet med den virkelige verden. Spenningsdelerens krets og en enkel kode kan gi din neste skapelse nye og kraftige sanser.