Hőmérséklet mérés

Az Arduino és társai (Freeduino, AVRDuino, stb.) megteremtették a programozóknak azt a hardware és szoftvert keretet, hogy könnyen tudjanak olyan programokat írni, melyekkel méréseket lehet végezni, vezérléseket megoldani.

Ez az ami szerintem nagyon hiányzott egy ideje a piacról.

Az első projekthez szükség lesz egy Arduino vagy azzal kompatibilis alaplapra. Az itt látható képen maga az alaplap nem látszik, csak a rácsatlakoztatott screwshield és a kijelző. A screwshield arra jó, hogy az arduino analóg, digitális portjaira könnyen csatlakoztathassunk drótokat, amikkel pl. egy bread boardra vezethetjük ki. A bread board egy próba panel, amit nem kell forrasztani, de mégis ki lehet rajta alakítani áramköröket.

Szükség lesz még 1 db 4.7 KOhm-os ellenállásra és DS18B20-as digitális hőmérséklet mérőjére. Mivel ellenállás nem volt kéznél, egy rossz CD meghajtó hangerő szabályzóját használtam fel, amit beállítottam a kívánt értékre.

A hőmérséklet mérőket egy közös buszra lehet kötni, amin 1 Wire protokolt használva lehet kommunikálni. Ez a protokol már meg van írva Arduinohoz. A hőmérséklet mérők kezeléséhez is van kész könyvtár, ezért tényleg csak pár sort kell írni ahhoz, hogy működjön az egész. Mindkét könyvtár elérhető innen:
http://milesburton.com/index.php?title=Dallas_Temperature_Control_Library

A szenzorokat gyakorlatilag a bal oldalon látható módon kell használni. Az 1-es és 3-as lábat földre kötjük, a 2-es láb megy az adatportra. Jól látszik, hogy egy két eres vezetékre szépen fel lehet fűzni több érzékelőt is. Az érzékelők használatához a két könyvtárat kell importálni:

#include <OneWire.h>
#include <DallasTemperature.h>

A kimenet formázásához az stdio könyvtárat is importálom és definiálom, hányas digitális portra lesz kötve az érzékelő.
#include <stdio.h>
#define ONE_WIRE_BUS 3

A kommunikációhoz és a szenzorok kezeléséhez két objektumra lesz szükség.
OneWire  ds(ONE_WIRE_BUS);
DallasTemperature sensors(&ds);

El kell indítani a szenzorok kezelését:
sensors.begin();

Meg kell számolni, hány szenzor van a buszon. Ez állítja be a maxsensors változót, amit majd később használok:
scanSensors();

Majd egy globális üzenetet kell küldeni, hogy minden szenzor mérje meg a hőmérsékletet:
sensors.requestTemperatures();

Az értékeket mteindegyik szenzorból egyesével ki kell olvasni:
for (int i=0;i<maxsensors;i++)
{
float f = sensors.getTempCByIndex(i);
lcdprint(dtostrf(f, 5, 1, buffer));
}

Az lcdprint() függvény saját, hogy könnyen lehessen megjeleníteni szöveget.

A teljes forrás letölthető innen: temp_sensor.zip
A szükséges könyvtárak a hőmérséklet szenzorokhoz: DallasTemperature_350.zip
A kijelző kezeléshez: LCD4Bit_mod.zip

A kijelzőt a NUELECTRONICS gyártja, de sok helyről be lehet szerezni hasonlót.