DE PROGRAMMEERBARE PLANTENKAS // DE TMP36 TEMPERATUURSENSOR AANSLUITEN EN PROGRAMMEREN OM DE TEMPERATUUR TE METEN
SENSOR (CHIP): TMP36 - MEETTECHNIEK: HALFGELEIDER - MEETBEREIK (IN ℃): -40 TOT +150 - PRECISIE (IN ℃): W - AANSLUITING: ANALOOG
In deze tutorial laten we zien hoe je een TMP36 temperatuursensor 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
Bij het aansluiten van de TMP36 temperatuursensor is het belangrijk om eerst te welk been voor welke aansluiting is. De TMP36 sensor is behoorlijk klein, en bevat meestal geen duidelijke tekens die aangeven welk been voor de 5V, GND, en data aansluiting is. De enige aanwijzing is de vorm van de sensor, de sensor heeft een bolle en een platte kant. Wanneer je de sensor met de bolle kant naar je toe houdt, dan is het linker been bedoeld voor de GND aansluiting en het rechter been voor de 5V aansluiting. Het middelste been is bedoeld de analogie input pin op aan te sluiten.
Wij hebben er voor gekozen om de TMP36 met behulp van een mini breadboard op een Grove Base Shield aan te sluiten. Dit is vooral omdat de sensor dan wat makkelijker neer te zetten is. De sensor kan ook direct op de microcontroller aangesloten te worden met male-female draden naar GND, 5V een een analogue pin. Er hoeven geen weerstanden tussen de TMP36 sensor en de aansluitingen op de Arduino of een andere microcontroller geplaatst te worden. Zolang je voordat je begint even kijkt aan welke kant het 5V been en het GND been zitten, is deze sensor dus eenvoudig aan te sluiten.
Programmeren
Voor de TMP36 temperatuursensor hoef je geen gebruik te maken van bibliotheken om de temperatuur te bepalen. Deze sensor is namelijk zou gemaakt, dat de temperatuur met een simpele berekening
bepaald kan worden. In de voorbereidingsfase hoeven we daarom alleen maar een variabele aan te maken om de gemeten temperatuur in op te slaan. We doen dit met het commando float
TMP36gradenC;
. Het woord float geeft aan dat de waarde die we in deze variabele gaan opslaan een komma getal is. Wanneer je de temperatuur minder precies wilt opslaan, kun je er ook voor
kiezen om int
in plaats van float
te gebruiken. Een int variabele neemt minder geheugen op dan een float variabele, maar is wel minder exact.
Voor deze sensor hoeven we niets in de setup fase van het programma te doen. We kunnen dus meteen door naar het maken van een aparte functie voor het uitlezen van de TMP36 temperatuursensor. Met
het commando float TMP36()
maken we een nieuwe functie aan voor deze sensor. Eventueel kun je de code die tussen de {} van deze functie staat ook in het loop gedeelte zetten, maar
dan wordt het al snel rommelig als je met meerdere sensoren en modules werkt.
Tussen de {} van de functie TMP36() beginnen we met het maken van een variabele, met het commando float TMP36Volt;
. Deze variabele, die een komma getal kan opslaan door het woordje
float ervoor te zetten, gebruiken we om het aantal volt dat de analoge pin meet in op te slaan. Om de variabele TMPVolt
deze waarde te geven, gebruiken we het commando
TMP36Volt = analogRead(A0) * (5 / 1023);
. Wat we hier doen is eerst de analoge pin uitlezen waar de sensor op aan gesloten is, in dit geval pin A0. De analoge pin zet de gemeten
waarde om in een digitale waarde. Hierdoor krijgen we een waarde van 0 tot 1023, waarbij 0 staat voor 0 volt en 1023 staat voor 5 volt. Om deze waarde om te zetten in echte volts,
vermenigvuldigen we dit met 5 (volt) gedeeld door 1023 (de maximale waarde die de analoge pin heeft). Stel dat de analoge pin een waarde van 200 heeft, dan komt er dus 200 keer 5 gedeeld door
1023, ofwel ongeveer 0,98 volt binnen.
Als we eenmaal weten hoeveel volt er via de TMP36 temperatuursensor de analoge pin binnenkomt, kunnen we de temperatuur in graden Celsius berekenen. Hiervoor gebruiken we het commando
TMP36gradenC = (TMP36Volt - 0.5) * 100.0;
. Wat deze formule doet is eerst 0,5 van het gemeten aantal volt af halen. Wanneer de sensor naar behoren werkt, zal er altijd 0,5 volt naar
de analoge pin worden gestuurd. Deze "eerste" 0,5 volt hebben voor het bepalen van de temperatuur dus geen betekenis. Vervolgens vermenigvuldigen we dit met 100. In de datasheet van de TMP36
sensor kunnen we lezen dat 1 graden Celsius gelijk is aan 0,01 volt, ofwel 10 millivolt. We moeten het gemeten aantal volt dus vermenigvuldigen om de temperatuur in graden Celsius te krijgen.
Stel dat we in de vorige stap dus 0,98 volt hebben gemeten, dan halen we daar eerst 0,5 af, waardoor we 0,48 volt krijgen. Vervolgens vermenigvuldigen we dit met 100, waardoor we dus weten dat
het rondom de TMP36 sensor 48 graden Celsius is.
Om de functie waarin we de temperatuur berekenen op basis van de waarde die via de TMP36 sensor de analoge pin binnen komt te activeren, gebruiken we in de loop fase van het programma het
commando TMP36();
. In dit voorbeeld doen we nog niets met deze waarde, maar er kan natuurlijk alles mee gedaan worden. Zo kun je een blauw LED-lampje laten branden als het te koud
is, een groen lampje als het warm genoeg is, en een rood lampje als het te heet is.
ARDUINO IDE CODE
/* Voorbeeld code gemaakt door www.foodplanting.com voor de Programmeerbare Plantenkas serie. Deze code is gemaakt voor een TMP36 temperatuursensor. 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: float TMP36gradenC; // Dit creëert een globale variabele waarin de gemeten temperatuur wordt opgeslagen. // Setup fase: void setup() { // Voor deze sensor hoeven we niets in de setup fase te doen. } // Loop fase: void loop() { TMP36(); // Vraag de microcontroller om de functie die de temperatuur uit de sensor ophaalt uit te voeren. } // Functie voor temperatuursensor: float TMP36() { float TMP36Volt; TMP36Volt = 0; // Reset de variabele TMP36Volt = analogRead(A0) * (5 / 1023); // Haal de waarde uit de analoge pin op en vermenigvuldig dit met 5 gedeeld door 1023 om het aantal gemeten volt te bepalen. TMP36gradenC = (TMP36Volt - 0.5) * 100.0; // Haal 0,5 van het aantal gemeten volt af en vermenigvuldig dit met 100. return TMP36gradenC; }
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.