DE PROGRAMMEERBARE PLANTENKAS // DE DHT11 TEMPERATUURSENSOR AANSLUITEN EN PROGRAMMEREN OM DE TEMPERATUUR TE METEN
SENSOR (CHIP): DHT11 - MEETTECHNIEK: NTC THERMISTOR - MEETBEREIK (IN ℃): 0 TOT +50 - PRECISIE (IN ℃): 2 - AANSLUITING: DIGITAAL
In deze tutorial laten we zien hoe je een DHT11 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
De DHT11 temperatuursensor bepaald de temperatuur op basis van een “negative temperature coefficient", ofwel NTC, thermistor. Wanneer je een NTC thermistor los zou kopen, dan zou je deze moeten aansluiten op een analoge port. Echter, in de DHT11 temperatuursensor wordt het signaal uit de NTC thermistor eerst door een chip die een analoog signaal omzet in een digitaal signaal verwerkt. De DHT11 temperatuursensor kan daarom op een digitale pin van de microcontroller aangesloten worden.
Zeker wanneer je met een Grove DHT11 temperatuursensor en een Grove Base Shield uit de Grove lijn van Seeed Studio werkt, is het aansluiten van de temperatuursensor heel eenvoudig. Je steekt de Grove aansluitkabel simpelweg in de sensor en in de Grove Base Shield. De witte kabel van de Grove aansluitkabel wordt vervolgens gebruikt voor het uitlezen van de sensor. Stel dat je de sensor op de D5 connector van de Grove Base Shield zet, zoals in ons voorbeeld, dan geef je dus later in het programma aan dat de sensor op digitale pin 6 zit.
De DHT11 temperatuursensor is niet alleen verkrijgbaar op een Grove ontwikkelaarsbord, maar ook als losse DHT11 sensor en op ontwikkelaarsborden van andere merken. Over het algemeen zijn alle DHT11 sensoren die op een ontwikkelaarsbord, zoals die van de MAKERFACTORY, Iduino, en Joy-It, zijn aangesloten al voorzien van een 10K Ohm weerstand. Wanneer je met een losse DHT11 sensor gaat werken, zul je deze zelf moeten aansluiten.
Programmeren
DHT temperatuursensoren zijn goedkoop en vrijwel overal ter wereld eenvoudig verkrijgbaar. Vandaar dat er ook veel verschillende bibliotheken voor deze sensoren te vinden zijn die direct via
de Arduino IDE te downloaden zijn. Wij gebruiken de Seeed Studio DHT bibliotheek in dit voorbeeld, omdat het hiermee zeer eenvoudig is om de temperatuur
uit de sensor te halen. Om de bibliotheek te activeren in onze code gebruiken we het commando #include <DHT.h>
.
Vervolgens moeten we het programma vertellen op welke digitale pin de sensor aangesloten is en welke versie sensor we gebruiken. Dit doen we met een reeks aan commando's. Allereerst geven we het
commando #define DHTPIN 6
. Wij hebben de DHT11 sensor op digitale pin 6 aangesloten. Mocht je de sensor op een andere pin aansluiten, dan moet je het cijfer 6 vervangen.
Daarna geven we het commando #define DHTTYPE DHT11
. De bibliotheek die we gebruiken kan voor meerdere versies van de DHT sensor gebruikt worden, zoals de DHT11, maar ook de DHT22. Om
te weten te komen wat de temperatuur is die de sensor meet, moet er voor elke versie weer net een andere berekening los gelaten worden op het signaal dat binnenkomt. Het is dus belangrijk om de
bibliotheek te vertellen met welke sensor we precies werken.
Als laatste moeten we al deze informatie voor de bibliotheek samenvoegen. Dit doen we met het commando DHT dht11(DHTPIN, DHTTYPE);
. Dit commando bestaat uit drie delen.
DHT
is een commando uit de bibliotheek, dat de bibliotheek vertelt welke naam we de sensor geven en geeft de informatie over de pin waar de sensor op aan is gesloten en welk type
sensor we gebruiken daadwerkelijk aan de bibliotheek. Hierbij is dht11
de naam die we aan de sensor geven. Hiervoor kun je elke naam gebruiken die je wilt, behalve namen die de
bibliotheek al gebruikt. We kunnen de sensor bijvoorbeeld wel "KLAAS" noemen, maar niet "DHT", omdat DHT
al een commando in de bibliotheek is. De commando's tussen haakjes () geeft
de informatie over de pin, met commando DHTPIN
, en de informatie over het type sensor, met commando DHTTYPE
door aan de bibliotheek.
Als voorbereiding maken we ook nog de globale variabele DHT11gradenC
aan met het commando float DHT11gradenC;
. Hierin wordt de temperatuur in graden Celsius later als
een kommagetal opgeslagen. Eventueel zou je in plaats van een kommagetal, ofwel een float variabele, ook een integer, ofwel int, kunnen gebruiken. Hierdoor verbruikt het programma net iets minder
geheugen, maar is de temperatuurmeting wel wat minder precies.
Na de voorbereiding is het tijd voor de setup fase van het programma. Hierin hoeven we alleen de communicatie met de sensor aan te zetten, met het commando dht11.begin();
.
Om deze code makkelijk te integreren met andere stukjes code, voor andere modules die op de microcontroller aangesloten worden, hebben wij er voor gekozen om het stukje code dat de temperatuur
via de bibliotheek uit de sensor haalt in een aparte functie te zetten. Deze functie hebben wij GROVEDHT11() genoemd. Omdat we de gemeten temperatuur als een kommagetal willen opslaan, beginnen
we deze functie met het commando float GROVEDHT11()
.
Binnen de {} van de functie geven we aan wat er moet gebeuren als de functie wordt geactiveerd in de loop fase van het programma. Omdat we gebruik maken van een bibliotheek, hoeven we alleen
maar het commando DHT11gradenC = dht11.readTemperature();
te geven. Zoals je kunt zien bestaat dit commando uit drie onderdelen. Het eerste deel, DHT11gradenC =
verteld
het programma dat we de globale variabele DHT11gradenC een nieuwe waarde willen geven. Het volgende stukje, dht11
, verteld dat we hiervoor de DHT11 sensor willen gebruiken die we in
de voorbereiding hebben ingesteld. Het laatste stukje, .readTemperature()
, is een commando uit de bibliotheek die op basis van het signaal dat de digitale pin binnen komt de
temperatuur in graden Celsius berekend.
Om de functie te activeren zetten we in de loop fase van de code het commando GROVEDHT11();
. Op dit moment gebeurt er niets meer dan dat de waarde van de variabele DHT11gradenC
vrijwel continu wordt veranderd in de gemeten temperatuur. Uiteraard kun je de code vervolgens zelf uitbreiden, door bijvoorbeeld de gemeten temperatuur te laten zien op een LCD display.
Arduino IDE code
/* Voorbeeld code gemaakt door www.foodplanting.com voor de Programmeerbare Plantenkas serie. Deze code is gemaakt voor een DHT11 temperatuursensor. Deze code maakt gebruikt van de DHT bibliotheek voor de Grove Temperature and Humidity Sensor van Seeed Studio. Meer info over deze bibliotheek vindt je hier: https://github.com/Seeed-Studio/Grove_Temperature_And_Humidity_Sensor 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 <DHT.h> // Dit laadt de bibliotheek die nodig is om de temperatuursensor te lezen. #define DHTPIN 6 // Dit geeft aan op welke digitale input de sensor is aangesloten, in dit geval D6. #define DHTTYPE DHT11 // Dit geeft aan om wel type DHT sensor het gaat, in dit geval DHT11, maar er zijn ook andere zoals DHT21 en DHT22. DHT dht11(DHTPIN, DHTTYPE); // Dit verteld de bibliotheek hoe we de sensor gaan noemen, welke sensor het is en waar hij op aan gesloten is. float DHT11gradenC; // Dit creëert een globale variabele waarin de gemeten temperatuur wordt opgeslagen. // Setup fase: void setup() { dht11.begin(); // Zet de communicatie tussen de microcontroller en de sensor aan. } // Loop fase: void loop() { GROVEDHT11(); // Vraag de microcontroller om de functie die de temperatuur uit de sensor ophaalt uit te voeren. } //Functie voor temperatuursensor: float GROVEDHT11() { DHT11gradenC = dht11.readTemperature(); // Dit haalt de temperatuur uit de sensor op. return DHT11gradenC; // De functie zal de waarde van variabele AHT20gradenC updaten met de gemmeten temperatuur. }
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.