Hoe temperaturen te lezen met Arduino

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.


Hoe Arduino temperatuur leest

Er zijn verschillende manieren om temperatuur te meten met een Arduino. Een paar hiervan zijn:

  • I2C of seriële sensoren - Er zijn geavanceerde sensormodules die vaak barometerdruk, temperatuur, vochtigheid en andere omstandigheden allemaal in één pakket meten. Deze modules zijn echter meestal veel duurder en vereisen het gebruik van het I2C- of seriële protocol om te lezen. Deze kunnen goed zijn voor een meer geavanceerd weersensorproject.
  • Thermische analoge sensor - Een drie-pins component dat stroom, aarde en uitgangen een variabele spanning op basis van de temperatuur door het uitvoeren van een band gap kern in een enkele component. Deze klasse van componenten is nuttig en ik zal dit in een toekomstige zelfstudie onderzoeken.
  • thermistor - Een weerstand die weerstand wijzigt op basis van de omgevingstemperatuur.

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:

  1. Een waarde van een analoge Arduino-pin lezen.
  2. Een spanningsdelercircuit gebruiken om sensoren met variabele weerstand te lezen.

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.


Verzamel de onderdelen

Voor dit project heb je nodig

  • broodplank
  • Arduino (Een Uno wordt in mijn voorbeelden gebruikt, maar elk model zou dit moeten doen)
  • 10K Ohm-thermistor
  • 10K Ohm weerstand (bruin, zwart, oranje)
  • Aansluitdraden
  • Computer met Arduino IDE geïnstalleerd (installatie en gebruik van de IDE vallen niet onder deze tutorial)
  • USB-kabel (om Arduino en pc aan te sluiten)

Hoe het werkt

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 circuitschema

Genoeg theorie, laten we verder gaan met het opbouwen van de breadboard en Arduino.


Opzetten

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 spanningsdelercircuit

Programmering van de Arduino

Het 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.

  1. Sluit de Ardunio aan op uw computer met de USB-kabel
  2. Open de Arduino IDE
  3. Kopieer en plak de onderstaande code
  4. druk de Uploaden om de code in uw Arduino te laden
  5. Open de seriële monitor van de Arduino IDE door op te drukken CTRL SHIFT M of Selecteer het menu Hulpmiddelen> Seriële monitor.
 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.


Analoge waarden converteren naar temperatuur

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.

  1. Kopieer en plak de onderstaande code in de Arduino IDE ter vervanging van het originele voorbeeld
  2. Klik op de Uploaden om deze code naar je Arduino te duwen.
  3. Open het Arduino Serial Monitor-venster nogmaals omdat het verdwenen is toen u de code uploadde.
 #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.

  • Verlaag de vertragingswaarde in de lus om te zien hoe snel de thermistor op temperatuurveranderingen kan reageren. (Ik raad niet aan dit onder de 50 te veranderen of je seriële buffer te laten overlopen.)
  • Probeer het programma aan te passen om Celsius-waarden te krijgen (tip: lees de opmerkingen in de code)
  • Wijzig het breadboard en de code om pin A1 te gebruiken in plaats van A0
  • Extra Krediet: herconfigureer het circuit om een ​​10K Ohm mini-fotoresistor en document te gebruiken analogRead () waarden op basis van lichtveranderingen (hint: gebruik het eerste codesegment)

Samenvatting

Dat is alles wat er is. Nu kunt u elke vorm van uitvinding maken met behulp van een zeer goedkope thermistor.

  • Je hebt de vaardigheden aangewend om een ​​breadbordcircuit te bouwen
  • Compileren en uploaden van een schets naar uw Arduino

Aanvullend op deze tutorial heb je geleerd hoe je:

  • lees analoge waarden van de Arduino gebruiken analogRead ()
  • begrijpen en manipuleren van de waarde geretourneerd door de analogRead () functie
  • gebruik een a spanningsdelercircuit om wijzigingen in een op een weerstand gebaseerde sensor, zoals de thermistor, te lezen
  • converteer analoge thermistorwaarden naar temperatuurwaarden

Terwijl 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.