Het lezen van de temperatuur met een Arduino is een uiterst nuttige functie. Het is het soort functie dat essentieel is in veel projecten, variërend van het bouwen van je eigen thuisthermostaat tot het maken van een weerstation. Bovendien is het eenvoudig genoeg om in een paar minuten met elke Arduino en slechts twee eenvoudige componenten te worden geïmplementeerd.
In deze zelfstudie laat ik je zien hoe je een Arduino gebruikt om de temperatuur van een thermistor af te lezen en deze op de seriële poort af te drukken. Een thermistor is een eenvoudige elektronische component die op basis van de temperatuur van weerstand verandert. Deze tutorial richt zich op de eenvoudigste en minst dure manier om de temperatuur te meten. Onderweg leer je een eenvoudige, essentiële bouwsteen van elektronica waarmee je met je Arduino een hele wereld van sensoren kunt verkennen.
Er zijn verschillende manieren om temperatuur te meten met een Arduino. Een paar hiervan zijn:
Deze zelfstudie richt zich om verschillende redenen op het gebruik van de thermistormethode. Ten eerste reageert het snel op temperatuurveranderingen, ten tweede is het goedkoop en ten slotte is het eenvoudig te gebruiken.
Er zijn ook twee zeer belangrijke concepten om uit deze tutorial te leren:
Variabele weerstandssensoren worden vervaardigd om allerlei dingen te meten, in de fysieke wereld, en het vermogen om deze sensoren te lezen met je Arduino zal een uitstekende basisvaardigheid zijn om onder de knie te krijgen. Rotatie, druk, spanning, flex, licht en warmte zijn allemaal voorbeelden van dingen die u kunt meten met een analoge pen en een spanningsdelercircuit.
Voor dit project heb je nodig
Arduino analoge pinnen lezen een spanning die naar verwachting zal variëren van 0V tot 5V. Een standaardmanier om een weerstandsverandering in een thermistor om te zetten in een spanningsverandering die de Arduino-analoge pen kan aflezen, is om een spanningsdelercircuit te creëren. Het circuit gebruikt twee weerstanden in een circuit van een bekende spanning om een wiskundig voorspelbare spanningswaarde te creëren: Vout.
Het is een heel eenvoudig circuit, zoals hieronder getoond. Als de R1 (weerstand 1) waarde verandert, verandert Vout. In onze tutorial zal R1 de thermistor zijn en de waarde ervan zal ten opzichte van de temperatuur veranderen. Vout is verbonden met onze analoge poort op de Arduino, zodat we deze kunnen controleren.
Spanningsdeler circuitschemaGenoeg theorie, laten we verder gaan met het opbouwen van de breadboard en Arduino.
Stel je breadboard en Arduino-bord in zoals hieronder afgebeeld. Het diagram is gemaakt met Fritzing, een geweldig hulpmiddel voor het logisch bedraden van projecten voordat draden en componenten worden gegrepen. De bovenste, grijze component is de thermistor, of R1, in het bovenstaande schema. Dit is een van de vele manieren om het circuit aan te sluiten, ik heb het gekozen omdat het voldoet aan een aantal goede basispraktijken voor breadboarding.
Breadboard-layout met thermistor en spanningsdelercircuitHet lezen van de analoge pin op een Arduino is vrij eenvoudig. De pinnen met het label A0 - A5 op de Arduino zijn speciale pinnen die bij lezen met de analogRead ()
De functie retourneert de waarde van 0 tot 1023, waarbij de ingangsspanning van 0V tot 5V is. Aangezien de waarde van R1, de thermistor, verandert op basis van de temperatuur, zal de spanning in de A0-pin voorspelbaar veranderen tussen 0V en 5V.
Laten we wat code schrijven en deze naar de Arduino doorsturen.
void setup () // Deze functie wordt aangeroepen wanneer de Arduino begint met Serial.begin (115200); // Deze code stelt de seriële poort in op baudsnelheid 115200 void loop () // deze functie wordt herhaald terwijl de arduino van stroom wordt voorzien; // Maak een integer-variabele val = analogRead (0); // Lees de analoge poort 0 en sla de waarde op in val Serial.println (val); // Druk de waarde af naar de seriële poortvertraging (1000); // Wacht een seconde voordat we het opnieuw doen
Tip: Zorg ervoor dat de baudrate van de seriële monitor overeenkomt met wat we in de opstelling()
functie. In dit voorbeeld: 115200.
De uitvoer zou er ongeveer zo uit moeten zien:
463
463
463
463
463
463
Tenzij uw breadboard zich in een zeer hete oven bevindt, zijn deze waarden niet logisch. Dat komt omdat dit simpelweg spanningsmonsters zijn die zijn vertaald in een schaal van 0 tot 1023. Vervolgens moeten we deze omzetten in een bruikbare temperatuurwaarde.
Hierboven vermeldde ik dat het gebruik van de thermistor eenvoudig zou zijn, en dat is omdat we op de schouders van reuzen kunnen staan. Er is een vergelijking om de vertaling te doen van de bemonsterde waarde naar de temperatuur, de Steinhart-Hart-vergelijking. (http://en.wikipedia.org/wiki/Thermistor) De Steinhart-Hart-vergelijking is al vertaald voor de Arduino. Een voorbeeld hiervan is te vinden op playground.arduino.cc in een artikel van Milan Malesevic en Zoran Stupic. Ik heb hun functie geïllustreerd Thermistor ()
hieronder en opmerkingen toegevoegd over hoe het te gebruiken.
#include// laadt de meer geavanceerde wiskundige functies ongeldig instellen () // Deze functie wordt aangeroepen wanneer de Arduino begint met Serial.begin (115200); // Deze code stelt de seriële poort in op 115200 baudrate double Thermister (int RawADC) // Function om de fraaie wiskunde van de Steinhart-Hart-vergelijking dubbele Temp uit te voeren; Temp = log (((10240000 / RawADC) - 10000)); Temp = 1 / (0,001129148 + (0,000234125 + (0,0000000876741 * Temp * Temp)) * Temp); Temp = Temp - 273.15; // Converteer Kelvin naar Celsius Temp = (Temp * 9.0) / 5.0 + 32.0; // Celsius naar Fahrenheit - geef commentaar op deze regel als u Celsius Return Temp nodig heeft; void loop () // Deze functie loopt door, terwijl de arduino van stroom wordt voorzien; / / Maak een integer variabele dubbele temp; // Variabele om een temperatuurwaarde te behouden val = analoogRead (0); // Lees de analoge poort 0 en sla de waarde op in val temp = Thermister (val); // Voert de fraaie wiskunde uit op de onbewerkte analoge waarde Serial.println (temp); // Druk de waarde af naar de seriële poortvertraging (1000); // Wacht een seconde voordat we het opnieuw doen
Nu zou de uitvoer er veel meer als volgt uit moeten zien:
69.22
69,07
69.22
69.22
70,33
72.07
72.86
73.34
74.13
Dit is nu logisch. Mijn werkplaats is inderdaad 69 graden Fahrenheit. Tijdens dit voorbeeld raakte ik de bovenkant van de thermistor met mijn vinger aan en voelde de temperatuurstijging zoals u kunt zien.
Experimenteer met je opstelling om meer vertrouwd te raken met deze nieuwe vaardigheden. hier zijn een paar suggesties.
analogRead ()
waarden op basis van lichtveranderingen (hint: gebruik het eerste codesegment)Dat is alles wat er is. Nu kunt u elke vorm van uitvinding maken met behulp van een zeer goedkope thermistor.
Aanvullend op deze tutorial heb je geleerd hoe je:
analogRead ()
analogRead ()
functieTerwijl je Arduino eerst de wereld om hem heen leest en begrijpt, klinkt het misschien ingewikkeld, in werkelijkheid is er een hele reeks eenvoudige en goedkope sensoren beschikbaar die je in staat stellen om snel en gemakkelijk met de echte wereld te communiceren. Het spanningsdelercircuit en enkele eenvoudige code kunnen je volgende creatie nieuwe en krachtige zintuigen geven.