Ik vind het belangrijk dat Bas on Tech door iedereen kosteloos gebruikt kan worden.
Help mij de toekomst van Bas on Tech te verzekeren. Je donatie zal o.a. worden gebruikt voor hosting, video's en onderhoud.
Alvast bedankt!
PS. iDEAL en Bancontact vind je onder het "Direct Debit" tabblad in de 4e stap.
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! 😃
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.
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.
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 .
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.
🎓 Hoe herken je dat je de juiste sensor hebt en geen transistor?
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:
5V
op de Arduino -> linker pin van de temperatuursensor12
op de Arduino -> middelste pin van de temperatuursensor (signaal)GND
op de Arduino -> rechter pin van de temperatuursensorIn 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 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:
Zoek hier op DallasTemperature
, deze bibliotheek bevat ook al de OneWire
bibliotheek. Deze hoef je dus niet apart te installeren.
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);
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 &
.
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.
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:
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.
Ons programma is nu klaar om naar de Arduino te worden gestuurd. Open hierna de seriële monitor:
Mocht je deze data niet zien, controleer dan of je de jumper wires op de juiste manier hebt aangesloten.
Ben je klaar voor de uitdaging? Pas de code zo aan dat het ingebouwde LED aangaat als een bepaalde temperatuur wordt bereikt.
Succes!
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.