De Programmeerbare Plantenkas: De DHT11 Temperatuursensor Aansluiten En Programmeren Om De Temperatuur Te Meten

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

DHT11, grove sensor
De DHT11 temperatuursensor wordt gekenmerkt door het blauwe blokje waarin de chip om de temperatuur en de luchtvochtigheid te meten zich bevinden.

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.

dht11, aansluitschema
De DHT11 wordt op een digitale poort van de microcontroller aangesloten.

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.