DE PROGRAMMEERBARE PLANTENKAS / TEMPERATUURSENSOREN / EEN K-TYPE THERMOKOPPEL OP EEN MCP9600 VERSTERKER AANSLUITEN EN PROGRAMMEREN OM DE TEMPERATUUR TE METEN
SENSOR (CHIP): THERMOKOPPEL - MEETTECHNIEK: thermokoppel - MEETBEREIK (IN ℃): - 200 TOT +1260 - PRECISIE (IN ℃): 2 - AANSLUITING: I2C
In deze tutorial laten we zien hoe je een K-type thermokoppel met behulp van een MCP9600 versterker aansluit en programmeert om de temperatuur te meten met een Arduino microcontroller of een andere microcontroller. Deze tutorial hoort bij het artikel "De Programmeerbare Plantenkas: De temperatuur meten met een temperatuursensor", waarin we vertellen hoe je kunt bepalen welke temperatuursensor geschikt is voor jouw project, en waarin we de prestaties van verschillende temperatuursensoren met elkaar vergelijken.
Aansluiten
Om een thermokoppel te gebruiken zoals in dit voorbeeld beschreven is, heb je twee onderdelen nodig: Een K-type thermokoppel en een MCP9600 versterker. Thermokoppels zijn er in verschillende vormen en maten. De meeste zijn voorzien van een metaal omhulsel en zijn waterdicht. Er zijn ook goedkopere thermokoppels die alleen omhult zijn met een kunststof krimpkous. Voor welke versie je kiest, hangt er dus vooral af van wat je gaat meten.
Om het onszelf makkelijk te maken hebben wij gekozen voor een kant-en-klare MCP9600 thermokoppel versterker uit de Grove serie van Seeed Studio. Hier hoef je alleen nog maar de thermokoppel op de juiste manier in de connectoren te steken. Meestal moet de rode draad op de + aangesloten worden en de blauwe draad op de -, maar controleer dit altijd even in de datasheet.
Programmmeren
Er zijn drie verschillende bibliotheken voor de MCP9600 thermokoppel versterker beschikbaar die je direct via de Arduino IDE kunt downloaden. Wij hebben er voor gekozen om de MCP9600 bibliotheek van
SparkFun te gebruiken in dit voorbeeld, omdat deze het meest eenvoudig lijkt. Om deze bibliotheek te laten beginnen we natuurlijk met het laden van de bibliotheek, met het commando
#include <SparkFun_MCP9600.h>
. Daarna vertellen we de bibliotheek hoe we onze sensor gaan noemen in dit programma, met de code MCP9600 MCP9600Sensor;
. Wij noemen
de sensor dus MCP9600Sensor. Uiteraard kun je hier ook iets anders van maken, zoals sensorThermocouple. Als laatste voorbereiding maken we nog een globale variabele met het commando float
MCP9600gradenC;
. Hierin gaan we de temperatuur die de sensor meet, in graden Celsius, opslaan.
De communicatie tussen de sensor en de microcontroller moet worden aangezet voordat we de temperatuur kunnen uitlezen. Dit doen we in de setup fase van het programma. We doen dit door het
commando MCP9600Sensor.begin();
te geven. Mocht je je sensor aan het begin van het programma niet MCP9600Sensor hebben genoemd, maar iets anders, dan moet je het stukje vóór
.begin()
dus veranderen.
Om deze code makkelijk te kunnen combineren met andere codes, hebben we er voor gekozen om het stukje van de code dat de temperatuur uit de sensor haalt in een aparte functie te zetten. Wij
hebben ons programma GROVEMCP9600
genoemd. Dit is, omdat MCP9600 al als een commando door de bibliotheek wordt gebruikt. Aangezien onze sensor uit de Grove lijn van Seeed Studio
komt, hebben wij daarom maar gekozen om GROVE voor MCP9600 te zetten, zodat de functie om de temperatuur op te halen een unieke naam heeft.
De functie GROVEMCP9600 kun je helemaal onderaan de code vinden, na de loop fase. Het begint met het commando float GROVEMCP9600()
. Dit vertelt de microcontroller dus dat we deze
functie GROVEMCP9600 noemen, maar ook dat de variabele die uit de functie komt het datatype float heeft, ofwel een komma getal is.
Binnenin de functie, tussen de { }, geven we het commando MCP9600gradenC = MCP9600Sensor.getThermocoupleTemp();
. Dit commando bestaat uit verschillende delen. Allereerst staat er
MCP9600gradenC =
. Dit betekent dat de globale variabele MCP9600gradenC, die we aan het begin van de code hebben gemaakt, een nieuwe waarde gaan toewijzen. Daarna staat er
MCP9600Sensor.getThermocoupleTemp();
. Het eerste deel, MCP9600
, verteld uit welke sensor we de temperatuur gaan halen. Mocht je in het begin de sensor een andere naam
hebben gegeven, dan moet je dat hier ook wijzigen. Het laatste deel, .getThermocoupleTemp()
is een commando die uit de bibliotheek komt. Dit cijfert de data die de I2C port
binnenkomt uit de MCP9600 versterker om in een temperatuur in graden Celsius. Na MCP9600gradenC = MCP9600Sensor.getThermocoupleTemp();
geven we nog het commando return
MCP9600gradenC;
. Dit zorgt ervoor dat door het hele programma de variabele MCP9600gradenC de nieuwe waarde heeft gekregen.
Een functie, zoals GROVEMCP9600()
doet niets totdat hij gevraagd wordt wat te doen. Om de temperatuur uit de thermokoppel te halen, moeten we onze functie dus activeren. Dit doen we
in de loop fase van het programma met het commando GROVEMCP9600();
. Op dit moment is het enige wat het programma doet de waarde van de variabele MCP9600gradenC
veranderen naar de huidige temperatuur. In andere delen van de serie De Programmeerbare Plantenkas kun je zien hoe je deze variabele kunt gebruiken om bijvoorbeeld een verwarmingskabel aan te
zetten, zodat de plantjes het nooit koud hebben.
Arduino IDE code
/* Voorbeeld code gemaakt door www.foodplanting.com voor de Programmeerbare Plantenkas serie. Deze code is gemaakt voor een K-type thermokoppel op een MCP9600 thermokoppel versterker. Deze code maakt gebruikt van de MCP9600 bibliotheek van SparkFun. Meer info over deze bibliotheek vindt je hier: https://github.com/sparkfun/SparkFun_MCP9600_Arduino_Library Deze code is zeer minimalistisch, omdat het idee is dat deze code gecombineerd wordt met codes voor andere modules. Zo wordt de temperatuur bijvoorbeeld niet in de loop fase, maar in een aparte functie op geroepen en wordt de gemeten temperatuur niet in de Serial Monitor af geprint. */ // Voorbereiding: #include <SparkFun_MCP9600.h> // Dit laadt de bibliotheek die nodig is om de temperatuursensor uit te lezen. MCP9600 MCP9600Sensor; // Dit geeft aan hoe we de sensor noemen in de code. float MCP9600gradenC; // Dit creëert een globale variabele waarin de gemeten temperatuur wordt opgeslagen. // Setup fase: void setup() { MCP9600Sensor.begin(); // Zet de communicatie tussen de microcontroller en de sensor aan. } // Loop fase: void loop() { GROVEMCP9600(); // Vraag de microcontroller om de functie die de temperatuur uit de sensor ophaalt uit te voeren. } //Functie voor temperatuursensor: float GROVEMCP9600() { MCP9600gradenC = MCP9600Sensor.getThermocoupleTemp(); // getThermocoupleTemp is een standaard functie uit de bibliotheek om de temperatuur op te vragen. return MCP9600gradenC; // De functie zal de waarde van variabele MCP9600gradenC updaten met de gemeten temperatuur. }
Achtergrond
In deze tutorial hebben we gebruik gemaakt van een thermokoppel. In de industrie wordt deze temperatuursensor vrij veel gebruikt, maar voor hobby projecten is dit een relatief onbekende temperatuursensor. Om een idee te krijgen van wat een thermokoppel doet, hebben we hieronder de werking van de thermokoppel proberen uit te leggen. Voor het installeren en programmeren van een thermokoppel is het vaak niet nodig om te snappen hoe een thermokoppel werkt, dus je kunt dit deel van deze tutorial prima overslaan.
Een thermokoppel bestaat uit twee stukken metaal die beide anders reageren op temperatuur. Deze stukken metaal worden ook wel thermo-elementen genoemd. In het stuk van de thermokoppel dat we op de plaats leggen waar we de temperatuur willen meten zitten de twee thermo-elementen, elk dus van een ander metaal, aan elkaar vast. Dit punt wordt ook wel de warme aansluiting genoemd. Vroeger werden de metalen op een ander punt ook aan elkaar vast gemaakt en in een bad met ijswater gelegd. Dit punt wordt daarom ook wel de koude aansluiting genoemd. Een modernere naam voor dit punt is de referentie aansluiting.
Wanneer de warme aansluiting van de thermokoppel verhit wordt, neem als voorbeeld 50 graden Celsius, en de koude aansluiting in een ijsbad wordt gelegd, van 0 graden Celsius, dan gaat er elektrische spanning door door de thermo-elementen stromen. Wanneer je een voltmeter op één van de thermo-elementen aansluit, dan kun je de elektrische spanning die hierdoor ontstaat meten in de eenheid volt. Als je de warme aansluiting warmer zou maken, bijvoorbeeld 100 graden Celsius, dan zul je op de voltmeter zien dat er meer elektrische spanning door het circuit stroomt.
Tegenwoordig hoeft de referentie aansluiting van een thermokoppel niet meer in een ijsbad gelegd te worden. In plaats daarvan wordt vaak een andere temperatuursensor, meestal een thermistor of een halfgeleider, gebruikt om de temperatuur van de referentie aansluiting bepaald. Op basis hiervan wordt dan berekend hoe warm het op de plek van de warme aansluiting is.
Doordat de temperatuur van de referentie aansluiting bepaald op basis van een thermistor of halfgeleider temperatuursensor, is het onlogisch om een thermokoppel te gebruiken als een thermistor of halfgeleider alleen ook volstaat. In de Programmeerbare Plantenkas is het in de meeste gevallen dan ook niet nodig om met een thermokoppel te werken. Thermokoppels zijn vaak alleen van toegevoegde waarde als je hele extreme temperaturen wilt meten of als je in een extreme omgeving wilt meten. In de Programmeerbare Plantenkas verwachten we geen temperaturen tegen te komen die ver onder het vriespunt ligt of boven het kookpunt. Ook gaan we er niet van uit dat je met gevaarlijke chemicaliën gaat werken in de kas. Het gebruik van een thermokoppel in de Programmeerbare Plantenkas is dus vooral interessant om je kennis en kunde te verbreden.
Om deze serie over temperatuursensoren compleet te maken, hebben we wel een temperatuursensor uit geprobeerd. We hebben gekozen voor een K-type thermokoppel. In dit type thermokoppel zit een thermo-element dat gemaakt is van een legering van nikkel en 10% chroom, ook wel Chromel wordt genoemd, en een thermo-element dat gemaakt is van een legering van nikkel, 2% aluminium, 2% mangaan en 1% silicium, dat ook wel Alumel wordt genoemd. De K-type thermokoppel is de meest voorkomende thermokoppel, met een bereik van -180 tot +1350 graden Celsius en een precisie van 2 graden Celsius. Deze thermokoppel produceert 4,1 microvolt per graden Celsius.
Vragen en opmerkingen
We proberen de serie "De Programmeerbare Plantenkas" zo toegankelijk mogelijk te maken voor iedereen. Toch zijn sommige concepten best wel ingewikkeld, omdat er kennis van heel veel verschillende domeinen, zoals natuurkunde, elektrotechniek en computerwetenschappen, samen komen. Het kan daarom best zijn dat we iets niet goed uitgelegd hebben. Mocht er iets niet duidelijk zijn of iets niet zo werken zoals we het in deze tutorial uitgelegd hebben, stuur dan gerust een berichtje via de Disqus op deze pagina. Je kunt de Disqus vinden door naar beneden te scrollen, tot onder de advertenties.
Bronnen en verder lezen
- Bolton, W. (2003). Mechatronics: electronic control systems in mechanical and electrical engineering. Pearson Education.
- Carr, J. J. (1991). Designer's handbook of instrumentation and control circuits.
- Dunn, W. C. (2005). Introduction to instrumentation, sensors, and process control.
- Frenzel, L. E. (2010). Electronics explained: the new systems approach to learning electronics. Newnes.
- Ibrahim, D. (2002). Microcontroller-based temperature monitoring and control. Elsevier.
- Sinclair, I. (2000). Sensors and transducers. Elsevier.
- Webster, J. G. (Ed.). (1999). The Measurement, Instrumentation, and Sensors: Handbook. Springer Science & Business Media.
- Yadav, B. C., Srivastava, R., Singh, S., Kumar, A., & Yadav, A. K. (2012). Temperature sensors based on semiconducting oxides: An overview. arXiv preprint arXiv:1205.2712.