#6 1-wire temperatuursensor uitlezen


In deze Nederlandstalige Arduino tutorial voor beginners leer ik je hoe je een 1-wire DS18B20 temperatuursensor kunt uitlezen.

Wikipedia artikel over 1-wire:https://en.wikipedia.org/wiki/1-Wire

Benodigdheden

  • 1× Arduino
  • 1× Breadboard
  • 3× Jumper wire (man-man)
  • 1× 4K7 Ohm (goud-rood-violet-geel) weerstand
  • 1× 1-wire DS18B20 temperatuursensor

Leerdoelen

  • Werking van 1-wire bus
  • Uitlezen van 1-wire DS18B20 sensor

Bas van Dijk

Over Bas on Tech


Mijn naam is Bas van Dijk, ondernemer, software ontwikkelaar 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.

video Transcriptie


0:00:16.180 welkom bij deze zesde aflevering van onze Arduino serie je waar ik je ga leren
0:00:19.760 hoe je een 1-wire temperatuursensor uitleest
0:00:24.840 wat je nodig hebt voor deze tutorial is: een 1-wire temperatuursensor,
0:00:30.669 ik gebruik de DS18B20 en 4700 Ohm weerstand
0:00:34.760 3 jumper wires, een Arduino en een breadboard
0:00:45.100 Wat is dat 1-wire nu precies? 1-Wire is een zogenaamde communicatie bus
0:00:49.720 en over deze bus kunnen verschillende sensoren met elkaar communiceren
0:00:52.380 althans met de Arduino in ons geval.
0:00:57.420 Het voordeel hiervan is dat je maar één input bezet houdt op de Arduino
0:01:00.900 Als je bijvoorbeeld 10 verschillende temperatuursensoren wilt uitlezen
0:01:04.500 kun je deze allemaal aan elkaar op hetzelfde draad doorlussen
0:01:08.140 en maar één invoer bezet houden
0:01:13.000 Hoe doet hij dat? Hij heeft drie aansluiting
0:01:16.940 verschil is dat deze rechter waterdicht is en de andere is de losse sensor
0:01:21.039 Deze heeft drie pennetjes: de "ground", "signal"
0:01:25.240 en het "voltage" (de plus)
0:01:31.940 je ziet hier ook de zwarte: de ground, de rode: de plus en de witte is de signal
0:01:35.720 Hoe weet je dat je niet deze drie per ongeluk verkeerd om aansluit?
0:01:38.500 als je de sensor van boven ziet
0:01:41.900 heeft hij een bolle en vlakke kant
0:01:48.180 als je hem van de voorkant ziet, met de vlakke kant naar boven in dit geval
0:01:51.680 is het ground, signal, en de plus 5
0:01:54.540 dan ga ik je nu laten zien hoe je de schakeling kunt bouwen
0:02:02.100 We gaan beginnen met onze sensor in het breadboard te prikken
0:02:06.000 ik doe dat met de platte kant naar mij toe
0:02:12.060 dat betekend dat het linker pootje de ground is,
0:02:16.900 de middelste de signal, en de rechter de plus
0:02:21.520 die plus gaan wij verbinden met de 5 volt op onze Arduino
0:02:32.100 de ground met de ground op de Arduino
0:02:37.400 en de signal met pen 12 van de Arduino
0:02:42.700 het wordt een beetje krap maar ik denk dat hij er wel tussen past
0:02:50.780 uit de vorige aflevering kun je nog herinneren dat we het gehad hebben over "pull-up" en "pull-down" weerstanden
0:02:54.980 we hebben toen gebruik gemaakt van een "pull-down" weerstand
0:02:57.940 die de lijn naar de nul trok
0:03:01.400 Bij 1-wire is gaan we dit in spiegelbeeld doen
0:03:03.800 daar gaan we hem naar de 5V trekken
0:03:06.840 dus de lijn is altijd 1 tenzij
0:03:15.840 wat ik ga doen is een weerstand tussen de "signal" en de 5V zetten
0:03:20.980 op deze manier kan de 1-wire bus geschakeld worden
0:03:26.620 en in het protocol staat dat hij altijd 1 is, en als de sensor wordt opgevraagd wordt hij 0
0:03:32.380 je ziet dat hier de plus loopt, en hier de ground
0:03:35.780 dus ik heb hem tussen de "plus" en de "signal"
0:03:39.120 ga ik je nu laten zien hoe je de code hier voor  schrijft
0:03:47.460 dan gaan we nu een kijkje nemen in de code onze temperatuursensor uit te lezen
0:03:50.420 ik ga deze weer regel voor regel met je bespreken
0:03:55.500 aan begin zien we al meteen iets nieuws staan: #include 
0:03:59.100 en hieronder nog "DallasTemperature.h"
0:04:02.220 dit zijn twee "bibliotheken"
0:04:06.120 het fijne is dat andere programmeurs voor ons al het moeilijke werk hebben gedaan
0:04:08.110 om de sensor uit te kunnen lezen
0:04:11.530 die hebben ze beschikbaar gemaakt in een "bibliotheek" en dit soort bibliotheken
0:04:15.430 kun je gebruiken in je eigen Arduino schets
0:04:20.770 er zijn heel veel soorten bibliotheken als ik boven in het menu naar "schets" ga en dan
0:04:24.920 "bibliotheek gebruiken", dan zie je dat hier heel veel soorten bibliotheken zijn
0:04:31.520 voor servo-motoren, om een sd-kaart uit te lezen, muis uit te lezen
0:04:35.280 er zijn ook voor LCD schermpjes, noem het maar op
0:04:38.320 en wij gebruiken vandaag die van 1-wire
0:04:41.240 omdat onze sensor op de 1-wire bus zit
0:04:43.960 en we gebruiken Dallas Temperature
0:04:47.120 omdat we een temperatuursensor hebben
0:04:51.190 dan gaan we verder naar een "float"
0:04:55.090 eerst hadden we "int": een geheel getal
0:05:01.900 een "float" is een komma-getal dus ik stel de temperatuur in op 0.0 graden
0:05:04.800 omdat ik nog niet weet wat voor waarde het gaat worden
0:05:11.380 hier kunnen we straks de temperatuur opslaan die we uit de sensor lezen
0:05:16.540 we gebruiken pin 12, en hebben hierop de 1-wire bus op aangesloten
0:05:22.360 we hier wel de bibliotheek geïmporteerd maar we hebben er nog niks mee gedaan
0:05:27.360 wat we nu gaan doen is een variabele aanmaken, zoals hier "oneWire"
0:05:31.720 hier zie je "float", "int", maar deze is van het type "OneWire"
0:05:37.040 dat doen we met een zogenaamde "constructor"
0:05:41.120 dit is eigenlijk gewoon een functie, en in die functie stoppen we iets
0:05:45.600 in dit geval "oneWireBus" dat is bij ons nummer 12 dat doen we
0:05:51.360 dat doen we omdat de programmeurs van die 1-wire bibliotheek niet kunnen ruiken
0:05:54.440 welke pin jij gebruikt voor jouw 1-wire
0:06:01.680 wij geven dat mee en kunnen dit later gaan gebruiken vanuit onze variabele
0:06:08.040 de temperatuursensor heeft weer onze 1-wire bus nodig nodig om te weten
0:06:16.220 waar die het uit moet gaan lezen dus hier maken we een variabele "sensors" aan
0:06:19.300 en we geven heb "&oneWire" mee
0:06:21.900 nu zie je hier een &-teken
0:06:28.400 dat betekent dat die verwijst naar de "oneWire" die we eerder hebben aangemaakt
0:06:32.070 de details daar kom ik in een latere tutorial nog op terug
0:06:35.340 dus als je ziet verwijzen al deze drie dingen naar elkaar
0:06:39.620 om de temperatuur uit te lezen hebben we een "DallasTemperature" instantie nodig
0:06:42.380 die verwijst naar de "oneWire" instantie,
0:06:48.780 en die maakt weer gebruik van de variabele waarin de 1-wire bus staat gedefineerd
0:06:53.300 dan stellen we weer de seriële monitor in
0:06:55.480 zoals we de vorige keer ook hebben gedaan
0:06:59.500 en ik print de regel: "Bas on Tech - 1 wire temperatuur sensor"
0:07:02.140 je kunt hier elke tekst zetten die je zelf leuk vindt
0:07:04.380 die wordt één keer uitgevoerd
0:07:07.740 omdat hij in de "setup()" staat
0:07:11.580 dan gaan we tegen de sensor vertellen dat we kunnen beginnen
0:07:14.060 dat we klaar zijn met het instellen
0:07:16.620 en gaan we de "loop()" in
0:07:23.880 dan zeggen we tegen de sensors "requestTemperatures()" dus hierbij gaat de software
0:07:26.420 de temperatuur van de sensoren opvragen
0:07:31.480 maar we willen niet zomaar de temperatuur hebben zoals die door de sensor wordt gelezen
0:07:33.840 nee, we willen hem in Celsius hebben
0:07:40.620 dus wat we zeggen tegen die sensor is: je hebt de hiermee weliswaar de temperatuur opgehaald
0:07:44.700 maar wij willen de temperatuur in graden Celsius hebben
0:07:47.480 nu staat hier ook nog "ByIndex(0)"
0:07:51.200 1-wire is zoals ik al eerder heb uitgelegd een "bus"
0:07:55.880 dus je kunt meerdere sensoren op die bus aansluiten
0:08:02.760 wij willen de 0e sensor hebben want lijstjes beginnen altijd vanaf 0 te tellen
0:08:04.980 het is altijd: nul, één, twee, drie
0:08:09.640 we beginnen niet met één en omdat we hierdoor zeggen "ByIndex(0)"
0:08:14.900 hier is de index is 0, dus we vragen de eerste temperatuursensor op
0:08:19.480 die de "DallasTemperature" bibliotheek heeft gevonden
0:08:26.140 vervolgens laten we op de seriële monitor "temperatuur is" met een spatie erachter zien
0:08:32.380 en printen daarna de temperatuur die we hier uitgelezen hebben
0:08:38.240 nu is er nog een klein verschil je ziet dat we hier "print" zeggen en hier "println"
0:08:44.500 "println" staat voor "print line"
0:08:50.620 het verschil is dat "print" een tekst laat zien op je seriële monitor
0:08:53.040 en gaat daarna niet naar een volgende regel
0:08:54.940 en print line doet dat wel
0:08:59.900 dus wat je krijgt: "temperatuur is" met daarachter direct de temperatuure
0:09:06.700 zou je hier ook "println" hebben gezet, dan kwamen ze beide op een nieuwe regel
0:09:12.280 je wilt achter elkaar hebben dus gebruik je hier "print" en daar "println"
0:09:17.540 vervolgens wachten we een seconden en beginnen we opnieuw met het uitlezen van de sensor
0:09:21.280 we kunnen nu de schets naar de Arduino gaan sturen
0:09:24.120 eerst ga ik hem even verifiëren om tekijken of alles klopt
0:09:27.960 en zie ik dat er een fout bij het compileren is gebeurd
0:09:32.740 en dan zien wie hier data hij de 1-wire bibliotheek niet kan vinden
0:09:37.160 hij geeft ook aan dat de foutmelding op regel 5 is
0:09:41.260 Dan zal hij waarschijnlijk ook de "DallasTemperature" niet kunnen vinden
0:09:44.340 maar hij is er hier al op stuk gegaan
0:09:46.540 ik ga je laten zien hoe je dit oplost
0:09:52.320 we gaan naar "schets" en dan gaan we naar "bibliotheken beheren"
0:09:55.400 en dan zoeken we op "dallas"
0:10:01.120 in de Dallas bibliotheek zit ook de 1-wire
0:10:06.620 installeer niet "1-wire" en "dallas" alletwee want dan gaat hij piepen dat
0:10:11.500 er twee versies van 1-wire vindt: eentje los en eentje in de DallasTemperature
0:10:13.820 bibliotheek bedoel ik sorry
0:10:16.540 in het Engels is een bibliotheek, een "library"
0:10:19.480 klik op "installeren", die staat er in
0:10:24.500 er staat hierachter "installed" dan gaan we nog een keer  verifiëren
0:10:30.200 en nu zien we dat alles goed gaat
0:10:35.260 ik ga nu de code naar mijn Arduino sturen
0:10:38.780 ik heb mijn Arduino aangekoppeld
0:10:47.420 en druk nog een keer op "upload"
0:10:53.520 en vervolgens ga ik de seriële monitoropenen om te kijken of ik een temperatuur binnen krijg
0:10:57.440 en daar is hij: 21,3 graden
0:11:05.360 als ik nu mijn vingers op de temperatuursensor leg dan zie je dat de temperatuur oploopt
0:11:11.520 als ik hem weer loslaat dan loopt hij weer terug
0:11:14.790 dat was het voor vandaag in de volgende tutorial gaan we kijken
0:11:20.060 of we het LED op de Arduino aan- en uit kunnen schakelen bij een bepaalde temperatuur.
0:11:21.000 tot dan!