Digitale temperatuursensor
Doel:
| nodig:
|
Een digitale temperatuursensor bevat, naast de sensor, ook een A/D omzetter. Bovendien is er een protocol nodig om de digitale temperatuur-waarde over te brengen naar de microcontroller. Soms wordt hiervoor een enkele data-draad gebruikt, waarover bits in beide richtingen verstuurd worden. De temperatuursensor die wij gebruiken, DS18B20, gebruikt het zogenaamde one-wire protocol. Via dit protocol kun je meerdere sensoren via een enkele verbinding uitlezen. Elke sensor heeft een eigen adres op deze "bus". Datasheet: https://datasheets.maximintegrated.com/en/ds/DS18B20.pdf | |
Schakeling Verbind :
| |
Library Voor de DS18B20 heb je twee libraries nodig.
Meer informatie over deze libraries:
| Zoek de libraries via Schets->Bibliotheek Gebruiken->Bibliotheken beheren, en installeer deze. Je hebt daarvoor wel een internetverbinding nodig. |
Programma Het programma hiernaast is een vereenvoudigde versie van het programma: Bestand->Voorbeelden-> DallasTemperature->Simple Er zijn twee libraries nodig: Onewire en DallasTemperature. Voor de 1-draads bus gebruiken we pin D2. oneWire is het object dat de bus representeert. sensors is het object dat alle temperatuursensoren aan deze bus voorstelt. Dit object heeft het oneWire object nodig voor de bus. In setup initialiseren we dit object. Het uitlezen van de temperatuur gebeurt in twee stappen:
Deze sensoren hebben veel tijd nodig voor de eigenlijke meting: voor 12-bits resolutie van de temperatuur wel 750 msec. (Zie datasheet tabel 2.) | #include <OneWire.h> #include <DallasTemperature.h> #define ONE_WIRE_BUS 2 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); void setup(void) { Serial.begin(9600); sensors.begin(); } void loop(void) { sensors.requestTemperatures(); Serial.print("Temperature: "); Serial.println( sensors.getTempCByIndex(0)); } |
Opdracht 1 Bouw deze schakeling, installeer het programma, en test dit. | Je krijgt de resultaten te zien in de Serial Monitor. |
Opdracht 2 Bekijk de temperatuurwaarden in de Serial Plotter. Verwarm de sensor een paar graden met je vinger, en laat de sensor weer afkoelen | Schets de grafiek van de temperatuur: kamertemperatuur, opwarmen, en afkoelen. |
Opdracht 3 Vergelijk in één schakeling de analoge temperatuursensor en de digitale sensor. Bekijk de uitvoer van beide met de Serial Plotter. | |
Opdracht 4 Elke sensor heeft een adres op de OneWire bus. Gebruik Bestand-> Voorbeelden-> OneWire->DS18x20_Temp om de adressen van alle sensoren aan de bus te achterhalen. Voer dit experiment ook uit met twee of meer temperatuursensoren aan de bus:
| In het voorbeeld-programma zijn is de OneWire-bus op pin10 aangesloten. Pas of je hardware-verbinding, of de software aan zodat dit klopt voor jouw opstelling. |
Opdracht 5 De temperatuurmeting kost tijd - zoals gezegd, tot wel 750 ms. Gedurende die tijd is de requestTemperatures-functie bezig - en blokkeert daarmee andere acties van de microcontroller. Je kunt deze functie ook in asynchrone (niet-blokkerende) mode gebruiken. Gebruik het voorbeeld-programma Bestand-> Voorbeelden-> DallasTemperature-> WaitForConversion om het verschil tussen beide manieren te bekijken. | |
Opdracht 6 Het meten van de temperatuur en de bijbehorende omzetting kosten energie - waardoor de sensor zichzelf opwarmt. Dit kun je demonstreren door een delay toe te voegen aan de loop van het programma van opdracht 1. |
|
Arduino lessen - Digitale temperatuursensor --