Å 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.
Det er flere måter å lese temperatur med en Arduino på. Noen av disse inkluderer:
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:
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.
For dette prosjektet trenger du
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 skjematiskNok teori, la oss fortsette å bygge opp brødbrettet og Arduino.
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Å 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.
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.
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.
#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.
analogRead ()
verdier basert på lysendringer (hint: bruk det første kodesegmentet)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.
I tillegg fra denne opplæringen har du lært å:
analogRead ()
analogRead ()
funksjonMens 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.