3db DS18B20 digitális hőmérséklet mérő szenzor egy csatornán

A cél

leaf graphic
DS18B20 sensor

Egy napelem hőmérsékletét és a környezetét szeretném monitorozni, amihez 3 hőmérséklet szenzorra van szükségem, az egyik magát a napelem hőmérsékletét mérné, amit a hátuljára rögzítenék, a másik a napelem árnyékában lenne elhelyezve, míg a harmadikat közvetlen napfénynek tenném ki.

Az összeállítás

leaf graphic
Hook-up

Ennek megvalósításához a DS18B20 szenzor – Arduino kombót találtam a legmegfelelőbbnek. A három szenzor digitális kimenete az Arduino digitális bemenetére kapcsolódik egy vezetéken keresztül, a tápellátást pedig az 5V-os kimenet látja el.  A kapcsolást az 1-es ábrán láthatod. Az összeállítás pofon egyszerű, a kód az interneten elérhető (v. alább csekkolható). A kapcsolás összeállítása és a kód feltöltése után tökéletesen működik, a bejövő adatokat az adott COM portról olvashatjuk.

COM portról bejövő adatmentés

leaf graphic
Incoming data

Erre a CoolTerm programot használom. Itt a Connection –> Options –> Receive menüpont alatt az Add timestamps to received data funkciót kipipálva a COM portról jövő adatokhoz az aktuális időt tudjuk hozzárendelni, majd a Connection –> Capture to Textfile –> Start (CLTR + R) menüpont alatt elkezdjük az adatgyűjtést. Ami így néz ki (balra).

A bonyodalom

A program egyesével kiolvassa az egyes szenzorokhoz tartozó adatokat, majd kiküldi a portra, itt az egyes adatok egymás alá listázódnak Sensor 0, 1, 2, ami nagyban megnehezíti a kiértékelést.

A részleges megoldás Excellel

A text file-ba mentett adatokat beolvassuk Excel-be, amit az alábbi ábrán láthatunk, az A, B, C, D oszlopok a nyers adatokat tartalmazzák.

Dátum Idő Melyik szenzor? Hőmérséklet
2015.08.31 13:47:22 Sensor 0 38,69
2015.08.31 13:47:27 Sensor 1 24,56
2015.08.31 13:47:32 Sensor 2 7,19
2015.08.31 13:47:38 Sensor 0 40,75
2015.08.31 13:47:43 Sensor 1 24,56
2015.08.31 13:47:48 Sensor 2 7,88

 

Első lépésként az F oszlopba a =HA(B6=””;””;((A6-$A$1)*24)-(($B$1-B6)*24)) függvény segítségével kilistázzuk az eltelt időt, ami az x-tengelyen fog megjelenni. A második lépésben az egyes hőmérséklet adatokat külön oszlopokban jelenítjük meg a =INDEX($D$3:$D$1514; SOROK(J$1:J1)*3) függvény segítségével. Így az egyes szenzorokból jövő adatok külön oszlopokban jelennek meg, a kiértékelés így már könnyen kivitelezhető.

 

temp_grafikon

 

Az 1-es szenzor a szoba hőmérsékletét mutatja, a 2-es szenzort egy jeges vízzel telt pohár alatt helyeztem el, a 0-ik egy forróvizes pohár alatt volt. A grafikonon jól látható, hogy 2 óra elteltével a szenzorok közel azonos hőmérsékleti értékeket mutattak.  A gyári specifikáció szerint a szenzor pontossága ±0,5oC -10°C és +85°C között. A három szenzorból jövő utolsó hőmérsékleti értékek 24,56°C; 24,63°C; 24,38°C voltak. A különbség a legkisebb és a legnagyobb érték között 0,25°C volt, ami nem a szenzor pontosságát mutatja, de jól reprezentálja, hogy a mért értékek közel azonosak.

Excel file az adatokkal
One wire temperature sensor data

A kód

A hozzá tartozó könyvtárak:

https://github.com/milesburton/Arduino-Temperature-Control-Library

http://playground.arduino.cc/Learning/OneWire

Az elegánsabb megoldás

Ez igazából a kérdésem lesz. Hogy tudom megoldani, hogy a kimenő adatokhoz az eltelt időt hozzárendeljem és az egyes adatok különböző oszlopban jelenjenek meg? Ezzel el lehetne kerülni az Excelben történő bűvészkedést.

Válasz 1.

delay(5000); előtt

 

Felhasznált irodalom

http://bildr.org/2011/07/ds18b20-arduino/
Dallas Semiconductor’s 1-Wire Protocol
Dallas Temperature Control Library
alsoikonelkepzeles

 

Share This:

 
Loading Facebook Comments ...

COMMENTS

Leave a Comment