Bekijk de 38 andere Arduino lessen

6 · 1-wire temperatuursensor uitlezen


Introductie

In deze Nederlandstalige Arduino tutorial voor beginners leer ik je hoe je een 1-wire DS18B20 temperatuursensor kunt uitlezen. Deze sensor kun je bijvoorbeeld gebruiken voor een weerstation. Benieuwd naar de voordelen van 1-wire? Lees dan verder! 😃

Lesmateriaal

Onderaan op deze pagina vind je de knop lesmateriaal waarmee je het lesmateriaal kunt downloaden. Dit materiaal bestaat uit de code, schakelschema en andere bestanden die in de les worden gebruikt.

1-wire bus

De 1-wire bus is een bus systeem wat is ontwikkeld door de Dallas Semiconductor Corporation. Een data bus is een manier om verschillende elektronische onderdelen met elkaar te laten verbinden. 1-wire gebruikt voor deze communicatie slechts één draad. In ons geval maakt de temperatuursensor gebruik van 1-wire. Er zijn echter nog andere toepassingen zoals toegangssleutels.

1-wire key (source: Wikipedia)
1-wire key (source: Wikipedia)

DS18B20 1-wire temperatuursensor

In deze les maken we gebruik van de DS18B20 1-wire temperatuursensor. Deze bestaat in verschillende soorten. Links op de afbeelding zie je de losse sensor , rechts de waterdichte variant .

DS18B20 1-wire temperatuursensor<
DS18B20 1-wire temperatuursensor

Controleer of je ook daadwerkelijk DS18B20 op de sensor ziet staan. Hieronder zie je een transistor afgebeeld. Deze lijkt heel erg op de DS18B20, maar is dit absoluut niet. Een transistor dient een compleet andere functie. Gebruik je een transistor in plaats van de temperatuursensor dan wordt deze heel heet en brandt daarna door.

2N3904331 Transistor
2N3904331 Transistor

🎓 Hoe herken je dat je de juiste sensor hebt en geen transistor?

De schakeling

DS18B20 1-wire temperatuursensor aangesloten op de Arduino
DS18B20 1-wire temperatuursensor aangesloten op de ::Ud29dh:Arduino::

Bij het aansluiten van de sensor is het belangrijk de juiste pins te gebruiken. De DS18B20 heeft een bolle en een vlakke kant.

Sluit de volgende jumper wires aan met de vlakke kant naar je toe:

  • De 5V op de Arduino -> linker pin van de temperatuursensor
  • De 12 op de Arduino -> middelste pin van de temperatuursensor (signaal)
  • De GND op de Arduino -> rechter pin van de temperatuursensor

Pullup weerstand

In deze schakeling maken we gebruik van een pull-up weerstand. In dit geval plaatsen we de weerstand gaat tussen de middelste pin op de sensor en de 5V. De pull-up weerstand zorgt ervoor dat de signaal pin van de sensor niet in een "zwevende" staat kan komen. Door de weerstand met de 5V te verbinden weten we dat als 1-wire niets met die pin doet deze altijd 5 volt zal zijn. In het 1-wire protocol staat dat de signaal pin LOW wordt als deze wordt uitgelezen.

Bibliotheken

Bibliotheken nemen je veel werk uit handen. Je kunt gebruik maken van de code die anderen al voor ons ontwikkeld hebben. In deze Arduino les gebruiken we twee bibliotheken om de DS18B20 sensor uit te kunnen lezen:

1 #include <OneWire.h>
2 #include <DallasTemperature.h>

Mocht je deze nog niet hebben, dan kun je ze installeren via de Arduino IDE:

Schets ▸ Bibliotheek gebruiken ▸ Bibliotheken beheren

Zoek hier op DallasTemperature, deze bibliotheek bevat ook al de OneWire bibliotheek. Deze hoef je dus niet apart te installeren.

Arduino Code

De eerste regels spreken voor zich: in de variabele temp slaan we de gemeten temperatuur op. oneWireBus gebruiken we om aan te geven met welke pin de signaal pin van de DS18B20 sensor verbonden is.

1 float temp = 0.0;
2 int oneWireBus = 12;
3 OneWire oneWire(oneWireBus);
4 DallasTemperature sensors(&oneWire);

Bibliotheken gebruiken

De laatste twee regels zijn ingewikkelder. Hier gaan we de 1-wire en DallasTemperature bibliotheken aanspreken.

1 OneWire oneWire(oneWireBus);

Op deze regel definiëren we de variabele oneWire van het type OneWire. Het verschil is dat we hier een functie gebruiken: de constructor. Deze wordt door de OneWire bibliotheek geleverd. De enige parameter voor de constructor is de pin van de 1-wire bus. In ons geval is dit de variabele oneWireBus.

1 DallasTemperature sensors(&oneWire);

Hetzelfde doen we voor de volgende regel. We maken de variabele sensors van het type DallasTemperature aan. Deze constructor verwacht als parameter het adres van de instantie van de OneWire bibliotheek. Omdat we het adres willen meegeven en niet de inhoud van de variabele zelf, maken we gebruik van &.

setup()

1 void setup() {
2     Serial.begin(9600);
3     Serial.println("Bas on Tech - 1-wire temperatuur sensor");
4     sensors.begin();
5 }

De eerste twee regels kennen we uit de andere tutorials, maar de laatste is nieuw. sensors.begin() initialiseert de 1-wire databus zodat we kunnen beginnen met het uitlezen van de 1-wire sensor.

loop()

1 // Herhaal oneindig
2 void loop() {
3 
4     sensors.requestTemperatures();
5     temp = sensors.getTempCByIndex(0);
6 
7     Serial.print("Temperatuur is: ");
8     Serial.println(temp);
9 
10     delay(1000);
11 
12 }

De loop() functie bestaat uit 3 delen:

  • Uitlezen van sensor
  • Printen naar seriële monitor
  • Pauzeren

Uitleg code

1 sensors.requestTemperatures();
2 temp = sensors.getTempCByIndex(0);

We beginnen met alle op 1-wire bus aangesloten sensoren via requestTemperatures om de temperatuur te vragen. Hierna vragen we de temperatuur in graden Celsius op met getTempCByIndex(0). We gebruiken slechts één sensor dus index 0 is onze sensor.

1 Serial.print("Temperatuur is: ");
2 Serial.println(temp);

Deze waarde printen we vervolgens naar de seriële monitor.

1 delay(1000);

Tot slot wachten we 1000ms tot we de volgende meting starten.

Code uploaden naar Arduino

Ons programma is nu klaar om naar de Arduino te worden gestuurd. Open hierna de seriële monitor:

Hulpmiddelen ▸ Seriële monitor

Seriële monitor met data van DS18B20 sensor
Seriële monitor met data van DS18B20 sensor

Mocht je deze data niet zien, controleer dan of je de jumper wires op de juiste manier hebt aangesloten.

Uitdaging 🚀

Ben je klaar voor de uitdaging? Pas de code zo aan dat het ingebouwde LED aangaat als een bepaalde temperatuur wordt bereikt.

Succes!

6 &middot; 1-wire temperatuursensor uitlezen schakelschema

Bas van Dijk

Over Bas on Tech


Mijn naam is Bas van Dijk, ondernemer, freelance frontend developer en maker. Onder de naam "Bas on Tech" bied ik op YouTube videolessen aan over technische onderwerpen zoals Arduino en 3D-printen.

De video’s zijn in het Nederlands met ondertiteling, zodat mensen met een gehoorbeperking ze ook kunnen volgen.

Jaren geleden toen ik mijn eerste Arduino kocht had ik maar één doel: zo snel mogelijk een LCD schermpje aansluiten en er een tekst op laten zien. Na allerlei bronnen te hebben geraadpleegd kwam ik er na veel puzzelen eindelijk uit. Ik was als een kind zo blij met die paar letters op een geel schermpje.

Met Bas on Tech wil ik mijn kennis delen zodat ook anderen deze blijheid kunnen ervaren. Ik heb gekozen voor kort en krachtige YouTube video’s, met een duidelijke vaste opbouw en één onderwerp per video. Daarnaast staan onder elke video links naar de broncode en webshops waar de onderdelen te koop zijn.