Pagina1 van 1

Temperatuur meten met de Arduino en een DS18B20

Temperatuur meten met de Arduino en een DS18B20
   77

In dit voorbeeld project gaan we een Arduino en een DS18B20 temperatuur sensor combineren.

De DS18B20 is een zogenaamde 1-wire digitale temperatuur sensor. Hierbij de nadruk op de woorden “digitaal” en “1-wire” omdat dit nu precies is wat deze sensor zo leuk maakt. Met weinig moeite kun je zo temperaturen lezen van èèn of meer van deze sensoren.

Hoe meer ik met de Arduino speel, hoe leuker het wordt 




Arduino en de DS18B20 Temperatuur Sensor

De DS18B20 komt in verschillende vormen, dus je kunt precies dat model kiezen wat het meest geschikte is voor jouw toepassing. Er zijn 3 basis varianten, de 8-Pin SO (150 mils), 8-Pin µSOP, en een 3-Pin TO-92. Als je even op eBay of Amazon kijkt, dan zie je dat onze Chinese vrienden een TO-92 versie aanbieden in een waterdichte variant zodat je zonder moeite de sensor in een aquarium, de vijver, buitenshuis, of zelfs in de vriezer kunt hangen, zonder je zorgen te hoeven maken over kortsluiting (alle varianten gebruiken slecht 3 draadje: Zwart (aarde), Rood (Spanning) en wit of geel (Data)).

Verschillende varianten van de DS18B20 sensor

Verschillende varianten van de DS18B20 sensor

De waterdichte versie van de DS18B20

De waterdichte versie van de DS18B20

De DS18B20 is een aardig stukje techniek dat behoorlijk wat in huis heeft. Het kan op twee manieren gevoed worden (normaal en parasiet), werkt op 3.0V tot 5.5V, meet temperaturen tussen de -55°C en +125°C (-67°F en +257°F) met een tolerantie van ±0.5°C (tussen de -10°C en +85°C). Het doet dan ook nog eens de conversie van temperatuur naar een tot 12 bits nummer in 750ms of minder.

Wat ook een mooie optie is, is dat je tot 127 van dit soort sensors kunt combineren en aansluiten op slechts 1 data pin van een Arduino. Geen idee wie 127 sensors nodig heeft, maar op z’n minst 2 is leuk voor b.v. het bijhouden van de temperatuur in het vriesvak en het koelvak van jouw koelkast …

Wat hebben we nodig voor een Arduino en een DS18B20?

Software
  • Uiteraard hebben we de Arduino IDE software nodig
  • We hebben ook de OneWire library voor de Arduino en DS18B20 nodig (bespaart een hoop werk)
  • Onze eigen sketch natuurlijk …

De Arduino IDE kun je op de Arduino website (sterk aan te raden) vinden, of hier op Tweaking4All (maar deze versie kan verouderd zijn).

De OneWire Library vinden we op de OneWire Project Page (altijd aan te raden om de meest actuele versie hier te downloaden) of download v2.2 van Tweaking4All.

Download - Arduino Linux 32 bit 

Bestandsnaam:  arduino-ide-linux32.tar.xz
Platform:  Linux
Versie:  1.8.8
Omvang:  124.1 MB
Datum:  2018-01-02
 Download Nu  Stuur me Koffie    

Download - Arduino Linux 64 bit 

Bestandsnaam:  arduino-ide-linux64.tar.xz
Platform:  Linux
Versie:  1.8.8
Omvang:  121.7 MB
Datum:  2018-01-02
 Download Nu  Stuur me Koffie    

Download - Arduino MacOS X 

Bestandsnaam:  arduino-ide-macosx.zip
Platform:  Apple macOS
Versie:  1.8.8
Omvang:  189.7 MB
Datum:  2018-01-02
 Download Nu  Stuur me Koffie    

Download - Arduino Windows 

Bestandsnaam:  arduino-ide-windows.exe
Platform:  Microsoft Windows
Versie:  1.8.8
Omvang:  110.7 MB
Datum:  2018-01-02
 Download Nu  Stuur me Koffie    

Download - OneWire 

Bestandsnaam:  OneWire.zip
Platform:  Undefined
Versie:  2.2
Omvang:  15.1 kB
Datum:  2014-03-19
 Download Nu  Stuur me Koffie    

Harware

De USB kabel is alleen maar nodig gedurende de experimenteer fase voor het programmeren en tijdelijk voeden van de Arduino. In een eindopstelling gebruiken we natuurlijk een aparte voeding.

Aansluiten van de Arduino en de DS18B20

Dit is nu het mooie van de 1-wire oplossingen. Het kan eigenlijk niet eenvoudiger.

De GND of Aarde pin van de DS18B20 gaat naar een GND pin op de Arduino.
De Vdd pin van de DS18B20 gaat naar de +5V op de Arduino.
De Data pin van de DS18B20 gaat naar een (digitale) pin naar keuze op de Arduino, ik gebruik in dit artikel Pin 2.

We moeten alleen nog een weerstand van 4.7 KΩ toevoegen als zogenaamde “pull-up” weerstand. Ik heb en aantal waarden gezien op andere websites maar deze waarde lijkt het meest gebruikt en is ook het dichtste bij de voorgestelde 5 KΩ die de fabrikant suggereert.

In onderstaande illustratie zien we de gewone manier om een DS18B20 op een Arduino aan te sluiten.

  Controleer in de Sketch (later) regels 10 en 65 zodat de juist voedingsmethode en data pin gebruikt worden!

DS18B20 op een Arduino aansluiten (standaard voedingsmethode)

DS18B20 op een Arduino aansluiten (standaard voedingsmethode)

Hieronder een foto van mijn test opstelling … kan eigenlijk niet eenvoudiger.

Mijn test opstelling voor de temperatuur sensor

Mijn test opstelling voor de temperatuur sensor

Parasiet Voeding vs Gewone voeding

Naast de gewone methode om voeding aan de DS18B20 te leveren, is er ook een zogenaamde “Parasiet” methode waarbij we de +5V NIET aanluiten op de Vdd pin van de DS18B20. In plaats daarvan sluiten we pin 1 en 3 van de DS18B20 sensor kort (GND aan Vdd) – we hebben nu slechts 2 draadjes nodig i.p.v. de gebruikelijke 3.

Nadeel van de parasiet methode is dat de draadjes niet te lang mogen worden en als je meerder sensoren gebruikt kan dat ook nog eens problemen leveren. Het is natuurlijk net wat je wilt gebruiken, maar voor mij persoonlijk zou deze methode alleen maar zinvol zijn als het juist wel met lange draden en meerdere sensoren zou werken. Maar dat zal wel aan mij liggen. 

  De Parasiet kan geplaagd worden door van alles en nog wat, en ik kan deze methode niet aanraden voor een stabiele opstelling.

Arduino Sketch voor het meten van Temperaturen

Installatie van de OneWire Library

Als je bovenstaande ZIP hebt gedownloadn, of je hebt het van de OneWire Project Pagina, dan zou je zonder veel moeite de Library kunnen installeren met de Library Import optie in de Arduino IDE software. Kies uit het menu “Sketch Import Library Add Library” en selecteer het ZIP bestand.

Asl dit NIET werkt en je krijgt foutmeldingen :
In dit geval heeft de Arduino IDE moeite met een geschikte directory in het ZIP bestand te vinden. Het eenvoudigste los je dit op door het ZIP bestand uit te pakken. Zorg ervoor dan alles nu in een directory staat die naam “OneWire” heeft (je vindt hierin een directory “examples” en een zooi andere bestanden) welke je vervolgens in de libraries directory van de Arduino IDE kopieert.

  Om de “examples” in het menu van de Arduino IDE menu te vinden, moet je de Arduino IDE herstaren.

Laden van de Sketch

De volgende Sketch zit bij de OneWire library, en komt dus met het gedownloade ZIP bestand mee. Als je de OneWire Library hebt geinstalleerd dan zul je dit voorbeeld in het “examples” menu vinden.

Ga naar “File Examples OneWire” en kies het “DS18x20_Temperature” voorbeeld wat er ongeveer zo uit zou moeten zien als hieronder weergegeven.

De code in dat voorbeeld, gebruikt de OneWire Library handig om door alle mogelijke aangesloten DS28B20 temperatuur sensors te gaan (aan het einde van dit artikel laat ik je zien hoe je meerder sensoren kunt aansluiten), leest van iedere sensor vervolgens de data en stuur de gegeven vervolgens naar het debug venster (menu: “Tools Serial Monitor“).

De output in het debug venster ziet er dan ongeveer zo uit:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
ROM = 28 88 84 82 5 0 0 6A
  Chip = DS18B20
  Data = 1 56 1 4B 46 7F FF A 10 D1  CRC=D1
  Temperature = 21.37 Celsius, 70.47 Fahrenheit
No more addresses.

ROM = 28 88 84 82 5 0 0 6A
  Chip = DS18B20
  Data = 1 56 1 4B 46 7F FF A 10 D1  CRC=D1
  Temperature = 21.37 Celsius, 70.47 Fahrenheit
No more addresses.

ROM = 28 88 84 82 5 0 0 6A
  Chip = DS18B20
  Data = 1 56 1 4B 46 7F FF A 10 D1  CRC=D1
  Temperature = 21.37 Celsius, 70.47 Fahrenheit
No more addresses.

Gewone voeding of Parasiet voeding? 

De DS18B20 kan op twee manier gevoed worden: De gewone methode, of de parasiet methode.
De gewone methode heeft 3 draadje nodig, en de Parasite mode gebruikt er maar 2.

Voor correcte temperatuur meting moet je de juiste methode opgeven in de Arduino sketch:
  Voor Parasite methode moet regel 65 er zo uit zien: ds.write(0x44, 1);
  Voor de Gewone methode moet regel 65 er als volgt uit zien: ds.write(0x44);

Wijs de juiste Data Pin toe! 

In regel 10, waar je “OneWire ds(2);” ziet staan, wijzen we de gebruikte data pin toe.
Ik gebruik zelf pin 2, maar de standaard waarde in het OneWire voorbeeld gebruikt pin 10.
(Ik wil pin 10 voor iets anders gebruiken)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#include <OneWire.h>

// OneWire DS18S20, DS18B20, DS1822 Temperature Example
//
// http://www.pjrc.com/teensy/td_libs_OneWire.html
//
// The DallasTemperature library can do all this work for you!
// http://milesburton.com/Dallas_Temperature_Control_Library

OneWire  ds(2);  // on pin 2 (a 4.7K resistor is necessary)

void setup(void) {
  Serial.begin(9600);
}

void loop(void) {
  byte i;
  byte present = 0;
  byte type_s;
  byte data[12];
  byte addr[8];
  float celsius, fahrenheit;

  if ( !ds.search(addr)) {
    Serial.println("No more addresses.");
    Serial.println();
    ds.reset_search();
    delay(250);
    return;
  }

  Serial.print("ROM =");
  for( i = 0; i < 8; i++) {
    Serial.write(' ');
    Serial.print(addr[i], HEX);
  }

  if (OneWire::crc8(addr, 7) != addr[7]) {
      Serial.println("CRC is not valid!");
      return;
  }
  Serial.println();

  // the first ROM byte indicates which chip
  switch (addr[0]) {
    case 0x10:
      Serial.println("  Chip = DS18S20");  // or old DS1820
      type_s = 1;
      break;
    case 0x28:
      Serial.println("  Chip = DS18B20");
      type_s = 0;
      break;
    case 0x22:
      Serial.println("  Chip = DS1822");
      type_s = 0;
      break;
    default:
      Serial.println("Device is not a DS18x20 family device.");
      return;
  }

  ds.reset();
  ds.select(addr);
  ds.write(0x44);        // start conversion, use ds.write(0x44,1) with parasite power on at the end

  delay(1000);     // maybe 750ms is enough, maybe not
  // we might do a ds.depower() here, but the reset will take care of it.

  present = ds.reset();
  ds.select(addr);    
  ds.write(0xBE);         // Read Scratchpad

  Serial.print("  Data = ");
  Serial.print(present, HEX);
  Serial.print(" ");
  for ( i = 0; i < 9; i++) {           // we need 9 bytes
    data[i] = ds.read();
    Serial.print(data[i], HEX);
    Serial.print(" ");
  }
  Serial.print(" CRC=");
  Serial.print(OneWire::crc8(data, 8), HEX);
  Serial.println();

  // Convert the data to actual temperature
  // because the result is a 16 bit signed integer, it should
  // be stored to an "int16_t" type, which is always 16 bits
  // even when compiled on a 32 bit processor.
  int16_t raw = (data[1] << 8) | data[0];
  if (type_s) {
    raw = raw << 3; // 9 bit resolution default
    if (data[7] == 0x10) {
      // "count remain" gives full 12 bit resolution
      raw = (raw & 0xFFF0) + 12 - data[6];
    }
  } else {
    byte cfg = (data[4] & 0x60);
    // at lower res, the low bits are undefined, so let's zero them
    if (cfg == 0x00) raw = raw & ~7;  // 9 bit resolution, 93.75 ms
    else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms
    else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms
    //// default is 12 bit resolution, 750 ms conversion time
  }
  celsius = (float)raw / 16.0;
  fahrenheit = celsius * 1.8 + 32.0;
  Serial.print("  Temperature = ");
  Serial.print(celsius);
  Serial.print(" Celsius, ");
  Serial.print(fahrenheit);
  Serial.println(" Fahrenheit");
}

Hoe sluiten we meerdere Sensors aan

De DS18B20 Digitale Temperatuur sensor staat het toe om meerder sensors parallel aan te sluiten en de de OneWire library heeft alles wat we nodig hebben om al deze sensors uit te lezen. Hieronder laat ik je de twee manieren zien hoe je dat kunt doen – afhankelijk van de gekozen voeding methode.

  Als je veel sensoren combineert (meer dan 10) dan kan het beter werken als je weerstand door een lagere weerstandswaarde vervangt, b.v. 1.6 KΩ of zelfs minder.

  Het kan voorkomen, als je veel sensoren gebruikt (meer dan 10) dat je tegen data problemen aanloopt. Voordat doel kun je experimenteren met een extra weerstand van 100 … 120 Ω tussen de data pin van de sensor en de Arduino, voor elke sensor !

Als je meerdere sensoren gebruikt (2 in dit voorbeeld) dan kan de output van de bovenstaande sketch er als volgt uit zien:


1
2
3
4
5
6
7
8
9
10
ROM = 28 88 84 82 5 0 0 6A
  Chip = DS18B20
  Data = 1 51 1 4B 46 7F FF F 10 FE  CRC=FE
  Temperature = 21.06 Celsius, 69.91 Fahrenheit

ROM = 28 DA CA 27 5 0 0 49
  Chip = DS18B20
  Data = 1 4E 1 4B 46 7F FF 2 10 D9  CRC=D9
  Temperature = 20.87 Celsius, 69.57 Fahrenheit
No more addresses.

Sensore selectie

Als we meerdere sensoren gebruiken, hoe weten we dan welke sensor welke data geeft?

Serie nummer of te wel: uniek Identificatie Nummer

Omdat de sensor geheel digitaal is, kunnen we een sensor identificeren aan de hand van een identificatie nummer, maar ja, dan moeten we natuurlijk wel eerst weten wat het identificatie nummer is …

Als je naar de debug output kijkt van de bovenstaande sketch dan zie je dat dit daar al weergegeven wordt als een 64-bits uniek nummer (de “ROM” waarde), in het voorbeeld: 28 88 84 82 5 0 0 6A  of  28 DA CA 27 5 0 0 49 (in bovenstaande output).

Nogmaals: Als je meer dan 10 sensoren koppelt, dan wordt er gesuggereerd een weerstand van 100 … 120 Ω tussen de data pin van de DS18B20 en de data pin van de Arduino te plaatsen (bij iedere sensor) om stabiliteit te verbeteren. Helaas kan ik dit niet bevestigen omdat ik maar 2 sensors heb.

Normale Voeding

Als je de normale voeding gebruikt, dan is de onderstaande schakeling wat je nodig hebt om meerdere sensoren aan te sluiten.

Meerdere DS18B20 sensoren in een normale voeding opstelling

Meerdere DS18B20 sensoren in een normale voeding opstelling

Parasiet Voeding

In deze methode sluiten we in principe pin 1 en 3 van de sensor kort en trekt de sensor stroom via de data pin.

Meerdere DS18B20 sensoren in een parasiet voeding opstelling

Meerdere DS18B20 sensoren in een parasiet voeding opstelling

Meer Informatie

Hieronder een kleine lijst met meer informatie, voor het geval je dieper in de materie wilt duiken.

Ondersteun ons ...


Jouw ondersteuning wordt zeer gewaardeerd, en hoeft zelfs niets te kosten. Bijvoorbeeld door links naar ons te delen op social media, of andere websites.

Andere vormen kunnen ook gratis zijn (b.v. shoppen op Amazon).
Alle opbrengsten worden gebruikt voor web-hosting kosten, project hardware en software, koffie, etc.

Hartelijk dank voor wie al heeft bijgedragen!
Het is altijd geweldig om te zien hoe men mijn artikeltjes en applicaties weet te waarderen.

Merk op dat het klikken op affiliate links een kleine commissie voor ons kunnen genereren - dit wordt zeer gewaardeerd.

Reacties


Er zijn 77 reacties welke je hieronder kunt lezen.
Je kunt jouw eigen opmerkingen plaatsen m.b.v. dit formulier, of een reactie op een bestaande opmerking plaatsen door op de "Beantwoorden" knop te klikken.

  • 13 apr 2014 - 0:22 - eddie Reactie Link

    super bedankt mede dankzij deze uitleg aan de praat gekregen!!

    Beantwoorden

    eddie

    • 13 apr 2014 - 0:40 - hans Reactie Link

      Hi Eddie! 

      Dank je wel voor het compliment, mooi om te horen dat het behulpzaam voor je was! 

      Beantwoorden

      hans

  • 15 apr 2014 - 15:19 - denzel Reactie Link

    bedankt voor de uitleg, zonder deze info zou het me nooit gelukt zijn om het te laten werken.

    met m’n zelfgemaakte programma kreeg ik temperaturen als -127°C te zien op seriële monitor wat niet mogelijk is

    waarschijnlijk omdat ik nog maar net begonnen ben met het (spelen) met arduino ;D

    Beantwoorden

    denzel

    • 15 apr 2014 - 18:21 - hans Reactie Link

      Hoi Denzel!

      Dank je wel voor de positieve feedback, ik hoop dat alles nu werkt naar wens … 

      Beantwoorden

      hans

  • 6 aug 2014 - 1:30 - Toon Reactie Link

    Dank voor de presentatie.

    Met deze hulp heb ik nu een werkende thermometer.

    Beantwoorden

    Toon

  • 8 sep 2014 - 14:17 - rem0 Reactie Link

    ik krijg de ene na de andere foutmelding…

    wat is r verkeerd

    Beantwoorden

    rem0

    • 9 sep 2014 - 12:36 - hans - Auteur: Reactie Link

      Ehm,… misschien handig als je ook opgeeft wat de foutmeldingen zijn, en waar je ze krijgt.

      In de Arduino IDE? In de debug output? Tijdens het compileren? 

      Beantwoorden

      hans

  • 15 nov 2014 - 22:20 - Ronald Reactie Link

    Bedankt voor deze duidelijk uitleg. Hierdoor kan ik snel weer verder naar de volgende barierre :)

    Beantwoorden

    Ronald

    • 17 nov 2014 - 9:20 - hans - Auteur: Reactie Link

      Dank je wel Ronald voor de leuke reactie! 

      Laat vooral weten wat de volgende barrière … misschien een leuk onderwerp voor een volgend artikel  … 

      Beantwoorden

      hans

  • 3 dec 2014 - 12:27 - Alfred Reactie Link

    Hallo.

    Geweldige uitleg! Ik was al een tijd aan het zoeken op het internet naar zo een temp project maar wel met een duidelijke uitleg. Ik ben namelijk nog leek. In verschillende talen ook gezocht Engels en Duits  en goede beschrijvingen gevonden in het Russisch. Maar uiteindelijk deze, gewoon in het Nederlands de mooiste uitleg!

    Ik heb nog een vraag; kun je het project ook uitvoeren met DHT22 of 11 componenten? Of werken die totaal anders. En/of kun je de componenten ook mengen bv buiten en in de kelder DHT11 / 22 en de rest DS18B20.

    Een heel andere vraag, weet jij een plek waar ik een duidelijk schema kan vinden voor de HS110?

    Groeten en compliment voor je uitleg hier!!!!!

    Beantwoorden

    Alfred

    • 4 dec 2014 - 10:38 - hans - Auteur: Reactie Link

      Hallo Alfred,

      hartelijk dank voor het mooie compliment! 

      Als eerste ben ik niet zo bekend met de DHT22 en DHT11, maar voor zover ik kan zien heeft het de mogelijkheid om naast temperatuur ook nog eens luchtvochtigheid te meten. Uit dit Arduino artikel maak ik op de de DS18B20 nauwkeuriger zou zijn dan de DHT11/22. Uit dit artikel kan ik afleiden dat de manier van aansluiten voor een DHT22/11 duidelijk anders werkt dan voor een DS18B20, je zult een pin nodig hebben voor iedere sensor en van te voren dus moeten rekening houden, in jouw code, dat iedere sensor een eigen specifiek stukje code nodig heeft. Dit in tegen stelling tot de DS18B20 (die blijkbaar in de DHT33/44 te vinden is), waar je maar 1 stukje code is – de DS18B20 is dus “intelligenter” – het gebruikt maar 1 gemeenschappelijke pin, ipv een pin per sensor.

      Conclusie: Je kunt ze combineren, maar je zult voor de DHT22/11 wel specifieke code moeten toevoegen. Zelf vindt ik het handiger om alleen de DS18B20 te gebruiken, maar als je luchtvochtigheid wilt meten … tja, dan moet je aan de slag met de DHTxx modellen.

      Ik vond op Github nog wat code die gebruik maakt van beiden – hopelijk helpt dat een beetje met inzicht krijgen hoe het e.e.a. werkt.

      Wat de HS110 sensors betreft moest ik inderdaad ook even zoeken. Ik vond 2 bronnen voor de spec sheets, maar of je er wat aan hebt weet ik niet (Mouser, Datasheet.hk).

      Ik vond een aantal artikelen mbt het gebruik van de HS110, maar ze lijken me wat minder eenvoudig in gebruik dan de DHT22/11. Zie o.a. Google Site Sensor voorbeelden, dit Arduino Forum Onderwerp. Voorzichtig gezegd lijkt me het gebruik van een HS110 (het eerder genoemde forum artikel laat ook de aansluitingen zien geloof ik) wat minder praktisch …

      Sommige schema’s (voorbeeld 1, voorbeeld 2) praten over het toevoegen van een 555 IC, wat de schakeling niet eenvoudiger maakt, en andere schema’s (voorbeeld) geven een recht-toe-recht-aan opstelling maar vergeten dan duidelijk aan te geven welke library/code nodig is.

      Na wat zoeken vond ik voor dat laatste eenvoudigere voorbeeld de benodigde library – Loguino 2.0. Misschien heb je daar wat aan. Helaas ben ik aan het reizen en heb dus geen toegang tot mijn Arduino spullen … ik heb daarnaast ook geen HS110 … 

      Hopelijk helpt je dit een beetje op weg – ik snap helemaal dat men soms door de bomen het bos even niet kan zien.

      Beantwoorden

      hans

  • 7 feb 2015 - 18:50 - leo Reactie Link

    Hoi Mooi beschreven maar ik snap 1 ding niet…. Hoe lees je de temperatuur af op de pc?
    Heb je daar een apart prgramma voor nodig of doe je dat met arduino ide.

    Ik hoor graag

    Groet

    Leo

    Beantwoorden

    leo

    • 8 feb 2015 - 11:01 - hans - Auteur: Reactie Link

      Hallo Leo!

      Dank je wel voor het compliment! 

      Het lezen van de temperatuur in dit artikeltje gaat er vanuit dat je het in de Arduino IDE debug afleest – leuk voor een experiment maar natuurlijk voor dagelijks gebruik niet handig. 

      Het idee is om dit als start project te gebruiken voor b.v. het aansturen van 

      – een LED display (zoals dit 7 segment LED model),
      – een LCD schermpje (zie ook “SainSmart 1.8″ TFT Arduino Kleuren LCD Display“) ,
      – een aantal gewone LEDs (welke elke een temperatuur range aangeven per LED, b.v. rood voor hoger dan 50 graden),
      – een ouderwetse analoge meter (b.v. deze),

      .. of … b.v. uitlezen via een webbrowser (zie Arduino Ethernet – Data met PHP naar een server sturen (Push) en Data van de Arduino ophalen (Pull)). Voor de webbrowser optie heb je alleen wel een ethernet of wifi module nodig.

      In alle gevallen heb je wat extra componenten nodig natuurlijk, waarbij gewone LEDs of een 7-segment display misschien de goedkoopste oplossingen zijn. Ik zag op eBay al een paar goedkope 7-segment display: link 1 (groot) en link 2 (mini) welke elk zo’n 3 Euro zijn. 

      Helaas heb ik nog geen tijd gehad om een artikeltje in elkaar te zetten voor deze 7-segment displays (ik reis nogal wat de laatste maanden en heb m’n spullen niet bij me).

      Beantwoorden

      hans

  • 12 apr 2015 - 13:44 - Roelof - Auteur: Reactie Link

    Hoi, geweldig artikel! Binnenkort ga ik 4 temperatuursensoren op een buffervat koppelen aan een Arduino. Deze wil ik schakelen met een multicolor LEDstrip (APA102) van ongeveer 2 meter. Deze moet de temperaturen in een gelaagd buffervat (heet water bovenin, koud water onderin) weergeven. Rode leds (bovenin) voor warm en blauwe leds (onderin) voor koud. Als dit buffervat opgewarmd wordt, dan worden dus meer leds roodgekleurd. 

    Waar zou ik hulp kunnen vinden voor de code die ik moet gaan gebruiken? Het is een beetje complexer als een linair verloop (4 temperatuur sensoren in plaats van 2).

    Beantwoorden

    Roelof

    • 12 apr 2015 - 14:00 - hans - Auteur: Reactie Link

      Hi Roelof!

      Leuk idee! Ook al moet ik toegeven dat ik eerst even de term “buffervat” moest opzoeken, en me de werking nog niet 100% duidelijk is. Ik begrijp dat een buffervat een gesloten vat is welke tijdelijk warmte opslaat in water voor later gebruik – maar daar houdt het even bij op.

      Hoe wil je de sensoren plaatsen? En ik weet niet precies wat je bedoelt met koud onderin en warm bovenin. Twee gescheiden gebieden in het vat? En die wil je apart meten?

      Beantwoorden

      hans

      • 12 apr 2015 - 16:05 - Roelof - Auteur: Reactie Link

        Inderdaad, het buffervat bevat 1000 liter water, en is 2 meter hoog bij 80 cm doorsnede. Hieruit haal ik mijn warmte voor de radiatoren, de douche en de kranen. Daarnaast wordt er warmte toegevoegd door de zonnepanelen, de houtkachel of de cv-ketel. Op het buffervat bevinden zich 4 sensoren die hun info geven aan de controller (volgens mij ook een soort Arduino). Die stuurt op zijn beurt de pompen aan voor de radiatoren, de ventilatoren etc.
        Het buffervat is gelaagd, dwz dat warm water bovenop het koude ligt. Zo heb ik altijd een kolom van ca. 30cm water van minimaal 60 graden helemaal bovenin. Daaronder zakt de temperatuur snel naar 40 graden tot 20 graden helemaal onderin. Als er veel zon is, dan wordt het vat misschien wel 80 graden in zijn geheel. Ik kan de waarden van de 4 sensoren aflezen, maar ik wil graag een duidelijke afspiegeling van de temperatuur in het vat. Vandaar deze ledstrip van 2 meter (288 leds haha). Als alles blauw is dan zie ik dat ik mijn houtkachel moet opstoken tot alles weer rood is.
        Ik ga de 4 sensoren naast de bestaande sensoren plaatsen: 1 helemaal bovenaan, 1 helemaal onderaan en twee daar tussenin (niet op gelijke afstanden). De temperatuursverdeling in het vat is niet linair voor zover ik weet.

        Beantwoorden

        Roelof

      • 13 apr 2015 - 10:26 - hans - Auteur: Reactie Link

        Hi Roelof,

        interresant project! 

        Lijkt me het mooiste om op de LED strip de verhoudingen te zien. Dus b.v. onderin blauw, oplopend to rood (mocht het water onderin koud zijn en bovenin heet zijn). Een verloop tussen de 4 punten zou dan het mooiste zijn, en ik vermoed dat je dit in gedachten hebt. De berekening zal vast niet echt lineair zijn, maar wat de berekening wel precies zou moeten zijn is een goede vraag. Ik zou lineaire interpolatie gaan gebruiken voor de berekening – dit kan echter met 4 punten wat lastig worden als het zaakje zich niet lineair gedraagt. 

        Het gebruik van zogenaamde curve fitting, voor non-lineaire berekeningen, wordt wat berekening betreft weer lastig, zeker voor een Arduino. 

        Als we een “basis” formule hebben, op basis van 4 gemeten temperature, dan kunnen we die formule gebruiken om tussen liggende temperature te schatten en aan de hand van die berekende waarde de blauw/rood intensiteit opgeven.

        Helaas moet deze “formule” berekend worden en van wat ik zo 1-2-3 online lees, is dat misschien een beetje te veel werk voor de Arduino.

        Ik zou dus lineaire interpolatie proberen. Steeds de waarden tussen 2 punten bepalen hiermee zodat je een redelijk net kleur verloop hebt.

        Oh en nu vindt ik net Arduino-Splines – misschien dat het helpt (beetje lees werk om het te begrijpen).

        Beantwoorden

        hans

    • 12 dec 2015 - 18:17 - David Reactie Link

      Hoi Roelof,

      Is het jou gelukt om het klaar te krijgen met de led strip? Leek mij ook leuk om te maken voor mijn buffervaten.

      Mvg,

      David Oldewarris

      Beantwoorden

      David

  • 20 apr 2015 - 18:43 - Miguël Reactie Link

    Beste,

    wil je toch meegeven dat dit zoals meermaals is aangehaald een geweldig artikel is.

    (Nadeel van codes van het net kopiëren is dat deze altijd vol fouten staat, het is lijk dat iedereen te gierig is om zijn code door te geven, dit noemen ze dan open source…….)

    (Dit maakt het artikel dan ook zo goed is dat info eerlijk is en vollledig, doe zo verder zou ik zeggen;-) )

    Ik heb mijn code wel anders op gemaakt maar de begin info hiervan genomen.:-)

    Ik probeer nu al een maand de temperatuur uit te lezen op een platform genaamd thingspeak( er bestaat ook een ander platform, xively maar daar werken ze helaas met een wachtlijst) maar dit wil maar niet lukken.

    Heb al veel research op het net gedaan, codes gekopieerd aangepast gedebugd maar geen enkel wil mij connecteren op de server.

    Compileren en uploaden geen probleem, connectie maken met mijn eigen wifi thuis geen probleem connectie met server PROBLEEM.

    Heeft u daar al ervaring mee? Is het makkelijker voor u  dat ik u de codes eens stuur ? 

    Hardware:

    ds18b20

    arduino uno

    arduino wifi

    Groetjes

    Miguël

    Beantwoorden

    Miguël

    • 20 apr 2015 - 20:09 - hans - Auteur: Reactie Link

      Hi Miguël!

      Dank je wel voor het mooie compliment – en ik ga zeker zo door … 

      Ik wil zeker wel even kijken of ik je op weg kan helpen!
      De eerste vraag is natuurlijk: Werken hun demo’s (hier) voor jou?
      Met name lijkt me deze van belang: link.
      Ik neem even voorzicht aan dat je dat al geprobeerd hebt.

      ThingsPeak is ook voor mij nieuw, dus je hoeft nog geen code’s te posten, eerst even door de basis gaan … 

      Beantwoorden

      hans

      • 28 mei 2015 - 16:26 - Miguël Reactie Link

        Beste Hans,

        Sorry voor mijn late reactie.

        Mits dit project als eindwerk dient heb ik het de laaste tijd zeer druk had.

        Het is me ondertussen gelukt om de sensor waarde op een server te verkrijgen en een trigger op te stellen die me een sms stuurd.

        Toch bedankt voor de moeite.

        Mvg

        Dumont Miguël

        Beantwoorden

        Miguël

        • 29 mei 2015 - 13:31 - hans - Auteur: Reactie Link

          Hi Miguël,

          Graag gedaan en geen probleem wat de late reactie betreft hoor. 
          Ik zit zelf midden in een drukke verhuis van de Verenigde Staten naar Nederland, dus mijn reactie snelheid zal ook wel laag zijn de komende weken.

          Mooi om te horen dat het werkt! 
          Wat gebruik je voor het versturen van een SMS?

          Beantwoorden

          hans

  • 12 jan 2016 - 11:40 - Ben Reactie Link

    Beste Hans,

    Hele mooie uitleg, hartelijk dank daarvoor.

    Bij het uitvoeren van het voorbeeldprogramma, krijg ik in de seriële monitor steeds de melding: “No more addresses.”

    Ik blijf dus steeds vast zitten in de eerste if-loop. Enig idee wat hiervan de oorzaak zou kunnen zijn?

    Alvast bedankt,

    Met vriendelijke groeten,

    Ben

    Beantwoorden

    Ben

  • 24 jan 2016 - 9:48 - Gerard Reactie Link

    Ik ben een beginnend arduino-gebruiker en daarom is dit een fantastisch stuk! Bedankt, hier kan ik direct mee aan de slag.

    Je noemt ook de mogelijkheid om een analoog signaal (0 – 5 V?) als output te krijgen. Kun je misschien aangeven hoe ik dat moet doen? Ik wil graag een kleine versie maken met één temperatuursensor en een arduino nano met een analoog uitgangssignaal.

    Groeten,

    Gerard

    Beantwoorden

    Gerard

    • 24 jan 2016 - 11:36 - hans - Auteur: Reactie Link

      Hallo Gerard!

      Dank je wel voor het compliment .

      Een analoge output is iets lastiger dan een analoge input. Voor een analoge input heeft de Arduino een Analoog-naar-Digitaal converter, maar voor output helaas niet. 

      In plaats daarvan geeft AnalogWrite() een puls, en deze puls moet dus omgezet worden naar een stabiel analoog signaal (zie onderstaande afbeelding).
      Na wat zoeken vond ik het schema van een eenvoudige low-pass filter, dit artikel (in het het Engels) geeft een goede beschrijving hoe je de waarden van de weerstand en condensator moet bepalen. Een calculator vond ik hier. Een zeer uitgebreid artikel vind je hier.

      Zoals je ziet, het lijkt eenvoudig, maar toch wel even bewerkelijk wat achterliggende berekening betreft.
      Ik moet eerlijk toegeven dat ik het wat eenvoudig had verwacht, maar als je de tijd neemt en alles goed doorleest dan moet het mogelijk zijn.

      Beantwoorden

      hans

  • 5 feb 2016 - 19:26 - bram Reactie Link

    hallo

    bedankt voor de goed uitleg. erg duidelijk.

    alleen krijg ik hem echt niet aan de praat. heb alles aan gesloten zoals op de fotos (parasiet en normaal) alleen als ik hem aansluit op de normale modes gaan de lampjes van mijn adruino lanzaam uit (dus ik snel stekker er weer uit en opnieuw checken) na van alles proberen nog steeds het zelfde probleem. toen maar de parasiet ipstelling maar bij parasiet opstelling gebeurt er ook niks de lampjes van de adruino blijven wel branden maar er komt niks in beeld. ook al meerdere codes geprobeer maar 

    steeds het zelfde

    enig iedee wat het kan zijn

    bedankt.

    Beantwoorden

    bram

    • 6 feb 2016 - 9:56 - hans - Auteur: Reactie Link

      Hoi Bram,

      jammer om te horen dat je tegen een probleem aanloopt. 

      De enige 2 mogelijke oorzaken die ik kan bedenken zijn:

      – Toch fout aangesloten (misschien dat de kleuren van de kabels niet overeenkomen met het model dat ik gebruikt heb?)
      – De sensor is niet hetzelfde als het model wat ik hier gebruik (b.v. een Chinese clone – zie ook het Engelstalige artikel).

      Beantwoorden

      hans

    • 7 feb 2016 - 12:49 - John Reactie Link

      Hoi Bram,

      sinds gisteren middag loopt bij mij , ook na veel lezen, proberen enz. een Uno met ethernet -shield in mijn thuisnetwerk.

      13 Stuks DS18B20 (3 draads ansluiting met 1,2 KOhm weerstand worden mooi na elkaar door de Browser uitgelezen en getoont.

      De Refresh, om een aktuele stand te hebben is nog niet gelukt. Moet dus altijd nieuw met b.v. F5 aktualiseren.

      De broncode kun je natuurlijk graag krijgen, weet helaas niet hoe ik het van hieuit kan doen.

      Groetjes John


      Beantwoorden

      John

      • 7 feb 2016 - 14:55 - hans - Auteur: Reactie Link

        Hallo John en Bram,

        de beste methode om bron code te delen is via het forum – je moet je helaas wel aanmelden (omdat er van die spam grapjurken zijn), maar daarna kun je wel een onderwerp starten en attachments, zoals jouw broncode, plaatsen.

        Mocht je besluiten dit te doen, dan kan het handig voor andere lezers zijn als je dan de link van het forum topic hier even plaats. Maar dat is natuurlijk geheel optioneel … 

        Beantwoorden

        hans

  • 29 feb 2016 - 17:00 Reactie Link
    PingBack: www.pi4kgl.org

    […] Temperatuur meten […]

  • 19 mrt 2016 - 21:42 - mathieu Reactie Link

    Ook bij mij had ik het zo aan de gang, zonder dit zou het nooit gelukt zijn.

    Fijn dat er mensen zoals jouw zijn die de tijd nemen om dit op het net te zetten!

    Beantwoorden

    mathieu

    • 20 mrt 2016 - 0:21 - hans - Auteur: Reactie Link

      Dank je wel Mathieu!

      het is altijd erg leuk om zulke reacties te horen! Dank je wel voor de leuke reactie en motivatie! 

      Beantwoorden

      hans

  • 25 mrt 2016 - 6:48 - Kevin1978 Reactie Link

    Beste Hans,

    Bedankt voor het maken van dit heldere artikel. Ik kan de DS18B20 uitlezen, heb de sketch volledig ontdaan van ballast. Mijn serial monitor print nu het onderstaande uit:

    287DDED0600E0;22.06
    28E654D360057;20.69

    Wat ik nu eigenlijk wil is dat ik de HEX code omzet naar een naam. B.v. woonkamer, slaapkamer, etc.

    Woonkamer;22.06
    Slaapkamer;20.69

    Kun jij aangeven hoe dit moet? of waar ik dit kan vinden?

    Alvast bedankt.

    M.v.g.

    Kevin

    Beantwoorden

    Kevin1978

    • 25 mrt 2016 - 10:47 - hans - Auteur: Reactie Link

      Hi Kevin!

      Hartelijk dank voor het compliment – dat wordt altijd gewaardeerd .

      Als je liever namen ziet dan hexadecimale nummers (wat ik me kan voorstellen vanwege de leesbaarheid), dan zul je de variable addr[] (zie regel 32 in de code hierboven) moeten vergelijken met nummers die je vast in de code zet.

      Het lastige is het vergelijken van arrays.

      De eenvoudigste manier lijkt me door het statement “memcmp()” te gebruiken – dit vergelijkt 2 geheugen blokken voor een gegeven lengte, en geef 0 (nul) terug als alle vergeleken bytes hetzelfde zijn.

      Omdat een adres 8 bytes lang is moet je dus eerst 2 arrays maken voor de woonkamer en slaapkamer ROM nummers. 

      Vervolgens moet je het gelezen adres (addr) vergelijken met deze 2 arrays om te zien met welke we te maken hebben, je dus zoiets kunnen doen:

      byte Woonkamer[] = {0x28,0x7D,0xDE,0xD0,0x6,0x0,0x0,0xE0};
      byte Slaapkamer[]= {0x28,0xE6,0x54,0xD3,0x6,0x0,0x0,0x57};
      ...
         
        compareArray(Woonkamer, Addr);
        if(memcmp(Woonkamer, Addr, 8)==0) {
          Serial.print('Woonkamer');
        } 
        else if(memcmp(Slaapkamer, Addr, 8)==0) {
          Serial.print('Slaapkamer');
        }
      ...

      Let op: Bij het maken van de arrays voor Woonkamer en Slaapkamer heb ik voor elk getal “0x” gezet (hex notatie).

      Ik heb dit niet kunnen testen, heb even geen Arduino bij de hand, maar de Arduino IDE compileerde het zonder fouten.
      Hopelijk helpt je dit op weg 

      Beantwoorden

      hans

  • 26 mrt 2016 - 3:53 - arendt Reactie Link

    Ik doe het maar even hier en zo. Na honderd keer klikken en mijn profiel te kunnen zien, bijdragen van vele mensen, kom ik niet bij het forum om een vraag te stellen. Misschien is het handig om bovenaan de homepage (of bij je profiel) een link te zetten naar het forum.

     Na een half uur zoeken geef ik het op.

    Beantwoorden

    arendt

    • 26 mrt 2016 - 10:59 - hans - Auteur: Reactie Link

      Hallo Arendt!

      Jammer om te horen dat je tegen problemen aanloopt – en dat is uiteraard niet de ervaring die ik gebruikers wil meegeven.
      Helemaal bovenaan, net onder de oranje/bruine balk, staat al een link naar het forum (“Gemeenschap“).
      Nu kan ik me voorstellen dat “Gemeenschap” niet het beste woord is – voor mij persoonlijk zou het woord “Forum” of “Community” beter werken, maar ik ben opgegroeid met niets anders dan de Engelse taal voor computer gebruik. Ik kan dat natuurlijk aanpassen naar het woord “Forum”.

      Een link bij het profiel is ook geen slecht idee! 

      Behalve het vinden van het forum, waren er nog andere issues waar je tegen aan liep? Ik wil graag mijn website verbeteren – dus alle input is welkom!

      Beantwoorden

      hans

    • 26 mrt 2016 - 12:52 - hans - Auteur: Reactie Link

      Ik heb jouw suggesties doorgevoerd!

      Nogmaals dank voor de input! 

      Beantwoorden

      hans

  • 20 jun 2016 - 20:41 - Ruud Reactie Link

    Voor het meten van negatieve (celsius) waarden heb ik dit (2e regel) onderaan toegevoegd.

    onder: celsius = (float……

    if (celcius>=2000) {celsius = celsius – 4096}

    Zo te zien werkt het goed, mvg Ruud

    Beantwoorden

    Ruud

    • 20 jun 2016 - 23:05 - hans - Auteur: Reactie Link

      Hoi Ruud!

      Dank je wel voor de tip.
      Ik ben nog niet tegen negatieve waarden aangelopen,… zal ik dus t.z.t. toch eens moeten gaan proberen. 

      Beantwoorden

      hans

  • 27 jun 2016 - 0:02 - Daniel Reactie Link

    Beste Hans,

    ik kreeg ook de melding “no more adresses”. Ik heb op het Engelse forum gekeken naar de mogelijk Chinese tegenhangers en wat daar aan te doen is. Dat stukje code heb ik vervangen in plaats van deze:

    ds.reset();

      ds.select(addr);

      ds.write(0x44);

    Ook heb ik het schema gecontroleerd. Ik heb de sensor bij Tinytronics gehaald. Zie; http://www.tinytronics.nl/shop/Sensoren/Temperature-Air-Humidity/DS18B20-TO-92-Thermometer-Temperatuur-Sensor-met-Kabel—Waterproof

    Echter de melding die ik ook krijg onderaan is als volgt:

    “Niet gebruikt: C:\Program Files (x86)\Arduino\libraries\OneWire

    De schets gebruikt 6.274 bytes (19%) programma-opslagruimte. Maximum is 32.256 bytes.

    Globale variabelen gebruiken 400 bytes (19%) van het dynamisch geheugen. Resteren 1.648 bytes voor lokale variabelen. Maximum is 2.048 bytes.”

    Ik was van plan de sensor te gaan gebruiken voor een temperatuur logger. Dus had ik het ethernetshield er op zitten.

    Na deze er af gehaald te hebben en de originele code weer te gebruiken (zonder de Chinese code) krijg ik gewoon de juiste output zonder de bovenstaande melding over opslagruimte.

    Afijn, de vraag is nu. Enig idee wat ik moet doen om deze sensor samen met de Ethernet Shield te gebruiken met SD kaart?

    Bedankt alvast.

    Groeten Daniel

    Beantwoorden

    Daniel

    • 27 jun 2016 - 12:55 - hans - Auteur: Reactie Link

      Hallo Daniel,

      Het probleem zit ‘m in dat beiden (Ethernet en OneWire) waarschijnlijk een conflict hebben m.b.t. de libraries of de gebruikte pin.
      Ik vindt dat zelf altijd een lastig probleem om op te lossen.

      Je kunt experimenteren met de temperatuur sensor(en) aan een andere pin te hangen en dan de regel

      OneWire  ds(2);

      aan te passen (dus ipv “2” het gebruikte pin nummer invullen).
      Maar ook voor mij blijft dat vaak proberen met vallen en opstaan. Misschien dat lieden in de engelse versie va dit artikel behulpzaam kunnen zijn.

      Beantwoorden

      hans

  • 19 sep 2016 - 22:09 - roeland Reactie Link

    Het werkt. Ik wil nu graag de (digitale) temperatuur op een LCD laten verschijnen. Hoe moet ik dit aanpakken?

    Beantwoorden

    roeland

    • 20 sep 2016 - 21:04 - hans - Auteur: Reactie Link

      Mooi!!  

      Er zijn verschillende manieren om een LCD schermpje aan de Arduino te hangen.
      Als je een wat complexer display wilt gebruiken, lees dan dit artikel (als voorbeeld).
      Een simpeler LCD display is b.v. in dit artikel besproken.

      Er zijn legio voorbeelden te vinden – misschien tijd om hier eens een artikeltje aan te wijden. 

      Beantwoorden

      hans

  • 17 nov 2016 - 22:07 - Joep Frensen Reactie Link

    Ik heb een ds1822, dat zou ook goed moeten werken, maar krijg alleen als temperatuur 127,94 Celsius of 262,28 Fahrenheit. Wat kan er fout zijn?j

    De sketch heb ik gewoon overgenomen, voor de Sainsmart uno, ik heb ook de parasiet voeding geprobeerd, werkt ook niet, zelfde resultaat.

    De sketch meldt netjes dat het een ds1822 is.

    Beantwoorden

    Joep Frensen

    • 18 nov 2016 - 15:04 - hans - Auteur: Reactie Link

      Ik vermoed dat de temperatuur conversie voor een DS1822 net even anders is als voor een DS1820.

      Een berekening die ik hier vond, laat een calculatie voorbeeld voor een DS1822 zien (gelezen waarde 171 HEX):

      0x0171 HEX=369 DEC, 369*0.0625=23C (74F).

      Misschien helpt dit in de juiste richting?

      Beantwoorden

      hans

  • 19 jan 2017 - 19:46 - Kristof Reactie Link

    Prachtig en duidelijk uitgelegd! Knap werk ! Ik had graag een simulatie gemaakt van de DS18B20Z+, dus Arduino die gegevens binnen krijgt van bvb een potmeter net alsof het de DS18B20 zou zijn. De bedoeling is om een verwarmingsinstallatie na te bootsen. De waarde die de Arduino Mega als input krijgt zou ook op een LCD moeten verschijnen…Alvast bedankt voor eventuele input.

    Beantwoorden

    Kristof

    • 20 jan 2017 - 19:00 - hans - Auteur: Reactie Link

      Hoi Kristof!

      Hartelijk dank voor het mooie compliment 

      Na bootsten van de DS18B20 met een potmeter is helaas geen optie.
      De DS18B20 handelt alles intern af en levert een digitaal signaal, dit in tegenstelling tot een potmeter en eenvoudigere temperatuur sensoren. Als je een simulatie wilt doen, dan moet je de code helaas aanpassen zodat het met een temperatuur gevoelige weerstand (of: potmeter) kan werken – maar je hebt dan voor iedere sensor een aparte pin nodig. Meer over Thermistors in dit artikel.

      Weergave van waarden op een display is zeer zeker mogelijk, en ik zou met een eenvoudig Character LCD beginnen (zie ook dit AdaFruit artikel). Omdat deze displays eenvoudig te gebruiken zijn en omdat vaak goedkoop zijn, zeker een aanrader om mee te beginnen.
      Overigens, mocht je pinnen willen besparen dan kan een dergelijk display ook worden voorzien van USB en/of serieel poort (zie dit AdaFruit artikel).
      Nog een goed artikel om te lezen: Arduino website.

      Hopelijk helpt je dit een beetje op weg … 

      Beantwoorden

      hans

      • 21 jan 2017 - 18:49 - Kristof Reactie Link

        Dit is zeker een goede start voor mij Hans. Bedankt voor de info. Vooral in het artikel over thermistors ga ik zeker verder uitzoeken of ik hier wat mee kan. Het lijkt me in elk geval een goed uitgangspunt. 

        Beantwoorden

        Kristof

  • 14 feb 2017 - 12:55 - Lars - Auteur: Reactie Link

    Hallo Hans,

    Geweldige tutorial! Hiermee kan en durf ik als Arduino beginner aan de slag.

    Wel loop ik direct tegen een vraagstuk aan wat voor mij niet triviaal is. In mijn setup komen drie sensoren. Nu wil ik de gemeten temperatuur per sensor kunnen traceren en gebruiken in mijn programmeercode en lcd.print.

    Dus niet zoals in jouw voorbeeld met meerdere sensoren gewoon als “loop blokjes” achter elkaar, maar meer zoals Kevin in zijn woonkamer/slaapkamer reactie.

    Hoe zorg ik ervoor dat ik de gemeten waarde van ieder van de sensoren netjes op sla in een traceerbare/herbruikbare variabele? 

    Uiteindelijk wil ik op een LCD iets plotten als:

    T=25 T=30 T=90

    25%  50%  100%

    De bovenste zijn dan de gemeten waardes van de temperatuur sensoren en de onderste de duty cycle output voor PWM aansturing van een pomp.

    Beantwoorden

    Lars

    • 14 feb 2017 - 15:44 - hans - Auteur: Reactie Link

      Dank je wel Lars! 

      Je zou een globale variabele kunnen bijhouden, en omdat je er 3 gebruikt zou je dat in een array kunnen zetten.

      B.v. 

      array float temperaturen[3];

      en dan heb je natuurlijk nog een teller nodig om steeds van 1 – 3 te tellen zodat de juiste variabele wordt ingevuld.

      byte huidigeSensor = 0;

      Deze twee declaraties beter maar helemaal in het begin van de code zetten (dus voor “void setup()”).

      Regel 25-30 aanpassen om de teller op nul te zetten wanneer alle sensoren zijn gelezen;

        if ( !ds.search(addr)) {
          Serial.println("No more addresses.");
          Serial.println();
          ds.reset_search();
          huidigeSensor = 0; // Reset tellet
          delay(250);
          return;
        }

      In regels 105 en 106 wat aanspassen om de waarde op te slaan in de array;

        celsius = (float)raw / 16.0;
        fahrenheit = celsius * 1.8 + 32.0;
        temperaturen[huidigeSensor] = celcius; // ik neem even aan dat je Celsius wilt bewaren
        huidigeSensor++; // en de huidige sensor met 1 verhogen

      De waarden zouden nu (ik heb dit nog niet getest) in de array temperaturen moeten staan (temperaturen[0],temperaturen[1],temperaturen[2]). En dus dan van daaruit verder werken … 

      Helpt dit? 

      Beantwoorden

      hans

      • 16 feb 2017 - 1:24 - Lars - Auteur: Reactie Link

        Dank voor je reactie!

        Ik begrijp ongeveer wat je bedoelt, maar vind het nog wat fuzzy hoe ik er dan achterkom welke sensor dan welke is en of dat altijd in dezelfde volgorde gelezen wordt.

        Ik las ook in je code “The DallasTemperature library can do all this work for you!” dus daar ben ik ook even in gedoken. Ik heb van één van mijn sensoren het adres achterhaald en deze hardcoded erin gezet en dan lukt het me om de temperatuur weer te geven.

        Ik krijg hem dan echter niet stabiel op m’n LCD. Met m’n dummy waarden gaat dat prima, maar zodra de echte sensor erbij komt luistert setCursor niet meer, lijkt lcd.clear niet meer te werken en gaat alles scrambelen.

        Dat is dus nog even een apart vraagstuk. Misschien eindigt het wel dat ik de Dallas library weer overboord zet en jouw suggestie verder op me in laat werken en ga uitwerken.

        Ik zal je wel even laten weten hoe het verloopt.

        Beantwoorden

        Lars

        • 16 feb 2017 - 14:01 - Lars - Auteur: Reactie Link

          Hans, het is gelukt! Mijn probleem met het printen naar de LCD zat in de connectie (ik had per abuis de Tx poort op de Mega gebruikt). 

          Nogmaals dan voor deze tutorial! Dat heeft me in staat gesteld om de implementatie van een DS18B20 te doorgronden en goed aan te sluiten.

          Beantwoorden

          Lars

  • 14 nov 2017 - 18:05 - Jacques valembois Reactie Link

    Waar kan ik mij inschrijven voor deze club ? 

    U verwijst naar “gemeenschap” onder de bruine balk. Bij mij staat die verwijzing er niet op.

    Mvg

    Beantwoorden

    Jacques valembois

    • 19 nov 2017 - 22:20 - hans - Auteur: Reactie Link

      Hi Jacques,

      welkom bij Tweaking4All.
      De benaming “Gemeenschap” is veranderd naar “Forum” – dit omdat er verwarring was over wat en hoe.
      Ik neem aan dat je het trefwoord gevonden hebt in de opmerkingen (zoals hier). Mocht je het ergens anders gezien hebben dan hoor ik dat graag zodat ik dat kan corrigeren.

      Mocht je jezelf willen aanmelden dan kan dat ook door de “Log in” optie (rechts boven in de pagina, ook onder de bruine balk).

      Hopelijk helpt dit.

      Beantwoorden

      hans

  • 30 nov 2017 - 11:21 - jacques Reactie Link

    mijn vragen en commentaren lijken verdwenen.

    Did I something wrong ?

    Beantwoorden

    jacques

    • 30 nov 2017 - 15:39 - hans - Auteur: Reactie Link

      Hi Jacques,

      Sorry te horen dat er iets mis lijkt te gaan.
      Je hebt zeker niets verkeerd gedaan … jouw commentaar staat hier boven, … of heb je meerdere opmerkingen geplaatst?

      Beantwoorden

      hans

  • 30 nov 2017 - 16:50 - jacques Reactie Link

    ik vermoed dat ik laatst verkeerdelijk de link “druk deze link om af te melden” geactiveerd heb in plaats van “ga direct naar de commentaar”.

    Probleem is wel dat er bij die toevallig verkeerde toetsdruk geen vraag naar “bevestiging voor afmelding” verscheen.

    Misschien nuttig om dit te voorzien ?

    Mijn technische vragen zal ik zo snel mogelijk opnieuw posten.

    DANK voor uw werk !

    Beantwoorden

    jacques

    • 2 dec 2017 - 20:54 - hans - Auteur: Reactie Link

      Hoi Jacques,

      oh dat klinkt inderdaad onhandig. Je bedoelt in de email die je krijgt?
      Ik zal zo even kijken of ik het zo 1-2-3 kan vinden en kan verbeteren – dank je wel voor de feedback! 

      Beantwoorden

      hans

  • 6 dec 2017 - 15:40 Reactie Link
    PingBack: 12volt.kloppenburgweb.nl

    […] De bovenstaande code is gehaald van tweaking4all.com. […]

  • 6 jan 2019 - 10:02 - bart Reactie Link

    Hallo  iedereen,

    hartelijk dank voor deze duidelijke uitleg. Het is me zo ook gelukt om deze opstelling te maken. Wat me niet lukt is de temperatuursensoren aan een lange kabel te hangen. (ik had graag van in huis gezien wat de temperatuur is in mijn serre, die in de tuin achteraan staat.) Iemand een idee hoe ik zoiets oplos? de afstand is ongeveer 30 m.

    Beantwoorden

    bart

    • 6 jan 2019 - 16:22 - hans - Auteur: Reactie Link

      Hoi Bart,

      mooi om te horen dat je wat had aan dit artikel 

      Voor wat betreft de kabel lengte; als ik me niet vergis is 1.5 meter de aanbevolen maximale lengte. Ik heb wel gebruikers gezien die met CAT-5 kabel tot 10 meter voor elkaar kregen, maar alles boven de 1.5 meter kan met problemen komen.

      Voor de 30 meter die jij graag zou willen, is dat dus niet toereikend.
      Hiervoor zou ik (aangezien de prijs van een Arduino Nano or een ESP8266) een kleine opstelling in de Serre plaatsen, die dan via WiFi, Bluetooth of RF de waarden doorgeeft aan de Arduino waarop jij jouw opstelling nu hebt staan. Ik denk dat ik zelf met RF zou beginnen bijvoorbeeld met dee goedkope modules (Amazon USA, Amazon Duitsland). Ik heb zelf nog niet met RF modules gespeeld, maar van wat ik gelezen heb zijn ze eenvoudiger te implementeren en goedkoper in aanschaf.

      Overigens, als je dieper wil duiken in de DS18B20 en het zogenaamde “1-wire-netwerk”, dan kan dit (complexe) artikel van dienst zijn om een andere oplossing te vinden (door gebruik te maken van een master-slave opstelling).

      Beantwoorden

      hans

  • 29 jan 2019 - 23:20 - Marco Reactie Link

    Hallo,

    Bedankt voor dit leerzame artikel. Ik krijg perfecte readings van de DS18B20, zo lang ik de Uno maar via usb aan mijn Mac gekoppeld heb. Maar zodra ik het spul “live” zet in de schuur en aansluit op een externe 9V power supply dan krijg ik hele vreemde readings van -1000 graden C en dan weer +60 graden C enz. Ik las ergens dat de sensor gevoelig is voor wisselende spanningen en daarom anders gekalibreerd moet worden voor gebruik met een externe voeding.

    Herkent u dit gedrag? Weet u hoe kalibreren in zijn werk gaat? Is dat iets softwarematigs of moet ik de hardware aanpassen?

    Beantwoorden

    Marco

    • 30 jan 2019 - 0:21 - hans - Auteur: Reactie Link

      Hoi Marco!

      Leuk om te horen dat je het artikel leerzaam vond – dank je wel 

      Voor wat zich bij jouw voordoet; ik heb dit zelf niet ondervonden. Ik moet er dan wel bij zeggen dat de voeding die ik gebruik een standaard 2A 5V USB adaptertje is zoals je die voor telefoon en tablets gebruikt (om op te laden). Als ik me niet vergis zou 9V gelijkstroom geen probleem mogen zijn omdat er een spanningsregulator op de Uno dit omlaag regelt naar 5V. Maar … ik gebruik in zulke gevallen toch liever een gewone voeding met 5V en USB aansluiting. Misschien het proberen waard.

      Waar ik wel rare meting zie is als de kabels te lang zijn of storing ondervinden van andere apparatuur die dicht bij de kabel liggen. Ook een punt (indien van toepassing) om mee te experimenteren.

      Werkt alles wel goed als je alles los koppelt van de computer, en de opstelling (zoals je ‘m wilt gebruiken in de schuur) even ergens anders (binnen) legt en zo test? 

      Beantwoorden

      hans

      • 30 jan 2019 - 22:50 - Marco Reactie Link

        Hoi Hans,

        Werkt alles wel goed als je alles los koppelt van de computer, en de
        opstelling (zoals je ‘m wilt gebruiken in de schuur) even ergens anders
        (binnen) legt en zo test? 

        Geprobeerd, en nu geeft hij ineens wél goede meetwaardes met de externe 9V voeding.  De kabel van de DS18B20 (ik heb die waterdichte variant) liep in de foutsituatie over een 230V snoer heen waar een 2000W kachel op aangesloten was via een relais aan de Uno. Alles zit dicht bij elkaar. Bovendien had ik de kabel in een krul gelegd om hem korter te maken. Wellicht trad er daardoor interferentie op. Nu ik de kabel anders neergelegd heb, zijn de metingen wel redelijk accuraat. Dus het lijkt daar inderdaad iets mee te maken te hebben. Echt robuust vind ik het allemaal nog niet, maar goed, het draait nu. Maar als ik de opstelling een meter verplaats ofzo, dan houd ik mijn hart vast. De temperatuur in de schuur blijft nu wel mooi rond de 10 graden C.

        Jouw tip heeft zeker geholpen om te komen waar ik nu sta, waarvoor dank

        Beantwoorden

        Marco

      • 30 jan 2019 - 23:23 - hans - Auteur: Reactie Link

        Mooi om te horen dat het e.e.a. behulpzaam was 

        De opstelling zou inderdaad goed moeten werken zonder aangesloten te zijn op een computer.

        Interferentie zou je misschien kunnen minimaliseren door de kabels anders weg te leggen (data kabels die [deels] parallel lopen aan 220V spanning is geen goed idee), of misschien door gebruik te maken van een beter afgeschermde kabel –  de DATA en VDD draden (vermoed ik) moeten waarschijnlijk het beste afgeschermd worden – of misschien door een geaarde metalen/koperen pijpje laten lopen?

        Beantwoorden

        hans

  • 12 apr 2021 - 17:13 - BEANSR Reactie Link

    Prachtig artikel al veel meer duidelijk voor mij.

    Wil een datalogger maken en ik heb 6 ds18b20 aangesloten geheel volgens info internet maar 1t/m 5 werken en de 6e blijft -127 aangeven.

    heb er al een andere in gezet maar dat maakt niet uit.(alles doorgemeten)

    Voor ik verder ga met de data-shield wil ik er eerst 6 werkend hebben.

    Overigens kreeg ik de sketch niet op de chinese kloon ge-upload, keuze vd poort blijft grijs en dus niet te selecteren (werk met win 10) met een kloon vd mega 2640 werkte het wel evenals met een originele arduino. 

    Wat gaat er fout met de 6e sensor, wie o wie kan mij helpen hiermee

    het is ook mijn eerste project dus niet veel kennis

    bij voorbaat bedankt!

    Beantwoorden

    BEANSR

    • 13 apr 2021 - 15:15 - Hans - Auteur: Reactie Link

      Hi Beansr!

      Dank je wel voor het compliment en mooi om te horen dat het artikel bruikbaar voor je is 

      Ik heb zelf niet 6 sensoren, dus testen is wat lastig.

      Wat initiële gedachten;

      1) Heb je geprobeerd te wisselen van manier van voeding? Direct versus Parasiet mode?
      Van wat ik ervaren heb is de gewone voeding (zoals in figuur 5) methode de meest betrouwbare (dus niet de parasiet opstelling).

      2) Wat ook een rol kan spelen is de lengte van de draden – in een test opstelling zou ik eerst met zo kort mogelijke draden werken.

      3) Je kunt overwegen 2 pinnen te gebruiken (b.v. Pin 2 en Pin 4, ieder met 3 sensors), je zult wat code moeten dupliceren en ik weet niet met zekerheid hoe goed dit zal werken. Een eerste poging; (maak eerst een backup van jouw huidige sketch voor het geval alles mis gaat)

      Vervang:

      OneWire ds(2); // on pin 2 (a 4.7K resistor is necessary)

      door:

      OneWire ds1(2); // pin 2
      OneWire ds2(4); // pin 4

      Vervolgens hernoem je de void loop naar void loopPin1, en vervang alle referenties naar “ds” door “ds1“.
      Kopieer deze nieuwe functie en noem het nu void loopPin2, en vervang alle referenties naar “ds1” met “ds2“.

      Maak nu een nieuwe void loop die er zo uit ziet:

      void loop() {
        loopPin1;
        loopPin2;
      }

      Beetje slordig maar genoeg om te experimenteren denk ik.

      Geen idee of dit goed gaat … maar hopelijk helpt het 

      Beantwoorden

      Hans

  • 14 jan 2023 - 13:04 - Frans eilering Reactie Link

    Ik heb het uitgebreid met een stuk WiFi

    Je kunt nu draadloos de temperatuur naar Domoticz sturen

    https://www.evernote.com/shard/s653/nl/123826475/a1e74abc-365c-4c30-9f15-cd48ecfe68e6/

    Beantwoorden

    Frans eilering

    • 14 jan 2023 - 13:10 - Hans - Auteur: Reactie Link

      Hoi Frans,

      helaas, als men de link wilt bekijken dan moet men eerst inloggen of een Evernote account aanmaken.
      Zou je misschien de afbeelding/tekst naar mij kunnen emailen? (webmaster at tweaking4all dot com) 
      Dan kan ik het hier delen met anderen.

      Beantwoorden

      Hans

  • 15 jan 2023 - 16:51 - frans eilering Reactie Link


Jouw Opmerking ...

Plaats hier geen grote bestanden (zoals source codes, log files of config files). Gebruik hiervoor het Forum.

Delen:
*
*
Laat me per email weten als er nieuwe reacties zijn.
       Je kunt jouw RSS reader gebruiken om reacties te volgen.


Tweaking4All gebruikt de gratis Gravatar dienst voor Avatar weergave.