De DS18b20 (ook wel Dallas of Maxim Temperature sensor genoemd) is een nauwkeurige digitale temperatuursensor. Door gebruik te maken van de OneWire bibliotheek kunnen we ook meerdere sensoren via één draad uitlezen. In het hier gegeven vereenvoudigende voorbeeld (een bewerking van de voorbeeld code 'Simple') is maar één sensor gebruikt. De led op pin 13 is ook aangesloten en deze gaat branden als de temperatuur hoger wordt dan 24 graden.
We maken ook gebruik van de DallasTemperature bibliotheek, die kan je hier downloaden:
https://github.com/milesburton/Arduino-Temperature-Control-Library
Kijk voor het installeren van bibliotheken op deze site onder: Sensoren / libraries installeren.
Voor meer informatie kan je o.a. kijken op de volgende sites:
https://www.tweaking4all.nl/hardware/arduino/arduino-ds18b20-temperatuur-sensor/
https://www.hacktronics.com/Tutorials/arduino-1-wire-tutorial.html
http://bildr.org/2011/07/ds18b20-arduino/
https://arduino-info.wikispaces.com/Brick-Temperature-DS18B20
Je kan de DS18b20 in een aantal uitvoeringen tegenkomen: In de verpakking zoals een transistor (To92), een waterdichte verpakking en als module. Bij de eerste twee moet er een 4,7 KOhm weerstand bij worden aangesloten ('pull up', zie schema)
// Temperatuursensor DS18b20 met led.
// Als de temperatuur meer dan 24 graden is gaat de led branden.
// De benodigde bibliotheek kan je hier downloaden:
// https://github.com/milesburton/Arduino-Temperature-Control-Library
#include <OneWire.h> // gebruik de OneWire bibliotheek (is al geïnstalleerd)
#include <DallasTemperature.h> // gebruik de Dallastemperature bibliotheek (installeren?)
#define ONE_WIRE_BUS 2 // data aansluiting op Arduino pin 2
OneWire oneWire(ONE_WIRE_BUS); // meerdere sensoren kunnen worden aangesloten
DallasTemperature sensors(&oneWire);
int led = 13;
void setup(){
Serial.begin(9600);
sensors.begin();
pinMode(led, OUTPUT);
}
void loop(){
sensors.requestTemperatures();
Serial.print("Temperatuur Celsius is: ");
Serial.println(sensors.getTempCByIndex(0));
if (sensors.getTempCByIndex(0) > 24) {
digitalWrite(led, HIGH);
}
else {
digitalWrite(led, LOW);
}
}