Digitale temperatuursensor

Doel:

  • gebruik van een digitale temperatuursensor
  • gebruik van 1-wire protocol

nodig:

  • digitale temperatuursensor DS18B20
  • pull-up weerstand 4k7Ohm (geel paars rood).

Een digitale temperatuursensor bevat, naast de sensor, ook een A/D omzetter. Bovendien is er een protocol nodig om de digitale temperatuur-waarde over te brengen naar de microcontroller. Soms wordt hiervoor een enkele data-draad gebruikt, waarover bits in beide richtingen verstuurd worden.

De temperatuursensor die wij gebruiken, DS18B20, gebruikt het zogenaamde one-wire protocol. Via dit protocol kun je meerdere sensoren via een enkele verbinding uitlezen. Elke sensor heeft een eigen adres op deze "bus".

Datasheet: https://datasheets.maximintegrated.com/en/ds/DS18B20.pdf 

Schakeling

Verbind :

  • DQ met Arduino pin 2
  • pull-up weerstand 4k7 Ohm tussen DQ en 5V
  • VDD met Arduino 5V
  • GND met Arduino GND

Library

Voor de DS18B20 heb je twee libraries nodig.

  • OneWire, voor het OneWire bus-protocol;
  • DallasTemperature, voor de BS18B20 sensoren.

Meer informatie over deze libraries:

Zoek de libraries via Schets->Bibliotheek Gebruiken->Bibliotheken beheren, en installeer deze. Je hebt daarvoor wel een internetverbinding nodig.

Programma

Het programma hiernaast is een vereenvoudigde versie van het programma:

Bestand->Voorbeelden->

DallasTemperature->Simple

Er zijn twee libraries nodig: Onewire en DallasTemperature.

Voor de 1-draads bus gebruiken we pin D2.

oneWire is het object dat de bus representeert.

sensors is het object dat alle temperatuursensoren aan deze bus voorstelt. Dit object heeft het oneWire object nodig voor de bus. In setup initialiseren we dit object.

Het uitlezen van de temperatuur gebeurt in twee stappen:

  • eerst start je meting (conversion) in de sensor(en), via requestTemperature;
  • vervolgens lees je de temperatuur uit.

Deze sensoren hebben veel tijd nodig voor de eigenlijke meting: voor 12-bits resolutie van de temperatuur wel 750 msec. (Zie datasheet tabel 2.)

#include <OneWire.h>

#include <DallasTemperature.h>

#define ONE_WIRE_BUS 2

OneWire oneWire(ONE_WIRE_BUS);

DallasTemperature sensors(&oneWire);

void setup(void) {

  Serial.begin(9600);

  sensors.begin();

}

void loop(void) {

  sensors.requestTemperatures();

  Serial.print("Temperature: ");

  Serial.println(

    sensors.getTempCByIndex(0));  

}

Opdracht 1

Bouw deze schakeling, installeer het programma, en test dit.

Je krijgt de resultaten te zien in de Serial Monitor.

Opdracht 2

Bekijk de temperatuurwaarden in de Serial Plotter. Verwarm de sensor een paar graden met je vinger, en laat de sensor weer afkoelen

Schets de grafiek van de temperatuur: kamertemperatuur, opwarmen, en afkoelen.

Opdracht 3

Vergelijk in één schakeling de analoge temperatuursensor en de digitale sensor. Bekijk de uitvoer van beide met de Serial Plotter.

Opdracht 4

Elke sensor heeft een adres op de OneWire bus. Gebruik Bestand-> Voorbeelden-> OneWire->DS18x20_Temp om de adressen van alle sensoren aan de bus te achterhalen.

Voer dit experiment ook uit met twee of meer temperatuursensoren aan de bus:

  • je kunt de extra sensor aan dezelfde draden verbinden;
  • op een breadboard: extra sensor in dezelfde rijen (parallel).
  • je hebt maar 1 pull-up weerstand nodig per bus.

In het voorbeeld-programma zijn is de OneWire-bus op pin10 aangesloten. Pas of je hardware-verbinding, of de software aan zodat dit klopt voor jouw opstelling.

Opdracht 5

De temperatuurmeting kost tijd - zoals gezegd, tot wel 750 ms. Gedurende die tijd is de requestTemperatures-functie bezig - en blokkeert daarmee andere acties van de microcontroller.

Je kunt deze functie ook in asynchrone (niet-blokkerende) mode gebruiken. Gebruik het voorbeeld-programma Bestand-> Voorbeelden-> DallasTemperature-> WaitForConversion om het verschil tussen beide manieren te bekijken.

Opdracht 6

Het meten van de temperatuur en de bijbehorende omzetting kosten energie - waardoor de sensor zichzelf opwarmt. Dit kun je demonstreren door een delay toe te voegen aan de loop van het programma van opdracht 1.

  • meet de temperatuur met delay(5) in de loop;
  • meet de temperatuur met delay(5000) in de loop.
  • wacht in beide gevallen tot je een stabiele temperatuur krijgt.
  • wat is het verschil tussen deze beide metingen?

Arduino lessen - Digitale temperatuursensor      --